mmc: mmci: Re-work code starting DMA for the qcom variant
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 6 Mar 2019 14:04:53 +0000 (15:04 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 15 Apr 2019 09:55:54 +0000 (11:55 +0200)
Having mmci_dmae_start() to invoke the shared function, dml_start_xfer(),
explicitly for the qcom variant isn't very nice. Let's clean up this code
by moving the qcom specific parts into the qcom ->dma_start() callback and
then drop dml_start_xfer() altogether.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
drivers/mmc/host/mmci.c
drivers/mmc/host/mmci_qcom_dml.c
drivers/mmc/host/mmci_qcom_dml.h

index 387ff14587b873cd327e75286235dbbd86069c31..3e5baafb0ce2778d289657086404e039aac0517e 100644 (file)
@@ -886,15 +886,11 @@ int mmci_dmae_prep_data(struct mmci_host *host,
 int mmci_dmae_start(struct mmci_host *host, unsigned int *datactrl)
 {
        struct mmci_dmae_priv *dmae = host->dma_priv;
-       struct mmc_data *data = host->data;
 
        host->dma_in_progress = true;
        dmaengine_submit(dmae->desc_current);
        dma_async_issue_pending(dmae->cur);
 
-       if (host->variant->qcom_dml)
-               dml_start_xfer(host, data);
-
        *datactrl |= MCI_DPSM_DMAENABLE;
 
        return 0;
index b942d4aeeb77403f2521ba4b1f09e731f766e2fe..ccc1b1809e73ef7e096cf1b6f3536c79286e91ef 100644 (file)
 
 #define DML_OFFSET                     0x800
 
-void dml_start_xfer(struct mmci_host *host, struct mmc_data *data)
+static int qcom_dma_start(struct mmci_host *host, unsigned int *datactrl)
 {
        u32 config;
        void __iomem *base = host->base + DML_OFFSET;
+       struct mmc_data *data = host->data;
+       int ret = mmci_dmae_start(host, datactrl);
+
+       if (ret)
+               return ret;
 
        if (data->flags & MMC_DATA_READ) {
                /* Read operation: configure DML for producer operation */
@@ -96,6 +101,7 @@ void dml_start_xfer(struct mmci_host *host, struct mmc_data *data)
 
        /* make sure the dml is configured before dma is triggered */
        wmb();
+       return 0;
 }
 
 static int of_get_dml_pipe_index(struct device_node *np, const char *name)
@@ -188,7 +194,7 @@ static struct mmci_host_ops qcom_variant_ops = {
        .get_next_data = mmci_dmae_get_next_data,
        .dma_setup = qcom_dma_setup,
        .dma_release = mmci_dmae_release,
-       .dma_start = mmci_dmae_start,
+       .dma_start = qcom_dma_start,
        .dma_finalize = mmci_dmae_finalize,
        .dma_error = mmci_dmae_error,
 };
index fa16f6f4d4adb499abb24a6c171041d544fdea1b..7e87eb9c42380efbca249f68e930369252edbf4b 100644 (file)
 
 #ifdef CONFIG_MMC_QCOM_DML
 void qcom_variant_init(struct mmci_host *host);
-void dml_start_xfer(struct mmci_host *host, struct mmc_data *data);
 #else
 static inline void qcom_variant_init(struct mmci_host *host)
 {
 }
-static inline void dml_start_xfer(struct mmci_host *host, struct mmc_data *data)
-{
-}
 #endif /* CONFIG_MMC_QCOM_DML */
 
 #endif /* __MMC_QCOM_DML_H__ */