]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
mach-k3: r5: common: add fdt fixups for falcon mode
authorAnshul Dalal <anshuld@ti.com>
Fri, 31 Oct 2025 07:37:55 +0000 (13:07 +0530)
committerTom Rini <trini@konsulko.com>
Thu, 6 Nov 2025 23:39:49 +0000 (17:39 -0600)
This patch adds fdt fixups to the kernel device-tree in R5 falcon mode,
these fixups include fixing up the core-count, reserved-memory etc.

The users can opt out by disabling the respective CONFIG_OF_*_SETUP
config options.

Signed-off-by: Anshul Dalal <anshuld@ti.com>
arch/arm/mach-k3/r5/common.c

index bf5e7903dcb180b95a1fc8d9b7a3f7ac0d192a0b..8e002504897830bae276756034192df05b4f7066 100644 (file)
@@ -406,12 +406,43 @@ int k3_r5_falcon_bootmode(void)
                return BOOT_DEVICE_NOBOOT;
 }
 
+static int k3_falcon_fdt_fixup(void *fdt)
+{
+       int ret;
+
+       if (!fdt)
+               return -EINVAL;
+
+       fdt_set_totalsize(fdt, fdt_totalsize(fdt) + CONFIG_SYS_FDT_PAD);
+
+       if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
+               ret = ft_board_setup(fdt, gd->bd);
+               if (ret) {
+                       printf("%s: Failed in board setup: %s\n", __func__,
+                              fdt_strerror(ret));
+                       return ret;
+               }
+       }
+
+       if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
+               ret = ft_system_setup(fdt, gd->bd);
+               if (ret) {
+                       printf("%s: Failed in system setup: %s\n", __func__,
+                              fdt_strerror(ret));
+                       return ret;
+               }
+       }
+
+       return 0;
+}
+
 int k3_r5_falcon_prep(void)
 {
        struct spl_image_loader *loader, *drv;
        struct spl_image_info kernel_image;
        struct spl_boot_device bootdev;
        int ret = -ENXIO, n_ents;
+       void *fdt;
 
        tifalcon_loaded = true;
        memset(&kernel_image, '\0', sizeof(kernel_image));
@@ -428,6 +459,13 @@ int k3_r5_falcon_prep(void)
                if (ret)
                        continue;
 
+               fdt = spl_image_fdt_addr(&kernel_image);
+               ret = k3_falcon_fdt_fixup(fdt);
+               if (ret) {
+                       printf("Failed to fixup fdt in falcon mode: %d\n", ret);
+                       return ret;
+               }
+
                return 0;
        }