mirror of https://github.com/xemu-project/xemu.git
target/arm: Mark up VNCR offsets (offsets 0x168..0x1f8)
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 0x168 to 0x1f8. 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
bb7b95b070
commit
46932cf26e
|
@ -3191,6 +3191,7 @@ static const ARMCPRegInfo generic_timer_cp_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 3, .crn = 14, .crm = 2, .opc2 = 1,
|
||||
.type = ARM_CP_IO, .access = PL0_RW,
|
||||
.accessfn = gt_ptimer_access,
|
||||
.nv2_redirect_offset = 0x180 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_PHYS].ctl),
|
||||
.resetvalue = 0,
|
||||
.readfn = gt_phys_redir_ctl_read, .raw_readfn = raw_read,
|
||||
|
@ -3208,6 +3209,7 @@ static const ARMCPRegInfo generic_timer_cp_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 3, .crn = 14, .crm = 3, .opc2 = 1,
|
||||
.type = ARM_CP_IO, .access = PL0_RW,
|
||||
.accessfn = gt_vtimer_access,
|
||||
.nv2_redirect_offset = 0x170 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_VIRT].ctl),
|
||||
.resetvalue = 0,
|
||||
.readfn = gt_virt_redir_ctl_read, .raw_readfn = raw_read,
|
||||
|
@ -3287,6 +3289,7 @@ static const ARMCPRegInfo generic_timer_cp_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 3, .crn = 14, .crm = 2, .opc2 = 2,
|
||||
.access = PL0_RW,
|
||||
.type = ARM_CP_IO,
|
||||
.nv2_redirect_offset = 0x178 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_PHYS].cval),
|
||||
.resetvalue = 0, .accessfn = gt_ptimer_access,
|
||||
.readfn = gt_phys_redir_cval_read, .raw_readfn = raw_read,
|
||||
|
@ -3304,6 +3307,7 @@ static const ARMCPRegInfo generic_timer_cp_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 3, .crn = 14, .crm = 3, .opc2 = 2,
|
||||
.access = PL0_RW,
|
||||
.type = ARM_CP_IO,
|
||||
.nv2_redirect_offset = 0x168 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_VIRT].cval),
|
||||
.resetvalue = 0, .accessfn = gt_vtimer_access,
|
||||
.readfn = gt_virt_redir_cval_read, .raw_readfn = raw_read,
|
||||
|
@ -7052,6 +7056,7 @@ static void zcr_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
|||
static const ARMCPRegInfo zcr_reginfo[] = {
|
||||
{ .name = "ZCR_EL1", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 0, .crn = 1, .crm = 2, .opc2 = 0,
|
||||
.nv2_redirect_offset = 0x1e0 | NV2_REDIR_NV1,
|
||||
.access = PL1_RW, .type = ARM_CP_SVE,
|
||||
.fieldoffset = offsetof(CPUARMState, vfp.zcr_el[1]),
|
||||
.writefn = zcr_write, .raw_writefn = raw_write },
|
||||
|
@ -7193,6 +7198,7 @@ static const ARMCPRegInfo sme_reginfo[] = {
|
|||
.writefn = svcr_write, .raw_writefn = raw_write },
|
||||
{ .name = "SMCR_EL1", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 0, .crn = 1, .crm = 2, .opc2 = 6,
|
||||
.nv2_redirect_offset = 0x1f0 | NV2_REDIR_NV1,
|
||||
.access = PL1_RW, .type = ARM_CP_SME,
|
||||
.fieldoffset = offsetof(CPUARMState, vfp.smcr_el[1]),
|
||||
.writefn = smcr_write, .raw_writefn = raw_write },
|
||||
|
@ -7226,6 +7232,7 @@ static const ARMCPRegInfo sme_reginfo[] = {
|
|||
.type = ARM_CP_CONST, .resetvalue = 0 },
|
||||
{ .name = "SMPRIMAP_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 2, .opc2 = 5,
|
||||
.nv2_redirect_offset = 0x1f8,
|
||||
.access = PL2_RW, .accessfn = access_smprimap,
|
||||
.type = ARM_CP_CONST, .resetvalue = 0 },
|
||||
};
|
||||
|
@ -7948,6 +7955,7 @@ static const ARMCPRegInfo mte_reginfo[] = {
|
|||
{ .name = "TFSR_EL1", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 0, .crn = 5, .crm = 6, .opc2 = 0,
|
||||
.access = PL1_RW, .accessfn = access_tfsr_el1,
|
||||
.nv2_redirect_offset = 0x190 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.tfsr_el[1]) },
|
||||
{ .name = "TFSR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.type = ARM_CP_NV2_REDIRECT,
|
||||
|
@ -8122,6 +8130,7 @@ static const ARMCPRegInfo scxtnum_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 0, .crn = 13, .crm = 0, .opc2 = 7,
|
||||
.access = PL1_RW, .accessfn = access_scxtnum_el1,
|
||||
.fgt = FGT_SCXTNUM_EL1,
|
||||
.nv2_redirect_offset = 0x188 | NV2_REDIR_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, scxtnum_el[1]) },
|
||||
{ .name = "SCXTNUM_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 13, .crm = 0, .opc2 = 7,
|
||||
|
@ -8146,22 +8155,27 @@ static CPAccessResult access_fgt(CPUARMState *env, const ARMCPRegInfo *ri,
|
|||
static const ARMCPRegInfo fgt_reginfo[] = {
|
||||
{ .name = "HFGRTR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 4,
|
||||
.nv2_redirect_offset = 0x1b8,
|
||||
.access = PL2_RW, .accessfn = access_fgt,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.fgt_read[FGTREG_HFGRTR]) },
|
||||
{ .name = "HFGWTR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 5,
|
||||
.nv2_redirect_offset = 0x1c0,
|
||||
.access = PL2_RW, .accessfn = access_fgt,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.fgt_write[FGTREG_HFGWTR]) },
|
||||
{ .name = "HDFGRTR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 3, .crm = 1, .opc2 = 4,
|
||||
.nv2_redirect_offset = 0x1d0,
|
||||
.access = PL2_RW, .accessfn = access_fgt,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.fgt_read[FGTREG_HDFGRTR]) },
|
||||
{ .name = "HDFGWTR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 3, .crm = 1, .opc2 = 5,
|
||||
.nv2_redirect_offset = 0x1d8,
|
||||
.access = PL2_RW, .accessfn = access_fgt,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.fgt_write[FGTREG_HDFGWTR]) },
|
||||
{ .name = "HFGITR_EL2", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 6,
|
||||
.nv2_redirect_offset = 0x1c8,
|
||||
.access = PL2_RW, .accessfn = access_fgt,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.fgt_exec[FGTREG_HFGITR]) },
|
||||
};
|
||||
|
@ -8348,12 +8362,14 @@ static const ARMCPRegInfo vhe_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 5, .crn = 14, .crm = 2, .opc2 = 1,
|
||||
.type = ARM_CP_IO | ARM_CP_ALIAS,
|
||||
.access = PL2_RW, .accessfn = e2h_access,
|
||||
.nv2_redirect_offset = 0x180 | NV2_REDIR_NO_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_PHYS].ctl),
|
||||
.writefn = gt_phys_ctl_write, .raw_writefn = raw_write },
|
||||
{ .name = "CNTV_CTL_EL02", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 5, .crn = 14, .crm = 3, .opc2 = 1,
|
||||
.type = ARM_CP_IO | ARM_CP_ALIAS,
|
||||
.access = PL2_RW, .accessfn = e2h_access,
|
||||
.nv2_redirect_offset = 0x170 | NV2_REDIR_NO_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_VIRT].ctl),
|
||||
.writefn = gt_virt_ctl_write, .raw_writefn = raw_write },
|
||||
{ .name = "CNTP_TVAL_EL02", .state = ARM_CP_STATE_AA64,
|
||||
|
@ -8370,11 +8386,13 @@ static const ARMCPRegInfo vhe_reginfo[] = {
|
|||
.opc0 = 3, .opc1 = 5, .crn = 14, .crm = 2, .opc2 = 2,
|
||||
.type = ARM_CP_IO | ARM_CP_ALIAS,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_PHYS].cval),
|
||||
.nv2_redirect_offset = 0x178 | NV2_REDIR_NO_NV1,
|
||||
.access = PL2_RW, .accessfn = e2h_access,
|
||||
.writefn = gt_phys_cval_write, .raw_writefn = raw_write },
|
||||
{ .name = "CNTV_CVAL_EL02", .state = ARM_CP_STATE_AA64,
|
||||
.opc0 = 3, .opc1 = 5, .crn = 14, .crm = 3, .opc2 = 2,
|
||||
.type = ARM_CP_IO | ARM_CP_ALIAS,
|
||||
.nv2_redirect_offset = 0x168 | NV2_REDIR_NO_NV1,
|
||||
.fieldoffset = offsetof(CPUARMState, cp15.c14_timer[GTIMER_VIRT].cval),
|
||||
.access = PL2_RW, .accessfn = e2h_access,
|
||||
.writefn = gt_virt_cval_write, .raw_writefn = raw_write },
|
||||
|
|
Loading…
Reference in New Issue