Re: [RFC Patch] SDHCI: add quirk for data timeout value when card busy.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Philip.

I know defined that quirk to force the timeout to 0xe.
But..i found some card occured data timeout error when suspend/resume.

actually you can confuse quirk's name..because i use temporary that.
(if need change quirk name, i can)

The problem is below.

1. card probe is done
2. card suspend entered
3. when card resuming, appeared data timeout error. then card removed.

I understood this problem that occured interrupt at incorret time.
(during send cmd6, occured fire busy)
So need set timeout value at Timeout register, in order to not occur interrupt.

And this problem appeared from specific card, so i think good that used quirk


Philip Rakity wrote:
> The problem is a little more complicated then this.  During out testing of multiple sd/mmc cards we found some cards that gave incorrect timeout values.   The solution was to define the existing quirk to force the timeout to 0xe.
> 
> The timeout problems had nothing to do with the controller being broken nor with suspend/resume.
> 
> ________________________________________
> From: linux-mmc-owner@xxxxxxxxxxxxxxx [linux-mmc-owner@xxxxxxxxxxxxxxx] On Behalf Of Jaehoon Chung [jh80.chung@xxxxxxxxxxx]
> Sent: Monday, November 29, 2010 10:13 PM
> To: linux-mmc@xxxxxxxxxxxxxxx
> Cc: Chris Ball; kyungmin Park; Andrew Morton; matt@xxxxxxxxxxxxxxxxx
> Subject: [RFC Patch] SDHCI: add quirk for data timeout value when card busy.
> 
> This patch is added quirks for data timeout value.
> 
> Some card have problem when suspend/resume.
> CMD6(switch command) to switch the bus to high speed mode
> and to set the bus width.
> 
> After resuming, the card was initialized...in that time, some
> card need set a correct timeout value.
> so we add SDHCI_QUIRK_SET_DATA_TIMEOUT_VAL.
> 
> Let me know any comment, plz.
> 
> Signed-off-by: Jaehoon Chung <jh80.chung@xxxxxxxxxxx>
>  Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
> 
> ---
>  drivers/mmc/host/sdhci.c  |    6 +++++-
>  include/linux/mmc/sdhci.h |    3 ++-
>  2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 782c0ee..3b93d97 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -655,8 +655,12 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
> 
>         WARN_ON(host->data);
> 
> -       if (data == NULL)
> +       if (data == NULL) {
> +               if ((host->quirks & SDHCI_QUIRK_SET_DATA_TIMEOUT_VAL) &&
> +                               (host->cmd->flags & MMC_RSP_BUSY))
> +                       sdhci_writel(host, 0xE, SDHCI_TIMEOUT_CONTROL);
>                 return;
> +       }
> 
>         /* Sanity checks */
>         BUG_ON(data->blksz * data->blocks > 524288);
> diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
> index 1fdc673..315ff49 100644
> --- a/include/linux/mmc/sdhci.h
> +++ b/include/linux/mmc/sdhci.h
> @@ -83,7 +83,8 @@ struct sdhci_host {
>  #define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12             (1<<28)
>  /* Controller doesn't have HISPD bit field in HI-SPEED SD card */
>  #define SDHCI_QUIRK_NO_HISPD_BIT                       (1<<29)
> -
> +/* Controller need set data timeout value when card is busy */
> +#define SDHCI_QUIRK_SET_DATA_TIMEOUT_VAL               (1<<30)
>         int irq;                /* Device IRQ */
>         void __iomem *ioaddr;   /* Mapped address */
> 
> --
> 1.6.0.4
> 
> Thanks
> Jaehoon Chung
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> 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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux