boot: fdt: Perform arch_fixup_fdt() on the given device tree for falcon boot

In single stage bootmode or falcon boot mode, the SPL shall update the
device tree that we load with the normal fixups done via
arch_fixup_fdt(), when possible (ie we have enough information in this
restricted environment to be able to do that still).  This will include
for example updating them memory nodes.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
[trini: Reword commit message]
This commit is contained in:
B, Ravi 2017-04-18 17:27:27 +05:30 committed by Tom Rini
parent 984a3c8777
commit 6e7585bb64

View File

@ -17,6 +17,7 @@
#include <malloc.h>
#include <dm/root.h>
#include <linux/compiler.h>
#include <fdt_support.h>
DECLARE_GLOBAL_DATA_PTR;
@ -56,6 +57,14 @@ __weak int spl_start_uboot(void)
return 1;
}
/* weak default platform specific function to initialize
* dram banks
*/
__weak int dram_init_banksize(void)
{
return 0;
}
/*
* Weak default function for arch specific zImage check. Return zero
* and fill start and end address if image is recognized.
@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
}
#endif
void spl_fixup_fdt(void)
{
#if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR)
void *fdt_blob = (void *)CONFIG_SYS_SPL_ARGS_ADDR;
int err;
err = fdt_check_header(fdt_blob);
if (err < 0) {
printf("fdt_root: %s\n", fdt_strerror(err));
return;
}
/* fixup the memory dt node */
err = fdt_shrink_to_minimum(fdt_blob, 0);
if (err == 0) {
printf("spl: fdt_shrink_to_minimum err - %d\n", err);
return;
}
err = arch_fixup_fdt(fdt_blob);
if (err) {
printf("spl: arch_fixup_fdt err - %d\n", err);
return;
}
#endif
}
/*
* Weak default function for board specific cleanup/preparation before
* Linux boot. Some boards/platforms might not need it, so just provide
@ -323,6 +359,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
debug(">>spl:board_init_r()\n");
gd->bd = &bdata;
#ifdef CONFIG_SPL_OS_BOOT
dram_init_banksize();
#endif
#if defined(CONFIG_SYS_SPL_MALLOC_START)
mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
@ -364,6 +403,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
#ifdef CONFIG_SPL_OS_BOOT
case IH_OS_LINUX:
debug("Jumping to Linux\n");
spl_fixup_fdt();
spl_board_prepare_for_linux();
jump_to_image_linux(&spl_image);
#endif