Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea27c95a authored by Ulf Hansson's avatar Ulf Hansson
Browse files

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: default avatarUlf Hansson <ulf.hansson@linaro.org>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent c21aa7a8
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -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;
+8 −2
Original line number Diff line number Diff line
@@ -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,
};
+0 −4
Original line number Diff line number Diff line
@@ -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__ */