diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2025-09-25 17:11:30 -0700 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2025-10-07 11:26:10 +0100 |
| commit | ee45f4b4e9e58be886bb48b31ca58c2273f3630a (patch) | |
| tree | ec95e4897d65fde76a7ceeba29d44a6888a51c17 | |
| parent | 11dee1cb2f075185ed93b38ad964995290630041 (diff) | |
| download | focaccia-qemu-ee45f4b4e9e58be886bb48b31ca58c2273f3630a.tar.gz focaccia-qemu-ee45f4b4e9e58be886bb48b31ca58c2273f3630a.zip | |
target/arm: Implement GPT_NonSecureOnly
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Message-id: 20250926001134.295547-7-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
| -rw-r--r-- | target/arm/ptw.c | 10 |
1 files changed, 9 insertions, 1 deletions
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; } |