diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2023-11-09 14:07:40 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2023-11-09 14:07:40 +0000 |
commit | 6ffc662fcbc26d658584b595f694edd04e218f83 (patch) | |
tree | 265504da736ab9c3c074df3187eef4d5bdf6a08a | |
parent | 8bb5c9d2c37abe9f5b19dccd1d09ed7dbab065eb (diff) |
target/arm: Treat LDTR* and STTR* as LDR/STR when NV,NV1 is 1,1
FEAT_NV requires (per I_JKLJK) that when HCR_EL2.{NV,NV1} is {1,1} the
unprivileged-access instructions LDTR, STTR etc behave as normal
loads and stores. Implement the check that handles this.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | target/arm/tcg/hflags.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/target/arm/tcg/hflags.c b/target/arm/tcg/hflags.c index eefc57787b..4fb1415433 100644 --- a/target/arm/tcg/hflags.c +++ b/target/arm/tcg/hflags.c @@ -260,8 +260,10 @@ static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *env, int el, int fp_el, switch (mmu_idx) { case ARMMMUIdx_E10_1: case ARMMMUIdx_E10_1_PAN: - /* TODO: ARMv8.3-NV */ - DP_TBFLAG_A64(flags, UNPRIV, 1); + /* FEAT_NV: NV,NV1 == 1,1 means we don't do UNPRIV accesses */ + if ((arm_hcr_el2_eff(env) & (HCR_NV | HCR_NV1)) != (HCR_NV | HCR_NV1)) { + DP_TBFLAG_A64(flags, UNPRIV, 1); + } break; case ARMMMUIdx_E20_2: case ARMMMUIdx_E20_2_PAN: |