
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 ravibabu@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.
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_board_prepare_for_linux(); jump_to_image_linux(&spl_image, (voidspl_fixup_fdt();
*)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: wd@denx.de