When VBE operates within VPL it does not want the FDT to be changed.
Provide a way to disable this feature.

Move the FIT_IMAGE_TINY condition out of spl_fit_record_loadable() so
that both conditions are together. This makes the code easier to
understand.

Replace the existing fit_loaded member, which is no-longer used.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 boot/vbe_common.c    |  1 +
 common/spl/spl_fit.c |  6 ++----
 include/spl.h        | 19 ++++++++++++++-----
 3 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/boot/vbe_common.c b/boot/vbe_common.c
index 009bbcd3e76..801ab9da045 100644
--- a/boot/vbe_common.c
+++ b/boot/vbe_common.c
@@ -208,6 +208,7 @@ int vbe_read_fit(struct udevice *blk, ulong area_offset, 
ulong area_size,
                struct spl_load_info info;
 
                spl_load_init(&info, h_vbe_load_read, desc, desc->blksz);
+               xpl_set_fdt_update(&info, false);
                xpl_set_phase(&info, IH_PHASE_U_BOOT);
                log_debug("doing SPL from %s blksz %lx log2blksz %x area_offset 
%lx + fdt_size %lx\n",
                          blk->name, desc->blksz, desc->log2blksz, area_offset, 
ALIGN(size, 4));
diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
index 6c068a842d9..d663737089d 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -515,9 +515,6 @@ static int spl_fit_record_loadable(const struct 
spl_fit_info *ctx, int index,
        const char *name;
        int node;
 
-       if (CONFIG_IS_ENABLED(FIT_IMAGE_TINY))
-               return 0;
-
        ret = spl_fit_get_image_name(ctx, "loadables", index, &name);
        if (ret < 0)
                return ret;
@@ -863,7 +860,8 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
                        spl_image->entry_point = image_info.entry_point;
 
                /* Record our loadables into the FDT */
-               if (spl_image->fdt_addr)
+               if (!CONFIG_IS_ENABLED(FIT_IMAGE_TINY) &&
+                   xpl_get_fdt_update(info) && spl_image->fdt_addr)
                        spl_fit_record_loadable(&ctx, index,
                                                spl_image->fdt_addr,
                                                &image_info);
diff --git a/include/spl.h b/include/spl.h
index 7155e9c67aa..850c64d4b19 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -345,7 +345,7 @@ typedef ulong (*spl_load_reader)(struct spl_load_info 
*load, ulong sector,
  * @priv: Private data for the device
  * @bl_len: Block length for reading in bytes
  * @phase: Image phase to load
- * @fit_loaded: true if the FIT has been loaded, except for external data
+ * @no_fdt_update: true to update the FDT with any loadables that are loaded
  */
 struct spl_load_info {
        spl_load_reader read;
@@ -355,7 +355,7 @@ struct spl_load_info {
 #endif
 #if CONFIG_IS_ENABLED(BOOTMETH_VBE)
        u8 phase;
-       u8 fit_loaded;
+       u8 fdt_update;
 #endif
 };
 
@@ -395,12 +395,20 @@ static inline enum image_phase_t xpl_get_phase(struct 
spl_load_info *info)
 #endif
 }
 
-static inline bool xpl_get_fit_loaded(struct spl_load_info *info)
+static inline void xpl_set_fdt_update(struct spl_load_info *info,
+                                     bool fdt_update)
 {
 #if CONFIG_IS_ENABLED(BOOTMETH_VBE)
-       return info->fit_loaded;
+       info->fdt_update = fdt_update;
+#endif
+}
+
+static inline enum image_phase_t xpl_get_fdt_update(struct spl_load_info *info)
+{
+#if CONFIG_IS_ENABLED(BOOTMETH_VBE)
+       return info->fdt_update;
 #else
-       return false;
+       return true;
 #endif
 }
 
@@ -415,6 +423,7 @@ static inline void spl_load_init(struct spl_load_info *load,
        load->priv = priv;
        spl_set_bl_len(load, bl_len);
        xpl_set_phase(load, IH_PHASE_NONE);
+       xpl_set_fdt_update(load, true);
 }
 
 /*
-- 
2.43.0

Reply via email to