Skip to content
Snippets Groups Projects
Commit d9dbb97b authored by Marek Vasut's avatar Marek Vasut Committed by Pantelis Antoniou
Browse files

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: default avatarMarek Vasut <marex@denx.de>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Tom Rini <trini@konsulko.com>
parent 603b2f3a
No related branches found
No related tags found
No related merge requests found
...@@ -211,14 +211,29 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, ...@@ -211,14 +211,29 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
} }
if (data) { if (data) {
do { start = get_timer(0);
timeout = 1000;
for (;;) {
mask = dwmci_readl(host, DWMCI_RINTSTS); mask = dwmci_readl(host, DWMCI_RINTSTS);
/* Error during data transfer. */
if (mask & (DWMCI_DATA_ERR | DWMCI_DATA_TOUT)) { if (mask & (DWMCI_DATA_ERR | DWMCI_DATA_TOUT)) {
printf("%s: DATA ERROR!\n", __func__); printf("%s: DATA ERROR!\n", __func__);
bounce_buffer_stop(&bbstate); bounce_buffer_stop(&bbstate);
return -1; 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); dwmci_writel(host, DWMCI_RINTSTS, mask);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment