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