On Thu, Nov 29, 2012 at 12:48:22PM +0800, Haijun Zhang wrote: > As large area erase needs long time usually a few minutes, > So we use max_discard_to to limit the size one request can > issue to avoid timeout. As our controller had the quirk > SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK so we need to assign the > timeout_clk and max_discard_to according to the max_dtr which > can be read after the card had setup and decoded, As esdhc-imx > also use this func and this quirk so this patch will also work > on esdhci-imx, but this patch only test on powerpc platform, if > there are any negative impact on esdhc-imx please let me know. > > Signed-off-by: Haijun Zhang <Haijun.Zhang@xxxxxxxxxxxxx> > Signed-off-by: Jerry Huang <Chang-Ming.Huang@xxxxxxxxxxxxx> Looks good, thanks. Reviewed-by: Anton Vorontsov <cbouatmailru@xxxxxxxxx> > --- > changes for v5: > - Split two variable in their own line > changes for v4: > - Apply the timeout clk after the card setup and reuse quirk > changes for v3: > - Add an empty line > > drivers/mmc/host/sdhci-esdhc.h | 9 +++++++++ > 1 files changed, 9 insertions(+), 0 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h > index d25f9ab..a9968e3 100644 > --- a/drivers/mmc/host/sdhci-esdhc.h > +++ b/drivers/mmc/host/sdhci-esdhc.h > @@ -47,6 +47,7 @@ static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock) > int pre_div = 2; > int div = 1; > u32 temp; > + u32 actual_clk; > > if (clock == 0) > goto out; > @@ -65,6 +66,8 @@ static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock) > dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n", > clock, host->max_clk / pre_div / div); > > + actual_clk = host->max_clk / pre_div / div; > + > pre_div >>= 1; > div--; > > @@ -74,6 +77,12 @@ static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock) > | (pre_div << ESDHC_PREDIV_SHIFT)); > sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); > mdelay(1); > + > + if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK) { > + host->timeout_clk = actual_clk / 1000; > + host->mmc->max_discard_to = (1 << 27) / host->timeout_clk; > + } > + > out: > host->clock = clock; > } > -- > 1.7.0.4 -- 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