Skip to content
Snippets Groups Projects
Commit 6e7585bb authored by B, Ravi's avatar B, Ravi Committed by Tom Rini
Browse files

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: default avatarRavi Babu <ravibabu@ti.com>
[trini: Reword commit message]
parent 984a3c87
No related branches found
No related tags found
No related merge requests found
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <malloc.h> #include <malloc.h>
#include <dm/root.h> #include <dm/root.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <fdt_support.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -56,6 +57,14 @@ __weak int spl_start_uboot(void) ...@@ -56,6 +57,14 @@ __weak int spl_start_uboot(void)
return 1; 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 * Weak default function for arch specific zImage check. Return zero
* and fill start and end address if image is recognized. * and fill start and end address if image is recognized.
...@@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end) ...@@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
} }
#endif #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 * Weak default function for board specific cleanup/preparation before
* Linux boot. Some boards/platforms might not need it, so just provide * 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) ...@@ -323,6 +359,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
debug(">>spl:board_init_r()\n"); debug(">>spl:board_init_r()\n");
gd->bd = &bdata; gd->bd = &bdata;
#ifdef CONFIG_SPL_OS_BOOT
dram_init_banksize();
#endif
#if defined(CONFIG_SYS_SPL_MALLOC_START) #if defined(CONFIG_SYS_SPL_MALLOC_START)
mem_malloc_init(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) ...@@ -364,6 +403,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
#ifdef CONFIG_SPL_OS_BOOT #ifdef CONFIG_SPL_OS_BOOT
case IH_OS_LINUX: case IH_OS_LINUX:
debug("Jumping to Linux\n"); debug("Jumping to Linux\n");
spl_fixup_fdt();
spl_board_prepare_for_linux(); spl_board_prepare_for_linux();
jump_to_image_linux(&spl_image); jump_to_image_linux(&spl_image);
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment