mirror of https://github.com/xemu-project/xemu.git
target/arm: Mark up VNCR offsets (offsets 0x0..0xff)
Mark up the cpreginfo structs to indicate offsets for system registers from VNCR_EL2, as defined in table D8-66 in rule R_CSRPQ in the Arm ARM. This commit covers offsets below 0x100; all of these registers are redirected to memory regardless of the value of HCR_EL2.NV1. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Miguel Luis <miguel.luis@oracle.com>
This commit is contained in:
parent
674e534527
commit
dfe8a9ee6a
|
@ -6059,6 +6059,7 @@ static const ARMCPRegInfo hcrx_el2_reginfo = {
|
|||
.name = "HCRX_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 2, .opc2 = 2,
|
||||
.access = PL2_RW, .writefn = hcrx_write, .accessfn = access_hxen,
|
||||
.nv2_redirect_offset = 0xa0,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.hcrx_el2),
|
||||
};
|
||||
|
||||
|
@ -6125,6 +6126,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
.type = ARM_CP_IO,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 0,
|
||||
.access = PL2_RW, .fieldoffset = offsetof(CPUARMState, cp15.hcr_el2),
|
||||
.nv2_redirect_offset = 0x78,
|
||||
.writefn = hcr_write, .raw_writefn = raw_write },
|
||||
{ .name = "HCR", .state = ARM_CP_STATE_AA32,
|
||||
.type = ARM_CP_ALIAS | ARM_CP_IO,
|
||||
|
@ -6209,6 +6211,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
{ .name = "VTCR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 1, .opc2 = 2,
|
||||
.access = PL2_RW,
|
||||
.nv2_redirect_offset = 0x40,
|
||||
/* no .writefn needed as this can't cause an ASID change */
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vtcr_el2) },
|
||||
{ .name = "VTTBR", .state = ARM_CP_STATE_AA32,
|
||||
|
@ -6220,6 +6223,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
{ .name = "VTTBR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 1, .opc2 = 0,
|
||||
.access = PL2_RW, .writefn = vttbr_write, .raw_writefn = raw_write,
|
||||
.nv2_redirect_offset = 0x20,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vttbr_el2) },
|
||||
{ .name = "SCTLR_EL2", .state = ARM_CP_STATE_BOTH,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 0, .opc2 = 0,
|
||||
|
@ -6228,6 +6232,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
{ .name = "TPIDR_EL2", .state = ARM_CP_STATE_BOTH,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 13, .crm = 0, .opc2 = 2,
|
||||
.access = PL2_RW, .resetvalue = 0,
|
||||
.nv2_redirect_offset = 0x90,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.tpidr_el[2]) },
|
||||
{ .name = "TTBR0_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 0, .opc2 = 0,
|
||||
|
@ -6323,6 +6328,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 4, .crn = 14, .crm = 0, .opc2 = 3,
|
||||
.access = PL2_RW, .type = ARM_CP_IO, .resetvalue = 0,
|
||||
.writefn = gt_cntvoff_write,
|
||||
.nv2_redirect_offset = 0x60,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.cntvoff_el2) },
|
||||
{ .name = "CNTVOFF", .cp = 15, .opc1 = 4, .crm = 14,
|
||||
.access = PL2_RW, .type = ARM_CP_64BIT | ARM_CP_ALIAS | ARM_CP_IO,
|
||||
|
@ -6361,6 +6367,7 @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
|
|||
{ .name = "HSTR_EL2", .state = ARM_CP_STATE_BOTH,
|
||||
.cp = 15, .opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 3,
|
||||
.access = PL2_RW,
|
||||
.nv2_redirect_offset = 0x80,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.hstr_el2) },
|
||||
};
|
||||
|
||||
|
@ -6386,10 +6393,12 @@ static const ARMCPRegInfo el2_sec_cp_reginfo[] = {
|
|||
{ .name = "VSTTBR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 6, .opc2 = 0,
|
||||
.access = PL2_RW, .accessfn = sel2_access,
|
||||
.nv2_redirect_offset = 0x30,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vsttbr_el2) },
|
||||
{ .name = "VSTCR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 6, .opc2 = 2,
|
||||
.access = PL2_RW, .accessfn = sel2_access,
|
||||
.nv2_redirect_offset = 0x48,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vstcr_el2) },
|
||||
};
|
||||
|
||||
|
@ -8155,6 +8164,7 @@ static const ARMCPRegInfo nv2_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 4, .crn = 2, .crm = 2, .opc2 = 0,
|
||||
.access = PL2_RW,
|
||||
.writefn = vncr_write,
|
||||
.nv2_redirect_offset = 0xb0,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vncr_el2) },
|
||||
};
|
||||
|
||||
|
@ -8986,6 +8996,7 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
.opc0 = 3, .opc1 = 4, .crn = 0, .crm = 0, .opc2 = 0,
|
||||
.access = PL2_RW, .resetvalue = cpu->midr,
|
||||
.type = ARM_CP_EL3_NO_EL2_C_NZ,
|
||||
.nv2_redirect_offset = 0x88,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vpidr_el2) },
|
||||
{ .name = "VMPIDR", .state = ARM_CP_STATE_AA32,
|
||||
.cp = 15, .opc1 = 4, .crn = 0, .crm = 0, .opc2 = 5,
|
||||
|
@ -8997,6 +9008,7 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
|||
.opc0 = 3, .opc1 = 4, .crn = 0, .crm = 0, .opc2 = 5,
|
||||
.access = PL2_RW, .resetvalue = vmpidr_def,
|
||||
.type = ARM_CP_EL3_NO_EL2_C_NZ,
|
||||
.nv2_redirect_offset = 0x50,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.vmpidr_el2) },
|
||||
};
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue