]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/Sec: Move 'ArmPlatformSecExtraAction' before we set NSACR & SCR
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Feb 2012 17:29:41 +0000 (17:29 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Feb 2012 17:29:41 +0000 (17:29 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13061 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Sec/Sec.c
ArmPlatformPkg/Sec/SecInternal.h

index b79537f5f652343f16008c64463bb5fe0e568d62..00d042cf094d6d39b5cd60b3bf47b6f4fbd9d2ff 100644 (file)
@@ -32,6 +32,7 @@ CEntryPoint (
 {
   CHAR8           Buffer[100];
   UINTN           CharCount;
+  UINTN           JumpAddress;
 
   // Invalidate the data cache. Doesn't have to do the Data cache clean.
   ArmInvalidateDataCache();
@@ -100,10 +101,6 @@ CEntryPoint (
 
   // Test if Trustzone is supported on this platform
   if (FixedPcdGetBool (PcdTrustzoneSupport)) {
-    // Ensure the Monitor Stack Base & Size have been set
-    ASSERT(PcdGet32(PcdCPUCoresSecMonStackBase) != 0);
-    ASSERT(PcdGet32(PcdCPUCoreSecMonStackSize) != 0);
-
     if (ArmIsMpCore()) {
       // Setup SMP in Non Secure world
       ArmCpuSetupSmpNonSecure (GET_CORE_ID(MpId));
@@ -121,7 +118,11 @@ CEntryPoint (
     // Status Register as the the current one (CPSR).
     copy_cpsr_into_spsr ();
 
-    NonTrustedWorldTransition (MpId);
+    // Call the Platform specific function to execute additional actions if required
+    JumpAddress = PcdGet32 (PcdFvBaseAddress);
+    ArmPlatformSecExtraAction (MpId, &JumpAddress);
+
+    NonTrustedWorldTransition (MpId, JumpAddress);
   }
   ASSERT (0); // We must never return from the above function
 }
@@ -131,6 +132,8 @@ TrustedWorldInitialization (
   IN  UINTN                     MpId
   )
 {
+  UINTN   JumpAddress;
+
   //-------------------- Monitor Mode ---------------------
 
   // Set up Monitor World (Vector Table, etc)
@@ -155,25 +158,25 @@ TrustedWorldInitialization (
   // Transfer the interrupt to Non-secure World
   ArmGicSetupNonSecure (PcdGet32(PcdGicDistributorBase), PcdGet32(PcdGicInterruptInterfaceBase));
 
+  // Call the Platform specific fucntion to execute additional actions if required
+  JumpAddress = PcdGet32 (PcdFvBaseAddress);
+  ArmPlatformSecExtraAction (MpId, &JumpAddress);
+
   // Write to CP15 Non-secure Access Control Register
   ArmWriteNsacr (PcdGet32 (PcdArmNsacr));
 
   // CP15 Secure Configuration Register
   ArmWriteScr (PcdGet32 (PcdArmScr));
 
-  NonTrustedWorldTransition (MpId);
+  NonTrustedWorldTransition (MpId, JumpAddress);
 }
 
 VOID
 NonTrustedWorldTransition (
-  IN  UINTN                     MpId
+  IN  UINTN                     MpId,
+  IN  UINTN                     JumpAddress
   )
 {
-  UINTN           JumpAddress;
-
-  JumpAddress = PcdGet32 (PcdFvBaseAddress);
-  ArmPlatformSecExtraAction (MpId, &JumpAddress);
-
   // If PcdArmNonSecModeTransition is defined then set this specific mode to CPSR before the transition
   // By not set, the mode for Non Secure World is SVC
   if (PcdGet32 (PcdArmNonSecModeTransition) != 0) {
index badd004b34b3478c4ab4403525472931f0a2d9c8..9136db9b4628bd8341267ff0dd6911edff2a7850 100644 (file)
@@ -33,7 +33,8 @@ TrustedWorldInitialization (
 \r
 VOID\r
 NonTrustedWorldTransition (\r
-  IN  UINTN                 MpId\r
+  IN  UINTN                     MpId,\r
+  IN  UINTN                     JumpAddress\r
   );\r
 \r
 VOID\r