diff mbox

[U-Boot] OMAP MMC: Add delay before waiting for status

Message ID 1324547795-19678-1-git-send-email-schnitzeltony@gmx.de
State Rejected
Delegated to: Tom Rini
Headers show

Commit Message

Andreas Müller Dec. 22, 2011, 9:56 a.m. UTC
Loading kernel from MMC created the following error message reproducable:

| reading uImage
| mmc_send_cmd: timedout waiting for stat!
|
| 2860468 bytes read

Tested on overo with OMAP3530:
* OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
  Die ID #470e000400000000040398d31402100c
* OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 600 mHz
  Die ID #112000040000000004035c140101b011

Signed-off-by: Andreas Müller <schnitzeltony@gmx.de>
---
 drivers/mmc/omap_hsmmc.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Tom Rini Jan. 3, 2012, 8:15 p.m. UTC | #1
On Thu, Dec 22, 2011 at 2:56 AM, Andreas Müller <schnitzeltony@gmx.de> wrote:
> Loading kernel from MMC created the following error message reproducable:
>
> | reading uImage
> | mmc_send_cmd: timedout waiting for stat!
> |
> | 2860468 bytes read
>
> Tested on overo with OMAP3530:
> * OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
>  Die ID #470e000400000000040398d31402100c
> * OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 600 mHz
>  Die ID #112000040000000004035c140101b011
>
> Signed-off-by: Andreas Müller <schnitzeltony@gmx.de>

OK, I'm going to NAK this as-is.  Over at
https://lists.yoctoproject.org/pipermail/meta-ti/2012-January/000316.html
Andreas has provided more details about what he saw (thread is about
someone else who hit this problem on a beagleboard xM).  I've done a
bit more poking at the other MMC drivers and it seems that the "send
the mmc command" function has anywhere from a 10ms timeout (sdhci.c)
to 1ms (omap, fsl).

Now, digging more, I see that the kernel sets the mmc timeout to 20ms
and has since the driver went in, so this is presumably a more safe
value to use.  I've updated the code to use that, have a more clear
comment and name (and some related cleanup) and I've sent some test
binaries to someone internally that's reported the problem.  I'll post
a patch and cc Andreas and Peter and see if this change also fixes the
problem (it really should, but lets be safe).

Thanks folks!
diff mbox

Patch

diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index c38b9e6..ac91e5d 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -197,6 +197,10 @@  static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	unsigned int flags, mmc_stat;
 	ulong start;
 
+	/* Delay added before checking the status */
+	if (cmd->cmdidx == MMC_CMD_SEND_STATUS)
+		udelay(1); /* wait 1 us */
+
 	start = get_timer(0);
 	while ((readl(&mmc_base->pstate) & DATI_MASK) == DATI_CMDDIS) {
 		if (get_timer(0) - start > MAX_RETRY_MS) {