* [PATCH v1 1/1] mmc: core: fix power class selection
@ 2012-04-03 6:55 Subhash Jadavani
2012-04-03 7:19 ` Girish K S
2012-04-03 15:24 ` Saugata Das
0 siblings, 2 replies; 11+ messages in thread
From: Subhash Jadavani @ 2012-04-03 6:55 UTC (permalink / raw)
To: linux-mmc; +Cc: linux-arm-msm, girish.shivananjappa, Subhash Jadavani
mmc_select_powerclass() function returns error if eMMC
VDD level supported by host is between 2.7v to 3.2v.
According to eMMC specification, valid voltage for high
voltage cards is 2.7v to 3.6v. This patch ensures that
2.7v to 3.6v VDD range is treated as valid range.
Also, failure to set the power class shouldn't be treated
as fatal error because even if setting the power class
fails, card can still work in default power class.
If mmc_select_powerclass() returns error, just print
the warning message and go ahead with rest of the card
initialization.
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
---
drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
1 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 02914d6..54df5ad 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct mmc_card *card,
else if (host->ios.clock <= 200000000)
index = EXT_CSD_PWR_CL_200_195;
break;
+ case MMC_VDD_27_28:
+ case MMC_VDD_28_29:
+ case MMC_VDD_29_30:
+ case MMC_VDD_30_31:
+ case MMC_VDD_31_32:
case MMC_VDD_32_33:
case MMC_VDD_33_34:
case MMC_VDD_34_35:
@@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
err = mmc_select_powerclass(card, ext_csd_bits, ext_csd);
- if (err) {
- pr_err("%s: power class selection to bus width %d failed\n",
- mmc_hostname(card->host), 1 << bus_width);
- goto err;
- }
+ if (err)
+ pr_warning("%s: power class selection to bus width %d"
+ " failed\n", mmc_hostname(card->host),
+ 1 << bus_width);
}
/*
@@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
err = mmc_select_powerclass(card, ext_csd_bits[idx][0],
ext_csd);
if (err)
- pr_err("%s: power class selection to "
- "bus width %d failed\n",
- mmc_hostname(card->host),
- 1 << bus_width);
+ pr_warning("%s: power class selection to "
+ "bus width %d failed\n",
+ mmc_hostname(card->host),
+ 1 << bus_width);
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
EXT_CSD_BUS_WIDTH,
@@ -1178,10 +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
err = mmc_select_powerclass(card, ext_csd_bits[idx][1],
ext_csd);
if (err)
- pr_err("%s: power class selection to "
- "bus width %d ddr %d failed\n",
- mmc_hostname(card->host),
- 1 << bus_width, ddr);
+ pr_warning("%s: power class selection to "
+ "bus width %d ddr %d failed\n",
+ mmc_hostname(card->host),
+ 1 << bus_width, ddr);
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
EXT_CSD_BUS_WIDTH,
--
1.7.1.1
--
Sent by a consultant of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 6:55 [PATCH v1 1/1] mmc: core: fix power class selection Subhash Jadavani
@ 2012-04-03 7:19 ` Girish K S
2012-04-03 8:06 ` Namjae Jeon
2012-04-03 15:24 ` Saugata Das
1 sibling, 1 reply; 11+ messages in thread
From: Girish K S @ 2012-04-03 7:19 UTC (permalink / raw)
To: Subhash Jadavani; +Cc: linux-mmc, linux-arm-msm
On 3 April 2012 15:55, Subhash Jadavani <subhashj@codeaurora.org> wrote:
> mmc_select_powerclass() function returns error if eMMC
> VDD level supported by host is between 2.7v to 3.2v.
>
> According to eMMC specification, valid voltage for high
> voltage cards is 2.7v to 3.6v. This patch ensures that
> 2.7v to 3.6v VDD range is treated as valid range.
>
> Also, failure to set the power class shouldn't be treated
> as fatal error because even if setting the power class
> fails, card can still work in default power class.
> If mmc_select_powerclass() returns error, just print
> the warning message and go ahead with rest of the card
> initialization.
>
> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
> ---
> drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
> 1 files changed, 17 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> index 02914d6..54df5ad 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct mmc_card *card,
> else if (host->ios.clock <= 200000000)
> index = EXT_CSD_PWR_CL_200_195;
> break;
> + case MMC_VDD_27_28:
> + case MMC_VDD_28_29:
> + case MMC_VDD_29_30:
> + case MMC_VDD_30_31:
> + case MMC_VDD_31_32:
> case MMC_VDD_32_33:
> case MMC_VDD_33_34:
> case MMC_VDD_34_35:
> @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
> EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
> err = mmc_select_powerclass(card, ext_csd_bits, ext_csd);
> - if (err) {
> - pr_err("%s: power class selection to bus width %d failed\n",
> - mmc_hostname(card->host), 1 << bus_width);
> - goto err;
> - }
> + if (err)
> + pr_warning("%s: power class selection to bus width %d"
> + " failed\n", mmc_hostname(card->host),
> + 1 << bus_width);
> }
>
> /*
> @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> err = mmc_select_powerclass(card, ext_csd_bits[idx][0],
> ext_csd);
> if (err)
> - pr_err("%s: power class selection to "
> - "bus width %d failed\n",
> - mmc_hostname(card->host),
> - 1 << bus_width);
> + pr_warning("%s: power class selection to "
> + "bus width %d failed\n",
> + mmc_hostname(card->host),
> + 1 << bus_width);
>
> err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> EXT_CSD_BUS_WIDTH,
> @@ -1178,10 +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> err = mmc_select_powerclass(card, ext_csd_bits[idx][1],
> ext_csd);
> if (err)
> - pr_err("%s: power class selection to "
> - "bus width %d ddr %d failed\n",
> - mmc_hostname(card->host),
> - 1 << bus_width, ddr);
> + pr_warning("%s: power class selection to "
> + "bus width %d ddr %d failed\n",
> + mmc_hostname(card->host),
> + 1 << bus_width, ddr);
>
> err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> EXT_CSD_BUS_WIDTH,
looks good to me
Acked By: Girish K S <girish.shivananjappa@linaro.org>
> --
> 1.7.1.1
>
> --
> Sent by a consultant of the Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 7:19 ` Girish K S
@ 2012-04-03 8:06 ` Namjae Jeon
2012-04-03 11:32 ` Chris Ball
0 siblings, 1 reply; 11+ messages in thread
From: Namjae Jeon @ 2012-04-03 8:06 UTC (permalink / raw)
To: Subhash Jadavani, cjb; +Cc: linux-mmc, linux-arm-msm, Girish K S
2012/4/3 Girish K S <girish.shivananjappa@linaro.org>:
> On 3 April 2012 15:55, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>> mmc_select_powerclass() function returns error if eMMC
>> VDD level supported by host is between 2.7v to 3.2v.
>>
>> According to eMMC specification, valid voltage for high
>> voltage cards is 2.7v to 3.6v. This patch ensures that
>> 2.7v to 3.6v VDD range is treated as valid range.
>>
>> Also, failure to set the power class shouldn't be treated
>> as fatal error because even if setting the power class
>> fails, card can still work in default power class.
>> If mmc_select_powerclass() returns error, just print
>> the warning message and go ahead with rest of the card
>> initialization.
>>
>> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
> looks good to me
> Acked By: Girish K S <girish.shivananjappa@linaro.org>
I double checked with specification. this patch make good sense.
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Thanks
>> --
>> 1.7.1.1
>>
>> --
>> Sent by a consultant of the Qualcomm Innovation Center, Inc.
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
> --
> 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] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 8:06 ` Namjae Jeon
@ 2012-04-03 11:32 ` Chris Ball
0 siblings, 0 replies; 11+ messages in thread
From: Chris Ball @ 2012-04-03 11:32 UTC (permalink / raw)
To: Namjae Jeon; +Cc: Subhash Jadavani, linux-mmc, linux-arm-msm, Girish K S
Hi,
On Tue, Apr 03 2012, Namjae Jeon wrote:
> 2012/4/3 Girish K S <girish.shivananjappa@linaro.org>:
>> On 3 April 2012 15:55, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>>> mmc_select_powerclass() function returns error if eMMC
>>> VDD level supported by host is between 2.7v to 3.2v.
>>>
>>> According to eMMC specification, valid voltage for high
>>> voltage cards is 2.7v to 3.6v. This patch ensures that
>>> 2.7v to 3.6v VDD range is treated as valid range.
>>>
>>> Also, failure to set the power class shouldn't be treated
>>> as fatal error because even if setting the power class
>>> fails, card can still work in default power class.
>>> If mmc_select_powerclass() returns error, just print
>>> the warning message and go ahead with rest of the card
>>> initialization.
>>>
>>> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
>> looks good to me
>> Acked By: Girish K S <girish.shivananjappa@linaro.org>
>
> I double checked with specification. this patch make good sense.
> Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Thanks, pushed to mmc-next for 3.4.
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 6:55 [PATCH v1 1/1] mmc: core: fix power class selection Subhash Jadavani
2012-04-03 7:19 ` Girish K S
@ 2012-04-03 15:24 ` Saugata Das
2012-04-03 15:50 ` Subhash Jadavani
1 sibling, 1 reply; 11+ messages in thread
From: Saugata Das @ 2012-04-03 15:24 UTC (permalink / raw)
To: Subhash Jadavani; +Cc: linux-mmc, linux-arm-msm, girish.shivananjappa
On 3 April 2012 12:25, Subhash Jadavani <subhashj@codeaurora.org> wrote:
> mmc_select_powerclass() function returns error if eMMC
> VDD level supported by host is between 2.7v to 3.2v.
>
> According to eMMC specification, valid voltage for high
> voltage cards is 2.7v to 3.6v. This patch ensures that
> 2.7v to 3.6v VDD range is treated as valid range.
>
> Also, failure to set the power class shouldn't be treated
> as fatal error because even if setting the power class
> fails, card can still work in default power class.
> If mmc_select_powerclass() returns error, just print
> the warning message and go ahead with rest of the card
> initialization.
>
Have you checked why mmc_select_powerclass returned error ? Today, in
the mmc_select_powerclass, it is just setting the value of power
class, which the eMMC expects. So, it should not fail.
Another point is that, today mmc_select_powerclass is assuming that
host can support the maximum possible power classes and it does not
check host controllers capability in driving higher current (mA). But
I think in future we need to add this check for host controller
ability and return error from mmc_select_powerclass so that
mmc_init_card can choose the next speed mode. From that perspective,
the approach to ignore the error return from mmc_select_powerclass
looks wrong.
> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
> ---
> drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
> 1 files changed, 17 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> index 02914d6..54df5ad 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct mmc_card *card,
> else if (host->ios.clock <= 200000000)
> index = EXT_CSD_PWR_CL_200_195;
> break;
> + case MMC_VDD_27_28:
> + case MMC_VDD_28_29:
> + case MMC_VDD_29_30:
> + case MMC_VDD_30_31:
> + case MMC_VDD_31_32:
> case MMC_VDD_32_33:
> case MMC_VDD_33_34:
> case MMC_VDD_34_35:
> @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
> EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
> err = mmc_select_powerclass(card, ext_csd_bits, ext_csd);
> - if (err) {
> - pr_err("%s: power class selection to bus width %d failed\n",
> - mmc_hostname(card->host), 1 << bus_width);
> - goto err;
> - }
> + if (err)
> + pr_warning("%s: power class selection to bus width %d"
> + " failed\n", mmc_hostname(card->host),
> + 1 << bus_width);
> }
>
> /*
> @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> err = mmc_select_powerclass(card, ext_csd_bits[idx][0],
> ext_csd);
> if (err)
> - pr_err("%s: power class selection to "
> - "bus width %d failed\n",
> - mmc_hostname(card->host),
> - 1 << bus_width);
> + pr_warning("%s: power class selection to "
> + "bus width %d failed\n",
> + mmc_hostname(card->host),
> + 1 << bus_width);
>
> err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> EXT_CSD_BUS_WIDTH,
> @@ -1178,10 +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> err = mmc_select_powerclass(card, ext_csd_bits[idx][1],
> ext_csd);
> if (err)
> - pr_err("%s: power class selection to "
> - "bus width %d ddr %d failed\n",
> - mmc_hostname(card->host),
> - 1 << bus_width, ddr);
> + pr_warning("%s: power class selection to "
> + "bus width %d ddr %d failed\n",
> + mmc_hostname(card->host),
> + 1 << bus_width, ddr);
>
> err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> EXT_CSD_BUS_WIDTH,
> --
> 1.7.1.1
>
> --
> Sent by a consultant of the Qualcomm Innovation Center, Inc.
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
> --
> 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] 11+ messages in thread
* RE: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 15:24 ` Saugata Das
@ 2012-04-03 15:50 ` Subhash Jadavani
2012-04-03 16:17 ` Saugata Das
0 siblings, 1 reply; 11+ messages in thread
From: Subhash Jadavani @ 2012-04-03 15:50 UTC (permalink / raw)
To: 'Saugata Das'; +Cc: linux-mmc, linux-arm-msm, girish.shivananjappa
> -----Original Message-----
> From: Saugata Das [mailto:saugata.das@linaro.org]
> Sent: Tuesday, April 03, 2012 8:55 PM
> To: Subhash Jadavani
> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
> girish.shivananjappa@linaro.org
> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
>
> On 3 April 2012 12:25, Subhash Jadavani <subhashj@codeaurora.org> wrote:
> > mmc_select_powerclass() function returns error if eMMC VDD level
> > supported by host is between 2.7v to 3.2v.
> >
> > According to eMMC specification, valid voltage for high voltage cards
> > is 2.7v to 3.6v. This patch ensures that 2.7v to 3.6v VDD range is
> > treated as valid range.
> >
> > Also, failure to set the power class shouldn't be treated as fatal
> > error because even if setting the power class fails, card can still
> > work in default power class.
> > If mmc_select_powerclass() returns error, just print the warning
> > message and go ahead with rest of the card initialization.
> >
>
> Have you checked why mmc_select_powerclass returned error ? Today, in
> the mmc_select_powerclass, it is just setting the value of power class,
which
> the eMMC expects. So, it should not fail.
>
> Another point is that, today mmc_select_powerclass is assuming that host
> can support the maximum possible power classes and it does not check host
> controllers capability in driving higher current (mA). But I think in
future we
> need to add this check for host controller ability and return error from
> mmc_select_powerclass so that mmc_init_card can choose the next speed
Agreed with this point.
> mode. From that perspective, the approach to ignore the error return from
> mmc_select_powerclass looks wrong.
My patch was just intended to fix the issue existing power class
implementation. As commit text says:
- don't consider 2.7v to 3.2v as invalid range
- We are already ignoring the error returned by
mmc_set_power_class() function for DS/HS/DDR cards. So this patch has
extended that to HS200 cards.
So as far as this patch is concerned, I don't see anything wrong here.
As you have mentioned, currently we are not taking the host controller
capability into account (as it doesn't exist as of now) so we should not see
mmc_select_powerclass() fail any time.
But yes, next thing should be to take into account the host current sourcing
capability before deciding which bus speed mode to choose. But that may be a
big change and should be as separate patch. Girish had already posted one
patch for this which needs to be extended to achieve this.
Regards,
Subhash
>
>
> > Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
> > ---
> > drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
> > 1 files changed, 17 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
> > 02914d6..54df5ad 100644
> > --- a/drivers/mmc/core/mmc.c
> > +++ b/drivers/mmc/core/mmc.c
> > @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct mmc_card
> > *card,
> > else if (host->ios.clock <= 200000000)
> > index = EXT_CSD_PWR_CL_200_195;
> > break;
> > + case MMC_VDD_27_28:
> > + case MMC_VDD_28_29:
> > + case MMC_VDD_29_30:
> > + case MMC_VDD_30_31:
> > + case MMC_VDD_31_32:
> > case MMC_VDD_32_33:
> > case MMC_VDD_33_34:
> > case MMC_VDD_34_35:
> > @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host
> > *host, u32 ocr,
> > ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
> > EXT_CSD_BUS_WIDTH_8 :
> > EXT_CSD_BUS_WIDTH_4;
> > err = mmc_select_powerclass(card, ext_csd_bits,
> > ext_csd);
> > - if (err) {
> > - pr_err("%s: power class selection to bus width
> > %d failed\n",
> > - mmc_hostname(card->host), 1 <<
> > bus_width);
> > - goto err;
> > - }
> > + if (err)
> > + pr_warning("%s: power class selection to bus
width %d"
> > + " failed\n",
> > + mmc_hostname(card->host),
> > + 1 << bus_width);
> > }
> >
> > /*
> > @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host
> > *host, u32 ocr,
> > err = mmc_select_powerclass(card,
> > ext_csd_bits[idx][0],
> > ext_csd);
> > if (err)
> > - pr_err("%s: power class selection to "
> > - "bus width %d failed\n",
> > - mmc_hostname(card->host),
> > - 1 << bus_width);
> > + pr_warning("%s: power class selection to
"
> > + "bus width %d failed\n",
> > + mmc_hostname(card->host),
> > + 1 << bus_width);
> >
> > err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> > EXT_CSD_BUS_WIDTH, @@ -1178,10
> > +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
> > err = mmc_select_powerclass(card,
> > ext_csd_bits[idx][1],
> > ext_csd);
> > if (err)
> > - pr_err("%s: power class selection to "
> > - "bus width %d ddr %d failed\n",
> > - mmc_hostname(card->host),
> > - 1 << bus_width, ddr);
> > + pr_warning("%s: power class selection to
"
> > + "bus width %d ddr %d
> > + failed\n",
> > + mmc_hostname(card->host),
> > + 1 << bus_width, ddr);
> >
> > err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> > EXT_CSD_BUS_WIDTH,
> > --
> > 1.7.1.1
> >
> > --
> > Sent by a consultant of the Qualcomm Innovation Center, Inc.
> > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum.
> > --
> > 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] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 15:50 ` Subhash Jadavani
@ 2012-04-03 16:17 ` Saugata Das
2012-04-03 16:44 ` Subhash Jadavani
0 siblings, 1 reply; 11+ messages in thread
From: Saugata Das @ 2012-04-03 16:17 UTC (permalink / raw)
To: Subhash Jadavani; +Cc: linux-mmc, linux-arm-msm, girish.shivananjappa
On 3 April 2012 21:20, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>
>
>> -----Original Message-----
>> From: Saugata Das [mailto:saugata.das@linaro.org]
>> Sent: Tuesday, April 03, 2012 8:55 PM
>> To: Subhash Jadavani
>> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
>> girish.shivananjappa@linaro.org
>> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
>>
>> On 3 April 2012 12:25, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>> > mmc_select_powerclass() function returns error if eMMC VDD level
>> > supported by host is between 2.7v to 3.2v.
>> >
>> > According to eMMC specification, valid voltage for high voltage cards
>> > is 2.7v to 3.6v. This patch ensures that 2.7v to 3.6v VDD range is
>> > treated as valid range.
>> >
>> > Also, failure to set the power class shouldn't be treated as fatal
>> > error because even if setting the power class fails, card can still
>> > work in default power class.
>> > If mmc_select_powerclass() returns error, just print the warning
>> > message and go ahead with rest of the card initialization.
>> >
>>
>> Have you checked why mmc_select_powerclass returned error ? Today, in
>> the mmc_select_powerclass, it is just setting the value of power class,
> which
>> the eMMC expects. So, it should not fail.
>>
>> Another point is that, today mmc_select_powerclass is assuming that host
>> can support the maximum possible power classes and it does not check host
>> controllers capability in driving higher current (mA). But I think in
> future we
>> need to add this check for host controller ability and return error from
>> mmc_select_powerclass so that mmc_init_card can choose the next speed
>
> Agreed with this point.
>
>> mode. From that perspective, the approach to ignore the error return from
>> mmc_select_powerclass looks wrong.
>
> My patch was just intended to fix the issue existing power class
> implementation. As commit text says:
> - don't consider 2.7v to 3.2v as invalid range
> - We are already ignoring the error returned by
> mmc_set_power_class() function for DS/HS/DDR cards. So this patch has
> extended that to HS200 cards.
>
> So as far as this patch is concerned, I don't see anything wrong here.
>
> As you have mentioned, currently we are not taking the host controller
> capability into account (as it doesn't exist as of now) so we should not see
> mmc_select_powerclass() fail any time.
This is actually the main concern. The fail of mmc_select_powerclass
is something to be checked and not ignored since it should not fail
under the current implementation.
> But yes, next thing should be to take into account the host current sourcing
> capability before deciding which bus speed mode to choose. But that may be a
> big change and should be as separate patch. Girish had already posted one
> patch for this which needs to be extended to achieve this.
>
> Regards,
> Subhash
>
>>
>>
>> > Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
>> > ---
>> > drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
>> > 1 files changed, 17 insertions(+), 13 deletions(-)
>> >
>> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
>> > 02914d6..54df5ad 100644
>> > --- a/drivers/mmc/core/mmc.c
>> > +++ b/drivers/mmc/core/mmc.c
>> > @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct mmc_card
>> > *card,
>> > else if (host->ios.clock <= 200000000)
>> > index = EXT_CSD_PWR_CL_200_195;
>> > break;
>> > + case MMC_VDD_27_28:
>> > + case MMC_VDD_28_29:
>> > + case MMC_VDD_29_30:
>> > + case MMC_VDD_30_31:
>> > + case MMC_VDD_31_32:
>> > case MMC_VDD_32_33:
>> > case MMC_VDD_33_34:
>> > case MMC_VDD_34_35:
>> > @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host
>> > *host, u32 ocr,
>> > ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
>> > EXT_CSD_BUS_WIDTH_8 :
>> > EXT_CSD_BUS_WIDTH_4;
>> > err = mmc_select_powerclass(card, ext_csd_bits,
>> > ext_csd);
>> > - if (err) {
>> > - pr_err("%s: power class selection to bus width
>> > %d failed\n",
>> > - mmc_hostname(card->host), 1 <<
>> > bus_width);
>> > - goto err;
>> > - }
>> > + if (err)
>> > + pr_warning("%s: power class selection to bus
> width %d"
>> > + " failed\n",
>> > + mmc_hostname(card->host),
>> > + 1 << bus_width);
>> > }
>> >
>> > /*
>> > @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host
>> > *host, u32 ocr,
>> > err = mmc_select_powerclass(card,
>> > ext_csd_bits[idx][0],
>> > ext_csd);
>> > if (err)
>> > - pr_err("%s: power class selection to "
>> > - "bus width %d failed\n",
>> > - mmc_hostname(card->host),
>> > - 1 << bus_width);
>> > + pr_warning("%s: power class selection to
> "
>> > + "bus width %d failed\n",
>> > + mmc_hostname(card->host),
>> > + 1 << bus_width);
>> >
>> > err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>> > EXT_CSD_BUS_WIDTH, @@ -1178,10
>> > +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
>> > err = mmc_select_powerclass(card,
>> > ext_csd_bits[idx][1],
>> > ext_csd);
>> > if (err)
>> > - pr_err("%s: power class selection to "
>> > - "bus width %d ddr %d failed\n",
>> > - mmc_hostname(card->host),
>> > - 1 << bus_width, ddr);
>> > + pr_warning("%s: power class selection to
> "
>> > + "bus width %d ddr %d
>> > + failed\n",
>> > + mmc_hostname(card->host),
>> > + 1 << bus_width, ddr);
>> >
>> > err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>> > EXT_CSD_BUS_WIDTH,
>> > --
>> > 1.7.1.1
>> >
>> > --
>> > Sent by a consultant of the Qualcomm Innovation Center, Inc.
>> > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
>> Forum.
>> > --
>> > 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] 11+ messages in thread
* RE: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 16:17 ` Saugata Das
@ 2012-04-03 16:44 ` Subhash Jadavani
2012-04-03 17:06 ` Luca Porzio (lporzio)
2012-04-03 18:48 ` Saugata Das
0 siblings, 2 replies; 11+ messages in thread
From: Subhash Jadavani @ 2012-04-03 16:44 UTC (permalink / raw)
To: 'Saugata Das'; +Cc: linux-mmc, linux-arm-msm, girish.shivananjappa
> -----Original Message-----
> From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-
> owner@vger.kernel.org] On Behalf Of Saugata Das
> Sent: Tuesday, April 03, 2012 9:48 PM
> To: Subhash Jadavani
> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
> girish.shivananjappa@linaro.org
> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
>
> On 3 April 2012 21:20, Subhash Jadavani <subhashj@codeaurora.org> wrote:
> >
> >
> >> -----Original Message-----
> >> From: Saugata Das [mailto:saugata.das@linaro.org]
> >> Sent: Tuesday, April 03, 2012 8:55 PM
> >> To: Subhash Jadavani
> >> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
> >> girish.shivananjappa@linaro.org
> >> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
> >>
> >> On 3 April 2012 12:25, Subhash Jadavani <subhashj@codeaurora.org>
> wrote:
> >> > mmc_select_powerclass() function returns error if eMMC VDD level
> >> > supported by host is between 2.7v to 3.2v.
> >> >
> >> > According to eMMC specification, valid voltage for high voltage
> >> > cards is 2.7v to 3.6v. This patch ensures that 2.7v to 3.6v VDD
> >> > range is treated as valid range.
> >> >
> >> > Also, failure to set the power class shouldn't be treated as fatal
> >> > error because even if setting the power class fails, card can still
> >> > work in default power class.
> >> > If mmc_select_powerclass() returns error, just print the warning
> >> > message and go ahead with rest of the card initialization.
> >> >
> >>
> >> Have you checked why mmc_select_powerclass returned error ? Today,
> in
> >> the mmc_select_powerclass, it is just setting the value of power
> >> class,
> > which
> >> the eMMC expects. So, it should not fail.
> >>
> >> Another point is that, today mmc_select_powerclass is assuming that
> >> host can support the maximum possible power classes and it does not
> >> check host controllers capability in driving higher current (mA). But
> >> I think in
> > future we
> >> need to add this check for host controller ability and return error
> >> from mmc_select_powerclass so that mmc_init_card can choose the next
> >> speed
> >
> > Agreed with this point.
> >
> >> mode. From that perspective, the approach to ignore the error return
> >> from mmc_select_powerclass looks wrong.
> >
> > My patch was just intended to fix the issue existing power class
> > implementation. As commit text says:
> > - don't consider 2.7v to 3.2v as invalid range
> > - We are already ignoring the error returned by
> > mmc_set_power_class() function for DS/HS/DDR cards. So this patch has
> > extended that to HS200 cards.
> >
> > So as far as this patch is concerned, I don't see anything wrong here.
> >
> > As you have mentioned, currently we are not taking the host controller
> > capability into account (as it doesn't exist as of now) so we should
> > not see
> > mmc_select_powerclass() fail any time.
>
> This is actually the main concern. The fail of mmc_select_powerclass is
> something to be checked and not ignored since it should not fail under the
> current implementation.
Yes, this makes sense. With current implementation, mmc_select_powerclass()
should never really fail which means failure should be treated as fatal and
we should really skip the card initialization.
This patch is already pushed to mmc-next. So I will post another patch (by
next week as I will be on vacation in this week) to skip the card
initialization if mmc_select_powerclass fails.
Is this ok?
Regards,
Subhash
>
>
> > But yes, next thing should be to take into account the host current
> > sourcing capability before deciding which bus speed mode to choose.
> > But that may be a big change and should be as separate patch. Girish
> > had already posted one patch for this which needs to be extended to
> achieve this.
> >
> > Regards,
> > Subhash
> >
> >>
> >>
> >> > Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
> >> > ---
> >> > drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
> >> > 1 files changed, 17 insertions(+), 13 deletions(-)
> >> >
> >> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
> >> > 02914d6..54df5ad 100644
> >> > --- a/drivers/mmc/core/mmc.c
> >> > +++ b/drivers/mmc/core/mmc.c
> >> > @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct
> >> > mmc_card *card,
> >> > else if (host->ios.clock <= 200000000)
> >> > index = EXT_CSD_PWR_CL_200_195;
> >> > break;
> >> > + case MMC_VDD_27_28:
> >> > + case MMC_VDD_28_29:
> >> > + case MMC_VDD_29_30:
> >> > + case MMC_VDD_30_31:
> >> > + case MMC_VDD_31_32:
> >> > case MMC_VDD_32_33:
> >> > case MMC_VDD_33_34:
> >> > case MMC_VDD_34_35:
> >> > @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host
> >> > *host, u32 ocr,
> >> > ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
> >> > EXT_CSD_BUS_WIDTH_8 :
> >> > EXT_CSD_BUS_WIDTH_4;
> >> > err = mmc_select_powerclass(card, ext_csd_bits,
> >> > ext_csd);
> >> > - if (err) {
> >> > - pr_err("%s: power class selection to bus
> >> > width %d failed\n",
> >> > - mmc_hostname(card->host), 1 <<
> >> > bus_width);
> >> > - goto err;
> >> > - }
> >> > + if (err)
> >> > + pr_warning("%s: power class selection to
> >> > + bus
> > width %d"
> >> > + " failed\n",
> >> > + mmc_hostname(card->host),
> >> > + 1 << bus_width);
> >> > }
> >> >
> >> > /*
> >> > @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host
> >> > *host, u32 ocr,
> >> > err = mmc_select_powerclass(card,
> >> > ext_csd_bits[idx][0],
> >> > ext_csd);
> >> > if (err)
> >> > - pr_err("%s: power class selection to
"
> >> > - "bus width %d failed\n",
> >> > - mmc_hostname(card->host),
> >> > - 1 << bus_width);
> >> > + pr_warning("%s: power class
> >> > + selection to
> > "
> >> > + "bus width %d failed\n",
> >> > +
> >> > + mmc_hostname(card->host),
> >> > + 1 << bus_width);
> >> >
> >> > err = mmc_switch(card,
> >> > EXT_CSD_CMD_SET_NORMAL,
> >> > EXT_CSD_BUS_WIDTH, @@
> >> > -1178,10
> >> > +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32
> >> > +ocr,
> >> > err = mmc_select_powerclass(card,
> >> > ext_csd_bits[idx][1],
> >> > ext_csd);
> >> > if (err)
> >> > - pr_err("%s: power class selection to
"
> >> > - "bus width %d ddr %d
> >> > failed\n",
> >> > - mmc_hostname(card->host),
> >> > - 1 << bus_width, ddr);
> >> > + pr_warning("%s: power class
> >> > + selection to
> > "
> >> > + "bus width %d ddr %d
> >> > + failed\n",
> >> > +
> >> > + mmc_hostname(card->host),
> >> > + 1 << bus_width, ddr);
> >> >
> >> > err = mmc_switch(card,
> >> > EXT_CSD_CMD_SET_NORMAL,
> >> > EXT_CSD_BUS_WIDTH,
> >> > --
> >> > 1.7.1.1
> >> >
> >> > --
> >> > Sent by a consultant of the Qualcomm Innovation Center, Inc.
> >> > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> >> Forum.
> >> > --
> >> > 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
> >
> --
> 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] 11+ messages in thread
* RE: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 16:44 ` Subhash Jadavani
@ 2012-04-03 17:06 ` Luca Porzio (lporzio)
2012-04-09 12:46 ` Subhash Jadavani
2012-04-03 18:48 ` Saugata Das
1 sibling, 1 reply; 11+ messages in thread
From: Luca Porzio (lporzio) @ 2012-04-03 17:06 UTC (permalink / raw)
To: Subhash Jadavani, 'Saugata Das'
Cc: linux-mmc@vger.kernel.org, linux-arm-msm@vger.kernel.org,
girish.shivananjappa@linaro.org, Danilo Caraccio (dcaracci)
Hi,
>
> Yes, this makes sense. With current implementation, mmc_select_powerclass()
> should never really fail which means failure should be treated as fatal and
> we should really skip the card initialization.
> This patch is already pushed to mmc-next. So I will post another patch (by
> next week as I will be on vacation in this week) to skip the card
> initialization if mmc_select_powerclass fails.
>
> Is this ok?
>
> Regards,
> Subhash
>
There was an error in the public JEDEC eMMC 4.5 version: PWR_CL_200_360 = EXT_CSD[237]
is wrongly defined because HS200 can be supported only @1.2V or 1.8V. New Jedec spec
revision might fix this.
I and Danilo did a quick check in the power class selection routines and it looks
like the power class is set according to the OCR parsing.
The OCR parsing to check the supported voltage range does not totally cover
the device capabilities because Vccq = 1.2V support is not encoded in the register.
If the above is true, this implies that indexes EXT_CSD_PWR_CL_200_360 will lead to an error.
DEVICE_TYPE = EXT_CSD[196] is more useful because it provides information on the
Speed Rate and Voltage Range supported by the device.
Cheers,
Luca
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 16:44 ` Subhash Jadavani
2012-04-03 17:06 ` Luca Porzio (lporzio)
@ 2012-04-03 18:48 ` Saugata Das
1 sibling, 0 replies; 11+ messages in thread
From: Saugata Das @ 2012-04-03 18:48 UTC (permalink / raw)
To: Subhash Jadavani; +Cc: linux-mmc, linux-arm-msm, girish.shivananjappa
On 3 April 2012 22:14, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>
>
>> -----Original Message-----
>> From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-
>> owner@vger.kernel.org] On Behalf Of Saugata Das
>> Sent: Tuesday, April 03, 2012 9:48 PM
>> To: Subhash Jadavani
>> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
>> girish.shivananjappa@linaro.org
>> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
>>
>> On 3 April 2012 21:20, Subhash Jadavani <subhashj@codeaurora.org> wrote:
>> >
>> >
>> >> -----Original Message-----
>> >> From: Saugata Das [mailto:saugata.das@linaro.org]
>> >> Sent: Tuesday, April 03, 2012 8:55 PM
>> >> To: Subhash Jadavani
>> >> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
>> >> girish.shivananjappa@linaro.org
>> >> Subject: Re: [PATCH v1 1/1] mmc: core: fix power class selection
>> >>
>> >> On 3 April 2012 12:25, Subhash Jadavani <subhashj@codeaurora.org>
>> wrote:
>> >> > mmc_select_powerclass() function returns error if eMMC VDD level
>> >> > supported by host is between 2.7v to 3.2v.
>> >> >
>> >> > According to eMMC specification, valid voltage for high voltage
>> >> > cards is 2.7v to 3.6v. This patch ensures that 2.7v to 3.6v VDD
>> >> > range is treated as valid range.
>> >> >
>> >> > Also, failure to set the power class shouldn't be treated as fatal
>> >> > error because even if setting the power class fails, card can still
>> >> > work in default power class.
>> >> > If mmc_select_powerclass() returns error, just print the warning
>> >> > message and go ahead with rest of the card initialization.
>> >> >
>> >>
>> >> Have you checked why mmc_select_powerclass returned error ? Today,
>> in
>> >> the mmc_select_powerclass, it is just setting the value of power
>> >> class,
>> > which
>> >> the eMMC expects. So, it should not fail.
>> >>
>> >> Another point is that, today mmc_select_powerclass is assuming that
>> >> host can support the maximum possible power classes and it does not
>> >> check host controllers capability in driving higher current (mA). But
>> >> I think in
>> > future we
>> >> need to add this check for host controller ability and return error
>> >> from mmc_select_powerclass so that mmc_init_card can choose the next
>> >> speed
>> >
>> > Agreed with this point.
>> >
>> >> mode. From that perspective, the approach to ignore the error return
>> >> from mmc_select_powerclass looks wrong.
>> >
>> > My patch was just intended to fix the issue existing power class
>> > implementation. As commit text says:
>> > - don't consider 2.7v to 3.2v as invalid range
>> > - We are already ignoring the error returned by
>> > mmc_set_power_class() function for DS/HS/DDR cards. So this patch has
>> > extended that to HS200 cards.
>> >
>> > So as far as this patch is concerned, I don't see anything wrong here.
>> >
>> > As you have mentioned, currently we are not taking the host controller
>> > capability into account (as it doesn't exist as of now) so we should
>> > not see
>> > mmc_select_powerclass() fail any time.
>>
>> This is actually the main concern. The fail of mmc_select_powerclass is
>> something to be checked and not ignored since it should not fail under the
>> current implementation.
>
> Yes, this makes sense. With current implementation, mmc_select_powerclass()
> should never really fail which means failure should be treated as fatal and
> we should really skip the card initialization.
> This patch is already pushed to mmc-next. So I will post another patch (by
> next week as I will be on vacation in this week) to skip the card
> initialization if mmc_select_powerclass fails.
>
> Is this ok?
It is OK. Thanks,
>
> Regards,
> Subhash
>
>>
>>
>> > But yes, next thing should be to take into account the host current
>> > sourcing capability before deciding which bus speed mode to choose.
>> > But that may be a big change and should be as separate patch. Girish
>> > had already posted one patch for this which needs to be extended to
>> achieve this.
>> >
>> > Regards,
>> > Subhash
>> >
>> >>
>> >>
>> >> > Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
>> >> > ---
>> >> > drivers/mmc/core/mmc.c | 30 +++++++++++++++++-------------
>> >> > 1 files changed, 17 insertions(+), 13 deletions(-)
>> >> >
>> >> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
>> >> > 02914d6..54df5ad 100644
>> >> > --- a/drivers/mmc/core/mmc.c
>> >> > +++ b/drivers/mmc/core/mmc.c
>> >> > @@ -695,6 +695,11 @@ static int mmc_select_powerclass(struct
>> >> > mmc_card *card,
>> >> > else if (host->ios.clock <= 200000000)
>> >> > index = EXT_CSD_PWR_CL_200_195;
>> >> > break;
>> >> > + case MMC_VDD_27_28:
>> >> > + case MMC_VDD_28_29:
>> >> > + case MMC_VDD_29_30:
>> >> > + case MMC_VDD_30_31:
>> >> > + case MMC_VDD_31_32:
>> >> > case MMC_VDD_32_33:
>> >> > case MMC_VDD_33_34:
>> >> > case MMC_VDD_34_35:
>> >> > @@ -1111,11 +1116,10 @@ static int mmc_init_card(struct mmc_host
>> >> > *host, u32 ocr,
>> >> > ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
>> >> > EXT_CSD_BUS_WIDTH_8 :
>> >> > EXT_CSD_BUS_WIDTH_4;
>> >> > err = mmc_select_powerclass(card, ext_csd_bits,
>> >> > ext_csd);
>> >> > - if (err) {
>> >> > - pr_err("%s: power class selection to bus
>> >> > width %d failed\n",
>> >> > - mmc_hostname(card->host), 1 <<
>> >> > bus_width);
>> >> > - goto err;
>> >> > - }
>> >> > + if (err)
>> >> > + pr_warning("%s: power class selection to
>> >> > + bus
>> > width %d"
>> >> > + " failed\n",
>> >> > + mmc_hostname(card->host),
>> >> > + 1 << bus_width);
>> >> > }
>> >> >
>> >> > /*
>> >> > @@ -1147,10 +1151,10 @@ static int mmc_init_card(struct mmc_host
>> >> > *host, u32 ocr,
>> >> > err = mmc_select_powerclass(card,
>> >> > ext_csd_bits[idx][0],
>> >> > ext_csd);
>> >> > if (err)
>> >> > - pr_err("%s: power class selection to
> "
>> >> > - "bus width %d failed\n",
>> >> > - mmc_hostname(card->host),
>> >> > - 1 << bus_width);
>> >> > + pr_warning("%s: power class
>> >> > + selection to
>> > "
>> >> > + "bus width %d failed\n",
>> >> > +
>> >> > + mmc_hostname(card->host),
>> >> > + 1 << bus_width);
>> >> >
>> >> > err = mmc_switch(card,
>> >> > EXT_CSD_CMD_SET_NORMAL,
>> >> > EXT_CSD_BUS_WIDTH, @@
>> >> > -1178,10
>> >> > +1182,10 @@ static int mmc_init_card(struct mmc_host *host, u32
>> >> > +ocr,
>> >> > err = mmc_select_powerclass(card,
>> >> > ext_csd_bits[idx][1],
>> >> > ext_csd);
>> >> > if (err)
>> >> > - pr_err("%s: power class selection to
> "
>> >> > - "bus width %d ddr %d
>> >> > failed\n",
>> >> > - mmc_hostname(card->host),
>> >> > - 1 << bus_width, ddr);
>> >> > + pr_warning("%s: power class
>> >> > + selection to
>> > "
>> >> > + "bus width %d ddr %d
>> >> > + failed\n",
>> >> > +
>> >> > + mmc_hostname(card->host),
>> >> > + 1 << bus_width, ddr);
>> >> >
>> >> > err = mmc_switch(card,
>> >> > EXT_CSD_CMD_SET_NORMAL,
>> >> > EXT_CSD_BUS_WIDTH,
>> >> > --
>> >> > 1.7.1.1
>> >> >
>> >> > --
>> >> > Sent by a consultant of the Qualcomm Innovation Center, Inc.
>> >> > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
>> >> Forum.
>> >> > --
>> >> > 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
>> >
>> --
>> 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] 11+ messages in thread
* RE: [PATCH v1 1/1] mmc: core: fix power class selection
2012-04-03 17:06 ` Luca Porzio (lporzio)
@ 2012-04-09 12:46 ` Subhash Jadavani
0 siblings, 0 replies; 11+ messages in thread
From: Subhash Jadavani @ 2012-04-09 12:46 UTC (permalink / raw)
To: 'Luca Porzio (lporzio)', 'Saugata Das'
Cc: linux-mmc, linux-arm-msm, girish.shivananjappa,
'Danilo Caraccio (dcaracci)'
Hi Porzio,
> -----Original Message-----
> From: Luca Porzio (lporzio) [mailto:lporzio@micron.com]
> Sent: Tuesday, April 03, 2012 10:36 PM
> To: Subhash Jadavani; 'Saugata Das'
> Cc: linux-mmc@vger.kernel.org; linux-arm-msm@vger.kernel.org;
> girish.shivananjappa@linaro.org; Danilo Caraccio (dcaracci)
> Subject: RE: [PATCH v1 1/1] mmc: core: fix power class selection
>
> Hi,
>
> >
> > Yes, this makes sense. With current implementation,
> > mmc_select_powerclass() should never really fail which means failure
> > should be treated as fatal and we should really skip the card
initialization.
> > This patch is already pushed to mmc-next. So I will post another patch
> > (by next week as I will be on vacation in this week) to skip the card
> > initialization if mmc_select_powerclass fails.
> >
> > Is this ok?
> >
> > Regards,
> > Subhash
> >
>
> There was an error in the public JEDEC eMMC 4.5 version: PWR_CL_200_360 =
> EXT_CSD[237] is wrongly defined because HS200 can be supported only @1.2V
> or 1.8V. New Jedec spec revision might fix this.
>
> I and Danilo did a quick check in the power class selection routines and
it looks
> like the power class is set according to the OCR parsing.
> The OCR parsing to check the supported voltage range does not totally
cover
> the device capabilities because Vccq = 1.2V support is not encoded in the
> register.
According to my understanding, "vvv" in "PWR_CL_ff_vvv" (or
"PWR_CL_DDR_ff_vvv") indicates is VDD voltage not the VCCQ voltage. So we
shouldn't bother about what is the vccq level to decide which particular
field to read for power class. Please correct me if this understanding is
wrong.
Regards,
Subhash
>
> If the above is true, this implies that indexes EXT_CSD_PWR_CL_200_360
will
> lead to an error.
>
> DEVICE_TYPE = EXT_CSD[196] is more useful because it provides information
> on the Speed Rate and Voltage Range supported by the device.
>
> Cheers,
> Luca
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-04-09 12:46 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-03 6:55 [PATCH v1 1/1] mmc: core: fix power class selection Subhash Jadavani
2012-04-03 7:19 ` Girish K S
2012-04-03 8:06 ` Namjae Jeon
2012-04-03 11:32 ` Chris Ball
2012-04-03 15:24 ` Saugata Das
2012-04-03 15:50 ` Subhash Jadavani
2012-04-03 16:17 ` Saugata Das
2012-04-03 16:44 ` Subhash Jadavani
2012-04-03 17:06 ` Luca Porzio (lporzio)
2012-04-09 12:46 ` Subhash Jadavani
2012-04-03 18:48 ` Saugata Das
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).