arm: Make EL checks available in SE mode
authorAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 26 May 2016 16:33:38 +0000 (17:33 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 26 May 2016 16:33:38 +0000 (17:33 +0100)
A lot of code assumes that it is possible to test what the highest EL
is and if it is 64 bit. These calls currently don't work in SE mode
since they rely on an instance of an ArmSystem.

Change-Id: I0d1f261926a66ce3dc4fa116845ffb2a081446f2
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Nathanael Premillieu <nathanael.premillieu@arm.com>
src/arch/arm/system.cc

index f4241aa3ce585c66aea15d579d224f981269ff48..b61666339a85d53a11c3a02555759c979d1b3020 100644 (file)
@@ -219,13 +219,17 @@ ArmSystem::haveVirtualization(ThreadContext *tc)
 bool
 ArmSystem::highestELIs64(ThreadContext *tc)
 {
-    return dynamic_cast<ArmSystem *>(tc->getSystemPtr())->highestELIs64();
+    return FullSystem ?
+        dynamic_cast<ArmSystem *>(tc->getSystemPtr())->highestELIs64() :
+        true;
 }
 
 ExceptionLevel
 ArmSystem::highestEL(ThreadContext *tc)
 {
-    return dynamic_cast<ArmSystem *>(tc->getSystemPtr())->highestEL();
+    return FullSystem ?
+        dynamic_cast<ArmSystem *>(tc->getSystemPtr())->highestEL() :
+        EL1;
 }
 
 Addr