Since esdhc_reset() can fail it should return an error code. Update this
and also adjust the timeout mechanism to use get_timer(), which is a more
common approach.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v2: None

 drivers/mmc/fsl_esdhc.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index c3a1f31d37..f975c425d2 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -698,18 +698,23 @@ static int esdhc_getcd_common(struct fsl_esdhc_priv *priv)
        return timeout > 0;
 }
 
-static void esdhc_reset(struct fsl_esdhc *regs)
+static int esdhc_reset(struct fsl_esdhc *regs)
 {
-       unsigned long timeout = 100; /* wait max 100 ms */
+       ulong start;
 
        /* reset the controller */
        esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA);
 
        /* hardware clears the bit when it is done */
-       while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA) && --timeout)
-               udelay(1000);
-       if (!timeout)
-               printf("MMC/SD: Reset never completed.\n");
+       start = get_timer(0);
+       while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA)) {
+               if (get_timer(start) > 100) {
+                       printf("MMC/SD: Reset never completed.\n");
+                       return -ETIMEDOUT;
+               }
+       }
+
+       return 0;
 }
 
 static int esdhc_getcd(struct mmc *mmc)
@@ -753,6 +758,7 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv)
        struct fsl_esdhc *regs;
        struct mmc *mmc;
        u32 caps, voltage_caps;
+       int ret;
 
        if (!priv)
                return -EINVAL;
@@ -760,7 +766,9 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv)
        regs = priv->esdhc_regs;
 
        /* First reset the eSDHC controller */
-       esdhc_reset(regs);
+       ret = esdhc_reset(regs);
+       if (ret)
+               return ret;
 
 #ifndef CONFIG_FSL_USDHC
        esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_HCKEN
-- 
2.14.0.rc0.400.g1c36432dff-goog

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

Reply via email to