boot/efi/arm: implement PL2 to PL1 transition
Change-Id: Ib30a943f68430ecbe33d8c7fe88c67267f9deff9 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5150 Reviewed-by: Adrien Destugues <[email protected]> Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
d039f12b31
commit
a3ef09d41e
@@ -6,6 +6,7 @@
|
||||
#include <asm_defs.h>
|
||||
|
||||
|
||||
.arch_extension virt
|
||||
.text
|
||||
|
||||
/* status_t arch_enter_kernel(uint32_t ttbr, struct kernel_args *kernelArgs,
|
||||
@@ -18,6 +19,28 @@
|
||||
*/
|
||||
FUNCTION(arch_enter_kernel):
|
||||
|
||||
// check whether we are running in HYP mode
|
||||
mrs r9, cpsr
|
||||
and r9, r9, #0x1f
|
||||
|
||||
// proceed to _pl1_entry if we're not in HYP mode
|
||||
cmp r9, #0x1a
|
||||
bne _pl1_entry
|
||||
|
||||
// set SVC mode in SPSR
|
||||
mrs r9, cpsr
|
||||
bic r9, r9, #0x1f
|
||||
orr r9, r9, #0x13
|
||||
msr spsr_cxsf, r9
|
||||
|
||||
// load PL1 entry point address
|
||||
adr lr, _pl1_entry
|
||||
msr elr_hyp, lr
|
||||
|
||||
// drop to PL1 SVC mode
|
||||
eret
|
||||
|
||||
_pl1_entry:
|
||||
|
||||
mov r5,r0
|
||||
mov r4,r2
|
||||
|
||||
Reference in New Issue
Block a user