From ee95d0f04d2629932414c8e18ad41306b0b4ee4b Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 20 Sep 2021 22:04:01 +0100 Subject: [PATCH] arch-arm: SCTLR.WXN not used in S2AP Change-Id: I141f7088fce0e7eed01491920f84774394143b4a Signed-off-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50667 Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg Tested-by: kokoro --- src/arch/arm/mmu.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/arch/arm/mmu.cc b/src/arch/arm/mmu.cc index 4cd1a675dd..96d0bc4bba 100644 --- a/src/arch/arm/mmu.cc +++ b/src/arch/arm/mmu.cc @@ -547,11 +547,10 @@ MMU::s2PermBits64(TlbEntry *te, const RequestPtr &req, Mode mode, // In stage 2 we use the hypervisor access permission bits. // The following permissions are described in ARM DDI 0487A.f // D4-1802 - uint8_t hap = te->hap & 0b11; bool grant = false; - bool grant_read = hap & 0b1; + bool grant_read = te->hap & 0b01; + bool grant_write = te->hap & 0b10; - bool wxn = state.sctlr.wxn; uint8_t xn = te->xn; uint8_t pxn = te->pxn; @@ -560,19 +559,20 @@ MMU::s2PermBits64(TlbEntry *te, const RequestPtr &req, Mode mode, xn = true; } - DPRINTF(TLBVerbose, "Checking S2 permissions: hap:%d, xn:%d, pxn:%d, r:%d, " - "w:%d, x:%d, wxn: %d\n", hap, xn, - pxn, r, w, x, wxn); + DPRINTF(TLBVerbose, + "Checking S2 permissions: hap:%d, xn:%d, pxn:%d, r:%d, " + "w:%d, x:%d\n", te->hap, xn, pxn, r, w, x); if (x) { - // sctlr.wxn overrides the xn bit - grant = !wxn && !xn; + grant = grant_read && !xn; } else if (req->isAtomic()) { - grant = hap; + grant = grant_read || grant_write; } else if (w) { - grant = hap & 0b10; - } else { // is_read + grant = grant_write; + } else if (r) { grant = grant_read; + } else { + panic("Invalid Operation\n"); } return std::make_pair(grant, grant_read);