Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-07 Thread yongd

On 2012年11月06日 20:52, Shawn Guo wrote:

On Tue, Nov 06, 2012 at 04:49:42PM +0800, yongd wrote:

 From your info, we can see that on your platform, those pins (including
power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
connected for some time just after the GPIO's level changes due to card
removable. And if we remove the card very slowly, such time duration can be
such long that the MMC_SEND_STATUS query can still succeed.


I was not removing the card as slowly as you think. It's actually
a normal speed.  That's why I thought your patch breaks the
card-detection functionality before I found the cause.


So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
issue:-)


I do not think it's a proper fixing.

Anyway, u can try such delay like msleep(100) in cd_irq() before calling
tasklet_schedule(>card_tasklet). Yes, this is not a proper fix even
it works:-)





Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query gpio
state to know such card's presence rather than sending MMC_SEND_STATUS rudely.

But just as I mentioned before, I don't think using 
SDHCI_QUIRK_BROKEN_CARD_DETECTION
as the flag to determine whether and how we can know card's presence before 
sending
command is a proper way.

I haven't gotten any good idea. Do u have any idea on this?


I guess what we need is to call mmc_gpio_get_cd() trying to know card's
presence before sending MMC_SEND_STATUS command.  sdhci-esdhc-imx
driver will surely need some changes to cope with that.

Shawn

Yes, gpio card detection should better use the existing framework 
offered by slot-gpio.
Then the fake-card-present will be unnecessary. BTW, sdhci-s3c.c also 
dose not use slot-gpio,
and then it also adds some tricky logic for gpio detection. U can check 
sdhci_s3c_notify_change(),
which dynamically set/clear SDHCI_QUIRK_BROKEN_CARD_DETECTION. This 
patch adding
mmc_gpio_get_cd(), bec9d4e5939987053169a9bb48fc58b6a2d3e237, mentioned 
this 1stly.


But using SDHCI_QUIRK_BROKEN_CARD_DETECTION to do such judging in 
sdhci_request()
is still not proper. I think this is the root causing such above 
workarounds.


So I am thinking of adding a new operation like get_card_presence into 
sdhci_ops,
and then different host drivers can implement differently by themselves, 
eg, for

sdhci-esdhc-imx.c,

static bool esdhc_get_card_presence(struct sdhci_host *host)
{
bool present = true;

if (detection_type == ESDHC_CD_CONTROLLER)
present = sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT;
else if (detection_type == ESDHC_CD_GPIO) {
if (gpio_get_value(boarddata->cd_gpio))
/* no card, if a valid gpio says so... */
present = false;
}

return present;
}


But this will also cause lots of host drivers corresponding changes. Oh, 
still inconvenient:-(

Any better ideas?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-07 Thread yongd

On 2012年11月06日 20:52, Shawn Guo wrote:

On Tue, Nov 06, 2012 at 04:49:42PM +0800, yongd wrote:

 From your info, we can see that on your platform, those pins (including
power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
connected for some time just after the GPIO's level changes due to card
removable. And if we remove the card very slowly, such time duration can be
such long that the MMC_SEND_STATUS query can still succeed.


I was not removing the card as slowly as you think. It's actually
a normal speed.  That's why I thought your patch breaks the
card-detection functionality before I found the cause.


So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
issue:-)


I do not think it's a proper fixing.

Anyway, u can try such delay like msleep(100) in cd_irq() before calling
tasklet_schedule(sdhost-card_tasklet). Yes, this is not a proper fix even
it works:-)


snip


Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query gpio
state to know such card's presence rather than sending MMC_SEND_STATUS rudely.

But just as I mentioned before, I don't think using 
SDHCI_QUIRK_BROKEN_CARD_DETECTION
as the flag to determine whether and how we can know card's presence before 
sending
command is a proper way.

I haven't gotten any good idea. Do u have any idea on this?


I guess what we need is to call mmc_gpio_get_cd() trying to know card's
presence before sending MMC_SEND_STATUS command.  sdhci-esdhc-imx
driver will surely need some changes to cope with that.

Shawn

Yes, gpio card detection should better use the existing framework 
offered by slot-gpio.
Then the fake-card-present will be unnecessary. BTW, sdhci-s3c.c also 
dose not use slot-gpio,
and then it also adds some tricky logic for gpio detection. U can check 
sdhci_s3c_notify_change(),
which dynamically set/clear SDHCI_QUIRK_BROKEN_CARD_DETECTION. This 
patch adding
mmc_gpio_get_cd(), bec9d4e5939987053169a9bb48fc58b6a2d3e237, mentioned 
this 1stly.


But using SDHCI_QUIRK_BROKEN_CARD_DETECTION to do such judging in 
sdhci_request()
is still not proper. I think this is the root causing such above 
workarounds.


So I am thinking of adding a new operation like get_card_presence into 
sdhci_ops,
and then different host drivers can implement differently by themselves, 
eg, for

sdhci-esdhc-imx.c,

static bool esdhc_get_card_presence(struct sdhci_host *host)
{
bool present = true;

if (detection_type == ESDHC_CD_CONTROLLER)
present = sdhci_readl(host, SDHCI_PRESENT_STATE)  SDHCI_CARD_PRESENT;
else if (detection_type == ESDHC_CD_GPIO) {
if (gpio_get_value(boarddata-cd_gpio))
/* no card, if a valid gpio says so... */
present = false;
}

return present;
}


But this will also cause lots of host drivers corresponding changes. Oh, 
still inconvenient:-(

Any better ideas?

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-06 Thread Shawn Guo
On Tue, Nov 06, 2012 at 04:49:42PM +0800, yongd wrote:
> From your info, we can see that on your platform, those pins (including
> power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
> connected for some time just after the GPIO's level changes due to card
> removable. And if we remove the card very slowly, such time duration can be
> such long that the MMC_SEND_STATUS query can still succeed.
> 
I was not removing the card as slowly as you think. It's actually
a normal speed.  That's why I thought your patch breaks the
card-detection functionality before I found the cause.

> So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
> triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
> issue:-)
> 
I do not think it's a proper fixing.



> Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query 
> gpio
> state to know such card's presence rather than sending MMC_SEND_STATUS rudely.
> 
> But just as I mentioned before, I don't think using 
> SDHCI_QUIRK_BROKEN_CARD_DETECTION
> as the flag to determine whether and how we can know card's presence before 
> sending
> command is a proper way.
> 
> I haven't gotten any good idea. Do u have any idea on this?
> 
I guess what we need is to call mmc_gpio_get_cd() trying to know card's
presence before sending MMC_SEND_STATUS command.  sdhci-esdhc-imx
driver will surely need some changes to cope with that.

Shawn

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-06 Thread yongd

On 2012年11月05日 20:48, Shawn Guo wrote:

On Mon, Nov 05, 2012 at 11:34:49AM +0800, yongd wrote:

 From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
ESDHC_CD_GPIO, when your card (using
GPIO detection) is removed, we can know the card's absence through the fake 
CARD_PRESENT flag in esdhc_readl_le().
As a result, we can quickly return ENOMEDIUM error without command sending. 
Finally mmc_rescan can know the card
is removed.


Yes, that's the existing implementation, which does not require retry
sending MMC_SEND_STATUS to know if card is removed.


On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, we 
will just send MMC_SEND_STATUS
command (cd_irq->sdhci_tasklet_card->mmc_recan->mmc_sd_detect->mmc_sd_alive), 
and we will find error since the card
is already gone. Finally, we shall also know the card is removed.

This is really strange why the removal message shows up together with the next 
card inserting message.
Could u pls tell us more about what actually happened when the card is removed 
with my patches? Did the GPIO interrupt
happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when it 
sent MMC_SEND_STATUS? What step did
the card removing procedure arrive at? Really really thanks a lot:-)


I just tracked it down a little bit.  Interesting enough, it depends on
how I remove the card.  If I do it slowly, when the gpio interrupt
triggers the MMC_SEND_STATUS query, the command can still retrieve
the card status successfully.  Thus driver does not detect the card
removal.  If I remove the card from slot quickly, I can see the removal
message.


Shawn,
Thanks for your interesting input.

From your info, we can see that on your platform, those pins (including
power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
connected for some time just after the GPIO's level changes due to card
removable. And if we remove the card very slowly, such time duration can be
such long that the MMC_SEND_STATUS query can still succeed.

So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
issue:-)



With your patch series, in ESDHC_CD_GPIO case the driver will have
to send MMC_SEND_STATUS (with retry) to card for knowing its presence.
This is also an unpleasant behavior comparing to the existing code.
I think we should query gpio state to know card presence for this case.

Shawn



Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query gpio
state to know such card's presence rather than sending MMC_SEND_STATUS rudely.

But just as I mentioned before, I don't think using 
SDHCI_QUIRK_BROKEN_CARD_DETECTION
as the flag to determine whether and how we can know card's presence before 
sending
command is a proper way.

I haven't gotten any good idea. Do u have any idea on this?







--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-06 Thread yongd

On 2012年11月05日 20:48, Shawn Guo wrote:

On Mon, Nov 05, 2012 at 11:34:49AM +0800, yongd wrote:

 From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
ESDHC_CD_GPIO, when your card (using
GPIO detection) is removed, we can know the card's absence through the fake 
CARD_PRESENT flag in esdhc_readl_le().
As a result, we can quickly return ENOMEDIUM error without command sending. 
Finally mmc_rescan can know the card
is removed.


Yes, that's the existing implementation, which does not require retry
sending MMC_SEND_STATUS to know if card is removed.


On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, we 
will just send MMC_SEND_STATUS
command (cd_irq-sdhci_tasklet_card-mmc_recan-mmc_sd_detect-mmc_sd_alive), 
and we will find error since the card
is already gone. Finally, we shall also know the card is removed.

This is really strange why the removal message shows up together with the next 
card inserting message.
Could u pls tell us more about what actually happened when the card is removed 
with my patches? Did the GPIO interrupt
happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when it 
sent MMC_SEND_STATUS? What step did
the card removing procedure arrive at? Really really thanks a lot:-)


I just tracked it down a little bit.  Interesting enough, it depends on
how I remove the card.  If I do it slowly, when the gpio interrupt
triggers the MMC_SEND_STATUS query, the command can still retrieve
the card status successfully.  Thus driver does not detect the card
removal.  If I remove the card from slot quickly, I can see the removal
message.


