[U-Boot] [PATCH 0/2] ARM: davinci: omapl138_lcdk: fix MMC/SD boot breakage.

Hi,
Here is a set of patches that fixes MMC/SD boot breakage introduced after 2018.09 release.
This was tested with MMC/SD boot on OMAP-L138 LCDK. I still need to do SPI and NAND boot on this board.
Thanks, Sekhar
Sekhar Nori (2): ARM: davinci: omal138_lcdk: fix MMC boot breakage due to driver model conversion ARM: davinci: SPL: fix BSS initialization
arch/arm/mach-davinci/spl.c | 6 +++++- board/davinci/da8xxevm/omapl138_lcdk.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-)

commit 21af33ed0319 ("ARM: davinci: omapl138_lcdk: Enable DM_MMC") wanted to enable DM_MMC only for U-Boot and not for SPL.
But CONFIG_DM_MMC is defined for SPL build too. Because of this MMC device was not getting registered for SPL causing MMC/SD boot breakage.
Instead use CONFIG_IS_ENABLED(DM_MMC) which will remain false until CONFIG_SPL_DM_MMC is defined.
Signed-off-by: Sekhar Nori nsekhar@ti.com --- board/davinci/da8xxevm/omapl138_lcdk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 2c2f885d43e4..fe1bf4410145 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -353,7 +353,7 @@ int misc_init_r(void) return 0; }
-#ifndef CONFIG_DM_MMC +#if !CONFIG_IS_ENABLED(DM_MMC) #ifdef CONFIG_MMC_DAVINCI static struct davinci_mmc mmc_sd0 = { .reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE,

