
U-Boot README recommends initializing SDRAM in board_init_f(). DA850 was doing it as part of board_init_r() (through call to spl_board_init() which calls arch_cpu_init() which calls da850_ddr_setup())
This worked fine till commit 15b8c7505819 ("davinci: da850evm/omapl138-lcdk: Move BSS to SDRAM because SRAM is full") moved BSS to SDRAM.
Functions like mmc_initialize() called in board_init_r() assume BSS is available. Since SDRAM was not initialized when arch/arm/lib/crt0.S tried to initialize BSS to 0, BSS is not initialized correctly.
Fix this by simply calling arch_cpu_init() from board_init_f(). Since the README recommends calling preloader_console_init() from spl_board_init(), we keep it as-it-is.
Tested using MMC/SD boot on OMAP-L138 LCDK board.
Signed-off-by: Sekhar Nori nsekhar@ti.com --- arch/arm/mach-davinci/spl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-davinci/spl.c b/arch/arm/mach-davinci/spl.c index 103639e34757..117b5ee836f8 100644 --- a/arch/arm/mach-davinci/spl.c +++ b/arch/arm/mach-davinci/spl.c @@ -33,10 +33,14 @@ void putc(char c)
void spl_board_init(void) { - arch_cpu_init(); preloader_console_init(); }
+void board_init_f(ulong dummy) +{ + arch_cpu_init(); +} + u32 spl_boot_device(void) { switch (davinci_syscfg_regs->bootcfg) {