* [PATCH 0/7] target/arm: Implement FEAT_AIE @ 2025-10-10 20:19 Richard Henderson 2025-10-10 20:19 ` [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE Richard Henderson ` (6 more replies) 0 siblings, 7 replies; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm This feature adds new registers so that we can support 16 attribute indirection indexes. It is a pre-requisite for FEAT_D128. r~ Richard Henderson (7): target/arm: Add isar feature test for FEAT_AIE target/arm: Implement MAIR2_ELx and AMAIR2_ELx target/arm: Add AIE to ARMVAParameters target/arm: Drop trivial assert vs attrindx target/arm: Use el local indexing mair_el target/arm: Honor param.aie in get_phys_addr_lpae target/arm: Enable FEAT_AIE for -cpu max target/arm/cpregs.h | 2 + target/arm/cpu-features.h | 5 ++ target/arm/cpu.h | 5 +- target/arm/internals.h | 1 + target/arm/helper.c | 92 +++++++++++++++++++++++++++++++---- target/arm/ptw.c | 5 +- target/arm/tcg/cpu64.c | 1 + docs/system/arm/emulation.rst | 1 + 8 files changed, 100 insertions(+), 12 deletions(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:35 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx Richard Henderson ` (5 subsequent siblings) 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/cpu-features.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 37f1eca3af..579fa8f8f4 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -1364,6 +1364,11 @@ static inline bool isar_feature_aa64_s2pie(const ARMISARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64MMFR3, S2PIE) != 0; } +static inline bool isar_feature_aa64_aie(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, AIE) != 0; +} + static inline bool isar_feature_aa64_mec(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64MMFR3, MEC) != 0; -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE 2025-10-10 20:19 ` [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE Richard Henderson @ 2025-10-13 13:35 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:35 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:19, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/cpu-features.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h > index 37f1eca3af..579fa8f8f4 100644 > --- a/target/arm/cpu-features.h > +++ b/target/arm/cpu-features.h > @@ -1364,6 +1364,11 @@ static inline bool isar_feature_aa64_s2pie(const ARMISARegisters *id) > return FIELD_EX64_IDREG(id, ID_AA64MMFR3, S2PIE) != 0; > } > > +static inline bool isar_feature_aa64_aie(const ARMISARegisters *id) > +{ > + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, AIE) != 0; > +} > + > static inline bool isar_feature_aa64_mec(const ARMISARegisters *id) > { > return FIELD_EX64_IDREG(id, ID_AA64MMFR3, MEC) != 0; > -- > 2.43.0 > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson 2025-10-10 20:19 ` [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:55 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 3/7] target/arm: Add AIE to ARMVAParameters Richard Henderson ` (4 subsequent siblings) 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm Enable the SCR.AIEn bit in scr_write, and test it in aien_access. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/cpregs.h | 2 ++ target/arm/cpu.h | 5 +++- target/arm/helper.c | 62 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 763de5e051..48a406a5fb 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -806,6 +806,8 @@ typedef enum FGTBit { DO_REV_BIT(HFGRTR, NTPIDR2_EL0), DO_REV_BIT(HFGRTR, NPIRE0_EL1), DO_REV_BIT(HFGRTR, NPIR_EL1), + DO_REV_BIT(HFGRTR, NMAIR2_EL1), + DO_REV_BIT(HFGRTR, NAMAIR2_EL1), /* Trap bits in HDFGRTR_EL2 / HDFGWTR_EL2, starting from bit 0. */ DO_BIT(HDFGRTR, DBGBCRN_EL1), diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 1d4e13320c..e21612b898 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -447,7 +447,8 @@ typedef struct CPUArchState { uint64_t c9_pmuserenr; /* perf monitor user enable */ uint64_t c9_pmselr; /* perf monitor counter selection register */ uint64_t c9_pminten; /* perf monitor interrupt enables */ - union { /* Memory attribute redirection */ + /* Memory attribute redirection */ + union { struct { #if HOST_BIG_ENDIAN uint64_t _unused_mair_0; @@ -467,6 +468,7 @@ typedef struct CPUArchState { }; uint64_t mair_el[4]; }; + uint64_t mair2_el[4]; union { /* vector base address register */ struct { uint64_t _unused_vbar; @@ -1736,6 +1738,7 @@ static inline void xpsr_write(CPUARMState *env, uint32_t val, uint32_t mask) #define SCR_TCR2EN (1ULL << 43) #define SCR_SCTLR2EN (1ULL << 44) #define SCR_PIEN (1ULL << 45) +#define SCR_AIEN (1ULL << 46) #define SCR_GPF (1ULL << 48) #define SCR_MECEN (1ULL << 49) #define SCR_NSE (1ULL << 62) diff --git a/target/arm/helper.c b/target/arm/helper.c index 167f2909b3..e4d1651440 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -779,6 +779,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) cpu_isar_feature(aa64_s2pie, cpu)) { valid_mask |= SCR_PIEN; } + if (cpu_isar_feature(aa64_aie, cpu)) { + valid_mask |= SCR_AIEN; + } if (cpu_isar_feature(aa64_mec, cpu)) { valid_mask |= SCR_MECEN; } @@ -6189,6 +6192,61 @@ static const ARMCPRegInfo s2pie_reginfo[] = { .fieldoffset = offsetof(CPUARMState, cp15.s2pir_el2) }, }; +static CPAccessResult aien_access(CPUARMState *env, const ARMCPRegInfo *ri, + bool isread) +{ + if (arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_AIEN) + && arm_current_el(env) < 3) { + return CP_ACCESS_TRAP_EL3; + } + return CP_ACCESS_OK; +} + +static CPAccessResult aien_el1_access(CPUARMState *env, const ARMCPRegInfo *ri, + bool isread) +{ + CPAccessResult ret = access_tvm_trvm(env, ri, isread); + if (ret == CP_ACCESS_OK) { + ret = aien_access(env, ri, isread); + } + return ret; +} + +static const ARMCPRegInfo aie_reginfo[] = { + { .name = "MAIR2_EL1", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 0, .crn = 10, .crm = 2, .opc2 = 1, + .access = PL1_RW, .accessfn = aien_el1_access, + .fgt = FGT_NMAIR2_EL1, .nv2_redirect_offset = 0x280 | NV2_REDIR_NV1, + .vhe_redir_to_el2 = ENCODE_AA64_CP_REG(3, 4, 10, 1, 1), + .vhe_redir_to_el01 = ENCODE_AA64_CP_REG(3, 5, 10, 2, 1), + .fieldoffset = offsetof(CPUARMState, cp15.mair2_el[1]) }, + { .name = "MAIR2_EL2", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 4, .crn = 10, .crm = 1, .opc2 = 1, + .access = PL2_RW, .accessfn = aien_access, + .fieldoffset = offsetof(CPUARMState, cp15.mair2_el[2]) }, + { .name = "MAIR2_EL3", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 6, .crn = 10, .crm = 1, .opc2 = 1, + .access = PL3_RW, + .fieldoffset = offsetof(CPUARMState, cp15.mair2_el[3]) }, + + { .name = "AMAIR2_EL1", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 0, .crn = 10, .crm = 3, .opc2 = 1, + .access = PL1_RW, .accessfn = aien_el1_access, + .fgt = FGT_NAMAIR2_EL1, .nv2_redirect_offset = 0x288 | NV2_REDIR_NV1, + .vhe_redir_to_el2 = ENCODE_AA64_CP_REG(3, 4, 10, 3, 1), + .vhe_redir_to_el01 = ENCODE_AA64_CP_REG(3, 5, 10, 3, 1), + .type = ARM_CP_CONST, .resetvalue = 0 }, + { .name = "AMAIR2_EL2", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 4, .crn = 10, .crm = 3, .opc2 = 1, + .access = PL2_RW, .accessfn = aien_access, + .type = ARM_CP_CONST, .resetvalue = 0 }, + { .name = "AMAIR2_EL3", .state = ARM_CP_STATE_AA64, + .opc0 = 3, .opc1 = 6, .crn = 10, .crm = 3, .opc2 = 1, + .access = PL3_RW, + .type = ARM_CP_CONST, .resetvalue = 0 }, +}; + void register_cp_regs_for_features(ARMCPU *cpu) { /* Register all the coprocessor registers based on feature bits */ @@ -7434,6 +7492,10 @@ void register_cp_regs_for_features(ARMCPU *cpu) } } + if (cpu_isar_feature(aa64_aie, cpu)) { + define_arm_cp_regs(cpu, aie_reginfo); + } + if (cpu_isar_feature(any_predinv, cpu)) { define_arm_cp_regs(cpu, predinv_reginfo); } -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx 2025-10-10 20:19 ` [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx Richard Henderson @ 2025-10-13 13:55 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:55 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:20, Richard Henderson <richard.henderson@linaro.org> wrote: > > Enable the SCR.AIEn bit in scr_write, and test it in aien_access. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/cpregs.h | 2 ++ > target/arm/cpu.h | 5 +++- > target/arm/helper.c | 62 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 68 insertions(+), 1 deletion(-) I think we also need to set SCR_AIEN in arm_emulate_firmware_reset() for the "have_el3" case. otherwise Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/7] target/arm: Add AIE to ARMVAParameters 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson 2025-10-10 20:19 ` [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE Richard Henderson 2025-10-10 20:19 ` [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 14:05 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 4/7] target/arm: Drop trivial assert vs attrindx Richard Henderson ` (3 subsequent siblings) 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm Allow the bit to be set in TCR2; extract the bit in aa64_va_parameters. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/internals.h | 1 + target/arm/helper.c | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index f539bbe58e..a65386aaed 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1391,6 +1391,7 @@ typedef struct ARMVAParameters { bool hd : 1; ARMGranuleSize gran : 2; bool pie : 1; + bool aie : 1; } ARMVAParameters; /** diff --git a/target/arm/helper.c b/target/arm/helper.c index e4d1651440..8c0b8889db 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6098,6 +6098,9 @@ static void tcr2_el1_write(CPUARMState *env, const ARMCPRegInfo *ri, if (cpu_isar_feature(aa64_s1pie, cpu)) { valid_mask |= TCR2_PIE; } + if (cpu_isar_feature(aa64_aie, cpu)) { + valid_mask |= TCR2_AIE; + } value &= valid_mask; raw_write(env, ri, value); } @@ -6111,7 +6114,10 @@ static void tcr2_el2_write(CPUARMState *env, const ARMCPRegInfo *ri, if (cpu_isar_feature(aa64_s1pie, cpu)) { valid_mask |= TCR2_PIE; } - if (cpu_isar_feature(aa64_mec, env_archcpu(env))) { + if (cpu_isar_feature(aa64_aie, cpu)) { + valid_mask |= TCR2_AIE; + } + if (cpu_isar_feature(aa64_mec, cpu)) { valid_mask |= TCR2_AMEC0 | TCR2_AMEC1; } value &= valid_mask; @@ -9666,6 +9672,7 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va, { uint64_t tcr = regime_tcr(env, mmu_idx); bool epd, hpd, tsz_oob, ds, ha, hd, pie = false; + bool aie = false; int select, tsz, tbi, max_tsz, min_tsz, ps, sh; ARMGranuleSize gran; ARMCPU *cpu = env_archcpu(env); @@ -9688,10 +9695,12 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va, if (r_el == 3) { pie = (extract64(tcr, 35, 1) && cpu_isar_feature(aa64_s1pie, cpu)); - } else { - pie = ((env->cp15.tcr2_el[2] & TCR2_PIE) - && (!arm_feature(env, ARM_FEATURE_EL3) - || (env->cp15.scr_el3 & SCR_TCR2EN))); + aie = (extract64(tcr, 37, 1) + && cpu_isar_feature(aa64_aie, cpu)); + } else if (!arm_feature(env, ARM_FEATURE_EL3) + || (env->cp15.scr_el3 & SCR_TCR2EN)) { + pie = env->cp15.tcr2_el[2] & TCR2_PIE; + aie = env->cp15.tcr2_el[2] & TCR2_AIE; } } epd = false; @@ -9733,10 +9742,12 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va, epd = true; } - pie = ((env->cp15.tcr2_el[r_el] & TCR2_PIE) - && (!arm_feature(env, ARM_FEATURE_EL3) - || (env->cp15.scr_el3 & SCR_TCR2EN)) - && (r_el == 2 || (arm_hcrx_el2_eff(env) & HCRX_TCR2EN))); + if ((!arm_feature(env, ARM_FEATURE_EL3) + || (env->cp15.scr_el3 & SCR_TCR2EN)) + && (r_el == 2 || (arm_hcrx_el2_eff(env) & HCRX_TCR2EN))) { + pie = env->cp15.tcr2_el[r_el] & TCR2_PIE; + aie = env->cp15.tcr2_el[r_el] & TCR2_AIE; + } } hpd |= pie; @@ -9818,6 +9829,7 @@ ARMVAParameters aa64_va_parameters(CPUARMState *env, uint64_t va, .hd = ha && hd, .gran = gran, .pie = pie, + .aie = aie, }; } -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 3/7] target/arm: Add AIE to ARMVAParameters 2025-10-10 20:19 ` [PATCH 3/7] target/arm: Add AIE to ARMVAParameters Richard Henderson @ 2025-10-13 14:05 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 14:05 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:20, Richard Henderson <richard.henderson@linaro.org> wrote: > > Allow the bit to be set in TCR2; > extract the bit in aa64_va_parameters. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/internals.h | 1 + > target/arm/helper.c | 30 +++++++++++++++++++++--------- > 2 files changed, 22 insertions(+), 9 deletions(-) Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 4/7] target/arm: Drop trivial assert vs attrindx 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson ` (2 preceding siblings ...) 2025-10-10 20:19 ` [PATCH 3/7] target/arm: Add AIE to ARMVAParameters Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:44 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 5/7] target/arm: Use el local indexing mair_el Richard Henderson ` (2 subsequent siblings) 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm We just extracted 3 bits; the <= 7 test is trivially true. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/ptw.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index d4386ede73..54c45fc9fe 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -2320,7 +2320,6 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, /* Index into MAIR registers for cache attributes */ attrindx = extract32(attrs, 2, 3); mair = env->cp15.mair_el[regime_el(mmu_idx)]; - assert(attrindx <= 7); result->cacheattrs.is_s2_format = false; result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 4/7] target/arm: Drop trivial assert vs attrindx 2025-10-10 20:19 ` [PATCH 4/7] target/arm: Drop trivial assert vs attrindx Richard Henderson @ 2025-10-13 13:44 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:44 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:21, Richard Henderson <richard.henderson@linaro.org> wrote: > > We just extracted 3 bits; the <= 7 test is trivially true. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/ptw.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/target/arm/ptw.c b/target/arm/ptw.c > index d4386ede73..54c45fc9fe 100644 > --- a/target/arm/ptw.c > +++ b/target/arm/ptw.c > @@ -2320,7 +2320,6 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, > /* Index into MAIR registers for cache attributes */ > attrindx = extract32(attrs, 2, 3); > mair = env->cp15.mair_el[regime_el(mmu_idx)]; > - assert(attrindx <= 7); > result->cacheattrs.is_s2_format = false; > result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); > > -- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 5/7] target/arm: Use el local indexing mair_el 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson ` (3 preceding siblings ...) 2025-10-10 20:19 ` [PATCH 4/7] target/arm: Drop trivial assert vs attrindx Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:36 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae Richard Henderson 2025-10-10 20:19 ` [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max Richard Henderson 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm We already have regime_el() computed to a local. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/ptw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 54c45fc9fe..5fcf104272 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -2319,7 +2319,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, /* Index into MAIR registers for cache attributes */ attrindx = extract32(attrs, 2, 3); - mair = env->cp15.mair_el[regime_el(mmu_idx)]; + mair = env->cp15.mair_el[el]; result->cacheattrs.is_s2_format = false; result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 5/7] target/arm: Use el local indexing mair_el 2025-10-10 20:19 ` [PATCH 5/7] target/arm: Use el local indexing mair_el Richard Henderson @ 2025-10-13 13:36 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:36 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:20, Richard Henderson <richard.henderson@linaro.org> wrote: > > We already have regime_el() computed to a local. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/ptw.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/arm/ptw.c b/target/arm/ptw.c > index 54c45fc9fe..5fcf104272 100644 > --- a/target/arm/ptw.c > +++ b/target/arm/ptw.c > @@ -2319,7 +2319,7 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, > > /* Index into MAIR registers for cache attributes */ > attrindx = extract32(attrs, 2, 3); > - mair = env->cp15.mair_el[regime_el(mmu_idx)]; > + mair = env->cp15.mair_el[el]; > result->cacheattrs.is_s2_format = false; > result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); > > -- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson ` (4 preceding siblings ...) 2025-10-10 20:19 ` [PATCH 5/7] target/arm: Use el local indexing mair_el Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:50 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max Richard Henderson 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/ptw.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 5fcf104272..23f6616811 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -2319,7 +2319,9 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, /* Index into MAIR registers for cache attributes */ attrindx = extract32(attrs, 2, 3); - mair = env->cp15.mair_el[el]; + mair = (param.aie && extract64(attrs, 59, 1) + ? env->cp15.mair2_el[el] + : env->cp15.mair_el[el]); result->cacheattrs.is_s2_format = false; result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae 2025-10-10 20:19 ` [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae Richard Henderson @ 2025-10-13 13:50 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:50 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:21, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/ptw.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/target/arm/ptw.c b/target/arm/ptw.c > index 5fcf104272..23f6616811 100644 > --- a/target/arm/ptw.c > +++ b/target/arm/ptw.c > @@ -2319,7 +2319,9 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw, > > /* Index into MAIR registers for cache attributes */ > attrindx = extract32(attrs, 2, 3); > - mair = env->cp15.mair_el[el]; > + mair = (param.aie && extract64(attrs, 59, 1) > + ? env->cp15.mair2_el[el] > + : env->cp15.mair_el[el]); > result->cacheattrs.is_s2_format = false; > result->cacheattrs.attrs = extract64(mair, attrindx * 8, 8); Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson ` (5 preceding siblings ...) 2025-10-10 20:19 ` [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae Richard Henderson @ 2025-10-10 20:19 ` Richard Henderson 2025-10-13 13:44 ` Peter Maydell 6 siblings, 1 reply; 15+ messages in thread From: Richard Henderson @ 2025-10-10 20:19 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-arm Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/tcg/cpu64.c | 1 + docs/system/arm/emulation.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 1bffe66e81..6871956382 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1331,6 +1331,7 @@ void aarch64_max_tcg_initfn(Object *obj) t = FIELD_DP64(t, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPEC */ t = FIELD_DP64(t, ID_AA64MMFR3, S1PIE, 1); /* FEAT_S1PIE */ t = FIELD_DP64(t, ID_AA64MMFR3, S2PIE, 1); /* FEAT_S2PIE */ + t = FIELD_DP64(t, ID_AA64MMFR3, AIE, 1); /* FEAT_AIE */ SET_IDREG(isar, ID_AA64MMFR3, t); t = GET_IDREG(isar, ID_AA64ZFR0); diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index bf81da124a..31a5878a8f 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -21,6 +21,7 @@ the following architecture extensions: - FEAT_AdvSIMD (Advanced SIMD Extension) - FEAT_AES (AESD and AESE instructions) - FEAT_AFP (Alternate floating-point behavior) +- FEAT_AIE (Memory Attribute Index Enhancement) - FEAT_Armv9_Crypto (Armv9 Cryptographic Extension) - FEAT_ASID16 (16 bit ASID) - FEAT_ATS1A (Address Translation operations that ignore stage 1 permissions) -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max 2025-10-10 20:19 ` [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max Richard Henderson @ 2025-10-13 13:44 ` Peter Maydell 0 siblings, 0 replies; 15+ messages in thread From: Peter Maydell @ 2025-10-13 13:44 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, qemu-arm On Fri, 10 Oct 2025 at 21:20, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/tcg/cpu64.c | 1 + > docs/system/arm/emulation.rst | 1 + > 2 files changed, 2 insertions(+) > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-10-13 14:06 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-10 20:19 [PATCH 0/7] target/arm: Implement FEAT_AIE Richard Henderson 2025-10-10 20:19 ` [PATCH 1/7] target/arm: Add isar feature test for FEAT_AIE Richard Henderson 2025-10-13 13:35 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 2/7] target/arm: Implement MAIR2_ELx and AMAIR2_ELx Richard Henderson 2025-10-13 13:55 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 3/7] target/arm: Add AIE to ARMVAParameters Richard Henderson 2025-10-13 14:05 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 4/7] target/arm: Drop trivial assert vs attrindx Richard Henderson 2025-10-13 13:44 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 5/7] target/arm: Use el local indexing mair_el Richard Henderson 2025-10-13 13:36 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 6/7] target/arm: Honor param.aie in get_phys_addr_lpae Richard Henderson 2025-10-13 13:50 ` Peter Maydell 2025-10-10 20:19 ` [PATCH 7/7] target/arm: Enable FEAT_AIE for -cpu max Richard Henderson 2025-10-13 13:44 ` Peter Maydell
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).