[PATCH v3 08/22] fdt: Support reading FDT from standard passage
Simon Glass
sjg at chromium.org
Thu Apr 17 20:15:50 CEST 2025
Add an option to receive the FDT using standard passage from a previous
phase. Rename the FDT source to 'passage' to match the old terminology,
which was only partially added.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
(no changes since v1)
include/fdtdec.h | 4 ++--
lib/fdtdec.c | 16 ++++++++++++----
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/include/fdtdec.h b/include/fdtdec.h
index d9fcd037ed2..7f7e13cb904 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -72,7 +72,7 @@ struct bd_info;
* U-Boot is packaged as an ELF file, e.g. for debugging purposes
* @FDTSRC_ENV: Provided by the fdtcontroladdr environment variable. This should
* be used for debugging/development only
- * @FDTSRC_BLOBLIST: Provided by a bloblist from an earlier phase
+ * @FDTSRC_PASSAGE: Provided by a bloblist from an earlier phase
*/
enum fdt_source_t {
FDTSRC_SEPARATE,
@@ -80,7 +80,7 @@ enum fdt_source_t {
FDTSRC_BOARD,
FDTSRC_EMBED,
FDTSRC_ENV,
- FDTSRC_BLOBLIST,
+ FDTSRC_PASSAGE,
};
/*
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 8559616873b..178b1b1247d 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -19,6 +19,7 @@
#include <log.h>
#include <malloc.h>
#include <net.h>
+#include <passage.h>
#include <spl.h>
#include <env.h>
#include <errno.h>
@@ -90,7 +91,7 @@ static const char *const fdt_src_name[] = {
[FDTSRC_BOARD] = "board",
[FDTSRC_EMBED] = "embed",
[FDTSRC_ENV] = "env",
- [FDTSRC_BLOBLIST] = "bloblist",
+ [FDTSRC_PASSAGE] = "passage",
};
extern u8 __dtb_dt_begin[]; /* embedded device tree blob */
@@ -1691,9 +1692,16 @@ int fdtdec_setup(void)
{
int ret;
- if (CONFIG_IS_ENABLED(OF_BLOBLIST)) {
- printf("Previous phase failed to provide standard passage\n");
- return -ENOENT;
+ /* The devicetree is typically appended to U-Boot */
+ if (CONFIG_IS_ENABLED(OF_PASSAGE)) {
+ if (!passage_valid()) {
+ printf("Previous phase failed to provide standard passage\n");
+ bloblist_show_list();
+ return -ENOENT;
+ }
+ gd->fdt_blob = map_sysmem(gd_passage_dtb(), 0);
+ gd->fdt_src = FDTSRC_PASSAGE;
+ log_debug("Devicetree is in bloblist at %p\n", gd->fdt_blob);
} else {
/* The devicetree is typically appended to U-Boot */
if (IS_ENABLED(CONFIG_OF_SEPARATE)) {
--
2.43.0
More information about the U-Boot
mailing list