[PATCH 6/6] test: spl: add unit test for the "full" FIT loader

Francesco Valla francesco at valla.it
Thu Jun 4 22:41:40 CEST 2026


Following what is already done for the "simple" FIT loader, add a unit
test for the "full" loader.

Signed-off-by: Francesco Valla <francesco at valla.it>
---
 arch/sandbox/cpu/spl.c         | 37 +++++++++++++++++++++++++++++++++++++
 arch/sandbox/include/asm/spl.h | 14 ++++++++++++++
 test/image/spl_load_os.c       | 11 +++++++++++
 3 files changed, 62 insertions(+)

diff --git a/arch/sandbox/cpu/spl.c b/arch/sandbox/cpu/spl.c
index 7ee4975523e3..1668b58d3fbb 100644
--- a/arch/sandbox/cpu/spl.c
+++ b/arch/sandbox/cpu/spl.c
@@ -265,6 +265,43 @@ int sandbox_spl_load_fit(char *fname, int maxlen, struct spl_image_info *image)
 	return 0;
 }
 
+int sandbox_spl_load_fit_full(char *fname, int maxlen,
+			      struct spl_image_info *image)
+{
+	struct legacy_img_hdr *header;
+	long long size;
+	int ret;
+	int fd;
+
+	ret = sandbox_find_next_phase(fname, maxlen, true);
+	if (ret) {
+		printf("%s not found, error %d\n", fname, ret);
+		return log_msg_ret("nph", ret);
+	}
+
+	log_debug("reading from %s\n", fname);
+	fd = os_open(fname, OS_O_RDONLY);
+	if (fd < 0) {
+		printf("Failed to open '%s'\n", fname);
+		return log_msg_ret("ope", -errno);
+	}
+
+	if (os_get_filesize(fname, &size))
+		return log_msg_ret("fis", -ENOENT);
+
+	header = spl_get_load_buffer(0, size);
+
+	if (os_read(fd, header, size) != size)
+		return log_msg_ret("rea", -EIO);
+	os_close(fd);
+
+	ret = spl_load_fit_image(image, header);
+	if (ret)
+		return log_msg_ret("slf", ret);
+
+	return 0;
+}
+
 static int upl_load_from_image(struct spl_image_info *spl_image,
 			       struct spl_boot_device *bootdev)
 {
diff --git a/arch/sandbox/include/asm/spl.h b/arch/sandbox/include/asm/spl.h
index d824b2123a25..49a613ba92db 100644
--- a/arch/sandbox/include/asm/spl.h
+++ b/arch/sandbox/include/asm/spl.h
@@ -46,4 +46,18 @@ int sandbox_find_next_phase(char *fname, int maxlen, bool use_img);
  */
 int sandbox_spl_load_fit(char *fname, int maxlen, struct spl_image_info *image);
 
+/**
+ * sandbox_spl_load_fit_full() - Load the next phase from a FIT with the "full" loader
+ *
+ * Loads a FIT containing the next phase and sets it up for booting, using the
+ * "full" FIT loader
+ *
+ * @fname: Returns filename loaded
+ * @maxlen: Maximum length for @fname including \0
+ * @image: Place to put SPL-image information
+ * Return: 0 if OK, -ve on error
+ */
+int sandbox_spl_load_fit_full(char *fname, int maxlen,
+			      struct spl_image_info *image);
+
 #endif
diff --git a/test/image/spl_load_os.c b/test/image/spl_load_os.c
index d17cf116a0e8..ba9d7979a09b 100644
--- a/test/image/spl_load_os.c
+++ b/test/image/spl_load_os.c
@@ -21,3 +21,14 @@ static int spl_test_load(struct unit_test_state *uts)
 }
 SPL_TEST(spl_test_load, 0);
 
+static int spl_test_load_fit_full(struct unit_test_state *uts)
+{
+	struct spl_image_info image;
+	char fname[256];
+
+	ut_assertok(sandbox_spl_load_fit_full(fname, sizeof(fname), &image));
+
+	return 0;
+}
+SPL_TEST(spl_test_load_fit_full, 0);
+

-- 
2.54.0



More information about the U-Boot mailing list