[PATCH v7] fdt: Allow the devicetree to come from a bloblist
Conor Dooley
conor at kernel.org
Mon Jan 22 19:36:31 CET 2024
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 <sjg at 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
> >
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20240122/d2c67f33/attachment.sig>
More information about the U-Boot
mailing list