[PATCH 06/11] arm: socfpga: agilex5: separate load and start of bl33

Michael Tretter m.tretter at pengutronix.de
Wed Oct 7 03:55:51 PDT 2026


Extract loading of the bl33 to a separate function. This allows a
cleaner separation for adding the bl33 xload from another medium.

Signed-off-by: Michael Tretter <m.tretter at pengutronix.de>
---
 arch/arm/mach-socfpga/atf.c | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-socfpga/atf.c b/arch/arm/mach-socfpga/atf.c
index ac69fb7776ca..4bf13a464657 100644
--- a/arch/arm/mach-socfpga/atf.c
+++ b/arch/arm/mach-socfpga/atf.c
@@ -12,6 +12,8 @@
 #include <mach/socfpga/soc64-sdram.h>
 #include <mach/socfpga/soc64-system-manager.h>
 
+#include <pbl/bio.h>
+
 static void socfpga_agilex5_qspi_init(void)
 {
 	unsigned long master_ref_clk = 0;
@@ -36,16 +38,38 @@ static void socfpga_agilex5_qspi_init(void)
 	}
 }
 
-static void __noreturn agilex5_load_and_start_image_via_tfa(void)
+static int agilex5_load_bl33_piggy(void *bl33)
 {
-	void *bl31 = (void *)AGILEX5_ATF_BL31_BASE_ADDR;
-	void *bl33 = (void *)AGILEX5_ATF_BL33_BASE_ADDR;
-	struct fwobj tfa;
+	/*
+	 * Do not use input_data and input_data_end, to ensure that the
+	 * piggydata can be stripped in the FSBL.
+	 */
+	if (barebox_image_size <= barebox_pbl_size)
+		return -EINVAL;
 
 	pr_debug("copy bl33 to %p from %p (%zu bytes)\n",
 		 bl33, __image_start, barebox_image_size);
 	memcpy(bl33, __image_start, barebox_image_size);
 
+	return 0;
+}
+
+static void agilex5_load_bl33(struct pbl_bio *bio, void *bl33)
+{
+	int ret;
+
+	ret = agilex5_load_bl33_piggy(bl33);
+	if (ret == 0)
+		return;
+
+	panic("No barebox image found!\n");
+}
+
+static void __noreturn agilex5_start_image_via_tfa(void *bl33)
+{
+	void *bl31 = (void *)AGILEX5_ATF_BL31_BASE_ADDR;
+	struct fwobj tfa;
+
 	get_builtin_firmware(agilex5_bl31_bin, &tfa);
 
 	pr_debug("copy bl31 to %p from %p (%zu bytes)\n",
@@ -63,6 +87,7 @@ static void __noreturn agilex5_load_and_start_image_via_tfa(void)
 
 static void agilex5_el3_init(void)
 {
+	void *bl33 = (void *)AGILEX5_ATF_BL33_BASE_ADDR;
 	int ret;
 
 	agilex5_initialize_security_policies();
@@ -74,7 +99,9 @@ static void agilex5_el3_init(void)
 
 	socfpga_agilex5_qspi_init();
 
-	agilex5_load_and_start_image_via_tfa();
+	agilex5_load_bl33(NULL, bl33);
+
+	agilex5_start_image_via_tfa(bl33);
 }
 
 void __noreturn agilex5_barebox_entry(void *fdt)

-- 
2.47.3




More information about the barebox mailing list