Shawn,
Thanks for your interesting input.

From your info, we can see that on your platform, those pins (including
power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
connected for some time just after the GPIO's level changes due to card
removable. And if we remove the card very slowly, such time duration can be
such long that the MMC_SEND_STATUS query can still succeed.

So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
issue:-)



With your patch series, in ESDHC_CD_GPIO case the driver will have
to send MMC_SEND_STATUS (with retry) to card for knowing its presence.
This is also an unpleasant behavior comparing to the existing code.
I think we should query gpio state to know card presence for this case.

Shawn



Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query gpio
state to know such card's presence rather than sending MMC_SEND_STATUS rudely.

But just as I mentioned before, I don't think using 
SDHCI_QUIRK_BROKEN_CARD_DETECTION
as the flag to determine whether and how we can know card's presence before 
sending
command is a proper way.

I haven't gotten any good idea. Do u have any idea on this?







--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-06 Thread Shawn Guo
On Tue, Nov 06, 2012 at 04:49:42PM +0800, yongd wrote:
 From your info, we can see that on your platform, those pins (including
 power, clk, DATA) necessary for MMC_SEND_STATUS transaction still keep
 connected for some time just after the GPIO's level changes due to card
 removable. And if we remove the card very slowly, such time duration can be
 such long that the MMC_SEND_STATUS query can still succeed.
 
I was not removing the card as slowly as you think. It's actually
a normal speed.  That's why I thought your patch breaks the
card-detection functionality before I found the cause.

 So I think we can add a proper delay(maybe 100ms) before the gpio interrupt
 triggers the MMC_SEND_STATUS query, and maybe this can probably fix this 
 issue:-)
 
I do not think it's a proper fixing.

snip

 Anyway, I 100% agree with you that for a ESDHC_CD_GPIO card, we shall query 
 gpio
 state to know such card's presence rather than sending MMC_SEND_STATUS rudely.
 
 But just as I mentioned before, I don't think using 
 SDHCI_QUIRK_BROKEN_CARD_DETECTION
 as the flag to determine whether and how we can know card's presence before 
 sending
 command is a proper way.
 
 I haven't gotten any good idea. Do u have any idea on this?
 
I guess what we need is to call mmc_gpio_get_cd() trying to know card's
presence before sending MMC_SEND_STATUS command.  sdhci-esdhc-imx
driver will surely need some changes to cope with that.

Shawn

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-05 Thread Shawn Guo
On Mon, Nov 05, 2012 at 11:34:49AM +0800, yongd wrote:
> From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
> ESDHC_CD_GPIO, when your card (using
> GPIO detection) is removed, we can know the card's absence through the fake 
> CARD_PRESENT flag in esdhc_readl_le().
> As a result, we can quickly return ENOMEDIUM error without command sending. 
> Finally mmc_rescan can know the card
> is removed.
> 
Yes, that's the existing implementation, which does not require retry
sending MMC_SEND_STATUS to know if card is removed.

> On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, 
> we will just send MMC_SEND_STATUS
> command (cd_irq->sdhci_tasklet_card->mmc_recan->mmc_sd_detect->mmc_sd_alive), 
> and we will find error since the card
> is already gone. Finally, we shall also know the card is removed.
> 
> This is really strange why the removal message shows up together with the 
> next card inserting message.
> Could u pls tell us more about what actually happened when the card is 
> removed with my patches? Did the GPIO interrupt
> happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when 
> it sent MMC_SEND_STATUS? What step did
> the card removing procedure arrive at? Really really thanks a lot:-)
> 
I just tracked it down a little bit.  Interesting enough, it depends on
how I remove the card.  If I do it slowly, when the gpio interrupt
triggers the MMC_SEND_STATUS query, the command can still retrieve
the card status successfully.  Thus driver does not detect the card
removal.  If I remove the card from slot quickly, I can see the removal
message.

With your patch series, in ESDHC_CD_GPIO case the driver will have
to send MMC_SEND_STATUS (with retry) to card for knowing its presence.
This is also an unpleasant behavior comparing to the existing code.
I think we should query gpio state to know card presence for this case.

Shawn

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-05 Thread Shawn Guo
On Mon, Nov 05, 2012 at 11:34:49AM +0800, yongd wrote:
 From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
 ESDHC_CD_GPIO, when your card (using
 GPIO detection) is removed, we can know the card's absence through the fake 
 CARD_PRESENT flag in esdhc_readl_le().
 As a result, we can quickly return ENOMEDIUM error without command sending. 
 Finally mmc_rescan can know the card
 is removed.
 
Yes, that's the existing implementation, which does not require retry
sending MMC_SEND_STATUS to know if card is removed.

 On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, 
 we will just send MMC_SEND_STATUS
 command (cd_irq-sdhci_tasklet_card-mmc_recan-mmc_sd_detect-mmc_sd_alive), 
 and we will find error since the card
 is already gone. Finally, we shall also know the card is removed.
 
 This is really strange why the removal message shows up together with the 
 next card inserting message.
 Could u pls tell us more about what actually happened when the card is 
 removed with my patches? Did the GPIO interrupt
 happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when 
 it sent MMC_SEND_STATUS? What step did
 the card removing procedure arrive at? Really really thanks a lot:-)
 
