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

Barry Song
2013-08-09T06:46:11Z

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.

>
> host->cmd = cmd;
>
> --
> 1.8.0
>

-barry