Re: [PATCH V2] mmc:sdhci: Wait longer for command with busy flags

Zhang Haijun
2013-08-09T06:45:59Z

On 08/09/2013 02:39 PM, Barry Song wrote:
> 2013/8/9 Haijun Zhang <Haijun.Zhang@freescale.com>:
>> When command with busy flags send and also data busy end interrupt
>> will be generate, the command will be finished when data transfer
>> complete or data busy state end, Sometimes this will expend more than
>> 10*Hz time to finish this command, so we should wait longer to detect
>> command complete timeout err.
>>
>> Signed-off-by: Haijun Zhang <Haijun.Zhang@freescale.com>
>> ---
>> changes for V2:
>> - Correct the timer
>>
>> drivers/mmc/host/sdhci.c | 14 +++++++++++++-
>> 1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
>> index a78bd4f..8888578 100644
>> --- a/drivers/mmc/host/sdhci.c
>> +++ b/drivers/mmc/host/sdhci.c
>> @@ -986,6 +986,7 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
>> int flags;
>> u32 mask;
>> unsigned long timeout;
>> + u32 timer = 10;
>>
>> WARN_ON(host->cmd);
>>
>> @@ -1014,7 +1015,18 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
>> mdelay(1);
>> }
>>
>> - mod_timer(&host->timer, jiffies + 10 * HZ);
>> + /*
>> + * When send a commmand with busy state and also the data busy end
>> + * interrupt can be generate, the command will be finished when date
>> + * transfer complete or busy state end. Sometimes this will expend
>> + * more than 10*HZ, In this case whe should wait longer to detect
>> + * command complete timeout err.
>> + */
>> + if ((host->cmd->flags & MMC_RSP_BUSY) &&
>> + !(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ))
>> + timer = 1000;
>> +
>> + mod_timer(&host->timer, jiffies + timer * HZ);
> haojun, do you mean we need to wait for 1 minutes and 40 seconds for
> timeout? it seems it is too large for a kernel.
1000 * HZ = 1000 * 1 / 250 = 4000ms, about 4s. On my platform.
>
>> host->cmd = cmd;
>>
>> --
>> 1.8.0
>>
> -barry
>

--
Thanks & Regards

Haijun