I just tracked it down a little bit.  Interesting enough, it depends on
how I remove the card.  If I do it slowly, when the gpio interrupt
triggers the MMC_SEND_STATUS query, the command can still retrieve
the card status successfully.  Thus driver does not detect the card
removal.  If I remove the card from slot quickly, I can see the removal
message.

With your patch series, in ESDHC_CD_GPIO case the driver will have
to send MMC_SEND_STATUS (with retry) to card for knowing its presence.
This is also an unpleasant behavior comparing to the existing code.
I think we should query gpio state to know card presence for this case.

Shawn

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-04 Thread yongd

On 2012年11月05日 09:54, Shawn Guo wrote:

On Fri, Nov 02, 2012 at 08:37:41PM +0800, yongd wrote:

I got it. So how do you think of such below partition/reorganization?


It looks fine to me for imx.


Ok. I will update like this way if we have no other issues. Thanks.




Patch-1:
For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With that
improper logic of sdhci_add_host(), this is redundant, but shall be better
than something unpleasant you mentioned.

Patch-2:
For sdhci-s3c.c, do exactly the same thing as Patch-1.

Patch-3:
For sdhci.c, remove that improper logic of sdhci_add_host().

Patch-4:
For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO.

Patch-5:
For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
detection
types except S3C_SDHCI_CD_INTERNAL.




Yes, not equal as before. But you just remind me of one more improper place in 
our current sdhci.c.
Let's review those lines in sdhci_request() which are added by Anton long long 
ago in commit
68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for card-detection 
polling),

/* If polling, assume that the card is always present. */
if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
present = true;
else
present = sdhci_readl(host, SDHCI_PRESENT_STATE) &
SDHCI_CARD_PRESENT;

Here before sending command, if we can confirm the card dose not exist, we will 
return quickly without
sending this command.This is a good optimization. But if polling, we can't do 
such checking, so we can
only assume the card is always present.
Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
Exactly the same as
sdhci_add_host(), it thinks only polling and host internal card detection 
methods exist.
Maybe we can determine whether and how we can do such card-existence-checking 
optimization based on our
detection type directly rather than an indirect flag which should have its own 
pure meaning. But Let's
do such similar further improvement in future since currently with my patch of 
setting
SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
before. How do u think?


I'm not sure it will function same as before.  When I was testing your
v2 series, I can not see card removal message with removing card, but
can see it show up together with the next card inserting message.

Shawn



Shawn,
From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
ESDHC_CD_GPIO, when your card (using
GPIO detection) is removed, we can know the card's absence through the fake 
CARD_PRESENT flag in esdhc_readl_le().
As a result, we can quickly return ENOMEDIUM error without command sending. 
Finally mmc_rescan can know the card
is removed.

On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, we 
will just send MMC_SEND_STATUS
command (cd_irq->sdhci_tasklet_card->mmc_recan->mmc_sd_detect->mmc_sd_alive), 
and we will find error since the card
is already gone. Finally, we shall also know the card is removed.

This is really strange why the removal message shows up together with the next 
card inserting message.
Could u pls tell us more about what actually happened when the card is removed 
with my patches? Did the GPIO interrupt
happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when it 
sent MMC_SEND_STATUS? What step did
the card removing procedure arrive at? Really really thanks a lot:-)





--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-04 Thread Shawn Guo
On Fri, Nov 02, 2012 at 08:37:41PM +0800, yongd wrote:
> I got it. So how do you think of such below partition/reorganization?
> 
It looks fine to me for imx.

> Patch-1:
> For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With 
> that
> improper logic of sdhci_add_host(), this is redundant, but shall be better
> than something unpleasant you mentioned.
> 
> Patch-2:
> For sdhci-s3c.c, do exactly the same thing as Patch-1.
> 
> Patch-3:
> For sdhci.c, remove that improper logic of sdhci_add_host().
> 
> Patch-4:
> For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
> ESDHC_CD_GPIO.
> 
> Patch-5:
> For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
> detection
> types except S3C_SDHCI_CD_INTERNAL.



> Yes, not equal as before. But you just remind me of one more improper place 
> in our current sdhci.c.
> Let's review those lines in sdhci_request() which are added by Anton long 
> long ago in commit
> 68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for 
> card-detection polling),
> 
>   /* If polling, assume that the card is always present. */
>   if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
>   present = true;
>   else
>   present = sdhci_readl(host, SDHCI_PRESENT_STATE) &
>   SDHCI_CARD_PRESENT;
> 
> Here before sending command, if we can confirm the card dose not exist, we 
> will return quickly without
> sending this command.This is a good optimization. But if polling, we can't do 
> such checking, so we can
> only assume the card is always present.
> Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
> Exactly the same as
> sdhci_add_host(), it thinks only polling and host internal card detection 
> methods exist.
> Maybe we can determine whether and how we can do such card-existence-checking 
> optimization based on our
> detection type directly rather than an indirect flag which should have its 
> own pure meaning. But Let's
> do such similar further improvement in future since currently with my patch 
> of setting
> SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
> before. How do u think?
> 
I'm not sure it will function same as before.  When I was testing your
v2 series, I can not see card removal message with removing card, but
can see it show up together with the next card inserting message.

