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>
This commit is contained in:
parent
446e077a21
commit
201e828b22
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user