Hi Andrew,

> On Mar 19, 2015, at 14:44 , Andrew Gabbasov <andrew_gabba...@mentor.com> 
> wrote:
> 
> Starting part of device initialization sets the init_in_progress flag
> only if the MMC card did not yet come to ready state and needs to continue
> polling. If the card is SD or if the MMC card became ready quickly,
> the flag is not set and (if using pre-initialization) the starting
> phase will be re-executed from mmc_init function.
> 
> Set the init_in_progress flag in all non-error cases. Also, move flags
> setting statements around so that the flags are not set in error paths.
> Also, IN_PROGRESS return status becomes unnecessary, so get rid of it.
> 
> Signed-off-by: Andrew Gabbasov <andrew_gabba...@mentor.com>
> ---
> drivers/mmc/mmc.c | 16 ++++++++--------
> include/mmc.h     |  3 +--
> 2 files changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index b81533c..31f8647 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -387,7 +387,6 @@ static int mmc_send_op_cond(struct mmc *mmc)
>       mmc_go_idle(mmc);
> 
>       /* Asking to the card its capabilities */
> -     mmc->op_cond_pending = 1;
>       for (i = 0; i < 2; i++) {
>               err = mmc_send_op_cond_iter(mmc, i != 0);
>               if (err)
> @@ -395,9 +394,10 @@ static int mmc_send_op_cond(struct mmc *mmc)
> 
>               /* exit if not busy (flag seems to be inverted) */
>               if (mmc->ocr & OCR_BUSY)
> -                     return 0;
> +                     break;
>       }
> -     return IN_PROGRESS;
> +     mmc->op_cond_pending = 1;
> +     return 0;
> }
> 
> static int mmc_complete_op_cond(struct mmc *mmc)
> @@ -1627,7 +1627,7 @@ int mmc_start_init(struct mmc *mmc)
>       if (err == TIMEOUT) {
>               err = mmc_send_op_cond(mmc);
> 
> -             if (err && err != IN_PROGRESS) {
> +             if (err) {
> #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
>                       printf("Card did not respond to voltage select!\n");
> #endif
> @@ -1635,7 +1635,7 @@ int mmc_start_init(struct mmc *mmc)
>               }
>       }
> 
> -     if (err == IN_PROGRESS)
> +     if (!err)
>               mmc->init_in_progress = 1;
> 
>       return err;
> @@ -1645,6 +1645,7 @@ static int mmc_complete_init(struct mmc *mmc)
> {
>       int err = 0;
> 
> +     mmc->init_in_progress = 0;
>       if (mmc->op_cond_pending)
>               err = mmc_complete_op_cond(mmc);
> 
> @@ -1654,13 +1655,12 @@ static int mmc_complete_init(struct mmc *mmc)
>               mmc->has_init = 0;
>       else
>               mmc->has_init = 1;
> -     mmc->init_in_progress = 0;
>       return err;
> }
> 
> int mmc_init(struct mmc *mmc)
> {
> -     int err = IN_PROGRESS;
> +     int err = 0;
>       unsigned start;
> 
>       if (mmc->has_init)
> @@ -1671,7 +1671,7 @@ int mmc_init(struct mmc *mmc)
>       if (!mmc->init_in_progress)
>               err = mmc_start_init(mmc);
> 
> -     if (!err || err == IN_PROGRESS)
> +     if (!err)
>               err = mmc_complete_init(mmc);
>       debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
>       return err;
> diff --git a/include/mmc.h b/include/mmc.h
> index 644e3fa..fbcbe35 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -70,8 +70,7 @@
> #define UNUSABLE_ERR          -17 /* Unusable Card */
> #define COMM_ERR              -18 /* Communications Error */
> #define TIMEOUT                       -19
> -#define IN_PROGRESS          -20 /* operation is in progress */
> -#define SWITCH_ERR           -21 /* Card reports failure to switch mode */
> +#define SWITCH_ERR           -20 /* Card reports failure to switch mode */
> 
> #define MMC_CMD_GO_IDLE_STATE         0
> #define MMC_CMD_SEND_OP_COND          1
> -- 
> 2.1.0

Thanks, Applied.

— Pantelis

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

Reply via email to