]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
fdt: Correct condition for bloblist existing
authorSimon Glass <sjg@chromium.org>
Wed, 31 Jul 2024 14:49:05 +0000 (08:49 -0600)
committerTom Rini <trini@konsulko.com>
Mon, 5 Aug 2024 18:15:29 +0000 (12:15 -0600)
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 <sjg@chromium.org>
Acked-by: Raymond Mao <raymond.mao@linaro.org>
lib/fdtdec.c

index 5b3b26df968d45de7637997992a2775dc8936250..6865f78c70d198a6faec2a1c718ac150eafd039c 100644 (file)
@@ -1668,8 +1668,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. There was discussion about
+        * adding an OF_BLOBLIST Kconfig, but this was rejected.
+        *
+        * The necessary test is whether the previous phase passed a bloblist,
+        * not whether this phase creates one.
+        */
+       if (CONFIG_IS_ENABLED(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);