]> git.sur5r.net Git - u-boot/commitdiff
mmc: sdhci: add timeout for data transfer
authorLei Wen <leiwen@marvell.com>
Sat, 8 Oct 2011 04:14:57 +0000 (04:14 +0000)
committerAndy Fleming <afleming@freescale.com>
Thu, 3 Nov 2011 07:14:59 +0000 (02:14 -0500)
Signed-off-by: Lei Wen <leiwen@marvell.com>
drivers/mmc/sdhci.c

index 31c738e9aff4fbe1dcde3306c7060b326ef713c6..77a9e708d07af7ac1cc793e62085d5ae286316f0 100644 (file)
@@ -81,8 +81,9 @@ static void sdhci_transfer_pio(struct sdhci_host *host, struct mmc_data *data)
 static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
                                unsigned int start_addr)
 {
-       unsigned int stat, rdy, mask, block = 0;
+       unsigned int stat, rdy, mask, timeout, block = 0;
 
+       timeout = 10000;
        rdy = SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_AVAIL;
        mask = SDHCI_DATA_AVAILABLE | SDHCI_SPACE_AVAILABLE;
        do {
@@ -108,6 +109,12 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
                        sdhci_writel(host, start_addr, SDHCI_DMA_ADDRESS);
                }
 #endif
+               if (timeout-- > 0)
+                       udelay(10);
+               else {
+                       printf("Transfer data timeout\n");
+                       return -1;
+               }
        } while (!(stat & SDHCI_INT_DATA_END));
        return 0;
 }