[PATCH 12/15] spl: Plumb in the relocating loader

Simon Glass sjg at chromium.org
Thu Jan 9 13:30:07 CET 2025


This is fairly easy to use. The SPL loader sets up some fields in the
spl_image_info struct and calls spl_reloc_prepare(). When SPL is ready
to do the jump it must call spl_reloc_jump() instead of jump_to_image().

Add this logic.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 common/spl/spl.c | 12 ++++++++++++
 include/spl.h    |  1 +
 2 files changed, 13 insertions(+)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index 09e6dc26f5e..7cfbab06419 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -826,6 +826,18 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
 	}
 
 	spl_board_prepare_for_boot();
+
+	if (CONFIG_IS_ENABLED(RELOC_LOADER)) {
+		int ret;
+
+		ret = spl_reloc_jump(&spl_image, jump_to_image);
+		if (ret) {
+			if (xpl_phase() == PHASE_VPL)
+				printf("jump failed %d\n", ret);
+			hang();
+		}
+	}
+
 	jump_to_image(&spl_image);
 }
 
diff --git a/include/spl.h b/include/spl.h
index 9cfba98db55..7155e9c67aa 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -414,6 +414,7 @@ static inline void spl_load_init(struct spl_load_info *load,
 	load->read = h_read;
 	load->priv = priv;
 	spl_set_bl_len(load, bl_len);
+	xpl_set_phase(load, IH_PHASE_NONE);
 }
 
 /*
-- 
2.34.1



More information about the U-Boot mailing list