
Hi Andrew,
On Mar 19, 2015, at 14:44 , Andrew Gabbasov andrew_gabbasov@mentor.com wrote:
Some MMC cards come to ready state quite quickly, so that the respective flag appears to be set in mmc_send_op_cond already. In this case trying to continue polling the card with CMD1 in mmc_complete_op_cond is incorrect and may lead to unpredictable results. So check the flag before polling and skip it appropriately.
Signed-off-by: Andrew Gabbasov andrew_gabbasov@mentor.com
drivers/mmc/mmc.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index d073d79..42af47c 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -403,15 +403,17 @@ static int mmc_complete_op_cond(struct mmc *mmc) int err;
mmc->op_cond_pending = 0;
- start = get_timer(0);
- do {
err = mmc_send_op_cond_iter(mmc, 1);
if (err)
return err;
if (get_timer(start) > timeout)
return UNUSABLE_ERR;
udelay(100);
- } while (!(mmc->ocr & OCR_BUSY));
if (!(mmc->ocr & OCR_BUSY)) {
start = get_timer(0);
do {
err = mmc_send_op_cond_iter(mmc, 1);
if (err)
return err;
if (get_timer(start) > timeout)
return UNUSABLE_ERR;
udelay(100);
} while (!(mmc->ocr & OCR_BUSY));
}
if (mmc_host_is_spi(mmc)) { /* read OCR for spi */ cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
-- 2.1.0
Thanks, Applied.
— Pantelis
PS. Peng, I’m picking up this instead of your patch.