summaryrefslogtreecommitdiff
path: root/common/spl/spl_opensbi.c
diff options
context:
space:
mode:
authorRandolph <randolph@andestech.com>2023-12-29 16:32:22 +0800
committerLeo Yu-Chi Liang <ycliang@andestech.com>2024-01-31 16:51:03 +0800
commit10c4ab898c251a9f8d79b525880a1751b4815350 (patch)
treed87c8969a165f68a408f5986035648e642aa62ee /common/spl/spl_opensbi.c
parent011d07b4d8de909202f0d137a53e83ea110436e3 (diff)
spl: riscv: falcon: move fdt blob to specified address
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>
Diffstat (limited to 'common/spl/spl_opensbi.c')
-rw-r--r--common/spl/spl_opensbi.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/common/spl/spl_opensbi.c b/common/spl/spl_opensbi.c
index 9801d38c0b3..8127ebc946b 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;
@@ -58,6 +59,20 @@ void __noreturn spl_invoke_opensbi(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 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
* OpenSBI OS boot mode, the OS image should be linux.