summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg/Sec/Helper.asm
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPlatformPkg/Sec/Helper.asm')
-rw-r--r--ArmPlatformPkg/Sec/Helper.asm13
1 files changed, 13 insertions, 0 deletions
diff --git a/ArmPlatformPkg/Sec/Helper.asm b/ArmPlatformPkg/Sec/Helper.asm
index 43a0749138..1649df399a 100644
--- a/ArmPlatformPkg/Sec/Helper.asm
+++ b/ArmPlatformPkg/Sec/Helper.asm
@@ -15,6 +15,7 @@
EXPORT return_from_exception
EXPORT enter_monitor_mode
EXPORT copy_cpsr_into_spsr
+ EXPORT set_non_secure_mode
AREA Helper, CODE, READONLY
@@ -60,6 +61,18 @@ copy_cpsr_into_spsr
msr spsr_cxsf, r0
bx lr
+// Set the Non Secure Mode
+set_non_secure_mode
+ push { r1 }
+ and r0, r0, #0x1f // Keep only the mode bits
+ mrs r1, spsr // Read the spsr
+ bic r1, r1, #0x1f // Clear all mode bits
+ orr r1, r1, r0
+ msr spsr_cxsf, r1 // write back spsr (may have caused a mode switch)
+ isb
+ pop { r1 }
+ bx lr // return (hopefully thumb-safe!)
+
dead
B dead