diff options
author | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2012-02-28 17:28:44 +0000 |
---|---|---|
committer | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2012-02-28 17:28:44 +0000 |
commit | a8530889115f00c668c22d26c9272b7b173fbe30 (patch) | |
tree | 7c3b1552b64689954cf575137fce4341b14b8540 /ArmPlatformPkg/Sec/SecInternal.h | |
parent | 8cc852f79132897a0d371b05780762a0fcd959d8 (diff) | |
download | edk2-platforms-a8530889115f00c668c22d26c9272b7b173fbe30.tar.xz |
ArmPlatformPkg/Sec: Fix transition to Trusted Monitor World with ARMGCC
The enter_monitor_world() function was trashing r0/r1/r2 registers and then
was returning back to 'C'. The compiler might have used these registers in the C code.
These new design prevents register corruptions.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13060 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg/Sec/SecInternal.h')
-rw-r--r-- | ArmPlatformPkg/Sec/SecInternal.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/ArmPlatformPkg/Sec/SecInternal.h b/ArmPlatformPkg/Sec/SecInternal.h index cf9c1707d5..badd004b34 100644 --- a/ArmPlatformPkg/Sec/SecInternal.h +++ b/ArmPlatformPkg/Sec/SecInternal.h @@ -1,7 +1,7 @@ /** @file
* Main file supporting the SEC Phase on ARM PLatforms
*
-* Copyright (c) 2011, ARM Limited. All rights reserved.
+* Copyright (c) 2011-2012, ARM Limited. All rights reserved.
*
* This program and the accompanying materials
* are licensed and made available under the terms and conditions of the BSD License
@@ -27,9 +27,19 @@ #define IS_ALIGNED(Address, Align) (((UINTN)Address & (Align-1)) == 0)
VOID
+TrustedWorldInitialization (
+ IN UINTN MpId
+ );
+
+VOID
+NonTrustedWorldTransition (
+ IN UINTN MpId
+ );
+
+VOID
ArmSetupGicNonSecure (
- IN INTN GicDistributorBase,
- IN INTN GicInterruptInterfaceBase
+ IN INTN GicDistributorBase,
+ IN INTN GicInterruptInterfaceBase
);
// Vector Table for Sec Phase
@@ -45,12 +55,14 @@ NonSecureWaitForFirmware ( VOID
enter_monitor_mode (
- IN VOID* Stack
+ IN UINTN MonitorEntryPoint,
+ IN UINTN MpId,
+ IN VOID* Stack
);
VOID
return_from_exception (
- IN UINTN NonSecureBase
+ IN UINTN NonSecureBase
);
VOID
@@ -60,7 +72,7 @@ copy_cpsr_into_spsr ( VOID
set_non_secure_mode (
- IN ARM_PROCESSOR_MODE Mode
+ IN ARM_PROCESSOR_MODE Mode
);
VOID
|