]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: riscv: falcon: move fdt blob to specified address
authorRandolph <randolph@andestech.com>
Fri, 29 Dec 2023 08:32:22 +0000 (16:32 +0800)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Wed, 31 Jan 2024 08:51:03 +0000 (16:51 +0800)
In Falcon Boot mode, the fdt blob should be move to the RAM from
kernel BSS section. To avoid being cleared by BSS initialisation.
SPL_PAYLOAD_ARGS_ADDR is the address where SPL copies.

Signed-off-by: Randolph <randolph@andestech.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
board/AndesTech/ae350/ae350.c
common/spl/Kconfig
common/spl/spl_opensbi.c

index 4e53fee5d23afc8b6c5aee68ff466ebe68e84d80..62b93b4ecba12d07bf8a2f77683d0bac9285744e 100644 (file)
@@ -21,8 +21,6 @@
 #include <fdtdec.h>
 #include <dm.h>
 #include <spl.h>
-#include <mapmem.h>
-#include <hang.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -51,29 +49,6 @@ int misc_init_r(void)
 }
 #endif
 
-#if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL)
-#define ANDES_SPL_FDT_ADDR     (CONFIG_TEXT_BASE - 0x100000)
-void spl_perform_fixups(struct spl_image_info *spl_image)
-{
-       /*
-        * Originally, u-boot-spl will place DTB directly after the kernel,
-        * but the size of the kernel did not include the BSS section, which
-        * means u-boot-spl will place the DTB in the kernel BSS section
-        * causing the DTB to be cleared by kernel BSS initializtion.
-        * Moving DTB in front of the kernel can avoid the error.
-        */
-       if (ANDES_SPL_FDT_ADDR < 0) {
-               printf("%s: CONFIG_TEXT_BASE needs to be larger than 0x100000\n",
-                      __func__);
-               hang();
-       }
-
-       memcpy((void *)ANDES_SPL_FDT_ADDR, spl_image->fdt_addr,
-              fdt_totalsize(spl_image->fdt_addr));
-       spl_image->fdt_addr = map_sysmem(ANDES_SPL_FDT_ADDR, 0);
-}
-#endif
-
 int board_init(void)
 {
        gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
index 6a4772eea90e5b86dc205e9dad95f877a716cdfc..8805dd33fec128e5ef3769f1302713b245434e8c 100644 (file)
@@ -1113,7 +1113,7 @@ config SPL_OS_BOOT
 
 config SPL_PAYLOAD_ARGS_ADDR
        hex "Address in memory to load 'args' file for Falcon Mode to"
-       depends on SPL_OS_BOOT
+       depends on SPL_OS_BOOT || SPL_LOAD_FIT_OPENSBI_OS_BOOT
        default 0x88000000 if ARCH_OMAP2PLUS
        help
          Address in memory where the 'args' file, typically a device tree
index 9801d38c0b328cb58667f66fcea7be0d525d0f8e..8127ebc946b3edd45154abbe5bb9102cbde247a7 100644 (file)
@@ -16,6 +16,7 @@
 #include <opensbi.h>
 #include <linux/libfdt.h>
 #include <linux/printk.h>
+#include <mapmem.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -57,6 +58,20 @@ void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
                hang();
        }
 
+       /*
+        * Originally, u-boot-spl will place DTB directly after the kernel,
+        * but the size of the kernel did not include the BSS section, which
+        * means u-boot-spl will place the DTB in the kernel BSS section
+        * causing the DTB to be cleared by kernel BSS initializtion.
+        * Moving DTB in front of the kernel can avoid the error.
+        */
+#if CONFIG_IS_ENABLED(LOAD_FIT_OPENSBI_OS_BOOT) && \
+    CONFIG_IS_ENABLED(PAYLOAD_ARGS_ADDR)
+       memcpy((void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR, spl_image->fdt_addr,
+              fdt_totalsize(spl_image->fdt_addr));
+       spl_image->fdt_addr = map_sysmem(CONFIG_SPL_PAYLOAD_ARGS_ADDR, 0);
+#endif
+
        /*
         * Find next os image in /fit-images
         * The next os image default is u-boot proper, once enable