On SME2 systems, Linux sets SMCR_EL1.EZT0 in cpu_enable_sme2() to allow user space to access ZT0.
linux-user already initializes SMCR_EL1.LEN and FA64 to match the kernel's setup, but leaves EZT0 clear (see commit 3aad4bc8beb9 "target/arm: Add zt0_excp_el to DisasContext"). Set EZT0 when SME2 is present to keep the emulated EL1 state consistent with Linux. This has no functional effect because CONFIG_USER_ONLY omits the ZT0 trap checks. Reported-by: Samyuktha K <[email protected]> Suggested-by: Sritam Paltasingh <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/arm/cpu.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 62262d742a27..851c9a81f3cb 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -387,6 +387,10 @@ static void arm_cpu_reset_hold(Object *obj, ResetType type) env->vfp.smcr_el[1] = FIELD_DP64(env->vfp.smcr_el[1], SMCR, FA64, 1); } + if (cpu_isar_feature(aa64_sme2, cpu)) { + env->vfp.smcr_el[1] = FIELD_DP64(env->vfp.smcr_el[1], + SMCR, EZT0, 1); + } } /* * Enable 48-bit address space (TODO: take reserved_va into account). -- 2.55.0
