[U-Boot] multichannel mmc strangeness on omap

Steve Sakoman steve at sakoman.com
Mon Jul 30 15:36:24 CEST 2012


Does anyone have any experience enabling the second or third mmc
channels in u-boot on an omap3 board?

I used the feature successfully a couple of years ago on Overo, but of
course there have been many changes in the mmc code since then.

Here's what I tried for overo with the current head of tree:

diff --git a/board/overo/overo.c b/board/overo/overo.c
index f973870..51315b3 100644
--- a/board/overo/overo.c
+++ b/board/overo/overo.c
@@ -404,6 +404,7 @@ int board_eth_init(bd_t *bis)
 int board_mmc_init(bd_t *bis)
 {
 	omap_mmc_init(0, 0, 0);
+	omap_mmc_init(2, 0, 0);
 	return 0;
 }
 #endif

The result is a hang after printing: MMC: OMAP SD/MMC 0,  SD/MMC 1

After adding a few printf's, it seems that the crash/hang is occurring
when calling env_relocate_spec in env_nand.c, which of course is
completely unrelated code!

Just for grins I tried enabling the second mmc channel instead (i.e
change omap_mmc_init(2, 0, 0) to omap_mmc_init(1, 0, 0)).

This worked as expected.  I also tried enabling all three, which
resulted in the same crash.  So enabling the third mmc channel seems
to be the issue.

Before I start debugging I thought I would check to see if anyone else
has seen this or has any theories as to why it is happening.

Steve


More information about the U-Boot mailing list