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
> > 


Attachment: signature.asc
Description: PGP signature

Reply via email to