mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
riscv: spl: andes: Move the DTB in front of kernel
Originally, u-boot SPL will place the DTB directly after the kernel, but the size of the kernel does not include the BSS section, This means that u-boot SPL places the DTB in the kernel BSS section causing the DTB to be cleared by the kernel BSS initialisation. Moving the DTB in front of the kernel can avoid this error. Signed-off-by: Randolph <randolph@andestech.com> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
parent
fe192679ef
commit
03a4504659
1 changed files with 25 additions and 0 deletions
|
@ -19,6 +19,8 @@
|
||||||
#include <fdtdec.h>
|
#include <fdtdec.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
#include <mapmem.h>
|
||||||
|
#include <hang.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -26,6 +28,29 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
* Miscellaneous platform dependent initializations
|
* 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)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
|
gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
|
||||||
|
|
Loading…
Reference in a new issue