arch-arm: isSecureBelow from armarm pseudocode
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Fri, 22 Dec 2017 12:30:05 +0000 (12:30 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Wed, 7 Feb 2018 15:06:50 +0000 (15:06 +0000)
This patch introduces the inSecureBelow pseudocode function
defined in the armarm documentation. It also replaces the
inSecureState function call which was improperly used in
ELIs32: we might be in secure state (EL3), but with non-secure
lower ELs (SCR.NS = 1).

Change-Id: I01febcb54392ad4e51e785b4d5153aeb3437c778
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Chuan Zhu <chuan.zhu@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/7221
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/arch/arm/utility.cc
src/arch/arm/utility.hh

index 56503ac6286a9ffa100898cc4c51b5793cce6d19..a49f82971180e9f895a124b3deea014505cd762f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2014, 2016-2017 ARM Limited
+ * Copyright (c) 2009-2014, 2016-2018 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -184,6 +184,13 @@ inSecureState(ThreadContext *tc)
         scr, tc->readMiscReg(MISCREG_CPSR));
 }
 
+inline bool
+isSecureBelowEL3(ThreadContext *tc)
+{
+    SCR scr = tc->readMiscReg(MISCREG_SCR_EL3);
+    return ArmSystem::haveEL(tc, EL3) && scr.ns == 0;
+}
+
 bool
 inAArch64(ThreadContext *tc)
 {
@@ -256,8 +263,8 @@ ELIs32(ThreadContext *tc, ExceptionLevel el)
 
         HCR hcr = tc->readMiscReg(MISCREG_HCR_EL2);
         bool aarch32_at_el1 = (aarch32_below_el3
-                                || (have_el2
-                                && !inSecureState(tc) && hcr.rw == 0));
+                               || (have_el2
+                               && !isSecureBelowEL3(tc) && hcr.rw == 0));
 
         // Only know if EL0 using AArch32 from PSTATE
         if (el == EL0 && !aarch32_at_el1) {
index 622fd12829a696bb170d8b1737bc55b32f962411..6e4e76b75117020e1dcae70416390dc88d13a54d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2012-2013, 2016-2017 ARM Limited
+ * Copyright (c) 2010, 2012-2013, 2016-2018 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -201,10 +201,17 @@ inSecureState(SCR scr, CPSR cpsr)
     }
 }
 
-bool longDescFormatInUse(ThreadContext *tc);
-
 bool inSecureState(ThreadContext *tc);
 
+/**
+ * Return TRUE if an Exception level below EL3 is in Secure state.
+ * Differs from inSecureState in that it ignores the current EL
+ * or Mode in considering security state.
+ */
+inline bool isSecureBelowEL3(ThreadContext *tc);
+
+bool longDescFormatInUse(ThreadContext *tc);
+
 uint32_t getMPIDR(ArmSystem *arm_sys, ThreadContext *tc);
 
 static inline uint32_t