diff options
author | Simon Glass <sjg@chromium.org> | 2017-07-29 11:35:20 -0600 |
---|---|---|
committer | Jaehoon Chung <jh80.chung@samsung.com> | 2017-08-17 16:44:17 +0900 |
commit | 201e828b22d79bafc7a68a93e1ade4b242a12325 (patch) | |
tree | 32507efa44df2e98f3b04d403846de3f821ed016 | |
parent | 446e077a21024edb3d8636a979a99abbcaec9846 (diff) | |
download | u-boot-201e828b22d79bafc7a68a93e1ade4b242a12325.zip u-boot-201e828b22d79bafc7a68a93e1ade4b242a12325.tar.gz u-boot-201e828b22d79bafc7a68a93e1ade4b242a12325.tar.bz2 |
dm: mmc: fsl_esdhc: Detect init failure
Since esdhc_init_common() 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 <sjg@chromium.org>
-rw-r--r-- | drivers/mmc/fsl_esdhc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 1e1e92d..abb1f1e 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -621,14 +621,17 @@ static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc) static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc) { struct fsl_esdhc *regs = priv->esdhc_regs; - int timeout = 1000; + ulong start; /* Reset the entire host controller */ esdhc_setbits32(®s->sysctl, SYSCTL_RSTA); /* Wait until the controller is available */ - while ((esdhc_read32(®s->sysctl) & SYSCTL_RSTA) && --timeout) - udelay(1000); + start = get_timer(0); + while ((esdhc_read32(®s->sysctl) & SYSCTL_RSTA)) { + if (get_timer(start) > 1000) + return -ETIMEDOUT; + } #if defined(CONFIG_FSL_USDHC) /* RSTA doesn't reset MMC_BOOT register, so manually reset it */ |