mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-03-13 21:36:57 +00:00
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>
This commit is contained in:
parent
011d07b4d8
commit
10c4ab898c
3 changed files with 16 additions and 26 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue