> From: Neil Armstrong <narmstr...@baylibre.com>
> Date: Tue, 10 Nov 2020 09:15:14 +0100
> 
> On 10/11/2020 08:50, Jaehoon Chung wrote:
> > EMMC_CFG register has a cfg_ddr bit(BIT[2]).
> > It needs to set when mmc is running to ddr mode.
> > Otherwise, its bit should be cleared.
> > CFG_DDR[2] - 1: DDR mode, 0: SDR mode
> > 
> > Signed-off-by: Jaehoon Chung <jh80.ch...@samsung.com>
> > ---
> >  arch/arm/include/asm/arch-meson/sd_emmc.h | 1 +
> >  drivers/mmc/meson_gx_mmc.c                | 5 +++++
> >  2 files changed, 6 insertions(+)
> > 
> > diff --git a/arch/arm/include/asm/arch-meson/sd_emmc.h 
> > b/arch/arm/include/asm/arch-meson/sd_emmc.h
> > index 1e9f8cf498b4..c2f77c7308ec 100644
> > --- a/arch/arm/include/asm/arch-meson/sd_emmc.h
> > +++ b/arch/arm/include/asm/arch-meson/sd_emmc.h
> > @@ -38,6 +38,7 @@
> >  #define   CFG_BUS_WIDTH_1          0
> >  #define   CFG_BUS_WIDTH_4          1
> >  #define   CFG_BUS_WIDTH_8          2
> > +#define   CFG_DDR_MODE                     BIT(2)
> >  #define   CFG_BL_LEN_MASK          GENMASK(7, 4)
> >  #define   CFG_BL_LEN_SHIFT         4
> >  #define   CFG_BL_LEN_512           (9 << 4)
> > diff --git a/drivers/mmc/meson_gx_mmc.c b/drivers/mmc/meson_gx_mmc.c
> > index 7c60e0566560..6fcf6c2ced27 100644
> > --- a/drivers/mmc/meson_gx_mmc.c
> > +++ b/drivers/mmc/meson_gx_mmc.c
> > @@ -90,6 +90,11 @@ static int meson_dm_mmc_set_ios(struct udevice *dev)
> >     else
> >             return -EINVAL;
> >  
> > +   if (mmc->ddr_mode)
> > +           meson_mmc_cfg |= CFG_DDR_MODE;
> > +   else
> > +           meson_mmc_cfg &= ~CFG_DDR_MODE;
> > +
> >     /* 512 bytes block length */
> >     meson_mmc_cfg &= ~CFG_BL_LEN_MASK;
> >     meson_mmc_cfg |= CFG_BL_LEN_512;
> > 
> 
> Interesting, how did it work without this bit ?

Well, in meson_mmc_probe() we have:

        cfg->host_caps = MMC_MODE_8BIT | MMC_MODE_4BIT |
                        MMC_MODE_HS_52MHz | MMC_MODE_HS;

So the driver doesn't advertise DDR support.

Reply via email to