mmc: core: retry CMD1 in mmc_send_op_cond() even if the ocr = 0
According to eMMC specification v5.1 section 6.4.3, we should issue CMD1 repeatedly in the idle state until the eMMC is ready even if the mmc_attach_mmc() calls this function with ocr = 0. Otherwise some eMMC devices seems to enter the inactive mode after mmc_init_card() issued CMD0 when the eMMC device is busy. Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
71c733c4e1
commit
4c94cb651f
|
@ -184,11 +184,7 @@ int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* if we're just probing, do a single pass */
|
/* wait until reset completes */
|
||||||
if (ocr == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* otherwise wait until reset completes */
|
|
||||||
if (mmc_host_is_spi(host)) {
|
if (mmc_host_is_spi(host)) {
|
||||||
if (!(cmd.resp[0] & R1_SPI_IDLE))
|
if (!(cmd.resp[0] & R1_SPI_IDLE))
|
||||||
break;
|
break;
|
||||||
|
@ -200,6 +196,16 @@ int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
|
||||||
err = -ETIMEDOUT;
|
err = -ETIMEDOUT;
|
||||||
|
|
||||||
mmc_delay(10);
|
mmc_delay(10);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to eMMC specification v5.1 section 6.4.3, we
|
||||||
|
* should issue CMD1 repeatedly in the idle state until
|
||||||
|
* the eMMC is ready. Otherwise some eMMC devices seem to enter
|
||||||
|
* the inactive mode after mmc_init_card() issued CMD0 when
|
||||||
|
* the eMMC device is busy.
|
||||||
|
*/
|
||||||
|
if (!ocr && !mmc_host_is_spi(host))
|
||||||
|
cmd.arg = cmd.resp[0] | BIT(30);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rocr && !mmc_host_is_spi(host))
|
if (rocr && !mmc_host_is_spi(host))
|
||||||
|
|
Loading…
Reference in New Issue