mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-15 06:01:58 -06:00
target/arm: Implement the access tag cache flushes
Like the regular data cache flushes, these are nops within qemu. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200626033144.790098-21-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
5f716a8238
commit
5463df160e
1 changed files with 65 additions and 0 deletions
|
@ -6929,6 +6929,32 @@ static const ARMCPRegInfo mte_reginfo[] = {
|
||||||
.opc0 = 3, .opc1 = 3, .crn = 4, .crm = 2, .opc2 = 7,
|
.opc0 = 3, .opc1 = 3, .crn = 4, .crm = 2, .opc2 = 7,
|
||||||
.type = ARM_CP_NO_RAW,
|
.type = ARM_CP_NO_RAW,
|
||||||
.access = PL0_RW, .readfn = tco_read, .writefn = tco_write },
|
.access = PL0_RW, .readfn = tco_read, .writefn = tco_write },
|
||||||
|
{ .name = "DC_IGVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 6, .opc2 = 3,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_IGSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 6, .opc2 = 4,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
|
{ .name = "DC_IGDVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 6, .opc2 = 5,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_IGDSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 6, .opc2 = 6,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
|
{ .name = "DC_CGSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 10, .opc2 = 4,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
|
{ .name = "DC_CGDSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 10, .opc2 = 6,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
|
{ .name = "DC_CIGSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 14, .opc2 = 4,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
|
{ .name = "DC_CIGDSW", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 0, .crn = 7, .crm = 14, .opc2 = 6,
|
||||||
|
.type = ARM_CP_NOP, .access = PL1_W, .accessfn = access_tsw },
|
||||||
REGINFO_SENTINEL
|
REGINFO_SENTINEL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6938,6 +6964,43 @@ static const ARMCPRegInfo mte_tco_ro_reginfo[] = {
|
||||||
.type = ARM_CP_CONST, .access = PL0_RW, },
|
.type = ARM_CP_CONST, .access = PL0_RW, },
|
||||||
REGINFO_SENTINEL
|
REGINFO_SENTINEL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const ARMCPRegInfo mte_el0_cacheop_reginfo[] = {
|
||||||
|
{ .name = "DC_CGVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 3,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CGDVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 10, .opc2 = 5,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CGVAP", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 12, .opc2 = 3,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CGDVAP", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 12, .opc2 = 5,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CGVADP", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 13, .opc2 = 3,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CGDVADP", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 13, .opc2 = 5,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CIGVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 14, .opc2 = 3,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
{ .name = "DC_CIGDVAC", .state = ARM_CP_STATE_AA64,
|
||||||
|
.opc0 = 1, .opc1 = 3, .crn = 7, .crm = 14, .opc2 = 5,
|
||||||
|
.type = ARM_CP_NOP, .access = PL0_W,
|
||||||
|
.accessfn = aa64_cacheop_poc_access },
|
||||||
|
REGINFO_SENTINEL
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static CPAccessResult access_predinv(CPUARMState *env, const ARMCPRegInfo *ri,
|
static CPAccessResult access_predinv(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
|
@ -8071,8 +8134,10 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
||||||
*/
|
*/
|
||||||
if (cpu_isar_feature(aa64_mte, cpu)) {
|
if (cpu_isar_feature(aa64_mte, cpu)) {
|
||||||
define_arm_cp_regs(cpu, mte_reginfo);
|
define_arm_cp_regs(cpu, mte_reginfo);
|
||||||
|
define_arm_cp_regs(cpu, mte_el0_cacheop_reginfo);
|
||||||
} else if (cpu_isar_feature(aa64_mte_insn_reg, cpu)) {
|
} else if (cpu_isar_feature(aa64_mte_insn_reg, cpu)) {
|
||||||
define_arm_cp_regs(cpu, mte_tco_ro_reginfo);
|
define_arm_cp_regs(cpu, mte_tco_ro_reginfo);
|
||||||
|
define_arm_cp_regs(cpu, mte_el0_cacheop_reginfo);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue