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 <[email protected]>
---
 arch/arm/mach-k3/r5/common.c | 38 ++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/arch/arm/mach-k3/r5/common.c b/arch/arm/mach-k3/r5/common.c
index aa94c0c1956..4788aaff3ea 100644
--- a/arch/arm/mach-k3/r5/common.c
+++ b/arch/arm/mach-k3/r5/common.c
@@ -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 fdt fixups: %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 fdt fixups: %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));
@@ -429,6 +460,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("%s: Failed performing fdt fixups in 
falcon flow: [%d]\n",
+                                      __func__, ret);
+                               return ret;
+                       }
                        return 0;
                }
        }
-- 
2.51.0

Reply via email to