vbe: Support loading an FDT with the relocating loader
authorSimon Glass <sjg@chromium.org>
Thu, 16 Jan 2025 01:27:21 +0000 (18:27 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 22 Jan 2025 15:47:50 +0000 (09:47 -0600)
Add FDT support so that this can be copied down in memory after loading
and made available to the new image.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/vbe_common.c

index 30dd18d..1926e85 100644 (file)
@@ -260,6 +260,26 @@ int vbe_read_fit(struct udevice *blk, ulong area_offset, ulong area_size,
                                memmove(fdt_base_buf, fdt_base_buf + extra,
                                        fdt_size);
                        }
+#if CONFIG_IS_ENABLED(RELOC_LOADER)
+                       image->fdt_buf = fdt_base_buf;
+
+                       ulong xpl_size;
+                       ulong xpl_pad;
+                       ulong fdt_start;
+
+                       if (xpl_phase() == PHASE_TPL) {
+                               xpl_size = binman_sym(ulong, u_boot_vpl_nodtb, size);
+                               xpl_pad = binman_sym(ulong, u_boot_vpl_bss_pad, size);
+                       } else {
+                               xpl_size = binman_sym(ulong, u_boot_spl_nodtb, size);
+                               xpl_pad = binman_sym(ulong, u_boot_spl_bss_pad, size);
+                       }
+                       fdt_start = image->load_addr + xpl_size + xpl_pad;
+                       log_debug("load_addr %lx xpl_size %lx copy-to %lx\n",
+                                 image->load_addr, xpl_size + xpl_pad,
+                                 fdt_start);
+                       image->fdt_start = map_sysmem(fdt_start, fdt_size);
+#endif
                }
        }
        if (load_addrp)