mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
target-arm queue:
* Support M profile derived exceptions on exception entry and exit * Implement AArch64 v8.2 crypto insns (SHA-512, SHA-3, SM3, SM4) * Implement working i.MX6 SD controller * Various devices preparatory to i.MX7 support * Preparatory patches for SVE emulation * v8M: Fix bug in implementation of 'TT' insn * Give useful error if user tries to use userspace GICv3 with KVM -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJafX+DAAoJEDwlJe0UNgzegGgP/2OepsVnpg++NkBpJdCq0wjC DFaGLpDqaXabv0E5b56flkqBsK6mO2vXoIiWOLF3f25G5pBf5zu7XOEYXWuOIBEP Yr/vl4/yWRZfiNKl6aPC5HwHKN8SWMV+Mp/GtKz0PtHLY+oGl3fBRBu8fbeoOyj9 3x+HB0c5fpAtWrRoS+XrUJfQPdkkZ4c5lDvpxec57cqOzJ8qYZEcFCi7WP3Rglox sQJEls5IXkOVGx35o7k0rIw0qzcV8iCGBsuA+4QAonxE5B0ip6aolPAaq+gf/mLP StX2UJG9JO5tOhaNBexHE/QwLNu2pver8mghIyluirLvisB6kx+dEoa0Zj/7J7or LD9O6pqpSPCCKLSw0xPOl2FqjXzbIYcjgddxrOGvUQgAhdagB2EeRHiCdZ7hQXvm Pg4gAsIAZURPrbj7LaXgDCzM0IP6bZjNR2U+C0ekJDBRJb/NTLcvlmx3MQo3s4ot s/t6FP728tnmMk7ib8w95oo2oSMiPUZBfj2IMYogXgY+pup0OunKwOQL93Lmj4By LJwawcsa/9ctyzF/XvBUHO/n4l0zZi3wLmtVojbxkxtHiFmvv5gQMlyHYM08aTJ1 Vu/V0tiX6+oXoNrJg5e8TAchsS5PmO54Sj/ywMm5Q8FWfBE19KTRl5BatxbMYahU gQQt64esxQQFxxjdSrZY =bokK -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20180209' into staging target-arm queue: * Support M profile derived exceptions on exception entry and exit * Implement AArch64 v8.2 crypto insns (SHA-512, SHA-3, SM3, SM4) * Implement working i.MX6 SD controller * Various devices preparatory to i.MX7 support * Preparatory patches for SVE emulation * v8M: Fix bug in implementation of 'TT' insn * Give useful error if user tries to use userspace GICv3 with KVM # gpg: Signature made Fri 09 Feb 2018 11:01:23 GMT # gpg: using RSA key 3C2525ED14360CDE # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" # gpg: aka "Peter Maydell <pmaydell@gmail.com>" # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * remotes/pmaydell/tags/pull-target-arm-20180209: (30 commits) hw/core/generic-loader: Allow PC to be set on command line target/arm/translate.c: Fix missing 'break' for TT insns target/arm/kvm: gic: Prevent creating userspace GICv3 with KVM target/arm: Add SVE state to TB->FLAGS target/arm: Add ZCR_ELx target/arm: Add SVE to migration state target/arm: Add predicate registers for SVE target/arm: Expand vector registers for SVE hw/arm: Move virt's PSCI DT fixup code to arm/boot.c usb: Add basic code to emulate Chipidea USB IP i.MX: Add implementation of i.MX7 GPR IP block i.MX: Add i.MX7 GPT variant i.MX: Add code to emulate GPCv2 IP block i.MX: Add code to emulate i.MX7 SNVS IP-block i.MX: Add code to emulate i.MX2 watchdog IP block i.MX: Add code to emulate i.MX7 CCM, PMU and ANALOG IP blocks hw: i.MX: Convert i.MX6 to use TYPE_IMX_USDHC sdhci: Add i.MX specific subtype of SDHCI target/arm: enable user-mode SHA-3, SM3, SM4 and SHA-512 instruction support target/arm: implement SM4 instructions ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
f31cd9e4e2
38 changed files with 2928 additions and 187 deletions
22
include/hw/intc/imx_gpcv2.h
Normal file
22
include/hw/intc/imx_gpcv2.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#ifndef IMX_GPCV2_H
|
||||
#define IMX_GPCV2_H
|
||||
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
enum IMXGPCv2Registers {
|
||||
GPC_NUM = 0xE00 / sizeof(uint32_t),
|
||||
};
|
||||
|
||||
typedef struct IMXGPCv2State {
|
||||
/*< private >*/
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
/*< public >*/
|
||||
MemoryRegion iomem;
|
||||
uint32_t regs[GPC_NUM];
|
||||
} IMXGPCv2State;
|
||||
|
||||
#define TYPE_IMX_GPCV2 "imx-gpcv2"
|
||||
#define IMX_GPCV2(obj) OBJECT_CHECK(IMXGPCv2State, (obj), TYPE_IMX_GPCV2)
|
||||
|
||||
#endif /* IMX_GPCV2_H */
|
33
include/hw/misc/imx2_wdt.h
Normal file
33
include/hw/misc/imx2_wdt.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Copyright (c) 2017, Impinj, Inc.
|
||||
*
|
||||
* i.MX2 Watchdog IP block
|
||||
*
|
||||
* Author: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef IMX2_WDT_H
|
||||
#define IMX2_WDT_H
|
||||
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
#define TYPE_IMX2_WDT "imx2.wdt"
|
||||
#define IMX2_WDT(obj) OBJECT_CHECK(IMX2WdtState, (obj), TYPE_IMX2_WDT)
|
||||
|
||||
enum IMX2WdtRegisters {
|
||||
IMX2_WDT_WCR = 0x0000,
|
||||
IMX2_WDT_REG_NUM = 0x0008 / sizeof(uint16_t) + 1,
|
||||
};
|
||||
|
||||
|
||||
typedef struct IMX2WdtState {
|
||||
/* <private> */
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
MemoryRegion mmio;
|
||||
} IMX2WdtState;
|
||||
|
||||
#endif /* IMX7_SNVS_H */
|
139
include/hw/misc/imx7_ccm.h
Normal file
139
include/hw/misc/imx7_ccm.h
Normal file
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* Copyright (c) 2017, Impinj, Inc.
|
||||
*
|
||||
* i.MX7 CCM, PMU and ANALOG IP blocks emulation code
|
||||
*
|
||||
* Author: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef IMX7_CCM_H
|
||||
#define IMX7_CCM_H
|
||||
|
||||
#include "hw/misc/imx_ccm.h"
|
||||
#include "qemu/bitops.h"
|
||||
|
||||
enum IMX7AnalogRegisters {
|
||||
ANALOG_PLL_ARM,
|
||||
ANALOG_PLL_ARM_SET,
|
||||
ANALOG_PLL_ARM_CLR,
|
||||
ANALOG_PLL_ARM_TOG,
|
||||
ANALOG_PLL_DDR,
|
||||
ANALOG_PLL_DDR_SET,
|
||||
ANALOG_PLL_DDR_CLR,
|
||||
ANALOG_PLL_DDR_TOG,
|
||||
ANALOG_PLL_DDR_SS,
|
||||
ANALOG_PLL_DDR_SS_SET,
|
||||
ANALOG_PLL_DDR_SS_CLR,
|
||||
ANALOG_PLL_DDR_SS_TOG,
|
||||
ANALOG_PLL_DDR_NUM,
|
||||
ANALOG_PLL_DDR_NUM_SET,
|
||||
ANALOG_PLL_DDR_NUM_CLR,
|
||||
ANALOG_PLL_DDR_NUM_TOG,
|
||||
ANALOG_PLL_DDR_DENOM,
|
||||
ANALOG_PLL_DDR_DENOM_SET,
|
||||
ANALOG_PLL_DDR_DENOM_CLR,
|
||||
ANALOG_PLL_DDR_DENOM_TOG,
|
||||
ANALOG_PLL_480,
|
||||
ANALOG_PLL_480_SET,
|
||||
ANALOG_PLL_480_CLR,
|
||||
ANALOG_PLL_480_TOG,
|
||||
ANALOG_PLL_480A,
|
||||
ANALOG_PLL_480A_SET,
|
||||
ANALOG_PLL_480A_CLR,
|
||||
ANALOG_PLL_480A_TOG,
|
||||
ANALOG_PLL_480B,
|
||||
ANALOG_PLL_480B_SET,
|
||||
ANALOG_PLL_480B_CLR,
|
||||
ANALOG_PLL_480B_TOG,
|
||||
ANALOG_PLL_ENET,
|
||||
ANALOG_PLL_ENET_SET,
|
||||
ANALOG_PLL_ENET_CLR,
|
||||
ANALOG_PLL_ENET_TOG,
|
||||
ANALOG_PLL_AUDIO,
|
||||
ANALOG_PLL_AUDIO_SET,
|
||||
ANALOG_PLL_AUDIO_CLR,
|
||||
ANALOG_PLL_AUDIO_TOG,
|
||||
ANALOG_PLL_AUDIO_SS,
|
||||
ANALOG_PLL_AUDIO_SS_SET,
|
||||
ANALOG_PLL_AUDIO_SS_CLR,
|
||||
ANALOG_PLL_AUDIO_SS_TOG,
|
||||
ANALOG_PLL_AUDIO_NUM,
|
||||
ANALOG_PLL_AUDIO_NUM_SET,
|
||||
ANALOG_PLL_AUDIO_NUM_CLR,
|
||||
ANALOG_PLL_AUDIO_NUM_TOG,
|
||||
ANALOG_PLL_AUDIO_DENOM,
|
||||
ANALOG_PLL_AUDIO_DENOM_SET,
|
||||
ANALOG_PLL_AUDIO_DENOM_CLR,
|
||||
ANALOG_PLL_AUDIO_DENOM_TOG,
|
||||
ANALOG_PLL_VIDEO,
|
||||
ANALOG_PLL_VIDEO_SET,
|
||||
ANALOG_PLL_VIDEO_CLR,
|
||||
ANALOG_PLL_VIDEO_TOG,
|
||||
ANALOG_PLL_VIDEO_SS,
|
||||
ANALOG_PLL_VIDEO_SS_SET,
|
||||
ANALOG_PLL_VIDEO_SS_CLR,
|
||||
ANALOG_PLL_VIDEO_SS_TOG,
|
||||
ANALOG_PLL_VIDEO_NUM,
|
||||
ANALOG_PLL_VIDEO_NUM_SET,
|
||||
ANALOG_PLL_VIDEO_NUM_CLR,
|
||||
ANALOG_PLL_VIDEO_NUM_TOG,
|
||||
ANALOG_PLL_VIDEO_DENOM,
|
||||
ANALOG_PLL_VIDEO_DENOM_SET,
|
||||
ANALOG_PLL_VIDEO_DENOM_CLR,
|
||||
ANALOG_PLL_VIDEO_DENOM_TOG,
|
||||
ANALOG_PLL_MISC0,
|
||||
ANALOG_PLL_MISC0_SET,
|
||||
ANALOG_PLL_MISC0_CLR,
|
||||
ANALOG_PLL_MISC0_TOG,
|
||||
|
||||
ANALOG_DIGPROG = 0x800 / sizeof(uint32_t),
|
||||
ANALOG_MAX,
|
||||
|
||||
ANALOG_PLL_LOCK = BIT(31)
|
||||
};
|
||||
|
||||
enum IMX7CCMRegisters {
|
||||
CCM_MAX = 0xBE00 / sizeof(uint32_t) + 1,
|
||||
};
|
||||
|
||||
enum IMX7PMURegisters {
|
||||
PMU_MAX = 0x140 / sizeof(uint32_t),
|
||||
};
|
||||
|
||||
#define TYPE_IMX7_CCM "imx7.ccm"
|
||||
#define IMX7_CCM(obj) OBJECT_CHECK(IMX7CCMState, (obj), TYPE_IMX7_CCM)
|
||||
|
||||
typedef struct IMX7CCMState {
|
||||
/* <private> */
|
||||
IMXCCMState parent_obj;
|
||||
|
||||
/* <public> */
|
||||
MemoryRegion iomem;
|
||||
|
||||
uint32_t ccm[CCM_MAX];
|
||||
} IMX7CCMState;
|
||||
|
||||
|
||||
#define TYPE_IMX7_ANALOG "imx7.analog"
|
||||
#define IMX7_ANALOG(obj) OBJECT_CHECK(IMX7AnalogState, (obj), TYPE_IMX7_ANALOG)
|
||||
|
||||
typedef struct IMX7AnalogState {
|
||||
/* <private> */
|
||||
IMXCCMState parent_obj;
|
||||
|
||||
/* <public> */
|
||||
struct {
|
||||
MemoryRegion container;
|
||||
MemoryRegion analog;
|
||||
MemoryRegion digprog;
|
||||
MemoryRegion pmu;
|
||||
} mmio;
|
||||
|
||||
uint32_t analog[ANALOG_MAX];
|
||||
uint32_t pmu[PMU_MAX];
|
||||
} IMX7AnalogState;
|
||||
|
||||
#endif /* IMX7_CCM_H */
|
28
include/hw/misc/imx7_gpr.h
Normal file
28
include/hw/misc/imx7_gpr.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) 2017, Impinj, Inc.
|
||||
*
|
||||
* i.MX7 GPR IP block emulation code
|
||||
*
|
||||
* Author: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef IMX7_GPR_H
|
||||
#define IMX7_GPR_H
|
||||
|
||||
#include "qemu/bitops.h"
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
#define TYPE_IMX7_GPR "imx7.gpr"
|
||||
#define IMX7_GPR(obj) OBJECT_CHECK(IMX7GPRState, (obj), TYPE_IMX7_GPR)
|
||||
|
||||
typedef struct IMX7GPRState {
|
||||
/* <private> */
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
MemoryRegion mmio;
|
||||
} IMX7GPRState;
|
||||
|
||||
#endif /* IMX7_GPR_H */
|
35
include/hw/misc/imx7_snvs.h
Normal file
35
include/hw/misc/imx7_snvs.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2017, Impinj, Inc.
|
||||
*
|
||||
* i.MX7 SNVS block emulation code
|
||||
*
|
||||
* Author: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef IMX7_SNVS_H
|
||||
#define IMX7_SNVS_H
|
||||
|
||||
#include "qemu/bitops.h"
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
|
||||
enum IMX7SNVSRegisters {
|
||||
SNVS_LPCR = 0x38,
|
||||
SNVS_LPCR_TOP = BIT(6),
|
||||
SNVS_LPCR_DP_EN = BIT(5)
|
||||
};
|
||||
|
||||
#define TYPE_IMX7_SNVS "imx7.snvs"
|
||||
#define IMX7_SNVS(obj) OBJECT_CHECK(IMX7SNVSState, (obj), TYPE_IMX7_SNVS)
|
||||
|
||||
typedef struct IMX7SNVSState {
|
||||
/* <private> */
|
||||
SysBusDevice parent_obj;
|
||||
|
||||
MemoryRegion mmio;
|
||||
} IMX7SNVSState;
|
||||
|
||||
#endif /* IMX7_SNVS_H */
|
|
@ -44,6 +44,7 @@ typedef struct SDHCIState {
|
|||
AddressSpace sysbus_dma_as;
|
||||
AddressSpace *dma_as;
|
||||
MemoryRegion *dma_mr;
|
||||
const MemoryRegionOps *io_ops;
|
||||
|
||||
QEMUTimer *insert_timer; /* timer for 'changing' sd card. */
|
||||
QEMUTimer *transfer_timer;
|
||||
|
@ -91,8 +92,18 @@ typedef struct SDHCIState {
|
|||
|
||||
/* Configurable properties */
|
||||
bool pending_insert_quirk; /* Quirk for Raspberry Pi card insert int */
|
||||
uint32_t quirks;
|
||||
} SDHCIState;
|
||||
|
||||
/*
|
||||
* Controller does not provide transfer-complete interrupt when not
|
||||
* busy.
|
||||
*
|
||||
* NOTE: This definition is taken out of Linux kernel and so the
|
||||
* original bit number is preserved
|
||||
*/
|
||||
#define SDHCI_QUIRK_NO_BUSY_IRQ BIT(14)
|
||||
|
||||
#define TYPE_PCI_SDHCI "sdhci-pci"
|
||||
#define PCI_SDHCI(obj) OBJECT_CHECK(SDHCIState, (obj), TYPE_PCI_SDHCI)
|
||||
|
||||
|
@ -100,4 +111,6 @@ typedef struct SDHCIState {
|
|||
#define SYSBUS_SDHCI(obj) \
|
||||
OBJECT_CHECK(SDHCIState, (obj), TYPE_SYSBUS_SDHCI)
|
||||
|
||||
#define TYPE_IMX_USDHC "imx-usdhc"
|
||||
|
||||
#endif /* SDHCI_H */
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
#define TYPE_IMX25_GPT "imx25.gpt"
|
||||
#define TYPE_IMX31_GPT "imx31.gpt"
|
||||
#define TYPE_IMX6_GPT "imx6.gpt"
|
||||
#define TYPE_IMX7_GPT "imx7.gpt"
|
||||
|
||||
#define TYPE_IMX_GPT TYPE_IMX25_GPT
|
||||
|
||||
|
|
16
include/hw/usb/chipidea.h
Normal file
16
include/hw/usb/chipidea.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#ifndef CHIPIDEA_H
|
||||
#define CHIPIDEA_H
|
||||
|
||||
#include "hw/usb/hcd-ehci.h"
|
||||
|
||||
typedef struct ChipideaState {
|
||||
/*< private >*/
|
||||
EHCISysBusState parent_obj;
|
||||
|
||||
MemoryRegion iomem[3];
|
||||
} ChipideaState;
|
||||
|
||||
#define TYPE_CHIPIDEA "usb-chipidea"
|
||||
#define CHIPIDEA(obj) OBJECT_CHECK(ChipideaState, (obj), TYPE_CHIPIDEA)
|
||||
|
||||
#endif /* CHIPIDEA_H */
|
Loading…
Add table
Add a link
Reference in a new issue