All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
@ 2014-08-15  3:28 Chuanxiao Dong
  2014-08-15  8:34 ` Ulf Hansson
  0 siblings, 1 reply; 6+ messages in thread
From: Chuanxiao Dong @ 2014-08-15  3:28 UTC (permalink / raw)
  To: linux-mmc, ulf.hansson, chris

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 <chuanxiao.dong@intel.com>
Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>
---
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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
  2014-08-15  3:28 [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device Chuanxiao Dong
@ 2014-08-15  8:34 ` Ulf Hansson
  2014-08-15  8:36   ` Dong, Chuanxiao
  0 siblings, 1 reply; 6+ messages in thread
From: Ulf Hansson @ 2014-08-15  8:34 UTC (permalink / raw)
  To: Chuanxiao Dong; +Cc: linux-mmc, chris

On 15 August 2014 05:28, Chuanxiao Dong <chuanxiao.dong@intel.com> 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 <chuanxiao.dong@intel.com>
> Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>

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.

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
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
  2014-08-15  8:34 ` Ulf Hansson
@ 2014-08-15  8:36   ` Dong, Chuanxiao
  2014-09-02 15:31     ` Jean-Michel Hautbois
  0 siblings, 1 reply; 6+ messages in thread
From: Dong, Chuanxiao @ 2014-08-15  8:36 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc, chris



> -----Original Message-----
> From: Ulf Hansson [mailto:ulf.hansson@linaro.org]
> Sent: Friday, August 15, 2014 4:34 PM
> To: Dong, Chuanxiao
> Cc: linux-mmc; chris@printf.org
> 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 <chuanxiao.dong@intel.com>
> 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 <chuanxiao.dong@intel.com>
> > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>
> 
> 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
> >

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
  2014-08-15  8:36   ` Dong, Chuanxiao
@ 2014-09-02 15:31     ` Jean-Michel Hautbois
  2014-09-03  7:21       ` Ulf Hansson
  0 siblings, 1 reply; 6+ messages in thread
From: Jean-Michel Hautbois @ 2014-09-02 15:31 UTC (permalink / raw)
  To: Dong, Chuanxiao; +Cc: Ulf Hansson, linux-mmc, chris

2014-08-15 10:36 GMT+02:00 Dong, Chuanxiao <chuanxiao.dong@intel.com>:
>
>
>> -----Original Message-----
>> From: Ulf Hansson [mailto:ulf.hansson@linaro.org]
>> Sent: Friday, August 15, 2014 4:34 PM
>> To: Dong, Chuanxiao
>> Cc: linux-mmc; chris@printf.org
>> 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 <chuanxiao.dong@intel.com>
>> 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 <chuanxiao.dong@intel.com>
>> > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>
>>
>> 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.

This patch associated with vqmmc-supply and vmmc-supply in the DT is
working for me too on i.MX6.
JM

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
  2014-09-02 15:31     ` Jean-Michel Hautbois
@ 2014-09-03  7:21       ` Ulf Hansson
  2014-09-03  7:23         ` Dong, Chuanxiao
  0 siblings, 1 reply; 6+ messages in thread
From: Ulf Hansson @ 2014-09-03  7:21 UTC (permalink / raw)
  To: Jean-Michel Hautbois, Dong, Chuanxiao; +Cc: linux-mmc, chris

On 2 September 2014 17:31, Jean-Michel Hautbois <jhautbois@gmail.com> wrote:
> 2014-08-15 10:36 GMT+02:00 Dong, Chuanxiao <chuanxiao.dong@intel.com>:
>>
>>
>>> -----Original Message-----
>>> From: Ulf Hansson [mailto:ulf.hansson@linaro.org]
>>> Sent: Friday, August 15, 2014 4:34 PM
>>> To: Dong, Chuanxiao
>>> Cc: linux-mmc; chris@printf.org
>>> 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 <chuanxiao.dong@intel.com>
>>> 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 <chuanxiao.dong@intel.com>
>>> > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>
>>>
>>> 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.
>
> This patch associated with vqmmc-supply and vmmc-supply in the DT is
> working for me too on i.MX6.
> JM

Thanks! Applied for next.

I took the liberty of updating the commit msg header to "mmc: core:
Fix sequence for I/O voltage in DDR mode for eMMC", to get a better
description of the patch.

I also added a tested by tag from "JM".

Please tell me if you have any concern with my changes.

Kind regards
Uffe

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device
  2014-09-03  7:21       ` Ulf Hansson
@ 2014-09-03  7:23         ` Dong, Chuanxiao
  0 siblings, 0 replies; 6+ messages in thread
From: Dong, Chuanxiao @ 2014-09-03  7:23 UTC (permalink / raw)
  To: Ulf Hansson, Jean-Michel Hautbois; +Cc: linux-mmc, chris



> -----Original Message-----
> From: linux-mmc-owner@vger.kernel.org
> [mailto:linux-mmc-owner@vger.kernel.org] On Behalf Of Ulf Hansson
> Sent: Wednesday, September 03, 2014 3:21 PM
> To: Jean-Michel Hautbois; Dong, Chuanxiao
> Cc: linux-mmc; chris@printf.org
> Subject: Re: [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and
> device
> 
> On 2 September 2014 17:31, Jean-Michel Hautbois <jhautbois@gmail.com>
> wrote:
> > 2014-08-15 10:36 GMT+02:00 Dong, Chuanxiao
> <chuanxiao.dong@intel.com>:
> >>
> >>
> >>> -----Original Message-----
> >>> From: Ulf Hansson [mailto:ulf.hansson@linaro.org]
> >>> Sent: Friday, August 15, 2014 4:34 PM
> >>> To: Dong, Chuanxiao
> >>> Cc: linux-mmc; chris@printf.org
> >>> 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 <chuanxiao.dong@intel.com>
> >>> 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 <chuanxiao.dong@intel.com>
> >>> > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com>
> >>>
> >>> 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.
> >
> > This patch associated with vqmmc-supply and vmmc-supply in the DT is
> > working for me too on i.MX6.
> > JM
> 
> Thanks! Applied for next.
> 
> I took the liberty of updating the commit msg header to "mmc: core:
> Fix sequence for I/O voltage in DDR mode for eMMC", to get a better
> description of the patch.
> 
> I also added a tested by tag from "JM".
> 
> Please tell me if you have any concern with my changes.
No concern from my side.

Thanks JM for testing this patch, and also thanks Ulf for making this patch better :)

Thanks
Chuanxiao

> 
> Kind regards
> Uffe
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body
> of a message to majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-09-03  7:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-15  3:28 [PATCH v3] mmc: core: try 1.8v signling in ddr mode if host and device Chuanxiao Dong
2014-08-15  8:34 ` Ulf Hansson
2014-08-15  8:36   ` Dong, Chuanxiao
2014-09-02 15:31     ` Jean-Michel Hautbois
2014-09-03  7:21       ` Ulf Hansson
2014-09-03  7:23         ` Dong, Chuanxiao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.