OSDN Git Service

mmc: sdhci: Add new quirk to use PIO for eMMC tuning commands
authorSahitya Tummala <stummala@codeaurora.org>
Tue, 5 Apr 2016 09:57:36 +0000 (15:27 +0530)
committerKyle Yan <kyan@codeaurora.org>
Tue, 14 Jun 2016 02:06:24 +0000 (19:06 -0700)
Some controllers have an issue using ADMA for tuning commands.
Add a quirk - SDHCI_QUIRK2_USE_PIO_FOR_EMMC_TUNING to use PIO
mode for tuning commands on those host controllers.

Change-Id: Id9625167d7e235fb3a20a6193889c1654b5c0cd8
Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
[subhashj@codeaurora.org: fixed trivial merge conflicts]
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.h

index 189f596..58a0652 100644 (file)
@@ -858,6 +858,10 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
        if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA))
                host->flags |= SDHCI_REQ_USE_DMA;
 
+       if ((host->quirks2 & SDHCI_QUIRK2_USE_PIO_FOR_EMMC_TUNING) &&
+               cmd->opcode == MMC_SEND_TUNING_BLOCK_HS200)
+               host->flags &= ~SDHCI_REQ_USE_DMA;
+
        /*
         * FIXME: This doesn't account for merging when mapping the
         * scatterlist.
index 7dcf6fe..da96397 100644 (file)
@@ -507,6 +507,12 @@ struct sdhci_host {
  * phase.
  */
 #define SDHCI_QUIRK2_NON_STANDARD_TUNING (1 << 28)
+/*
+ * Some controllers may use PIO mode to workaround HW issues in ADMA for
+ * eMMC tuning commands.
+ */
+#define SDHCI_QUIRK2_USE_PIO_FOR_EMMC_TUNING (1 << 23)
+
 
        int irq;                /* Device IRQ */
        void __iomem *ioaddr;   /* Mapped address */