[v3, 06/11] mmc: add a mmc_hs400_prepare_ddr() interface
Jaehoon Chung
jh80.chung at samsung.com
Tue Aug 25 00:54:28 CEST 2020
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.lu at 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.
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 {
>
More information about the U-Boot
mailing list