From: Peter Maydell Date: Tue, 9 Jan 2024 14:43:51 +0000 (+0000) Subject: target/arm: Treat LDTR* and STTR* as LDR/STR when NV, NV1 is 1, 1 X-Git-Tag: v9.0.0-rc0~112^2~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e9b1e50bdf61cadff91ba16f6fc92ef4317803f;p=thirdparty%2Fqemu.git 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 Reviewed-by: Richard Henderson Tested-by: Miguel Luis --- diff --git a/target/arm/tcg/hflags.c b/target/arm/tcg/hflags.c index f33c0a12741..8f254bf9ccb 100644 --- a/target/arm/tcg/hflags.c +++ b/target/arm/tcg/hflags.c @@ -261,8 +261,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 ((hcr & (HCR_NV | HCR_NV1)) != (HCR_NV | HCR_NV1)) { + DP_TBFLAG_A64(flags, UNPRIV, 1); + } break; case ARMMMUIdx_E20_2: case ARMMMUIdx_E20_2_PAN: