[U-Boot] "No status update" errors in OMAP mmc_send_cmd()
Tomi Valkeinen
tomi.valkeinen at ti.com
Fri May 10 08:51:53 CEST 2013
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
More information about the U-Boot
mailing list