Shawn

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-04 Thread Shawn Guo
On Fri, Nov 02, 2012 at 08:37:41PM +0800, yongd wrote:
 I got it. So how do you think of such below partition/reorganization?
 
It looks fine to me for imx.

 Patch-1:
 For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With 
 that
 improper logic of sdhci_add_host(), this is redundant, but shall be better
 than something unpleasant you mentioned.
 
 Patch-2:
 For sdhci-s3c.c, do exactly the same thing as Patch-1.
 
 Patch-3:
 For sdhci.c, remove that improper logic of sdhci_add_host().
 
 Patch-4:
 For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
 ESDHC_CD_GPIO.
 
 Patch-5:
 For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
 detection
 types except S3C_SDHCI_CD_INTERNAL.

snip

 Yes, not equal as before. But you just remind me of one more improper place 
 in our current sdhci.c.
 Let's review those lines in sdhci_request() which are added by Anton long 
 long ago in commit
 68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for 
 card-detection polling),
 
   /* If polling, assume that the card is always present. */
   if (host-quirks  SDHCI_QUIRK_BROKEN_CARD_DETECTION)
   present = true;
   else
   present = sdhci_readl(host, SDHCI_PRESENT_STATE) 
   SDHCI_CARD_PRESENT;
 
 Here before sending command, if we can confirm the card dose not exist, we 
 will return quickly without
 sending this command.This is a good optimization. But if polling, we can't do 
 such checking, so we can
 only assume the card is always present.
 Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
 Exactly the same as
 sdhci_add_host(), it thinks only polling and host internal card detection 
 methods exist.
 Maybe we can determine whether and how we can do such card-existence-checking 
 optimization based on our
 detection type directly rather than an indirect flag which should have its 
 own pure meaning. But Let's
 do such similar further improvement in future since currently with my patch 
 of setting
 SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
 before. How do u think?
 
I'm not sure it will function same as before.  When I was testing your
v2 series, I can not see card removal message with removing card, but
can see it show up together with the next card inserting message.

Shawn

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-04 Thread yongd

On 2012年11月05日 09:54, Shawn Guo wrote:

On Fri, Nov 02, 2012 at 08:37:41PM +0800, yongd wrote:

I got it. So how do you think of such below partition/reorganization?


It looks fine to me for imx.


Ok. I will update like this way if we have no other issues. Thanks.




Patch-1:
For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With that
improper logic of sdhci_add_host(), this is redundant, but shall be better
than something unpleasant you mentioned.

Patch-2:
For sdhci-s3c.c, do exactly the same thing as Patch-1.

Patch-3:
For sdhci.c, remove that improper logic of sdhci_add_host().

Patch-4:
For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO.

Patch-5:
For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
detection
types except S3C_SDHCI_CD_INTERNAL.

snip


Yes, not equal as before. But you just remind me of one more improper place in 
our current sdhci.c.
Let's review those lines in sdhci_request() which are added by Anton long long 
ago in commit
68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for card-detection 
polling),

/* If polling, assume that the card is always present. */
if (host-quirks  SDHCI_QUIRK_BROKEN_CARD_DETECTION)
present = true;
else
present = sdhci_readl(host, SDHCI_PRESENT_STATE) 
SDHCI_CARD_PRESENT;

Here before sending command, if we can confirm the card dose not exist, we will 
return quickly without
sending this command.This is a good optimization. But if polling, we can't do 
such checking, so we can
only assume the card is always present.
Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
Exactly the same as
sdhci_add_host(), it thinks only polling and host internal card detection 
methods exist.
Maybe we can determine whether and how we can do such card-existence-checking 
optimization based on our
detection type directly rather than an indirect flag which should have its own 
pure meaning. But Let's
do such similar further improvement in future since currently with my patch of 
setting
SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
before. How do u think?


I'm not sure it will function same as before.  When I was testing your
v2 series, I can not see card removal message with removing card, but
can see it show up together with the next card inserting message.

Shawn



Shawn,
From the code logic, without SDHCI_QUIRK_BROKEN_CARD_DETECTION for 
ESDHC_CD_GPIO, when your card (using
GPIO detection) is removed, we can know the card's absence through the fake 
CARD_PRESENT flag in esdhc_readl_le().
As a result, we can quickly return ENOMEDIUM error without command sending. 
Finally mmc_rescan can know the card
is removed.

On the other hand, with SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, we 
will just send MMC_SEND_STATUS
command (cd_irq-sdhci_tasklet_card-mmc_recan-mmc_sd_detect-mmc_sd_alive), 
and we will find error since the card
is already gone. Finally, we shall also know the card is removed.

This is really strange why the removal message shows up together with the next 
card inserting message.
Could u pls tell us more about what actually happened when the card is removed 
with my patches? Did the GPIO interrupt
happen? Was mmc_rescan() called? Did mmc_sd_detect() finally find error when it 
sent MMC_SEND_STATUS? What step did
the card removing procedure arrive at? Really really thanks a lot:-)





--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-02 Thread yongd

On 2012年10月31日 23:20, Shawn Guo wrote:

