linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mmc: sdhci: don't limit discard timeout by data line timeout
@ 2013-11-21 15:07 Vladimir Zapolskiy
  2013-11-22 11:38 ` Adrian Hunter
  0 siblings, 1 reply; 19+ messages in thread
From: Vladimir Zapolskiy @ 2013-11-21 15:07 UTC (permalink / raw)
  To: linux-mmc; +Cc: Ed Sutter, Chris Ball, Adrian Hunter

JEDEC specification defines quite high erase timeout value for 300ms
multiplied by erase group number, and SD Host Controller specification
data line timeout may be much less, e.g. 2^13 / 52MHz ~ 160us.

>From block layer and MMC perfromance perspective it is desirable that
millions of erase groups are discarded at once, so there is no much
sense to limit maximum erase timeout by data line timeout, if a
controller handles correctly erase operation without indication of
data line timeout.

Potentially the change may break some of the SDHCs on discard of mmc,
and for backward compatibility a new quirk is introduced, which is NOT
set by default.

Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Reported-by: Ed Sutter <ed.sutter@alcatel-lucent.com>
Cc: Chris Ball <cjb@laptop.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
---
 drivers/mmc/host/sdhci.c  |    5 ++++-
 include/linux/mmc/sdhci.h |    1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index bd8a098..b1fdddb 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2930,7 +2930,10 @@ int sdhci_add_host(struct sdhci_host *host)
 	if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)
 		host->timeout_clk = mmc->f_max / 1000;
 
-	mmc->max_discard_to = (1 << 27) / host->timeout_clk;
+	if (host->quirks2 & SDHCI_QUIRK2_DATA_TIMEOUT_ON_DISCARD)
+		mmc->max_discard_to = (1 << 27) / host->timeout_clk;
+	else
+		mmc->max_discard_to = 0;
 
 	mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23;
 
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
index 3e781b8..e7f6bd2 100644
--- a/include/linux/mmc/sdhci.h
+++ b/include/linux/mmc/sdhci.h
@@ -98,6 +98,7 @@ struct sdhci_host {
 #define SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON		(1<<4)
 /* Controller has a non-standard host control register */
 #define SDHCI_QUIRK2_BROKEN_HOST_CONTROL		(1<<5)
+#define SDHCI_QUIRK2_DATA_TIMEOUT_ON_DISCARD		(1<<6)
 
 	int irq;		/* Device IRQ */
 	void __iomem *ioaddr;	/* Mapped address */
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2013-11-29  7:33 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-21 15:07 [PATCH] mmc: sdhci: don't limit discard timeout by data line timeout Vladimir Zapolskiy
2013-11-22 11:38 ` Adrian Hunter
2013-11-22 12:24   ` Vladimir Zapolskiy
2013-11-22 13:04     ` Adrian Hunter
2013-11-22 13:50       ` Vladimir Zapolskiy
2013-11-22 15:04         ` Adrian Hunter
2013-11-22 15:21           ` Vladimir Zapolskiy
2013-11-26  9:04             ` Adrian Hunter
2013-11-26 16:33               ` Vladimir Zapolskiy
2013-11-27  8:21                 ` Adrian Hunter
2013-11-27 14:57                   ` Vladimir Zapolskiy
2013-11-27 15:48                     ` Philip Rakity
2013-11-27 16:11                       ` Vladimir Zapolskiy
2013-11-28  7:12                     ` Adrian Hunter
2013-11-28 11:48                       ` Vladimir Zapolskiy
2013-11-28 13:06                         ` Adrian Hunter
2013-11-29  7:33                           ` Vladimir Zapolskiy
2013-11-25 18:20       ` Ed Sutter
2013-11-25 22:06         ` Vladimir Zapolskiy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).