On Tue, 2019-05-21 at 20:39 +0530, Sekhar Nori wrote:
commit 21af33ed0319 ("ARM: davinci: omapl138_lcdk: Enable DM_MMC") wanted to enable DM_MMC only for U-Boot and not for SPL.
But CONFIG_DM_MMC is defined for SPL build too. Because of this MMC device was not getting registered for SPL causing MMC/SD boot breakage.
Instead use CONFIG_IS_ENABLED(DM_MMC) which will remain false until CONFIG_SPL_DM_MMC is defined.
Signed-off-by: Sekhar Nori nsekhar@ti.com
Tested-by: Peter Howard phoward@gme.net.au
board/davinci/da8xxevm/omapl138_lcdk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 2c2f885d43e4..fe1bf4410145 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -353,7 +353,7 @@ int misc_init_r(void) return 0; }
-#ifndef CONFIG_DM_MMC +#if !CONFIG_IS_ENABLED(DM_MMC) #ifdef CONFIG_MMC_DAVINCI static struct davinci_mmc mmc_sd0 = { .reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE,

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) {

On Tue, May 21, 2019 at 10:09 AM Sekhar Nori nsekhar@ti.com wrote:
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.
The README also states preloader_console_init() can get called from board_init_f(). Doing this enables for debugging of board_init_r
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();
What about a reference to board_early_init_f()? Looking at other boards, it appears that we should call that here. Both the LCDK and da850 evm have the function enabled to configure the DSP.
adam
+}
u32 spl_boot_device(void) { switch (davinci_syscfg_regs->bootcfg) { -- 2.16.2

On 21/05/19 9:01 PM, Adam Ford wrote:
On Tue, May 21, 2019 at 10:09 AM Sekhar Nori nsekhar@ti.com wrote:
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.
The README also states preloader_console_init() can get called from board_init_f(). Doing this enables for debugging of board_init_r
Okay, I can change it. spl_board_init() will be empty so I will turn off CONFIG_SPL_BOARD_INIT also.
I was put off by README saying "preloader_console_init() can be called here in extremis" which I meant as saying it should be rare to do that.
Debugging board_init_r() should be pretty useful, so perhaps the wording there should be more easy.
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();
What about a reference to board_early_init_f()? Looking at other boards, it appears that we should call that here. Both the LCDK and da850 evm have the function enabled to configure the DSP.
This is only needed at U-Boot stage, right? Looks like it will be called because CONFIG_BOARD_EARLY_INIT_F is enabled.
Thanks, Sekhar

On Fri, May 24, 2019 at 5:10 AM Sekhar Nori nsekhar@ti.com wrote:
On 21/05/19 9:01 PM, Adam Ford wrote:
On Tue, May 21, 2019 at 10:09 AM Sekhar Nori nsekhar@ti.com wrote:
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.
The README also states preloader_console_init() can get called from board_init_f(). Doing this enables for debugging of board_init_r
Okay, I can change it. spl_board_init() will be empty so I will turn off CONFIG_SPL_BOARD_INIT also.
I was put off by README saying "preloader_console_init() can be called here in extremis" which I meant as saying it should be rare to do that.
Debugging board_init_r() should be pretty useful, so perhaps the wording there should be more easy.
At least for the da850evm which uses the device tree, you'll need to call spl_early_init() before the preloader_console_init() in order for the UART to work correctly and debug board_init_r.
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();
What about a reference to board_early_init_f()? Looking at other boards, it appears that we should call that here. Both the LCDK and da850 evm have the function enabled to configure the DSP.
This is only needed at U-Boot stage, right? Looks like it will be called because CONFIG_BOARD_EARLY_INIT_F is enabled.
That is my understanding.
Thanks for being flexible on this. Sorry I broke the lcdk, but I'm willing to help modernize it as well (ie, help support SPL_OF_CONTROL) if someone can get me a board. The general trend is to try and support these newer DM functions and remove the old legacy code functions.
adam
Thanks, Sekhar

On 24/05/19 6:51 PM, Adam Ford wrote:
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();
What about a reference to board_early_init_f()? Looking at other boards, it appears that we should call that here. Both the LCDK and da850 evm have the function enabled to configure the DSP.
This is only needed at U-Boot stage, right? Looks like it will be called because CONFIG_BOARD_EARLY_INIT_F is enabled.
That is my understanding.
Alright, so I wont do anything about board_early_init_f() in this series.
Thanks for being flexible on this. Sorry I broke the lcdk, but I'm willing to help modernize it as well (ie, help support SPL_OF_CONTROL) if someone can get me a board. The general trend is to try and
Sure, working on getting a board!
support these newer DM functions and remove the old legacy code functions.
A lot of modernization of DA850 support has been due to your attention on the EVM. Its much appreciated :)
Regards, Sekhar

On Tue, 2019-05-21 at 20:39 +0530, Sekhar Nori wrote:
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
Tested-by: Peter Howard phoward@gme.net.au
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) {

Hi Sekhar
On Tue, 2019-05-21 at 20:39 +0530, Sekhar Nori wrote:
Hi,
Here is a set of patches that fixes MMC/SD boot breakage introduced after 2018.09 release.
This was tested with MMC/SD boot on OMAP-L138 LCDK. I still need to do SPI and NAND boot on this board.
I have tested NAND boot with the two patches and it seems to work fine. I can confirm MMC boot (at least on the original LCDK)
The original LCDK didn't have SPI NAND - has that changed with the latest board?
Thanks, Sekhar
Sekhar Nori (2): ARM: davinci: omal138_lcdk: fix MMC boot breakage due to driver model conversion ARM: davinci: SPL: fix BSS initialization
arch/arm/mach-davinci/spl.c | 6 +++++- board/davinci/da8xxevm/omapl138_lcdk.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-)

On 22/05/19 5:07 AM, Peter Howard wrote:
Hi Sekhar
On Tue, 2019-05-21 at 20:39 +0530, Sekhar Nori wrote:
Hi,
Here is a set of patches that fixes MMC/SD boot breakage introduced after 2018.09 release.
This was tested with MMC/SD boot on OMAP-L138 LCDK. I still need to do SPI and NAND boot on this board.
I have tested NAND boot with the two patches and it seems to work fine. I can confirm MMC boot (at least on the original LCDK)
The original LCDK didn't have SPI NAND - has that changed with the latest board?
Just checked - nope, no SPI flash on LCDK. I was speaking from (wrong) memory there!
Thanks for the testing!
Thanks, Sekhar
participants (3)
-
Adam Ford
-
Peter Howard
-
Sekhar Nori