Hi Baruch, On 11/06/2018 14:26, Baruch Siach wrote: > From: Jon Nettleton <j...@solid-run.com> > > This code is useful for testing the existance of devices that > do not have card detect capabilities. This breaks out the core > functionality and leaves the actual init logic and error reporting > in mmc_start_init(). > > Signed-off-by: Jon Nettleton <j...@solid-run.com> > Signed-off-by: Baruch Siach <bar...@tkos.co.il> > --- > drivers/mmc/mmc.c | 61 +++++++++++++++++++++++++++-------------------- > include/mmc.h | 10 ++++++++ > 2 files changed, 45 insertions(+), 26 deletions(-) > > diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c > index f7827f527aa5..ad429f49c992 100644 > --- a/drivers/mmc/mmc.c > +++ b/drivers/mmc/mmc.c > @@ -2491,36 +2491,11 @@ static int mmc_power_cycle(struct mmc *mmc) > return mmc_power_on(mmc); > } > > -int mmc_start_init(struct mmc *mmc) > +int mmc_get_op_cond(struct mmc *mmc) > { > - bool no_card; > bool uhs_en = supports_uhs(mmc->cfg->host_caps); > int err; > > - /* > - * all hosts are capable of 1 bit bus-width and able to use the legacy > - * timings. > - */ > - mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) | > - MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT; > - > -#if !defined(CONFIG_MMC_BROKEN_CD) > - /* we pretend there's no card when init is NULL */ > - no_card = mmc_getcd(mmc) == 0; > -#else > - no_card = 0; > -#endif > -#if !CONFIG_IS_ENABLED(DM_MMC) > - no_card = no_card || (mmc->cfg->ops->init == NULL); > -#endif > - if (no_card) { > - mmc->has_init = 0; > -#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) > - pr_err("MMC: no card present\n"); > -#endif > - return -ENOMEDIUM; > - } > - > if (mmc->has_init) > return 0; > > @@ -2597,6 +2572,40 @@ retry: > } > } > > + return err; > +} > + > +int mmc_start_init(struct mmc *mmc) > +{ > + bool no_card; > + int err = 0; > + > + /* > + * all hosts are capable of 1 bit bus-width and able to use the legacy > + * timings. > + */ > + mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) | > + MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT; > + > +#if !defined(CONFIG_MMC_BROKEN_CD) > + /* we pretend there's no card when init is NULL */ > + no_card = mmc_getcd(mmc) == 0; > +#else > + no_card = 0; > +#endif > +#if !CONFIG_IS_ENABLED(DM_MMC) > + no_card = no_card || (mmc->cfg->ops->init == NULL); > +#endif > + if (no_card) { > + mmc->has_init = 0; > +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) > + pr_err("MMC: no card present\n"); > +#endif > + return -ENOMEDIUM; > + } > + > + err = mmc_get_op_cond(mmc); > + > if (!err) > mmc->init_in_progress = 1; > > diff --git a/include/mmc.h b/include/mmc.h > index 1729292d27bd..df4255b828a7 100644 > --- a/include/mmc.h > +++ b/include/mmc.h > @@ -752,6 +752,16 @@ int mmc_rpmb_write(struct mmc *mmc, void *addr, unsigned > short blk, > int mmc_set_bkops_enable(struct mmc *mmc); > #endif > > +/** > + * Start device initialization and return immediately; it does not block on > + * polling OCR (operation condition register) status. Useful for checking > + * the presence of SD/eMMC when no card detect logic is available. > + * > + * @param mmc Pointer to a MMC device struct > + * @return 0 on success, <0 on error. > + */ > +int mmc_get_op_cond(struct mmc *mmc); > + > /** > * Start device initialization and return immediately; it does not block on > * polling OCR (operation condition register) status. Then you should call >
Reviewed-by: Stefano Babic <sba...@denx.de> Anyway, this is related to MMC subsystem. I added Jaehoon in CC for his review / ACK. I will hold on the series (related to i.MX) until then. Best regards, Stefano Babic -- ===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de ===================================================================== _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot