[PATCH V3 2/3] spl: riscv: falcon: move fdt blob to specified address
Randolph
randolph at andestech.com
Thu Nov 16 14:01:35 CET 2023
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 at andestech.com>
---
board/AndesTech/ae350/ae350.c | 25 -------------------------
common/spl/Kconfig | 2 +-
common/spl/spl_opensbi.c | 16 ++++++++++++++++
3 files changed, 17 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 <fdtdec.h>
#include <dm.h>
#include <spl.h>
-#include <mapmem.h>
-#include <hang.h>
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 - 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;
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index 25cd18afda..db279a588a 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 0x88000000 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..0a8ee9a7fc 100644
--- a/common/spl/spl_opensbi.c
+++ b/common/spl/spl_opensbi.c
@@ -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,21 @@ 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)) {
+ 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);
+ }
+
/*
* Find next os image in /fit-images
* The next os image default is u-boot proper, once enable
--
2.34.1
More information about the U-Boot
mailing list