* [PATCH v3 8/8] mmc: dw_mmc: fix the checking whether card is present
@ 2014-02-03 11:15 Jaehoon Chung
2014-02-06 11:29 ` Seungwon Jeon
0 siblings, 1 reply; 3+ messages in thread
From: Jaehoon Chung @ 2014-02-03 11:15 UTC (permalink / raw)
To: linux-mmc@vger.kernel.org; +Cc: Chris Ball, Seungwon Jeon, Ulf Hansson
Broken card detection is assumed "the card is present".
Non-removable card didn't call get_cd().
dw-mmc controller didn't check whether card is present or not.
Because DW_MMC_CARD_PRESENT flag is set into dw_mci_get_cd().
If cd-pin is used, then dw_mci_get_cd() is called.
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
---
drivers/mmc/host/dw_mmc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index ac2907d..0d6ab8f 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -910,6 +910,7 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
{
struct dw_mci_slot *slot = mmc_priv(mmc);
struct dw_mci *host = slot->host;
+ struct dw_mci_board *brd = host->pdata;
WARN_ON(slot->mrq);
@@ -920,7 +921,8 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
*/
spin_lock_bh(&host->lock);
- if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
+ if (!(brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION) &&
+ !test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
spin_unlock_bh(&host->lock);
mrq->cmd->error = -ENOMEDIUM;
mmc_request_done(mmc, mrq);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH v3 8/8] mmc: dw_mmc: fix the checking whether card is present
2014-02-03 11:15 [PATCH v3 8/8] mmc: dw_mmc: fix the checking whether card is present Jaehoon Chung
@ 2014-02-06 11:29 ` Seungwon Jeon
2014-02-07 2:45 ` Jaehoon Chung
0 siblings, 1 reply; 3+ messages in thread
From: Seungwon Jeon @ 2014-02-06 11:29 UTC (permalink / raw)
To: 'Jaehoon Chung', linux-mmc
Cc: 'Chris Ball', 'Ulf Hansson'
On Mon, February 03, 2014, Jaehoon Chung wrote:
> Broken card detection is assumed "the card is present".
> Non-removable card didn't call get_cd().
> dw-mmc controller didn't check whether card is present or not.
> Because DW_MMC_CARD_PRESENT flag is set into dw_mci_get_cd().
> If cd-pin is used, then dw_mci_get_cd() is called.
>
> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
> ---
> drivers/mmc/host/dw_mmc.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index ac2907d..0d6ab8f 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -910,6 +910,7 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
> {
> struct dw_mci_slot *slot = mmc_priv(mmc);
> struct dw_mci *host = slot->host;
> + struct dw_mci_board *brd = host->pdata;
>
> WARN_ON(slot->mrq);
>
> @@ -920,7 +921,8 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
> */
> spin_lock_bh(&host->lock);
>
> - if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
> + if (!(brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION) &&
> + !test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
I think 'non-removable' property doesn't indicate DW_MCI_QUIRK_BROKEN_CARD_DETECTION.
Actually DW_MCI_QUIRK_BROKEN_CARD_DETECTION is set with 'broken-cd' property as quirk.
Still, DW_MMC_CARD_PRESENT flag won't be set with 'non-removable' property.
The following part was removed from commit bf626e5(mmc: dw_mmc: use slot-gpio to handle cd pin).
It would be better to restore that to resolved this problem.
<Quoted>
static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
@@ -2197,12 +2223,8 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
#endif /* CONFIG_MMC_DW_IDMAC */
}
- if (dw_mci_get_cd(mmc))
- set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
- else
- clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
-
</Quoted>
Then, Needed to check 'non-removable' case in dw_mci_get_cd().
I think MMC_CAP_NONREMOVABLE is useful.
Thanks,
Seungwon Jeon
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3 8/8] mmc: dw_mmc: fix the checking whether card is present
2014-02-06 11:29 ` Seungwon Jeon
@ 2014-02-07 2:45 ` Jaehoon Chung
0 siblings, 0 replies; 3+ messages in thread
From: Jaehoon Chung @ 2014-02-07 2:45 UTC (permalink / raw)
To: Seungwon Jeon, linux-mmc; +Cc: 'Chris Ball', 'Ulf Hansson'
On 02/06/2014 08:29 PM, Seungwon Jeon wrote:
> On Mon, February 03, 2014, Jaehoon Chung wrote:
>> Broken card detection is assumed "the card is present".
>> Non-removable card didn't call get_cd().
>> dw-mmc controller didn't check whether card is present or not.
>> Because DW_MMC_CARD_PRESENT flag is set into dw_mci_get_cd().
>> If cd-pin is used, then dw_mci_get_cd() is called.
>>
>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> ---
>> drivers/mmc/host/dw_mmc.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
>> index ac2907d..0d6ab8f 100644
>> --- a/drivers/mmc/host/dw_mmc.c
>> +++ b/drivers/mmc/host/dw_mmc.c
>> @@ -910,6 +910,7 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
>> {
>> struct dw_mci_slot *slot = mmc_priv(mmc);
>> struct dw_mci *host = slot->host;
>> + struct dw_mci_board *brd = host->pdata;
>>
>> WARN_ON(slot->mrq);
>>
>> @@ -920,7 +921,8 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
>> */
>> spin_lock_bh(&host->lock);
>>
>> - if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
>> + if (!(brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION) &&
>> + !test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
>
> I think 'non-removable' property doesn't indicate DW_MCI_QUIRK_BROKEN_CARD_DETECTION.
> Actually DW_MCI_QUIRK_BROKEN_CARD_DETECTION is set with 'broken-cd' property as quirk.
> Still, DW_MMC_CARD_PRESENT flag won't be set with 'non-removable' property.
Right, it's didn't indicate DW_MCI_QUIRK_BROKEN_CARD_DETECTION.
I think that the below approach is more reasonable.
>
> The following part was removed from commit bf626e5(mmc: dw_mmc: use slot-gpio to handle cd pin).
> It would be better to restore that to resolved this problem.
>
> <Quoted>
> static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
> @@ -2197,12 +2223,8 @@ static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
> #endif /* CONFIG_MMC_DW_IDMAC */
> }
>
> - if (dw_mci_get_cd(mmc))
> - set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
> - else
> - clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
> -
> </Quoted>
It's good. I will update after testing.
>
> Then, Needed to check 'non-removable' case in dw_mci_get_cd().
> I think MMC_CAP_NONREMOVABLE is useful.
Right. MMC_CAP_NONREMOVABLE is useful. When it's set, it needs not to check the card-status with polling system.
It's related with increasing a little performance.
Do you have any opinion for other patches?
Best Regards,
Jaehoon Chung
>
> Thanks,
> Seungwon Jeon
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-02-07 2:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-03 11:15 [PATCH v3 8/8] mmc: dw_mmc: fix the checking whether card is present Jaehoon Chung
2014-02-06 11:29 ` Seungwon Jeon
2014-02-07 2:45 ` Jaehoon Chung
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).