提交 d9dbb97b 编写于 作者: M Marek Vasut 提交者: Pantelis Antoniou

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: NMarek Vasut <marex@denx.de>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Tom Rini <trini@konsulko.com>
上级 603b2f3a
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册