Hi Simon, On Wed, 5 Jun 2024 at 06:26, Simon Glass <s...@chromium.org> wrote: > > On some boards, the bloblist is created in SPL once SDRAM is ready. It > cannot be accessed until that point, so is not available early in SPL. > > Add a condition to avoid a hang in this case. > > This fixes a hang in chromebook_coral > > Fixes: 70fe2385943 ("fdt: Allow the devicetree to come from a bloblist") > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > lib/fdtdec.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/lib/fdtdec.c b/lib/fdtdec.c > index b2c59ab3818..b141244e3b9 100644 > --- a/lib/fdtdec.c > +++ b/lib/fdtdec.c > @@ -1669,8 +1669,16 @@ int fdtdec_setup(void) > { > int ret = -ENOENT; > > - /* If allowing a bloblist, check that first */ > - if (CONFIG_IS_ENABLED(BLOBLIST)) { > + /* > + * If allowing a bloblist, check that first. This would be better > + * handled with an OF_BLOBLIST Kconfig, but that caused far too much > + * argument, so add a hack here, used e.g. by chromebook_coral > + * The necessary test is whether the previous stage passed a bloblist, > + * not whether this one creates one. > + */ > + if (CONFIG_IS_ENABLED(OF_BLOBLIST) && > + (spl_prev_phase() != PHASE_TPL || > + !IS_ENABLED(CONFIG_TPL_BLOBLIST))) {
The same condition exists in common/bloblist.c. Carve out a function --e.g bool can can_enable_bloblist(void) return .... instead of open coding that Thanks /Ilias > ret = bloblist_maybe_init(); > if (!ret) { > gd->fdt_blob = bloblist_find(BLOBLISTT_CONTROL_FDT, > 0); > -- > 2.34.1 >