Hey, On Tue, Jan 16, 2024 at 01:48:06PM +0000, Conor Dooley wrote: > 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.
Just wondering if there's anything I can do to help this one along? Got a red CI complaining at me every morning about it :| > > 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