summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2025-02-15 15:29:20 -0600
committerTom Rini <trini@konsulko.com>2025-02-15 15:29:20 -0600
commit274dc5291cfbcb54cf54c337d2123adea075e299 (patch)
treec05c4c053601714f296c2f7032b9d4e30036c583 /arch
parent89d33336d2645128dd217ac05410cfbfa2f74233 (diff)
parent854a5a00cadd6ea4adcc9e4a923124887989f5f8 (diff)
Merge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-sh
Add empty weak assembler function armv8_switch_to_el2_prep() which is jumped to just before U-Boot determines which EL it is running in and decides which path to take to boot the Linux kernel. Add IH_TYPE_TFA_BL31 into supported images type, to allow implementation of board specific U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_TFA_BL31, ...) TFA BL31 loadable handler for fitImages. This PR contains common hooks which are noop, R-Car Gen4 board specific implementation using these hooks is coming in next PR.
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/cpu/armv8/transition.S8
-rw-r--r--arch/arm/include/asm/system.h16
2 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv8/transition.S b/arch/arm/cpu/armv8/transition.S
index 9dbdff3a4fc..85f13ccd0d2 100644
--- a/arch/arm/cpu/armv8/transition.S
+++ b/arch/arm/cpu/armv8/transition.S
@@ -9,8 +9,16 @@
#include <linux/linkage.h>
#include <asm/macro.h>
+.pushsection .text.armv8_switch_to_el2_prep, "ax"
+WEAK(armv8_switch_to_el2_prep)
+ ret
+ENDPROC(armv8_switch_to_el2_prep)
+.popsection
+
.pushsection .text.armv8_switch_to_el2, "ax"
ENTRY(armv8_switch_to_el2)
+ bl armv8_switch_to_el2_prep
+ nop
switch_el x6, 1f, 0f, 0f
0:
cmp x5, #ES_TO_AARCH64
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
index dbf9ab43e28..091082281c7 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -239,6 +239,22 @@ int __asm_invalidate_l3_icache(void);
void __asm_switch_ttbr(u64 new_ttbr);
/*
+ * armv8_switch_to_el2_prep() - prepare for switch from EL3 to EL2 for ARMv8
+ *
+ * @args: For loading 64-bit OS, fdt address.
+ * For loading 32-bit OS, zero.
+ * @mach_nr: For loading 64-bit OS, zero.
+ * For loading 32-bit OS, machine nr
+ * @fdt_addr: For loading 64-bit OS, zero.
+ * For loading 32-bit OS, fdt address.
+ * @arg4: Input argument.
+ * @entry_point: kernel entry point
+ * @es_flag: execution state flag, ES_TO_AARCH64 or ES_TO_AARCH32
+ */
+void armv8_switch_to_el2_prep(u64 args, u64 mach_nr, u64 fdt_addr,
+ u64 arg4, u64 entry_point, u64 es_flag);
+
+/*
* armv8_switch_to_el2() - switch from EL3 to EL2 for ARMv8
*
* @args: For loading 64-bit OS, fdt address.