Hi Lukasz, On Tuesday 18 April 2017 06:55 PM, Lukasz Majewski wrote: > Hi Ravi, > >> In single stage bootmode or falcon boot mode, >> the SPL shall update the memory dt nodes >> spl_fixup_fdt() based on DDR configuration for >> specific platform. >> >> Signed-off-by: Ravi Babu <ravib...@ti.com> >> --- >> common/spl/spl.c | 40 ++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 40 insertions(+) >> >> diff --git a/common/spl/spl.c b/common/spl/spl.c >> index f11b370..b9b1331 100644 >> --- a/common/spl/spl.c >> +++ b/common/spl/spl.c >> @@ -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(); > > What is the purpose of this function? In this point the SDRAM > should be already configured.
So dram_init_banksize() initializes each base address and size of each bank. Before jumping to kernel, these values will be used to update memory nodes in DT(done by arch_fixup_fdt()). This is how it is being done in U-boot as well. Thanks and regards, Lokesh > > In patch 2/5 you already configured TI's specific "board_init_f" to add > some memory related information to gd struct. > > >> +#endif >> >> #if defined(CONFIG_SYS_SPL_MALLOC_START) >> mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START, >> @@ -361,6 +400,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, >> (void >> *)CONFIG_SYS_SPL_ARGS_ADDR); > > > > > Best regards, > > Lukasz Majewski > > -- > > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot