aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass2023-11-12 08:27:48 -0700
committerTom Rini2023-12-13 18:39:05 -0500
commitf2cbe6e43e18e9b65190c53cb4b92dd6699cb38b (patch)
treebc83abefd3ad548ccd8bd2620098eca4692e4811
parent83cd8fb13cdda29e4f99a1d7c8c6ba2c7d755c12 (diff)
boot: Move adding initrd earlier in image_setup_libfdt()
This may as well happen before the general event is emitted, so move it. This will allow us to use the livetree for the event part, but the flattree for the earlier part. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--boot/image-fdt.c5
-rw-r--r--include/fdt_support.h12
2 files changed, 15 insertions, 2 deletions
diff --git a/boot/image-fdt.c b/boot/image-fdt.c
index 6cdac6a556d..173ddb6e074 100644
--- a/boot/image-fdt.c
+++ b/boot/image-fdt.c
@@ -635,6 +635,10 @@ int image_setup_libfdt(struct bootm_headers *images, void *blob,
goto err;
}
}
+
+ if (fdt_initrd(blob, *initrd_start, *initrd_end))
+ goto err;
+
if (!of_live_active() && CONFIG_IS_ENABLED(EVENT)) {
struct event_ft_fixup fixup;
@@ -664,7 +668,6 @@ int image_setup_libfdt(struct bootm_headers *images, void *blob,
if (lmb)
lmb_reserve(lmb, (ulong)blob, of_size);
- fdt_initrd(blob, *initrd_start, *initrd_end);
if (!ft_verify_fdt(blob))
goto err;
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 0601f5f7dc8..25600d62f29 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -55,7 +55,17 @@ int fdt_chosen(void *fdt);
/**
* Add initrd information to the FDT before booting the OS.
*
- * @param fdt FDT address in memory
+ * Adds linux,initrd-start and linux,initrd-end properties to the /chosen node,
+ * creating it if necessary.
+ *
+ * A memory reservation for the ramdisk is added to the FDT, or an existing one
+ * (with matching @initrd_start) updated.
+ *
+ * If @initrd_start == @initrd_end this function does nothing and returns 0.
+ *
+ * @fdt: Pointer to FDT in memory
+ * @initrd_start: Start of ramdisk
+ * @initrd_end: End of ramdisk
* Return: 0 if ok, or -FDT_ERR_... on error
*/
int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);