From: B, Ravi Date: Tue, 18 Apr 2017 11:57:27 +0000 (+0530) Subject: boot: fdt: Perform arch_fixup_fdt() on the given device tree for falcon boot X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=6e7585bb64b12f632681c80c4b193349e1985d92;p=u-boot.git 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 [trini: Reword commit message] --- diff --git a/common/spl/spl.c b/common/spl/spl.c index 8eea2f937a..df984b8efd 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -17,6 +17,7 @@ #include #include #include +#include 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