On Tue, Oct 30, 2012 at 05:30:01PM +0800, yongd wrote:

In the current code logic, sdhci_add_host() will enable the polling
method (set MMC_CAP_NEEDS_POLL) for a removable card (MMC_CAP_
NONREMOVABLE is not set) whose host's internal card detection method
is disabled for some reason (SDHCI_QUIRK_BROKEN_CARD_DETECTION is set).

However, this is improper since we can have some other card detection
methods besides host internal card detection and polling method. For
example, if the card detection type is ESDHC_CD_GPIO (external gpio pin
for CD), we should keep SDHCI_QUIRK_BROKEN_CARD_DETECTION set, or host
internal card detection interrupt will still be enabled. So, here comes
the 1st change in this patch to keep SDHCI_QUIRK_BROKEN_CARD_DETECTION
set for ESDHC_CD_GPIO type. But, after the 1st change, just as above
said, sdhci_add_host() will still enable polling for such a card.This
is redundant.


This actually results in an unpleasant rather than redundant behavior.
Right after this patch gets applied and before patch #3 gets applied,
driver sdhci-esdhc-imx will use polling even for ESDHC_CD_GPIO case.


Shawn,
I got it. So how do you think of such below partition/reorganization?

Patch-1:
For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With that
improper logic of sdhci_add_host(), this is redundant, but shall be better
than something unpleasant you mentioned.

Patch-2:
For sdhci-s3c.c, do exactly the same thing as Patch-1.

Patch-3:
For sdhci.c, remove that improper logic of sdhci_add_host().

Patch-4:
For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO.

Patch-5:
For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
detection
types except S3C_SDHCI_CD_INTERNAL.



On the other hand, for the card with ESDHC_CD_NONE detection type(no CD,
neither controller nor gpio, so use polling), we currently rely on
sdhci_add_host() to enable polling for us.

Here propose the 2nd change in this patch for such an embarrassing case.

Besides above, this is another sign that the patch (and series) should
be better partitioned.


1st, this patch will de-couple polling enabling with sdhci_add_host() by
doing this in host driver itself, just as some other vendors. 2nd, one
more patch will remove such improper MMC_CAP_NEEDS_POLL enabling in
sdhci_add_host().

Change-Id: Ia7525009d8fd188e3f0169f225e4a76ff9e94b47

Remove this, please.


Shawn,
I got it, and will remove such thing in updated patches. Thanks.


Signed-off-by: yongd 
---
  drivers/mmc/host/sdhci-esdhc-imx.c |3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
b/drivers/mmc/host/sdhci-esdhc-imx.c
index effc2ac..ff201a5 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -557,7 +557,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
platform_device *pdev)
dev_err(mmc_dev(host->mmc), "request irq error\n");
goto no_card_detect_irq;
}
-   /* fall through */
+   break;

The current sdhci-esdhc-imx implementation clears flag
SDHCI_QUIRK_BROKEN_CARD_DETECTION even for ESDHC_CD_GPIO case
and then emulate flag SDHCI_CARD_PRESENT by reading CD gpio state in
esdhc_readl_le().  Obviously, simply setting the flag for gpio case
does not provide an equal behavior as before.

Shawn



Shawn,
Yes, not equal as before. But you just remind me of one more improper place in 
our current sdhci.c.
Let's review those lines in sdhci_request() which are added by Anton long long 
ago in commit
68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for card-detection 
polling),

/* If polling, assume that the card is always present. */
if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
present = true;
else
present = sdhci_readl(host, SDHCI_PRESENT_STATE) &
SDHCI_CARD_PRESENT;

Here before sending command, if we can confirm the card dose not exist, we will 
return quickly without
sending this command.This is a good optimization. But if polling, we can't do 
such checking, so we can
only assume the card is always present.
Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
Exactly the same as
sdhci_add_host(), it thinks only polling and host internal card detection 
methods exist.
 
Maybe we can determine whether and how we can do such card-existence-checking optimization based on our

detection type directly rather than an indirect flag which should have its own 
pure meaning. But Let's
do such similar further improvement in future since currently with my patch of 
setting
SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
before. How do u think?


  
  	case ESDHC_CD_CONTROLLER:

/* we have a working card_detect back */
@@ -569,6 +569,7 

Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-11-02 Thread yongd

On 2012年10月31日 23:20, Shawn Guo wrote:

On Tue, Oct 30, 2012 at 05:30:01PM +0800, yongd wrote:

In the current code logic, sdhci_add_host() will enable the polling
method (set MMC_CAP_NEEDS_POLL) for a removable card (MMC_CAP_
NONREMOVABLE is not set) whose host's internal card detection method
is disabled for some reason (SDHCI_QUIRK_BROKEN_CARD_DETECTION is set).

However, this is improper since we can have some other card detection
methods besides host internal card detection and polling method. For
example, if the card detection type is ESDHC_CD_GPIO (external gpio pin
for CD), we should keep SDHCI_QUIRK_BROKEN_CARD_DETECTION set, or host
internal card detection interrupt will still be enabled. So, here comes
the 1st change in this patch to keep SDHCI_QUIRK_BROKEN_CARD_DETECTION
set for ESDHC_CD_GPIO type. But, after the 1st change, just as above
said, sdhci_add_host() will still enable polling for such a card.This
is redundant.


