[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