From: Richard Henderson Date: Fri, 26 Sep 2025 00:11:30 +0000 (-0700) Subject: target/arm: Implement GPT_NonSecureOnly X-Git-Tag: v10.2.0-rc1~74^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee45f4b4e9e58be886bb48b31ca58c2273f3630a;p=thirdparty%2Fqemu.git target/arm: Implement GPT_NonSecureOnly Signed-off-by: Richard Henderson Reviewed-by: Pierrick Bouvier Message-id: 20250926001134.295547-7-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 3df5d4da12..56a3cd8fa0 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -318,6 +318,7 @@ static bool regime_translation_disabled(CPUARMState *env, ARMMMUIdx mmu_idx, static bool granule_protection_check(CPUARMState *env, uint64_t paddress, ARMSecuritySpace pspace, + ARMSecuritySpace ss, ARMMMUFaultInfo *fi) { MemTxAttrs attrs = { @@ -490,6 +491,13 @@ static bool granule_protection_check(CPUARMState *env, uint64_t paddress, return true; } break; + case 0b1101: /* non-secure only */ + /* aa64_rme_gpc2 was checked in gpccr_write */ + if (FIELD_EX64(gpccr, GPCCR, NSO)) { + return (pspace == ARMSS_NonSecure && + (ss == ARMSS_NonSecure || ss == ARMSS_Root)); + } + goto fault_walk; default: goto fault_walk; /* reserved */ } @@ -3553,7 +3561,7 @@ static bool get_phys_addr_gpc(CPUARMState *env, S1Translate *ptw, return true; } if (!granule_protection_check(env, result->f.phys_addr, - result->f.attrs.space, fi)) { + result->f.attrs.space, ptw->in_space, fi)) { fi->type = ARMFault_GPCFOnOutput; return true; }