FEAT_NMI defines another new bit in HCRX_EL2: TALLINT. When the feature is enabled, allow this bit to be written in HCRX_EL2.
Signed-off-by: Jinjie Ruan <ruanjin...@huawei.com> --- target/arm/cpu-features.h | 5 +++++ target/arm/helper.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 7567854db6..2ad1179be7 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -681,6 +681,11 @@ static inline bool isar_feature_aa64_sme(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64pfr1, ID_AA64PFR1, SME) != 0; } +static inline bool isar_feature_aa64_nmi(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64pfr1, ID_AA64PFR1, NMI) != 0; +} + static inline bool isar_feature_aa64_tgran4_lpa2(const ARMISARegisters *id) { return FIELD_SEX64(id->id_aa64mmfr0, ID_AA64MMFR0, TGRAN4) >= 1; diff --git a/target/arm/helper.c b/target/arm/helper.c index 90c4fb72ce..a3062cb2ad 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6056,6 +6056,11 @@ static void hcrx_write(CPUARMState *env, const ARMCPRegInfo *ri, valid_mask |= HCRX_MSCEN | HCRX_MCE2; } + /* FEAT_NMI adds TALLINT */ + if (cpu_isar_feature(aa64_nmi, env_archcpu(env))) { + valid_mask |= HCRX_TALLINT; + } + /* Clear RES0 bits. */ env->cp15.hcrx_el2 = value & valid_mask; } -- 2.34.1