[U-Boot] [PATCH 4/6] mmc: Continue polling MMC card for OCR only if it is still not ready
Pantelis Antoniou
pantelis.antoniou at gmail.com
Tue May 5 11:09:20 CEST 2015
Hi Andrew,
> On Mar 19, 2015, at 14:44 , Andrew Gabbasov <andrew_gabbasov at 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 at 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.
More information about the U-Boot
mailing list