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)
|
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(®s->sysctl, SYSCTL_RSTA);
|
esdhc_setbits32(®s->sysctl, SYSCTL_RSTA);
|
||||||
|
|
||||||
/* Wait until the controller is available */
|
/* Wait until the controller is available */
|
||||||
while ((esdhc_read32(®s->sysctl) & SYSCTL_RSTA) && --timeout)
|
start = get_timer(0);
|
||||||
udelay(1000);
|
while ((esdhc_read32(®s->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…
Reference in New Issue
Block a user