blob: c6343456a779880e4c349162ba7f1182460444ab [file] [log] [blame]
Andrew Geissler9347dd42023-03-03 12:38:41 -06001From ba955efb35ce1d41b562190d7c2fbcbcf8ef97ff Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Jaxson Han <jaxson.han@arm.com>
3Date: Tue, 25 May 2021 07:25:00 +0100
4Subject: [PATCH] aarch64: Prepare for booting with EL2
5
6Prepare for allowing boot-wrapper to be entered in EL2.
7Detect current EL and set the corresponding EL registers.
8
9Upstream-Status: Pending
10Signed-off-by: Jaxson Han <jaxson.han@arm.com>
11Reviewed-by: Andre Przywara <andre.przywara@arm.com>
12---
13 arch/aarch64/boot.S | 8 ++++++++
14 arch/aarch64/utils.S | 10 +++++++++-
15 2 files changed, 17 insertions(+), 1 deletion(-)
16
17diff --git a/arch/aarch64/boot.S b/arch/aarch64/boot.S
Andrew Geissler9347dd42023-03-03 12:38:41 -060018index 243198d..3593ca5 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040019--- a/arch/aarch64/boot.S
20+++ b/arch/aarch64/boot.S
Andrew Geissler9347dd42023-03-03 12:38:41 -060021@@ -216,10 +216,18 @@ ASM_FUNC(jump_kernel)
Brad Bishopbec4ebc2022-08-03 09:55:16 -040022 */
23 bfi x4, x19, #5, #1
24
25+ mrs x5, CurrentEL
26+ cmp x5, #CURRENTEL_EL2
27+ b.eq 1f
28+
29 msr elr_el3, x19
30 msr spsr_el3, x4
31 eret
32
33+1: msr elr_el2, x19
34+ msr spsr_el2, x4
35+ eret
36+
37 .ltorg
38
39 .data
40diff --git a/arch/aarch64/utils.S b/arch/aarch64/utils.S
41index 85c7f8a..f02a249 100644
42--- a/arch/aarch64/utils.S
43+++ b/arch/aarch64/utils.S
44@@ -34,10 +34,18 @@ ASM_FUNC(find_logical_id)
45 ret
46
47 /*
48- * Setup EL3 vectors
49+ * Setup EL3/EL2 vectors
50 * x0: vector address
51 */
52 ASM_FUNC(setup_vector)
53+ mrs x1, CurrentEL
54+ cmp x1, #CURRENTEL_EL2
55+ b.eq 1f
56+
57 msr VBAR_EL3, x0
58 isb
59 ret
60+
61+1: msr VBAR_EL2, x0
62+ isb
63+ ret