summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-stm32mp/bl33-generic.c
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2022-02-20 13:47:19 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2022-02-23 11:15:43 +0100
commitb07c1c88edd3753b8c10ef13b3c6daf78ab88b3f (patch)
treebcdbe9d409d51ea276c1040dd4e56461dbe4aff5 /arch/arm/mach-stm32mp/bl33-generic.c
parenteff5c04efa94e581f45f9d5811f3184ddab6ba9c (diff)
downloadbarebox-b07c1c88edd3753b8c10ef13b3c6daf78ab88b3f.tar.gz
barebox-b07c1c88edd3753b8c10ef13b3c6daf78ab88b3f.tar.xz
ARM: stm32mp: build extra barebox-stm32mp-generic-bl33.img
barebox-dt-2nd.img expects being loaded at an offset, so the stack can grow down from entry point. The STM32MP TF-A default is to not have an offset. Avoid this issue by having a stm32mp specific entry point that sets up a 64 byte stack after end of barebox. As it's stm32mp-specific anyway, we can skip the early FDT parsing and ask the SDRAM controller about RAM size. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20220220124736.3052502-8-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-stm32mp/bl33-generic.c')
-rw-r--r--arch/arm/mach-stm32mp/bl33-generic.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/mach-stm32mp/bl33-generic.c b/arch/arm/mach-stm32mp/bl33-generic.c
new file mode 100644
index 0000000000..6f779b19cf
--- /dev/null
+++ b/arch/arm/mach-stm32mp/bl33-generic.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <mach/entry.h>
+#include <debug_ll.h>
+
+/*
+ * barebox-dt-2nd.img expects being loaded at an offset, so the
+ * stack can grow down from entry point. The STM32MP TF-A default
+ * is to not have an offset. This stm32mp specific entry points
+ * avoids this issue by setting up a 64 byte stack after end of
+ * barebox and by asking the memory controller about RAM size
+ * instead of parsing it out of the DT.
+ *
+ * When using OP-TEE, ensure CONFIG_OPTEE_SIZE is appopriately set.
+ */
+
+ENTRY_FUNCTION(start_stm32mp_bl33, r0, r1, r2)
+{
+ stm32mp_cpu_lowlevel_init();
+
+ putc_ll('>');
+
+ stm32mp1_barebox_entry((void *)r2);
+}