Commit 3a2ef816ee for qemu.org
commit 3a2ef816ee7c01c12842bac79f696b7468cd49e6
Author: Richard Henderson <richard.henderson@linaro.org>
Date: Fri May 22 15:02:12 2026 -0700
target/arm: Enable EnFPM bits for FEAT_FPMR
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20260522220306.235200-11-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index e1ea41fdc5..84b2cc70e2 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -742,6 +742,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int target_el)
if (cpu_isar_feature(aa64_mec, cpu)) {
env->cp15.scr_el3 |= SCR_MECEN;
}
+ if (cpu_isar_feature(aa64_fpmr, cpu)) {
+ env->cp15.scr_el3 |= SCR_ENFPM;
+ }
}
if (target_el == 2) {
diff --git a/target/arm/helper.c b/target/arm/helper.c
index ae1dd42dc4..7eb7031294 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -787,6 +787,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value)
if (cpu_isar_feature(aa64_mec, cpu)) {
valid_mask |= SCR_MECEN;
}
+ if (cpu_isar_feature(aa64_fpmr, cpu)) {
+ valid_mask |= SCR_ENFPM;
+ }
} else {
valid_mask &= ~(SCR_RW | SCR_ST);
if (cpu_isar_feature(aa32_ras, cpu)) {
@@ -3973,6 +3976,9 @@ static void hcrx_write(CPUARMState *env, const ARMCPRegInfo *ri,
if (cpu_isar_feature(aa64_gcs, cpu)) {
valid_mask |= HCRX_GCSEN;
}
+ if (cpu_isar_feature(aa64_fpmr, cpu)) {
+ valid_mask |= HCRX_ENFPM;
+ }
/* Clear RES0 bits. */
env->cp15.hcrx_el2 = value & valid_mask;
@@ -4046,6 +4052,9 @@ uint64_t arm_hcrx_el2_eff(CPUARMState *env)
if (cpu_isar_feature(aa64_gcs, cpu)) {
hcrx |= HCRX_GCSEN;
}
+ if (cpu_isar_feature(aa64_fpmr, cpu)) {
+ hcrx |= HCRX_ENFPM;
+ }
return hcrx;
}
if (arm_feature(env, ARM_FEATURE_EL3) && !(env->cp15.scr_el3 & SCR_HXEN)) {