arch-arm: Fault when dc ivac is executed from EL0
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Tue, 19 Dec 2017 16:58:33 +0000 (16:58 +0000)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Wed, 7 Feb 2018 16:14:39 +0000 (16:14 +0000)
A previous change enabled execution of dc ivac from EL0 when
SCTLR_EL1.UCI=1. The Arm ARM specifies that dc ivac is the only data
cache maintenance operation by VA that cannot be executed from
EL0. This changeset essential reverts the change:
8d43922 arch-arm: Allow dc ivac from EL0 when SCTLR_EL1.UCI=1

Change-Id: Ia25fab13846a151f548e649a16067feb1ff65c9c
Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/7823
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/arch/arm/miscregs.cc

index a9031fe0eeb76782d036edd7a84b53968dafb8cd..c0b6aa5d5ccc4c80ecc0c96f952426ad4270aad2 100644 (file)
@@ -922,8 +922,7 @@ canWriteAArch64SysReg(MiscRegIndex reg, SCR scr, CPSR cpsr, ThreadContext *tc)
         if (el == EL0 && !sctlr.dze)
             return false;
     }
-    if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt ||
-        reg == MISCREG_DC_IVAC_Xt) {
+    if (reg == MISCREG_DC_CVAC_Xt || reg == MISCREG_DC_CIVAC_Xt) {
         SCTLR sctlr = tc->readMiscReg(MISCREG_SCTLR_EL1);
         if (el == EL0 && !sctlr.uci)
             return false;
@@ -3557,7 +3556,7 @@ ISA::initializeMiscRegMetadata()
       .writes(1).exceptUserMode();
     InitReg(MISCREG_DC_IVAC_Xt)
       .warnNotFail()
-      .writes(1);
+      .writes(1).exceptUserMode();
     InitReg(MISCREG_DC_ISW_Xt)
       .warnNotFail()
       .writes(1).exceptUserMode();