This actually results in an unpleasant rather than redundant behavior.
Right after this patch gets applied and before patch #3 gets applied,
driver sdhci-esdhc-imx will use polling even for ESDHC_CD_GPIO case.


Shawn,
I got it. So how do you think of such below partition/reorganization?

Patch-1:
For sdhci-esdhc-imx.c, only add MMC_CAP_NEEDS_POLL for ESDHC_CD_NONE. With that
improper logic of sdhci_add_host(), this is redundant, but shall be better
than something unpleasant you mentioned.

Patch-2:
For sdhci-s3c.c, do exactly the same thing as Patch-1.

Patch-3:
For sdhci.c, remove that improper logic of sdhci_add_host().

Patch-4:
For sdhci-esdhc-imx.c, set SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO.

Patch-5:
For sdhci-s3c.c, broaden SDHCI_QUIRK_BROKEN_CARD_DETECTION range for all 
detection
types except S3C_SDHCI_CD_INTERNAL.



On the other hand, for the card with ESDHC_CD_NONE detection type(no CD,
neither controller nor gpio, so use polling), we currently rely on
sdhci_add_host() to enable polling for us.

Here propose the 2nd change in this patch for such an embarrassing case.

Besides above, this is another sign that the patch (and series) should
be better partitioned.


1st, this patch will de-couple polling enabling with sdhci_add_host() by
doing this in host driver itself, just as some other vendors. 2nd, one
more patch will remove such improper MMC_CAP_NEEDS_POLL enabling in
sdhci_add_host().

Change-Id: Ia7525009d8fd188e3f0169f225e4a76ff9e94b47

Remove this, please.


Shawn,
I got it, and will remove such thing in updated patches. Thanks.


Signed-off-by: yongd yo...@marvell.com
---
  drivers/mmc/host/sdhci-esdhc-imx.c |3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
b/drivers/mmc/host/sdhci-esdhc-imx.c
index effc2ac..ff201a5 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -557,7 +557,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
platform_device *pdev)
dev_err(mmc_dev(host-mmc), request irq error\n);
goto no_card_detect_irq;
}
-   /* fall through */
+   break;

The current sdhci-esdhc-imx implementation clears flag
SDHCI_QUIRK_BROKEN_CARD_DETECTION even for ESDHC_CD_GPIO case
and then emulate flag SDHCI_CARD_PRESENT by reading CD gpio state in
esdhc_readl_le().  Obviously, simply setting the flag for gpio case
does not provide an equal behavior as before.

Shawn



Shawn,
Yes, not equal as before. But you just remind me of one more improper place in 
our current sdhci.c.
Let's review those lines in sdhci_request() which are added by Anton long long 
ago in commit
68d1fb7e229c6f95be4fbbe3eb46b24e41184924(sdhci: Add support for card-detection 
polling),

/* If polling, assume that the card is always present. */
if (host-quirks  SDHCI_QUIRK_BROKEN_CARD_DETECTION)
present = true;
else
present = sdhci_readl(host, SDHCI_PRESENT_STATE) 
SDHCI_CARD_PRESENT;

Here before sending command, if we can confirm the card dose not exist, we will 
return quickly without
sending this command.This is a good optimization. But if polling, we can't do 
such checking, so we can
only assume the card is always present.
Here is another improper example of using SDHCI_QUIRK_BROKEN_CARD_DETECTION. 
Exactly the same as
sdhci_add_host(), it thinks only polling and host internal card detection 
methods exist.
 
Maybe we can determine whether and how we can do such card-existence-checking optimization based on our

detection type directly rather than an indirect flag which should have its own 
pure meaning. But Let's
do such similar further improvement in future since currently with my patch of 
setting
SDHCI_QUIRK_BROKEN_CARD_DETECTION for ESDHC_CD_GPIO, functionality is OK as 
before. How do u think?


  
  	case ESDHC_CD_CONTROLLER:

/* we have a working card_detect back */
@@ 

Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-10-31 Thread Shawn Guo
On Tue, Oct 30, 2012 at 05:30:01PM +0800, yongd wrote:
> In the current code logic, sdhci_add_host() will enable the polling
> method (set MMC_CAP_NEEDS_POLL) for a removable card (MMC_CAP_
> NONREMOVABLE is not set) whose host's internal card detection method
> is disabled for some reason (SDHCI_QUIRK_BROKEN_CARD_DETECTION is set).
> 
> However, this is improper since we can have some other card detection
> methods besides host internal card detection and polling method. For
> example, if the card detection type is ESDHC_CD_GPIO (external gpio pin
> for CD), we should keep SDHCI_QUIRK_BROKEN_CARD_DETECTION set, or host
> internal card detection interrupt will still be enabled. So, here comes
> the 1st change in this patch to keep SDHCI_QUIRK_BROKEN_CARD_DETECTION
> set for ESDHC_CD_GPIO type. But, after the 1st change, just as above
> said, sdhci_add_host() will still enable polling for such a card.This
> is redundant.
> 
This actually results in an unpleasant rather than redundant behavior.
Right after this patch gets applied and before patch #3 gets applied,
driver sdhci-esdhc-imx will use polling even for ESDHC_CD_GPIO case.

