mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
mmc: dw_mmc: Zap endless timeout
Endless timeouts are bad, since if we get stuck in one, we have no way out. Zap this one by implementing proper timeout. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Dinh Nguyen <dinguyen@opensource.altera.com> Cc: Pantelis Antoniou <panto@antoniou-consulting.com> Cc: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
603b2f3a74
commit
d9dbb97be0
1 changed files with 17 additions and 2 deletions
|
@ -211,14 +211,29 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
|
|||
}
|
||||
|
||||
if (data) {
|
||||
do {
|
||||
start = get_timer(0);
|
||||
timeout = 1000;
|
||||
for (;;) {
|
||||
mask = dwmci_readl(host, DWMCI_RINTSTS);
|
||||
/* Error during data transfer. */
|
||||
if (mask & (DWMCI_DATA_ERR | DWMCI_DATA_TOUT)) {
|
||||
printf("%s: DATA ERROR!\n", __func__);
|
||||
bounce_buffer_stop(&bbstate);
|
||||
return -1;
|
||||
}
|
||||
} while (!(mask & DWMCI_INTMSK_DTO));
|
||||
|
||||
/* Data arrived correctly. */
|
||||
if (mask & DWMCI_INTMSK_DTO)
|
||||
break;
|
||||
|
||||
/* Check for timeout. */
|
||||
if (get_timer(start) > timeout) {
|
||||
printf("%s: Timeout waiting for data!\n",
|
||||
__func__);
|
||||
bounce_buffer_stop(&bbstate);
|
||||
return TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
dwmci_writel(host, DWMCI_RINTSTS, mask);
|
||||
|
||||
|
|
Loading…
Reference in a new issue