summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSahitya Tummala <stummala@codeaurora.org>2016-04-12 13:25:41 +0530
committerKyle Yan <kyan@codeaurora.org>2016-06-13 19:06:22 -0700
commite692b64f846f8ceadb26afc2f7d7e69f77778a77 (patch)
treea0be7b82e33e1852515a0bf8a53e1f4cf8c5d1b8
parentd199adf139be36ad52a9c7b21cb1fba87178a2cc (diff)
mmc: sdhci: Implement set_transfer_params() cmdq host op
This is needed to set the dma mode for CQ transfers. The dma mode may be changed by the commands sent in legacy mode (like tuning which uses FIFO mode). Change-Id: Idaa2cb0c7712846f6827272caefc112b127ef818 Signed-off-by: Sahitya Tummala <stummala@codeaurora.org> [subhashj@codeaurora.org: fixed trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
-rw-r--r--drivers/mmc/host/sdhci.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 821f9ae46f83..af24ebf0adbf 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -3471,6 +3471,22 @@ struct sdhci_host *sdhci_alloc_host(struct device *dev,
EXPORT_SYMBOL_GPL(sdhci_alloc_host);
#ifdef CONFIG_MMC_CQ_HCI
+static void sdhci_cmdq_set_transfer_params(struct mmc_host *mmc)
+{
+ struct sdhci_host *host = mmc_priv(mmc);
+ u8 ctrl;
+
+ if (host->version >= SDHCI_SPEC_200) {
+ ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
+ ctrl &= ~SDHCI_CTRL_DMA_MASK;
+ if (host->flags & SDHCI_USE_ADMA_64BIT)
+ ctrl |= SDHCI_CTRL_ADMA64;
+ else
+ ctrl |= SDHCI_CTRL_ADMA32;
+ sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
+ }
+}
+
static void sdhci_cmdq_clear_set_irqs(struct mmc_host *mmc, bool clear)
{
struct sdhci_host *host = mmc_priv(mmc);
@@ -3567,6 +3583,10 @@ static void sdhci_cmdq_post_cqe_halt(struct mmc_host *mmc)
sdhci_writel(host, SDHCI_INT_RESPONSE, SDHCI_INT_STATUS);
}
#else
+static void sdhci_cmdq_set_transfer_params(struct mmc_host *mmc)
+{
+
+}
static void sdhci_cmdq_clear_set_irqs(struct mmc_host *mmc, bool clear)
{
@@ -3627,6 +3647,7 @@ static const struct cmdq_host_ops sdhci_cmdq_ops = {
.crypto_cfg = sdhci_cmdq_crypto_cfg,
.crypto_cfg_reset = sdhci_cmdq_crypto_cfg_reset,
.post_cqe_halt = sdhci_cmdq_post_cqe_halt,
+ .set_transfer_params = sdhci_cmdq_set_transfer_params,
};
#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT