Re: [PATCH V4 2/3] spl: riscv: falcon: move fdt blob to specified address

2024-01-30 Thread Leo Liang
On Fri, Dec 29, 2023 at 04:32:22PM +0800, Randolph wrote:
> 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 
> ---
>  board/AndesTech/ae350/ae350.c | 25 -
>  common/spl/Kconfig|  2 +-
>  common/spl/spl_opensbi.c  | 15 +++
>  3 files changed, 16 insertions(+), 26 deletions(-)

Reviewed-by: Leo Yu-Chi Liang 


[PATCH V4 2/3] spl: riscv: falcon: move fdt blob to specified address

2023-12-29 Thread Randolph
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 
---
 board/AndesTech/ae350/ae350.c | 25 -
 common/spl/Kconfig|  2 +-
 common/spl/spl_opensbi.c  | 15 +++
 3 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/board/AndesTech/ae350/ae350.c b/board/AndesTech/ae350/ae350.c
index 772c6bf1ee..36375d9def 100644
--- a/board/AndesTech/ae350/ae350.c
+++ b/board/AndesTech/ae350/ae350.c
@@ -19,8 +19,6 @@
 #include 
 #include 
 #include 
-#include 
-#include 
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -28,29 +26,6 @@ DECLARE_GLOBAL_DATA_PTR;
  * Miscellaneous platform dependent initializations
  */
 
-#if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL)
-#define ANDES_SPL_FDT_ADDR (CONFIG_TEXT_BASE - 0x10)
-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 
0x10\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;
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index c521b02f4a..bb283d823e 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -1081,7 +1081,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 0x8800 if ARCH_OMAP2PLUS
help
  Address in memory where the 'args' file, typically a device tree
diff --git a/common/spl/spl_opensbi.c b/common/spl/spl_opensbi.c
index 9801d38c0b..8127ebc946 100644
--- a/common/spl/spl_opensbi.c
+++ b/common/spl/spl_opensbi.c
@@ -16,6 +16,7 @@
 #include 
 #include 
 #include 
+#include 
 
 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
-- 
2.34.1