mmc: bcm2835-host: Fix wait_transfer_complete
[oweals/u-boot.git] / drivers / mmc / bcm2835_sdhost.c
index 1ce019af579fb5b1e06bb04ac816733678bb51cf..7f70acaf3996082ced9c41c3867a586c22e60f41 100644 (file)
@@ -234,7 +234,7 @@ static void bcm2835_reset_internal(struct bcm2835_host *host)
 
 static int bcm2835_wait_transfer_complete(struct bcm2835_host *host)
 {
-       int timediff = 0;
+       ulong tstart_ms = get_timer(0);
 
        while (1) {
                u32 edm, fsm;
@@ -254,11 +254,13 @@ static int bcm2835_wait_transfer_complete(struct bcm2835_host *host)
                        break;
                }
 
-               /* Error out after 100000 register reads (~1s) */
-               if (timediff++ == 100000) {
+               /* Error out after ~1s */
+               ulong tlapse_ms = get_timer(tstart_ms);
+               if ( tlapse_ms > 1000 /* ms */ ) {
+
                        dev_err(host->dev,
-                               "wait_transfer_complete - still waiting after %d retries\n",
-                               timediff);
+                               "wait_transfer_complete - still waiting after %lu ms\n",
+                               tlapse_ms);
                        bcm2835_dumpregs(host);
                        return -ETIMEDOUT;
                }