> On the other hand, for the card with ESDHC_CD_NONE detection type(no CD,
> neither controller nor gpio, so use polling), we currently rely on
> sdhci_add_host() to enable polling for us.
> 
> Here propose the 2nd change in this patch for such an embarrassing case.

Besides above, this is another sign that the patch (and series) should
be better partitioned.

> 1st, this patch will de-couple polling enabling with sdhci_add_host() by
> doing this in host driver itself, just as some other vendors. 2nd, one
> more patch will remove such improper MMC_CAP_NEEDS_POLL enabling in
> sdhci_add_host().
> 
> Change-Id: Ia7525009d8fd188e3f0169f225e4a76ff9e94b47

Remove this, please.

> Signed-off-by: yongd 
> ---
>  drivers/mmc/host/sdhci-esdhc-imx.c |3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
> b/drivers/mmc/host/sdhci-esdhc-imx.c
> index effc2ac..ff201a5 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -557,7 +557,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
> platform_device *pdev)
>   dev_err(mmc_dev(host->mmc), "request irq error\n");
>   goto no_card_detect_irq;
>   }
> - /* fall through */
> + break;

The current sdhci-esdhc-imx implementation clears flag
SDHCI_QUIRK_BROKEN_CARD_DETECTION even for ESDHC_CD_GPIO case
and then emulate flag SDHCI_CARD_PRESENT by reading CD gpio state in
esdhc_readl_le().  Obviously, simply setting the flag for gpio case
does not provide an equal behavior as before.

Shawn

>  
>   case ESDHC_CD_CONTROLLER:
>   /* we have a working card_detect back */
> @@ -569,6 +569,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
> platform_device *pdev)
>   break;
>  
>   case ESDHC_CD_NONE:
> + host->mmc->caps = MMC_CAP_NEEDS_POLL;
>   break;
>   }
>  
> -- 
> 1.7.9.5
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 1/3] mmc: esdhc: enable polling to detect card by itself

2012-10-31 Thread Shawn Guo
On Tue, Oct 30, 2012 at 05:30:01PM +0800, yongd wrote:
 In the current code logic, sdhci_add_host() will enable the polling
 method (set MMC_CAP_NEEDS_POLL) for a removable card (MMC_CAP_
 NONREMOVABLE is not set) whose host's internal card detection method
 is disabled for some reason (SDHCI_QUIRK_BROKEN_CARD_DETECTION is set).
 
 However, this is improper since we can have some other card detection
 methods besides host internal card detection and polling method. For
 example, if the card detection type is ESDHC_CD_GPIO (external gpio pin
 for CD), we should keep SDHCI_QUIRK_BROKEN_CARD_DETECTION set, or host
 internal card detection interrupt will still be enabled. So, here comes
 the 1st change in this patch to keep SDHCI_QUIRK_BROKEN_CARD_DETECTION
 set for ESDHC_CD_GPIO type. But, after the 1st change, just as above
 said, sdhci_add_host() will still enable polling for such a card.This
 is redundant.
 
This actually results in an unpleasant rather than redundant behavior.
Right after this patch gets applied and before patch #3 gets applied,
driver sdhci-esdhc-imx will use polling even for ESDHC_CD_GPIO case.

 On the other hand, for the card with ESDHC_CD_NONE detection type(no CD,
 neither controller nor gpio, so use polling), we currently rely on
 sdhci_add_host() to enable polling for us.
 
 Here propose the 2nd change in this patch for such an embarrassing case.

Besides above, this is another sign that the patch (and series) should
be better partitioned.

 1st, this patch will de-couple polling enabling with sdhci_add_host() by
 doing this in host driver itself, just as some other vendors. 2nd, one
 more patch will remove such improper MMC_CAP_NEEDS_POLL enabling in
 sdhci_add_host().
 
 Change-Id: Ia7525009d8fd188e3f0169f225e4a76ff9e94b47

Remove this, please.

 Signed-off-by: yongd yo...@marvell.com
 ---
  drivers/mmc/host/sdhci-esdhc-imx.c |3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
 b/drivers/mmc/host/sdhci-esdhc-imx.c
 index effc2ac..ff201a5 100644
 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
 @@ -557,7 +557,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
 platform_device *pdev)
   dev_err(mmc_dev(host-mmc), request irq error\n);
   goto no_card_detect_irq;
   }
 - /* fall through */
 + break;

The current sdhci-esdhc-imx implementation clears flag
SDHCI_QUIRK_BROKEN_CARD_DETECTION even for ESDHC_CD_GPIO case
and then emulate flag SDHCI_CARD_PRESENT by reading CD gpio state in
esdhc_readl_le().  Obviously, simply setting the flag for gpio case
does not provide an equal behavior as before.

Shawn

  
   case ESDHC_CD_CONTROLLER:
   /* we have a working card_detect back */
 @@ -569,6 +569,7 @@ static int __devinit sdhci_esdhc_imx_probe(struct 
 platform_device *pdev)
   break;
  
   case ESDHC_CD_NONE:
 + host-mmc-caps = MMC_CAP_NEEDS_POLL;
   break;
   }
  
 -- 
 1.7.9.5
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/