Yo, On Wed, Jan 03, 2024 at 06:49:19PM -0700, Simon Glass wrote: > Standard passage provides for a bloblist to be passed from one firmware > phase to the next. That can be used to pass the devicetree along as well. > Add an option to support this. > > Tests for this will be added as part of the Universal Payload work. > > Signed-off-by: Simon Glass <s...@chromium.org>
Since this was merged into master, U-Boot is no longer booting on my icicle kit (At least that's what my bisection tells me). This is a RISC-V board and U-Boot for it is built from microchip_mpfs_icicle_defconfig. There's zero output on the console from U-Boot at all, the last thing that I see is OpenSBI before things grind to a halt. Thanks, Conor. > --- > The discussion on this was not resolved and is now important due to the > bloblist series from Raymond. So I am sending it again since I believe > this is a better starting point than building on OF_BOARD > > Changes in v7: > - Drop use of OF_BLOBLIST > > Changes in v6: > - Don't allow bloblist with OF_EMBED > > Changes in v5: > - Make OF_BLOBLIST default y > - Make OF_BLOBLIST optional at runtime > > Changes in v4: > - Rebase to -next > > doc/develop/devicetree/control.rst | 3 ++ > include/fdtdec.h | 6 ++-- > lib/fdtdec.c | 44 +++++++++++++++++++++++------- > 3 files changed, 41 insertions(+), 12 deletions(-) > > diff --git a/doc/develop/devicetree/control.rst > b/doc/develop/devicetree/control.rst > index cbb65c9b177..11c92d440f4 100644 > --- a/doc/develop/devicetree/control.rst > +++ b/doc/develop/devicetree/control.rst > @@ -108,6 +108,9 @@ If CONFIG_OF_BOARD is defined, a board-specific routine > will provide the > devicetree at runtime, for example if an earlier bootloader stage creates > it and passes it to U-Boot. > > +If CONFIG_BLOBLIST is defined, the devicetree may come from a bloblist passed > +from a previous stage, if present. > + > If CONFIG_SANDBOX is defined, then it will be read from a file on > startup. Use the -d flag to U-Boot to specify the file to read, -D for the > default and -T for the test devicetree, used to run sandbox unit tests. > diff --git a/include/fdtdec.h b/include/fdtdec.h > index bd1149f46d0..e80de24076c 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_NONE: No devicetree at all > + * @FDTSRC_BLOBLIST: Provided by a bloblist from an earlier phase > */ > enum fdt_source_t { > FDTSRC_SEPARATE, > @@ -80,6 +80,7 @@ enum fdt_source_t { > FDTSRC_BOARD, > FDTSRC_EMBED, > FDTSRC_ENV, > + FDTSRC_BLOBLIST, > }; > > /* > @@ -1190,7 +1191,8 @@ int fdtdec_resetup(int *rescan); > * > * The existing devicetree is available at gd->fdt_blob > * > - * @err internal error code if we fail to setup a DTB > + * @err: 0 on success, -EEXIST if the devicetree is already correct, or other > + * internal error code if we fail to setup a DTB > * @returns new devicetree blob pointer > */ > void *board_fdt_blob_setup(int *err); > diff --git a/lib/fdtdec.c b/lib/fdtdec.c > index 4016bf3c113..b2c59ab3818 100644 > --- a/lib/fdtdec.c > +++ b/lib/fdtdec.c > @@ -7,6 +7,10 @@ > */ > > #ifndef USE_HOSTCC > + > +#define LOG_CATEGORY LOGC_DT > + > +#include <bloblist.h> > #include <boot_fit.h> > #include <display_options.h> > #include <dm.h> > @@ -86,6 +90,7 @@ static const char *const fdt_src_name[] = { > [FDTSRC_BOARD] = "board", > [FDTSRC_EMBED] = "embed", > [FDTSRC_ENV] = "env", > + [FDTSRC_BLOBLIST] = "bloblist", > }; > > const char *fdtdec_get_srcname(void) > @@ -1662,23 +1667,42 @@ static void setup_multi_dtb_fit(void) > > int fdtdec_setup(void) > { > - int ret; > + int ret = -ENOENT; > + > + /* If allowing a bloblist, check that first */ > + if (CONFIG_IS_ENABLED(BLOBLIST)) { > + ret = bloblist_maybe_init(); > + if (!ret) { > + gd->fdt_blob = bloblist_find(BLOBLISTT_CONTROL_FDT, 0); > + if (gd->fdt_blob) { > + gd->fdt_src = FDTSRC_BLOBLIST; > + log_debug("Devicetree is in bloblist at %p\n", > + gd->fdt_blob); > + } else { > + log_debug("No FDT found in bloblist\n"); > + ret = -ENOENT; > + } > + } > + } > > - /* The devicetree is typically appended to U-Boot */ > - if (IS_ENABLED(CONFIG_OF_SEPARATE)) { > - gd->fdt_blob = fdt_find_separate(); > - gd->fdt_src = FDTSRC_SEPARATE; > - } else { /* embed dtb in ELF file for testing / development */ > - gd->fdt_blob = dtb_dt_embedded(); > - gd->fdt_src = FDTSRC_EMBED; > + /* Otherwise, the devicetree is typically appended to U-Boot */ > + if (ret) { > + if (IS_ENABLED(CONFIG_OF_SEPARATE)) { > + gd->fdt_blob = fdt_find_separate(); > + gd->fdt_src = FDTSRC_SEPARATE; > + } else { /* embed dtb in ELF file for testing / development */ > + gd->fdt_blob = dtb_dt_embedded(); > + gd->fdt_src = FDTSRC_EMBED; > + } > } > > /* Allow the board to override the fdt address. */ > if (IS_ENABLED(CONFIG_OF_BOARD)) { > gd->fdt_blob = board_fdt_blob_setup(&ret); > - if (ret) > + if (!ret) > + gd->fdt_src = FDTSRC_BOARD; > + else if (ret != -EEXIST) > return ret; > - gd->fdt_src = FDTSRC_BOARD; > } > > /* Allow the early environment to override the fdt address */ > -- > 2.34.1 >
signature.asc
Description: PGP signature