target-arm queue:
* bcm2836: wire up CPU timer interrupts correctly * linux-user: ignore EXCP_YIELD in ARM cpu_loop() * target-arm: correctly reset SCTLR_EL3 * target-arm: remove incorrect ALIAS tags from ESR_EL2 and ESR_EL3 * target-arm: make the 64-bit version of VTCR do the migration -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJXAploAAoJEDwlJe0UNgzeTUsP/AyHEX1mcovDZ9lcaxc+Vgmf LIi71wE8qzc1irp4f02Dmm5/eIX3UYv5n+S8LxL3HAykSYO5wjG30TnPHDnv0wHP BolhHMxh7LU6WTVoP7fjX3OiE9RwzJu8TGAJZrbwdMYeTTSLBP+hTKvM23CS6Dn0 r7LHF6blXeltYHtiPhFkziGtN6YgrSgGUmsunFa7ZAkqxyC7uyfsKkMF7HmYWvcn MwEOYoLNDpVhAdoU4iqz64B3Vl/R0T93c67nBYmCguN/MTXno/rJGvZ8CHeIFydc HAw4csw+268QGs7v4TBR+e0WwXS2dtk77F1sEuN3aTtXjqwskNseM+CMRlZNFRlg bM+FdQHojazrRwnvHBgXYr7HDyqV4El/TOilOYdIAdGo9kEzY/1OPjma66TqGkKy ZdhwFtCKMsI7rKqr65rFINa9lMD8BDdSZhzEgGv3O8yOQDLLoPIqQ8z6vnOxsOml QvKxpduQp/7pY+nkYpk9TL3AX4y0sGz4iz9hC4RrSAlOaiBpTpx2vfTi87E6kOCb 6hLFOlUVkY+3i1/M1JUwUhesXXdGzalz/WLRXC6WnwyS8rD5PPHM3k2ndUs5xkSl bCsygk54UyngFGJcNS97BLIWhOF7CfQ0JuLA1+BwL/f0PMDfHhCPOXAe0HQBxu0L sNr/M6Jcl2NqLdXsij5P =8xY7 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160404' into staging target-arm queue: * bcm2836: wire up CPU timer interrupts correctly * linux-user: ignore EXCP_YIELD in ARM cpu_loop() * target-arm: correctly reset SCTLR_EL3 * target-arm: remove incorrect ALIAS tags from ESR_EL2 and ESR_EL3 * target-arm: make the 64-bit version of VTCR do the migration # gpg: Signature made Mon 04 Apr 2016 17:42:16 BST using RSA key ID 14360CDE # 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>" * remotes/pmaydell/tags/pull-target-arm-20160404: target-arm: Make the 64-bit version of VTCR do the migration target-arm: Remove incorrect ALIAS tags from ESR_EL2 and ESR_EL3 target-arm: Correctly reset SCTLR_EL3 for 64-bit CPUs linux-user: arm: Handle (ignore) EXCP_YIELD in ARM cpu_loop() hw/arm/bcm2836: Wire up CPU timer interrupts correctly Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
2e3a76ae3e
@ -139,9 +139,13 @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
/* Connect timers from the CPU to the interrupt controller */
|
||||
qdev_connect_gpio_out(DEVICE(&s->cpus[n]), GTIMER_PHYS,
|
||||
qdev_get_gpio_in_named(DEVICE(&s->control), "cntpsirq", n));
|
||||
qdev_get_gpio_in_named(DEVICE(&s->control), "cntpnsirq", n));
|
||||
qdev_connect_gpio_out(DEVICE(&s->cpus[n]), GTIMER_VIRT,
|
||||
qdev_get_gpio_in_named(DEVICE(&s->control), "cntvirq", n));
|
||||
qdev_connect_gpio_out(DEVICE(&s->cpus[n]), GTIMER_HYP,
|
||||
qdev_get_gpio_in_named(DEVICE(&s->control), "cnthpirq", n));
|
||||
qdev_connect_gpio_out(DEVICE(&s->cpus[n]), GTIMER_SEC,
|
||||
qdev_get_gpio_in_named(DEVICE(&s->control), "cntpsirq", n));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -907,6 +907,9 @@ void cpu_loop(CPUARMState *env)
|
||||
if (do_kernel_trap(env))
|
||||
goto error;
|
||||
break;
|
||||
case EXCP_YIELD:
|
||||
/* nothing to do here for user-mode, just resume guest code */
|
||||
break;
|
||||
default:
|
||||
error:
|
||||
EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
|
||||
@ -1097,6 +1100,9 @@ void cpu_loop(CPUARMState *env)
|
||||
case EXCP_SEMIHOST:
|
||||
env->xregs[0] = do_arm_semihosting(env);
|
||||
break;
|
||||
case EXCP_YIELD:
|
||||
/* nothing to do here for user-mode, just resume guest code */
|
||||
break;
|
||||
default:
|
||||
EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
|
||||
abort();
|
||||
|
@ -3509,7 +3509,6 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
||||
.access = PL2_RW,
|
||||
.fieldoffset = offsetof(CPUARMState, elr_el[2]) },
|
||||
{ .name = "ESR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.type = ARM_CP_ALIAS,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 5, .crm = 2, .opc2 = 0,
|
||||
.access = PL2_RW, .fieldoffset = offsetof(CPUARMState, cp15.esr_el[2]) },
|
||||
{ .name = "FAR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
@ -3565,11 +3564,15 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.tcr_el[2]) },
|
||||
{ .name = "VTCR", .state = ARM_CP_STATE_AA32,
|
||||
.cp = 15, .opc1 = 4, .crn = 2, .crm = 1, .opc2 = 2,
|
||||
.type = ARM_CP_ALIAS,
|
||||
.access = PL2_RW, .accessfn = access_el3_aa32ns,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vtcr_el2) },
|
||||
{ .name = "VTCR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 1, .opc2 = 2,
|
||||
.access = PL2_RW, .type = ARM_CP_ALIAS,
|
||||
.access = PL2_RW,
|
||||
/* no .writefn needed as this can't cause an ASID change;
|
||||
* no .raw_writefn or .resetfn needed as we never use mask/base_mask
|
||||
*/
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vtcr_el2) },
|
||||
{ .name = "VTTBR", .state = ARM_CP_STATE_AA32,
|
||||
.cp = 15, .opc1 = 6, .crm = 2,
|
||||
@ -3744,11 +3747,6 @@ static const ARMCPRegInfo el3_cp_reginfo[] = {
|
||||
.access = PL1_RW, .accessfn = access_trap_aa32s_el1,
|
||||
.writefn = vbar_write, .resetvalue = 0,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.mvbar) },
|
||||
{ .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.type = ARM_CP_ALIAS, /* reset handled by AArch32 view */
|
||||
.opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
|
||||
.access = PL3_RW, .raw_writefn = raw_write, .writefn = sctlr_write,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]) },
|
||||
{ .name = "TTBR0_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 6, .crn = 2, .crm = 0, .opc2 = 0,
|
||||
.access = PL3_RW, .writefn = vmsa_ttbr_write, .resetvalue = 0,
|
||||
@ -3764,7 +3762,6 @@ static const ARMCPRegInfo el3_cp_reginfo[] = {
|
||||
.access = PL3_RW,
|
||||
.fieldoffset = offsetof(CPUARMState, elr_el[3]) },
|
||||
{ .name = "ESR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.type = ARM_CP_ALIAS,
|
||||
.opc0 = 3, .opc1 = 6, .crn = 5, .crm = 2, .opc2 = 0,
|
||||
.access = PL3_RW, .fieldoffset = offsetof(CPUARMState, cp15.esr_el[3]) },
|
||||
{ .name = "FAR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
@ -4641,12 +4638,20 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
||||
}
|
||||
if (arm_feature(env, ARM_FEATURE_EL3)) {
|
||||
define_arm_cp_regs(cpu, el3_cp_reginfo);
|
||||
ARMCPRegInfo rvbar = {
|
||||
.name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
|
||||
.type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar
|
||||
ARMCPRegInfo el3_regs[] = {
|
||||
{ .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
|
||||
.type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar },
|
||||
{ .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
|
||||
.access = PL3_RW,
|
||||
.raw_writefn = raw_write, .writefn = sctlr_write,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]),
|
||||
.resetvalue = cpu->reset_sctlr },
|
||||
REGINFO_SENTINEL
|
||||
};
|
||||
define_one_arm_cp_reg(cpu, &rvbar);
|
||||
|
||||
define_arm_cp_regs(cpu, el3_regs);
|
||||
}
|
||||
/* The behaviour of NSACR is sufficiently various that we don't
|
||||
* try to describe it in a single reginfo:
|
||||
|
Loading…
Reference in New Issue
Block a user