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