mmc: mmci: Re-work code starting DMA for the qcom variant
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>
This commit is contained in:
Родитель
c21aa7a804
Коммит
ea27c95a7a
|
@ -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;
|
||||
|
|
|
@ -54,10 +54,15 @@
|
|||
|
||||
#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,
|
||||
};
|
||||
|
|
|
@ -17,14 +17,10 @@
|
|||
|
||||
#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__ */
|
||||
|
|
Загрузка…
Ссылка в новой задаче