2013/8/9 Haijun Zhang <Haijun.Zhang@xxxxxxxxxxxxx>: > 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@xxxxxxxxxxxxx> > --- > 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 -- 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