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))) {
                ret = bloblist_maybe_init();
                if (!ret) {
                        gd->fdt_blob = bloblist_find(BLOBLISTT_CONTROL_FDT, 0);
-- 
2.34.1

Reply via email to