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>
master
Simon Glass 7 years ago committed by Jaehoon Chung
parent 446e077a21
commit 201e828b22
  1. 9
      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) static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
{ {
struct fsl_esdhc *regs = priv->esdhc_regs; struct fsl_esdhc *regs = priv->esdhc_regs;
int timeout = 1000; ulong start;
/* Reset the entire host controller */ /* Reset the entire host controller */
esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA); esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA);
/* Wait until the controller is available */ /* Wait until the controller is available */
while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA) && --timeout) start = get_timer(0);
udelay(1000); while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA)) {
if (get_timer(start) > 1000)
return -ETIMEDOUT;
}
#if defined(CONFIG_FSL_USDHC) #if defined(CONFIG_FSL_USDHC)
/* RSTA doesn't reset MMC_BOOT register, so manually reset it */ /* RSTA doesn't reset MMC_BOOT register, so manually reset it */

Loading…
Cancel
Save