> -----Original Message-----
> From: Ulf Hansson [mailto:[email protected]]
> Sent: Friday, August 15, 2014 4:34 PM
> To: Dong, Chuanxiao
> Cc: linux-mmc; [email protected]
> Subject: Re: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and
> device
>
> On 15 August 2014 05:28, Chuanxiao Dong <[email protected]>
> wrote:
> > Even (e)MMC card can support 3.3v to 1.2v vccq in DDR, but not all
> > host controller can support this, like some of the SDHCI host which
> > connect to an eMMC device. Some of these host controller still needs
> > to use 1.8v vccq for supporting DDR mode.
> >
> > So the sequence will be:
> > if (host and device can both support 1.2v IO)
> > use 1.2v IO;
> > else if (host and device can both support 1.8v IO)
> > use 1.8v IO;
> > so if host and device can only support 3.3v IO, this is the last choice.
> >
> > Signed-off-by: Chuanxiao Dong <[email protected]>
> > Signed-off-by: Yunpeng Gao <[email protected]>
>
> This looks good to me! But before I queue it for 3.18 I would appreciate if we
> could get some help in testing this for some various platforms, that support
> MMC DDR.
Thanks a lot. BTW, this patch is already tested on Intel's platform which can
support MMC DDR.
Thanks
Chuanxiao
>
> Kind regards
> Uffe
>
> > ---
> > Changelog V2:
> > - For (e)MMC device switching to DDR mode, try 1.2v singaling first.
> Then
> > try 1.8v. If 1.2v and 1.8v are both not supported, use the
> > default
> >
> > Changelog V3:
> > - continue to try 1.8v/3.3v vccq if there is IO voltage switching
> > failure
> >
> > drivers/mmc/core/mmc.c | 34 +++++++++++++++++++++++++---------
> > 1 file changed, 25 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
> > 793c6f7..8d69671 100644
> > --- a/drivers/mmc/core/mmc.c
> > +++ b/drivers/mmc/core/mmc.c
> > @@ -988,19 +988,35 @@ static int mmc_select_hs_ddr(struct mmc_card
> *card)
> > * 1.8V vccq at 3.3V core voltage (vcc) is not required
> > * in the JEDEC spec for DDR.
> > *
> > - * Do not force change in vccq since we are obviously
> > - * working and no change to vccq is needed.
> > + * Even (e)MMC card can support 3.3v to 1.2v vccq, but not all
> > + * host controller can support this, like some of the SDHCI
> > + * controller which connect to an eMMC device. Some of these
> > + * host controller still needs to use 1.8v vccq for supporting
> > + * DDR mode.
> > + *
> > + * So the sequence will be:
> > + * if (host and device can both support 1.2v IO)
> > + * use 1.2v IO;
> > + * else if (host and device can both support 1.8v IO)
> > + * use 1.8v IO;
> > + * so if host and device can only support 3.3v IO, this is the
> > + * last choice.
> > *
> > * WARNING: eMMC rules are NOT the same as SD DDR
> > */
> > - if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
> > - err = __mmc_set_signal_voltage(host,
> > - MMC_SIGNAL_VOLTAGE_120);
> > - if (err)
> > - return err;
> > - }
> > + err = -EINVAL;
> > + if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_2V)
> > + err = __mmc_set_signal_voltage(host,
> > + MMC_SIGNAL_VOLTAGE_120);
> >
> > - mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
> > + if (err && (card->mmc_avail_type &
> EXT_CSD_CARD_TYPE_DDR_1_8V))
> > + err = __mmc_set_signal_voltage(host,
> > + MMC_SIGNAL_VOLTAGE_180);
> > +
> > + /* make sure vccq is 3.3v after switching disaster */
> > + if (err)
> > + err = __mmc_set_signal_voltage(host,
> > + MMC_SIGNAL_VOLTAGE_330);
> > +
> > + if (!err)
> > + mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
> >
> > return err;
> > }
> > --
> > 1.7.10.4
> >
N�����r��y����b�X��ǧv�^�){.n�+����{��g"��^n�r���z���h�����&���G���h�(�階�ݢj"���m������z�ޖ���f���h���~�m