Signed-off-by: Richard Henderson <richard.hender...@linaro.org> --- target/arm/internals.h | 2 +- target/arm/ptw.c | 6 +++--- target/arm/tcg/m_helper.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/arm/internals.h b/target/arm/internals.h index c4765e4489..629aa7bc23 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1606,7 +1606,7 @@ bool get_phys_addr_with_space_nogpc(CPUARMState *env, vaddr address, __attribute__((nonnull)); bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t address, - MMUAccessType access_type, ARMMMUIdx mmu_idx, + unsigned access_perm, ARMMMUIdx mmu_idx, bool is_secure, GetPhysAddrResult *result, ARMMMUFaultInfo *fi, uint32_t *mregion); diff --git a/target/arm/ptw.c b/target/arm/ptw.c index b71c963f67..a11df31b18 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -2561,7 +2561,7 @@ static uint32_t *regime_rlar(CPUARMState *env, ARMMMUIdx mmu_idx, } bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t address, - MMUAccessType access_type, ARMMMUIdx mmu_idx, + unsigned access_perm, ARMMMUIdx mmu_idx, bool secure, GetPhysAddrResult *result, ARMMMUFaultInfo *fi, uint32_t *mregion) { @@ -2750,7 +2750,7 @@ bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t address, if (arm_feature(env, ARM_FEATURE_M)) { fi->level = 1; } - return !(result->f.prot & (1 << access_type)); + return access_perm & ~result->f.prot; } static bool v8m_is_sau_exempt(CPUARMState *env, @@ -2952,7 +2952,7 @@ static bool get_phys_addr_pmsav8(CPUARMState *env, } } - ret = pmsav8_mpu_lookup(env, address, access_type, mmu_idx, secure, + ret = pmsav8_mpu_lookup(env, address, 1 << access_type, mmu_idx, secure, result, fi, NULL); if (sattrs.subpage) { result->f.lg_page_size = 0; diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c index 6614719832..220a3b472f 100644 --- a/target/arm/tcg/m_helper.c +++ b/target/arm/tcg/m_helper.c @@ -2820,7 +2820,7 @@ uint32_t HELPER(v7m_tt)(CPUARMState *env, uint32_t addr, uint32_t op) ARMMMUFaultInfo fi = {}; /* We can ignore the return value as prot is always set */ - pmsav8_mpu_lookup(env, addr, MMU_DATA_LOAD, mmu_idx, targetsec, + pmsav8_mpu_lookup(env, addr, PAGE_READ, mmu_idx, targetsec, &res, &fi, &mregion); if (mregion == -1) { mrvalid = false; -- 2.43.0