
On Friday, September 11, 2015 at 09:59:32 AM, Alexey Brodkin wrote:
Hi Marek,
Hi!
On Mon, 2015-07-27 at 22:39 +-0200, Marek Vasut wrote: +AD4- Endless timeouts are bad, since if we get stuck in one, we have no +AD4- way out. Zap this one by implementing proper timeout. +AD4- +AD4- Signed-off-by: Marek Vasut +ADw-marex+AEA-denx.de+AD4- +AD4- Cc: Dinh Nguyen +ADw-dinguyen+AEA-opensource.altera.com+AD4- +AD4- Cc: Pantelis Antoniou +ADw-panto+AEA-antoniou-consulting.com+AD4- +AD4- Cc: Tom Rini +ADw-trini+AEA-konsulko.com+AD4- +AD4- --- +AD4- drivers/mmc/dw+AF8-mmc.c +AHw- 19 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--- +AD4- 1 file changed, 17 insertions(+-), 2 deletions(-) +AD4- +AD4- diff --git a/drivers/mmc/dw+AF8-mmc.c b/drivers/mmc/dw+AF8-mmc.c +AD4- index 3fffa71..0f61f16 100644 +AD4- --- a/drivers/mmc/dw+AF8-mmc.c +AD4- +-+-+- b/drivers/mmc/dw+AF8-mmc.c +AD4- +AEAAQA- -211,14 +-211,29 +AEAAQA- static int dwmci+AF8-send+AF8-cmd(struct mmc +ACo-mmc, struct mmc+AF8-cmd +ACo-cmd, +AD4- +AH0- +AD4- +AD4- if (data) +AHs- +AD4- - do +AHs- +AD4- +- start +AD0- get+AF8-timer(0)+ADs- +AD4- +- timeout +AD0- 1000+ADs- +AD4- +- for (+ADsAOw-) +AHs- +AD4- mask +AD0- dwmci+AF8-readl(host, DWMCI+AF8-
RINTSTS)+ADs-
+AD4- +- /+ACo- Error during data transfer. +ACo-/ +AD4- if (mask +ACY- (DWMCI+AF8-DATA+AF8-ERR +AHw- DWMCI+AF8-DATA+AF8-TOUT)) +AHs- +AD4-
printf(+ACIAJQ-s: DATA
ERROR+ACEAXA-n+ACI-, +AF8AXw-func+AF8AXw-)+ADs- +AD4- bounce+AF8-buffer+AF8-stop(+ACY-bbstate)+ADs- +AD4- return -1+ADs- +AD4- +AH0- +AD4- - +AH0- while (+ACE-(mask +ACY- DWMCI+AF8-INTMSK+AF8-
DTO))+ADs-
+AD4- +- +AD4- +- /+ACo- Data arrived correctly. +ACo-/ +AD4- +- if (mask +ACY- DWMCI+AF8-INTMSK+AF8-DTO) +AD4- +- break+ADs- +AD4- +- +AD4- +- /+ACo- Check for timeout. +ACo-/ +AD4- +- if (get+AF8-timer(start) +AD4- timeout) +AHs- +AD4- +- printf(+ACIAJQ-s: Timeout waiting for
data+ACEAXA-n+ACI-,
+AD4- +- +AF8AXw-func+AF8AXw-)+ADs- +AD4- +- bounce+AF8-buffer+AF8-stop(+ACY-
bbstate)+ADs-
+AD4- +- return TIMEOUT+ADs- +AD4- +- +AH0- +AD4- +- +AH0- +AD4- +AD4- dwmci+AF8-writel(host, DWMCI+AF8-RINTSTS, mask)+ADs- +AD4-
btw Is your mailer totally broken by any chance ?
It turned out that patch breaks functionality in some cases. For me on every attempt to download something significant (at least I see it on 5/7 Mb files) from SD I'm seeing timeout firing too early.
I added a bit of extra instrumentation to see where time is spent and why.
Check this patch:
[PATCH 1/2] mmc: dw_mmc: Increase timeout to 20 seconds
https://patchwork.ozlabs.org/patch/511899/
Does it fix things for you ?
[...]