| From patchwork Thu Jun 28 08:13:30 2018 |
| Content-Type: text/plain; charset="utf-8" |
| MIME-Version: 1.0 |
| Content-Transfer-Encoding: 7bit |
| Subject: [2/3] mmc: sdhci: add quirk to prevent higher speed modes |
| From: Stefan Agner <stefan@agner.ch> |
| X-Patchwork-Id: 10493273 |
| Message-Id: <20180628081331.13051-3-stefan@agner.ch> |
| To: adrian.hunter@intel.com, ulf.hansson@linaro.org |
| Cc: fabio.estevam@nxp.com, haibo.chen@nxp.com, aisheng.dong@nxp.com, |
| michael@amarulasolutions.com, rmk+kernel@armlinux.org.uk, |
| linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, |
| Stefan Agner <stefan@agner.ch> |
| Date: Thu, 28 Jun 2018 10:13:30 +0200 |
| |
| Some hosts are capable of running higher speed modes but do not |
| have the board support for it. Introduce a quirk which prevents |
| the stack from using modes running at 100MHz or faster. |
| |
| Signed-off-by: Stefan Agner <stefan@agner.ch> |
| |
| drivers/mmc/host/sdhci.c | 8 ++++++++ |
| drivers/mmc/host/sdhci.h | 2 ++ |
| 2 files changed, 10 insertions(+) |
| |
| diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c |
| index 1c828e0e9905..8ac257dfaab3 100644 |
| |
| |
| @@ -3749,6 +3749,14 @@ int sdhci_setup_host(struct sdhci_host *host) |
| } |
| } |
| |
| + if (host->quirks2 & SDHCI_QUIRK2_NO_UHS_HS200_HS400) { |
| + host->caps1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | |
| + SDHCI_SUPPORT_DDR50); |
| + |
| + mmc->caps2 &= ~(MMC_CAP2_HSX00_1_8V | MMC_CAP2_HSX00_1_2V | |
| + MMC_CAP2_HS400_ES); |
| + } |
| + |
| if (host->quirks2 & SDHCI_QUIRK2_NO_1_8_V) { |
| host->caps1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | |
| SDHCI_SUPPORT_DDR50); |
| diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h |
| index 23966f887da6..cb2433d6d61f 100644 |
| |
| |
| @@ -450,6 +450,8 @@ struct sdhci_host { |
| * obtainable timeout. |
| */ |
| #define SDHCI_QUIRK2_DISABLE_HW_TIMEOUT (1<<17) |
| +/* Do not support any higher speeds (>50MHz) */ |
| +#define SDHCI_QUIRK2_NO_UHS_HS200_HS400 (1<<18) |
| |
| int irq; /* Device IRQ */ |
| void __iomem *ioaddr; /* Mapped address */ |