Hi Jaehoon, > -----Original Message----- > From: Jaehoon Chung <jh80.ch...@samsung.com> > Sent: Tuesday, August 25, 2020 6:54 AM > To: Y.b. Lu <yangbo...@nxp.com>; u-boot@lists.denx.de; Peng Fan > <peng....@nxp.com>; Priyanka Jain <priyanka.j...@nxp.com> > Subject: Re: [v3, 06/11] mmc: add a mmc_hs400_prepare_ddr() interface > > On 7/23/20 1:30 PM, Yangbo Lu wrote: > > Add a mmc_hs400_prepare_ddr() interface for controllers > > which needs preparation before switching to DDR mode for > > HS400 mode. > > > > Signed-off-by: Yangbo Lu <yangbo...@nxp.com> > > --- > > Changes for v2: > > - None. > > Changes for v3: > > - None. > > --- > > drivers/mmc/mmc-uclass.c | 15 +++++++++++++++ > > drivers/mmc/mmc.c | 2 ++ > > include/mmc.h | 15 ++++++++++++++- > > 3 files changed, 31 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c > > index b9f0880..240b205 100644 > > --- a/drivers/mmc/mmc-uclass.c > > +++ b/drivers/mmc/mmc-uclass.c > > @@ -141,6 +141,21 @@ int mmc_set_enhanced_strobe(struct mmc *mmc) > > } > > #endif > > > > +int dm_mmc_hs400_prepare_ddr(struct udevice *dev) > > +{ > > + struct dm_mmc_ops *ops = mmc_get_ops(dev); > > + > > + if (ops->hs400_prepare_ddr) > > + return ops->hs400_prepare_ddr(dev); > > + > > + return 0; > > +} > > + > > +int mmc_hs400_prepare_ddr(struct mmc *mmc) > > +{ > > + return dm_mmc_hs400_prepare_ddr(mmc->dev); > > +} > > + > > int dm_mmc_host_power_cycle(struct udevice *dev) > > { > > struct dm_mmc_ops *ops = mmc_get_ops(dev); > > diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c > > index f020a8e..935fa72 100644 > > --- a/drivers/mmc/mmc.c > > +++ b/drivers/mmc/mmc.c > > @@ -1992,6 +1992,8 @@ static int mmc_select_hs400(struct mmc *mmc) > > /* Set back to HS */ > > mmc_set_card_speed(mmc, MMC_HS, true); > > > > + mmc_hs400_prepare_ddr(mmc); > > not need to get the return value? you have defined > mmc_hs400_prepare_ddr() as int return type.
I will add returning checking. Thanks! > > Best Regards, > Jaehoon Chung > > > + > > err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, > EXT_CSD_BUS_WIDTH, > > EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_FLAG); > > if (err) > > diff --git a/include/mmc.h b/include/mmc.h > > index 2399cc2..659df75 100644 > > --- a/include/mmc.h > > +++ b/include/mmc.h > > @@ -513,6 +513,14 @@ struct dm_mmc_ops { > > * @return maximum number of blocks for this transfer > > */ > > int (*get_b_max)(struct udevice *dev, void *dst, lbaint_t blkcnt); > > + > > + /** > > + * hs400_prepare_ddr - prepare to switch to DDR mode > > + * > > + * @dev: Device to check > > + * @return 0 if success, -ve on error > > + */ > > + int (*hs400_prepare_ddr)(struct udevice *dev); > > }; > > > > #define mmc_get_ops(dev) ((struct dm_mmc_ops > *)(dev)->driver->ops) > > @@ -540,7 +548,7 @@ int mmc_host_power_cycle(struct mmc *mmc); > > int mmc_deferred_probe(struct mmc *mmc); > > int mmc_reinit(struct mmc *mmc); > > int mmc_get_b_max(struct mmc *mmc, void *dst, lbaint_t blkcnt); > > - > > +int mmc_hs400_prepare_ddr(struct mmc *mmc); > > #else > > struct mmc_ops { > > int (*send_cmd)(struct mmc *mmc, > > @@ -552,6 +560,11 @@ struct mmc_ops { > > int (*host_power_cycle)(struct mmc *mmc); > > int (*get_b_max)(struct mmc *mmc, void *dst, lbaint_t blkcnt); > > }; > > + > > +static inline int mmc_hs400_prepare_ddr(struct mmc *mmc) > > +{ > > + return 0; > > +} > > #endif > > > > struct mmc_config { > >