56 lines
1.4 KiB
Diff
56 lines
1.4 KiB
Diff
|
|
From 252cbd36e51414b60ab68306f9c38e358709494d Mon Sep 17 00:00:00 2001
|
||
|
|
From: Jaxson Han <jaxson.han@arm.com>
|
||
|
|
Date: Tue, 25 May 2021 07:25:00 +0100
|
||
|
|
Subject: [PATCH] aarch64: Prepare for lower EL booting
|
||
|
|
|
||
|
|
Save SPSR_KERNEL into spsr_to_elx during el3_init.
|
||
|
|
The jump_kernel will load spsr_to_elx into spsr_el3.
|
||
|
|
|
||
|
|
This change will make it easier to control whether drop to lower EL
|
||
|
|
before jumping to the kernel.
|
||
|
|
|
||
|
|
Upstream-Status: Pending
|
||
|
|
Signed-off-by: Jaxson Han <jaxson.han@arm.com>
|
||
|
|
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
|
||
|
|
---
|
||
|
|
arch/aarch64/boot.S | 15 +++++++++++++--
|
||
|
|
1 file changed, 13 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
|
||
|
|
index 5105b41..243198d 100644
|
||
|
|
--- a/arch/aarch64/boot.S
|
||
|
|
+++ b/arch/aarch64/boot.S
|
||
|
|
@@ -151,7 +151,16 @@ el3_init:
|
||
|
|
mov x0, #ZCR_EL3_LEN_MAX // SVE: Enable full vector len
|
||
|
|
msr ZCR_EL3, x0 // for EL2.
|
||
|
|
|
||
|
|
-1:
|
||
|
|
+ /*
|
||
|
|
+ * Save SPSR_KERNEL into spsr_to_elx.
|
||
|
|
+ * The jump_kernel will load spsr_to_elx into spsr_el3
|
||
|
|
+ */
|
||
|
|
+1: mov w0, #SPSR_KERNEL
|
||
|
|
+ ldr x1, =spsr_to_elx
|
||
|
|
+ str w0, [x1]
|
||
|
|
+ b el_max_init
|
||
|
|
+
|
||
|
|
+el_max_init:
|
||
|
|
ldr x0, =COUNTER_FREQ
|
||
|
|
msr cntfrq_el0, x0
|
||
|
|
|
||
|
|
@@ -199,7 +208,7 @@ ASM_FUNC(jump_kernel)
|
||
|
|
b.eq 1f
|
||
|
|
br x19 // Keep current EL
|
||
|
|
|
||
|
|
-1: mov x4, #SPSR_KERNEL
|
||
|
|
+1: ldr w4, spsr_to_elx
|
||
|
|
|
||
|
|
/*
|
||
|
|
* If bit 0 of the kernel address is set, we're entering in AArch32
|
||
|
|
@@ -217,3 +226,5 @@ ASM_FUNC(jump_kernel)
|
||
|
|
.align 3
|
||
|
|
flag_keep_el:
|
||
|
|
.long 0
|
||
|
|
+spsr_to_elx:
|
||
|
|
+ .long 0
|