Michael Cashwell <mboards <at> prograde.net> writes:

> 
> Greetings,
> 
> I've been fighting an odd problem with a custom OMAP4 board throwing MMC
errors.
> It seems that a 4-bit-wide uSD card on MMC1 works but an 8-bit-wide eMMC part
> on MMC2 has problems.
> 
> As sometimes happens, in trying to track down the problem the presence of a
> debugging printf() masked the error.
> 
> Just now I've finally gotten a good trace on this. In drivers/mmc/omap_hsmmc.c
> near line 380, if I have:
> 
>       writel(cmd->cmdarg, &mmc_base->arg);
>       writel((cmd->cmdidx << 24) | flags, &mmc_base->cmd);
> printf("%s :  <at>  %p cmd 0x%08x arg 0x%08x\n", __func__, mmc_base,
cmd->cmdidx, cmd->cmdarg);
> 
> With or without that printf() the code fails when I select MMC2 (eMMC):

<snip>

> If I instead put the printf() or a udelay(20) (anything less than
> 20 still failed) *between* the two writel() calls it works:

I had a similar problem with recent u-boot on OMAP 4430SDP board. With my
rather old MMC, I was unable to boot at all:

U-Boot SPL 2013.04 (May 10 2013 - 08:20:30)
OMAP4430 ES2.1
OMAP SD/MMC: 0
mmc_send_cmd : timeout: No status update
Card did not respond to voltage select!
spl: mmc init failed: err - -17
### ERROR ### Please RESET the board ###

With newer MMC, I can boot, but I see an error from u-boot:

mmc_send_cmd : timeout: No status update

Adding udelay to the place you mention fixes both problems.

 Tomi


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to