On 11/14/2016 03:50 AM, Hans de Goede wrote: > Hi, > > On 04-11-16 16:18, Maxime Ripard wrote: >> Some eMMC will fail at the first switch, but would succeed in a subsequent >> one. >> >> Make sure we try several times to cover those cases. The number of retries >> (and the behaviour) is currently what is being used in Linux. >> >> Signed-off-by: Maxime Ripard <maxime.rip...@free-electrons.com> > > LGTM: > > Reviewed-by: Hans de Goede <hdego...@redhat.com> > > Pantelis or Tom, can you pick this up please ?
Applied on u-boot-mmc. Thanks! Best Regards, Jaehoon Chung > > Regards, > > Hans > > >> --- >> drivers/mmc/mmc.c | 15 +++++++++++---- >> 1 file changed, 11 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c >> index 4380c7c195a6..d6b7e4f510c9 100644 >> --- a/drivers/mmc/mmc.c >> +++ b/drivers/mmc/mmc.c >> @@ -494,6 +494,7 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 >> value) >> { >> struct mmc_cmd cmd; >> int timeout = 1000; >> + int retries = 3; >> int ret; >> >> cmd.cmdidx = MMC_CMD_SWITCH; >> @@ -502,11 +503,17 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 >> value) >> (index << 16) | >> (value << 8); >> >> - ret = mmc_send_cmd(mmc, &cmd, NULL); >> + while (retries > 0) { >> + ret = mmc_send_cmd(mmc, &cmd, NULL); >> >> - /* Waiting for the ready status */ >> - if (!ret) >> - ret = mmc_send_status(mmc, timeout); >> + /* Waiting for the ready status */ >> + if (!ret) { >> + ret = mmc_send_status(mmc, timeout); >> + return ret; >> + } >> + >> + retries--; >> + } >> >> return ret; >> >> > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot