Hi Andrew,

> On Mar 19, 2015, at 14:44 , Andrew Gabbasov <andrew_gabba...@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_gabba...@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.

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to