Hi Marek,

> On Jul 27, 2015, at 23:39 , Marek Vasut <ma...@denx.de> wrote:
> 
> 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 <ma...@denx.de>
> Cc: Dinh Nguyen <dingu...@opensource.altera.com>
> Cc: Pantelis Antoniou <pa...@antoniou-consulting.com>
> Cc: Tom Rini <tr...@konsulko.com>
> ---
> drivers/mmc/dw_mmc.c | 19 +++++++++++++++++--
> 1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 3fffa71..0f61f16 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -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);
> 
> -- 
> 2.1.4

Applied, thanks

— Pantelis

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to