target/arm: Mark up sysregs for HFGITR bits 48..63
Mark up the sysreg definitions for the system instructions trapped by HFGITR bits 48..63. Some of these bits are for trapping instructions which are not in the system instruction encoding (i.e. which are not handled by the ARMCPRegInfo mechanism): * ERET, ERETAA, ERETAB * SVC We will have to handle those separately and manually. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Fuad Tabba <tabba@google.com> Message-id: 20230130182459.3309057-20-peter.maydell@linaro.org Message-id: 20230127175507.2895013-20-peter.maydell@linaro.org
This commit is contained in:
parent
bf2f0625f8
commit
950037e280
@ -696,6 +696,10 @@ typedef enum FGTBit {
|
|||||||
DO_BIT(HFGITR, TLBIVAAE1),
|
DO_BIT(HFGITR, TLBIVAAE1),
|
||||||
DO_BIT(HFGITR, TLBIVALE1),
|
DO_BIT(HFGITR, TLBIVALE1),
|
||||||
DO_BIT(HFGITR, TLBIVAALE1),
|
DO_BIT(HFGITR, TLBIVAALE1),
|
||||||
|
DO_BIT(HFGITR, CFPRCTX),
|
||||||
|
DO_BIT(HFGITR, DVPRCTX),
|
||||||
|
DO_BIT(HFGITR, CPPRCTX),
|
||||||
|
DO_BIT(HFGITR, DCCVAC),
|
||||||
} FGTBit;
|
} FGTBit;
|
||||||
|
|
||||||
#undef DO_BIT
|
#undef DO_BIT
|
||||||
|
@ -5295,6 +5295,7 @@ static const ARMCPRegInfo v8_cp_reginfo[] = {
|
|||||||
{ .name = "DC_CVAC", .state = ARM_CP_STATE_AA64,
|
{ .name = "DC_CVAC", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 1,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 1,
|
||||||
.access = PL0_W, .type = ARM_CP_NOP,
|
.access = PL0_W, .type = ARM_CP_NOP,
|
||||||
|
.fgt = FGT_DCCVAC,
|
||||||
.accessfn = aa64_cacheop_poc_access },
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
{ .name = "DC_CSW", .state = ARM_CP_STATE_AA64,
|
{ .name = "DC_CSW", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 10, .opc2 = 2,
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 10, .opc2 = 2,
|
||||||
@ -7588,10 +7589,12 @@ static const ARMCPRegInfo mte_el0_cacheop_reginfo[] = {
|
|||||||
{ .name = "DC_CGVAC", .state = ARM_CP_STATE_AA64,
|
{ .name = "DC_CGVAC", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 3,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 3,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W,
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.fgt = FGT_DCCVAC,
|
||||||
.accessfn = aa64_cacheop_poc_access },
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
{ .name = "DC_CGDVAC", .state = ARM_CP_STATE_AA64,
|
{ .name = "DC_CGDVAC", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 5,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 5,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W,
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.fgt = FGT_DCCVAC,
|
||||||
.accessfn = aa64_cacheop_poc_access },
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
{ .name = "DC_CGVAP", .state = ARM_CP_STATE_AA64,
|
{ .name = "DC_CGVAP", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 12, .opc2 = 3,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 12, .opc2 = 3,
|
||||||
@ -7747,24 +7750,30 @@ static CPAccessResult access_predinv(CPUARMState *env, const ARMCPRegInfo *ri,
|
|||||||
static const ARMCPRegInfo predinv_reginfo[] = {
|
static const ARMCPRegInfo predinv_reginfo[] = {
|
||||||
{ .name = "CFP_RCTX", .state = ARM_CP_STATE_AA64,
|
{ .name = "CFP_RCTX", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 4,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 4,
|
||||||
|
.fgt = FGT_CFPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
{ .name = "DVP_RCTX", .state = ARM_CP_STATE_AA64,
|
{ .name = "DVP_RCTX", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 5,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 5,
|
||||||
|
.fgt = FGT_DVPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
{ .name = "CPP_RCTX", .state = ARM_CP_STATE_AA64,
|
{ .name = "CPP_RCTX", .state = ARM_CP_STATE_AA64,
|
||||||
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 7,
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 3, .opc2 = 7,
|
||||||
|
.fgt = FGT_CPPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
/*
|
/*
|
||||||
* Note the AArch32 opcodes have a different OPC1.
|
* Note the AArch32 opcodes have a different OPC1.
|
||||||
*/
|
*/
|
||||||
{ .name = "CFPRCTX", .state = ARM_CP_STATE_AA32,
|
{ .name = "CFPRCTX", .state = ARM_CP_STATE_AA32,
|
||||||
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 4,
|
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 4,
|
||||||
|
.fgt = FGT_CFPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
{ .name = "DVPRCTX", .state = ARM_CP_STATE_AA32,
|
{ .name = "DVPRCTX", .state = ARM_CP_STATE_AA32,
|
||||||
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 5,
|
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 5,
|
||||||
|
.fgt = FGT_DVPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
{ .name = "CPPRCTX", .state = ARM_CP_STATE_AA32,
|
{ .name = "CPPRCTX", .state = ARM_CP_STATE_AA32,
|
||||||
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 7,
|
.cp = 15, .opc1 = 0, .crn = 7, .crm = 3, .opc2 = 7,
|
||||||
|
.fgt = FGT_CPPRCTX,
|
||||||
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
.type = ARM_CP_NOP, .access = PL0_W, .accessfn = access_predinv },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user