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>
|
#include <asm_defs.h>
|
||||||
|
|
||||||
|
|
||||||
|
.arch_extension virt
|
||||||
.text
|
.text
|
||||||
|
|
||||||
/* status_t arch_enter_kernel(uint32_t ttbr, struct kernel_args *kernelArgs,
|
/* status_t arch_enter_kernel(uint32_t ttbr, struct kernel_args *kernelArgs,
|
||||||
@@ -18,6 +19,28 @@
|
|||||||
*/
|
*/
|
||||||
FUNCTION(arch_enter_kernel):
|
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 r5,r0
|
||||||
mov r4,r2
|
mov r4,r2
|
||||||
|
|||||||
Reference in New Issue
Block a user