From: Michael Tretter <m.tretter@pengutronix.de>
To: Sascha Hauer <s.hauer@pengutronix.de>,
BAREBOX <barebox@lists.infradead.org>
Cc: Michael Tretter <m.tretter@pengutronix.de>
Subject: [PATCH 05/11] arm: socfpga: agilex5: add bl33 xload support
Date: Wed, 07 Oct 2026 12:55:50 +0200 [thread overview]
Message-ID: <20261007-socfpga-agilex5-xload-v1-5-f8fb2d2819da@pengutronix.de> (raw)
In-Reply-To: <20261007-socfpga-agilex5-xload-v1-0-f8fb2d2819da@pengutronix.de>
The size of the FSBL on Agilex 5 is limited by the size of the available
SRAM (512k), but there are additional limits imposed by the tooling
which limit the possible size of the FSBL to about 256k.
Add xload support to the Agilex 5 PBL to optionally xload a barebox
image as bl33 from another boot medium.
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
arch/arm/mach-socfpga/Kconfig | 11 ++++++
arch/arm/mach-socfpga/Makefile | 3 ++
arch/arm/mach-socfpga/agilex5-xload.c | 74 +++++++++++++++++++++++++++++++++++
include/mach/socfpga/generic.h | 15 +++++++
4 files changed, 103 insertions(+)
diff --git a/arch/arm/mach-socfpga/Kconfig b/arch/arm/mach-socfpga/Kconfig
index a836711e6c40..55d7b12200c9 100644
--- a/arch/arm/mach-socfpga/Kconfig
+++ b/arch/arm/mach-socfpga/Kconfig
@@ -92,4 +92,15 @@ config ARCH_SOCFPGA_XLOAD
depends on ARCH_SOCFPGA_CYCLONE5
prompt "Build SoCFPGA preloader image"
+config SOCFPGA_AGILEX5_XLOAD
+ bool
+ depends on ARCH_SOCFPGA_AGILEX5
+ prompt "Support SSBL xloading on Agilex 5"
+ help
+ On Agilex 5, the FSBL binary is limited to a size of ~256k. Enable
+ XLOAD support to load the SSBL from a separate medium and allow
+ larger bootloader images.
+
+ Note that the SSBL loading has to be configured in the board code.
+
endmenu
diff --git a/arch/arm/mach-socfpga/Makefile b/arch/arm/mach-socfpga/Makefile
index 6a8117874136..f061d82f01dd 100644
--- a/arch/arm/mach-socfpga/Makefile
+++ b/arch/arm/mach-socfpga/Makefile
@@ -22,6 +22,9 @@ pbl-$(CONFIG_ARCH_SOCFPGA_AGILEX5) += soc64-system-manager.o \
agilex5-secreg.o \
agilex5-clock-manager.o \
atf.o
+ifdef CONFIG_SOCFPGA_AGILEX5_XLOAD
+pbl-$(CONFIG_ARCH_SOCFPGA_AGILEX5) += agilex5-xload.o
+endif
obj-$(CONFIG_ARCH_SOCFPGA_AGILEX5) += secure_reg_helper.o \
smc_api.o
diff --git a/arch/arm/mach-socfpga/agilex5-xload.c b/arch/arm/mach-socfpga/agilex5-xload.c
new file mode 100644
index 000000000000..9e55252c04cc
--- /dev/null
+++ b/arch/arm/mach-socfpga/agilex5-xload.c
@@ -0,0 +1,74 @@
+// SPDX-License-Identifier: GPL-2.0-only
+#include <common.h>
+#include <asm/barebox-arm.h>
+#include <filetype.h>
+#include <linux/sizes.h>
+#include <mach/socfpga/generic.h>
+#include <pbl/bio.h>
+
+static inline u32 barebox_arm_size(const char *head)
+{
+ return *(u32 *)(head + ARM_HEAD_SIZE_OFFSET);
+}
+
+const struct socfpga_barebox_part *barebox_part;
+
+void agilex5_set_barebox_part(struct socfpga_barebox_part *part)
+{
+ barebox_part = part;
+}
+
+static ssize_t agilex5_bl33_read(struct pbl_bio *bio, void *bl33,
+ off_t offs, size_t max)
+{
+ const off_t step = ARM_HEAD_SIZE;
+ u32 size = 0;
+ int ret;
+
+ ret = pbl_bio_read(bio, offs, bl33, step);
+ if (ret < 0)
+ return ret;
+ if (is_barebox_arm_head(bl33))
+ size = barebox_arm_size(bl33);
+ if (size == 0) {
+ pr_err("cannot find bl33 at offset 0x%08lx)\n", offs);
+ return -EIO;
+ }
+ if (size > max) {
+ pr_err("bl33 size (%u) larger than partition\n", size);
+ return -EINVAL;
+ }
+
+ pr_info("bl33 found at 0x%08lx, size %u\n", offs, size);
+
+ ret = pbl_bio_read(bio, offs + step, bl33 + step, size - step);
+ if (ret < size - step) {
+ pr_warn("failed to read bl33 from flash: %d\n", ret);
+ return ret;
+ }
+
+ pr_debug("read bl33 to %p from %lx (%u bytes)\n", bl33, offs, size);
+
+ return size;
+}
+
+int agilex5_xload_bl33(struct pbl_bio *bio, void *bl33)
+{
+ ssize_t size;
+
+ if (!bio) {
+ pr_warn("source device for SSBL is not configured\n");
+ return -ENODEV;
+ }
+ if (!barebox_part) {
+ pr_warn("source partition for SSBL is not configured\n");
+ return -ENODEV;
+ }
+ size = agilex5_bl33_read(bio, bl33,
+ barebox_part->nor_offset,
+ barebox_part->nor_size);
+ if (size < 0)
+ return size;
+
+ return 0;
+}
diff --git a/include/mach/socfpga/generic.h b/include/mach/socfpga/generic.h
index 6c99a17e81f1..16e117f4206c 100644
--- a/include/mach/socfpga/generic.h
+++ b/include/mach/socfpga/generic.h
@@ -134,4 +134,19 @@ struct socfpga_barebox_part {
/* Partition/device for xloader to load main bootloader from */
extern const struct socfpga_barebox_part *barebox_part;
+struct pbl_bio;
+#ifdef CONFIG_SOCFPGA_AGILEX5_XLOAD
+void agilex5_set_barebox_part(struct socfpga_barebox_part *part);
+int agilex5_xload_bl33(struct pbl_bio *bio, void *bl33);
+#else
+static inline void agilex5_set_barebox_part(struct socfpga_barebox_part *part)
+{
+}
+
+static inline int agilex5_xload_bl33(struct pbl_bio *bio, void *bl33)
+{
+ return -ENODEV;
+}
+#endif
+
#endif /* __MACH_SOCFPGA_GENERIC_H */
--
2.47.3
next prev parent reply other threads:[~2026-10-07 11:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 10:55 [PATCH 00/11] arm: socfpga: agilex5: add xload support for bl33 to FSBL Michael Tretter
2026-10-07 10:55 ` [PATCH 01/11] mtd: spi-nor: drop requirement for device field Michael Tretter
2026-10-07 10:55 ` [PATCH 02/11] mtd: spi-nor: enable module in PBL Michael Tretter
2026-10-07 10:55 ` [PATCH 03/11] mtd: spi-nor: cadence: extract common part for use " Michael Tretter
2026-10-07 10:55 ` [PATCH 04/11] mtd: spi-nor: cadence: add a PBL driver Michael Tretter
2026-10-07 10:55 ` Michael Tretter [this message]
2026-10-07 10:55 ` [PATCH 06/11] arm: socfpga: agilex5: separate load and start of bl33 Michael Tretter
2026-10-07 10:55 ` [PATCH 07/11] arm: socfpga: agilex5: enable xload for bl33 Michael Tretter
2026-10-07 10:55 ` [PATCH 08/11] arm: socfpga: agilex5: initialize QSPI flash in PBL Michael Tretter
2026-10-07 12:11 ` Michael Tretter
2026-10-07 10:55 ` [PATCH 09/11] arm: socfpga: agilex5: add agilex5_barebox_entry_xload Michael Tretter
2026-10-07 10:55 ` [PATCH 10/11] arm: socfpga: axe5-eagle: move lowlevel init to separate function Michael Tretter
2026-10-07 10:55 ` [PATCH 11/11] arm: socfpga: axe5-eagle: build FSBL without piggy data Michael Tretter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261007-socfpga-agilex5-xload-v1-5-f8fb2d2819da@pengutronix.de \
--to=m.tretter@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox