mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: dmaengine@vger.kernel.org, Vinod Koul <vinod.koul@intel.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
	"Antoine Ténart" <antoine@free-electrons.com>,
	lars@metafoo.de, "Russell King" <linux@arm.linux.org.uk>,
	"Maxime Ripard" <maxime.ripard@free-electrons.com>,
	"Dan Williams" <dan.j.williams@intel.com>
Subject: [PATCH v2 21/53] dmaengine: ipu-idmac: Split device_control
Date: Thu, 16 Oct 2014 12:17:20 +0200	[thread overview]
Message-ID: <1413454672-27400-22-git-send-email-maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <1413454672-27400-1-git-send-email-maxime.ripard@free-electrons.com>

Split the device_control callback of the IPU IDMAC driver to make use
of the newly introduced callbacks, that will eventually be used to retrieve
slave capabilities.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/dma/ipu/ipu_idmac.c | 96 ++++++++++++++++++++++++---------------------
 1 file changed, 51 insertions(+), 45 deletions(-)

diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c
index bbf62927bd72..b36f5a47578a 100644
--- a/drivers/dma/ipu/ipu_idmac.c
+++ b/drivers/dma/ipu/ipu_idmac.c
@@ -1398,76 +1398,81 @@ static void idmac_issue_pending(struct dma_chan *chan)
 	 */
 }
 
-static int __idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
-			   unsigned long arg)
+static int idmac_pause(struct dma_chan *chan)
 {
 	struct idmac_channel *ichan = to_idmac_chan(chan);
 	struct idmac *idmac = to_idmac(chan->device);
 	struct ipu *ipu = to_ipu(idmac);
 	struct list_head *list, *tmp;
 	unsigned long flags;
-	int i;
 
-	switch (cmd) {
-	case DMA_PAUSE:
-		spin_lock_irqsave(&ipu->lock, flags);
-		ipu_ic_disable_task(ipu, chan->chan_id);
+	mutex_lock(&ichan->chan_mutex);
 
-		/* Return all descriptors into "prepared" state */
-		list_for_each_safe(list, tmp, &ichan->queue)
-			list_del_init(list);
+	spin_lock_irqsave(&ipu->lock, flags);
+	ipu_ic_disable_task(ipu, chan->chan_id);
 
-		ichan->sg[0] = NULL;
-		ichan->sg[1] = NULL;
+	/* Return all descriptors into "prepared" state */
+	list_for_each_safe(list, tmp, &ichan->queue)
+		list_del_init(list);
 
-		spin_unlock_irqrestore(&ipu->lock, flags);
+	ichan->sg[0] = NULL;
+	ichan->sg[1] = NULL;
 
-		ichan->status = IPU_CHANNEL_INITIALIZED;
-		break;
-	case DMA_TERMINATE_ALL:
-		ipu_disable_channel(idmac, ichan,
-				    ichan->status >= IPU_CHANNEL_ENABLED);
+	spin_unlock_irqrestore(&ipu->lock, flags);
 
-		tasklet_disable(&ipu->tasklet);
+	ichan->status = IPU_CHANNEL_INITIALIZED;
 
-		/* ichan->queue is modified in ISR, have to spinlock */
-		spin_lock_irqsave(&ichan->lock, flags);
-		list_splice_init(&ichan->queue, &ichan->free_list);
+	mutex_unlock(&ichan->chan_mutex);
 
-		if (ichan->desc)
-			for (i = 0; i < ichan->n_tx_desc; i++) {
-				struct idmac_tx_desc *desc = ichan->desc + i;
-				if (list_empty(&desc->list))
-					/* Descriptor was prepared, but not submitted */
-					list_add(&desc->list, &ichan->free_list);
+	return 0;
+}
 
-				async_tx_clear_ack(&desc->txd);
-			}
+static int __idmac_terminate_all(struct dma_chan *chan)
+{
+	struct idmac_channel *ichan = to_idmac_chan(chan);
+	struct idmac *idmac = to_idmac(chan->device);
+	struct ipu *ipu = to_ipu(idmac);
+	unsigned long flags;
+	int i;
 
-		ichan->sg[0] = NULL;
-		ichan->sg[1] = NULL;
-		spin_unlock_irqrestore(&ichan->lock, flags);
+	ipu_disable_channel(idmac, ichan,
+			    ichan->status >= IPU_CHANNEL_ENABLED);
 
-		tasklet_enable(&ipu->tasklet);
+	tasklet_disable(&ipu->tasklet);
 
-		ichan->status = IPU_CHANNEL_INITIALIZED;
-		break;
-	default:
-		return -ENOSYS;
-	}
+	/* ichan->queue is modified in ISR, have to spinlock */
+	spin_lock_irqsave(&ichan->lock, flags);
+	list_splice_init(&ichan->queue, &ichan->free_list);
+
+	if (ichan->desc)
+		for (i = 0; i < ichan->n_tx_desc; i++) {
+			struct idmac_tx_desc *desc = ichan->desc + i;
+			if (list_empty(&desc->list))
+				/* Descriptor was prepared, but not submitted */
+				list_add(&desc->list, &ichan->free_list);
+
+			async_tx_clear_ack(&desc->txd);
+		}
+
+	ichan->sg[0] = NULL;
+	ichan->sg[1] = NULL;
+	spin_unlock_irqrestore(&ichan->lock, flags);
+
+	tasklet_enable(&ipu->tasklet);
+
+	ichan->status = IPU_CHANNEL_INITIALIZED;
 
 	return 0;
 }
 
-static int idmac_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
-			 unsigned long arg)
+static int idmac_terminate_all(struct dma_chan *chan)
 {
 	struct idmac_channel *ichan = to_idmac_chan(chan);
 	int ret;
 
 	mutex_lock(&ichan->chan_mutex);
 
-	ret = __idmac_control(chan, cmd, arg);
+	ret = __idmac_terminate_all(chan);
 
 	mutex_unlock(&ichan->chan_mutex);
 
@@ -1568,7 +1573,7 @@ static void idmac_free_chan_resources(struct dma_chan *chan)
 
 	mutex_lock(&ichan->chan_mutex);
 
-	__idmac_control(chan, DMA_TERMINATE_ALL, 0);
+	__idmac_terminate_all(chan);
 
 	if (ichan->status > IPU_CHANNEL_FREE) {
 #ifdef DEBUG
@@ -1622,7 +1627,8 @@ static int __init ipu_idmac_init(struct ipu *ipu)
 
 	/* Compulsory for DMA_SLAVE fields */
 	dma->device_prep_slave_sg		= idmac_prep_slave_sg;
-	dma->device_control			= idmac_control;
+	dma->device_pause			= idmac_pause;
+	dma->device_terminate_all		= idmac_terminate_all;
 
 	INIT_LIST_HEAD(&dma->channels);
 	for (i = 0; i < IPU_CHANNELS_NUM; i++) {
@@ -1655,7 +1661,7 @@ static void ipu_idmac_exit(struct ipu *ipu)
 	for (i = 0; i < IPU_CHANNELS_NUM; i++) {
 		struct idmac_channel *ichan = ipu->channel + i;
 
-		idmac_control(&ichan->dma_chan, DMA_TERMINATE_ALL, 0);
+		idmac_terminate_all(&ichan->dma_chan);
 	}
 
 	dma_async_device_unregister(&idmac->dma);
-- 
2.1.1


  parent reply	other threads:[~2014-10-16 10:20 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-16 10:16 [PATCH v2 00/53] dmaengine: Implement generic slave capabilities retrieval Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 01/53] dmaengine: Make the destination abbreviation coherent Maxime Ripard
2014-10-16 10:25   ` Mark Brown
2014-10-16 10:32   ` Laurent Pinchart
2014-10-16 15:26   ` Stephen Warren
2014-10-16 10:17 ` [PATCH v2 02/53] dmaengine: Make channel allocation callbacks optional Maxime Ripard
2014-10-16 10:35   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 03/53] dmaengine: Introduce a device_config callback Maxime Ripard
2014-10-16 10:44   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 04/53] dmaengine: split out pause/resume operations from device_control Maxime Ripard
2014-10-16 10:45   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 05/53] dmaengine: Add device_terminate_all callback Maxime Ripard
2014-10-16 10:46   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 06/53] dmaengine: Create a generic dma_slave_caps callback Maxime Ripard
2014-10-16 16:15   ` Laurent Pinchart
2014-10-16 16:24     ` Maxime Ripard
2014-10-22 20:16       ` Laurent Pinchart
2014-10-23  8:08         ` Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 07/53] dmaengine: Move slave caps to dma_device Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 08/53] dmaengine: pl08x: Split device_control Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 09/53] dmaengine: hdmac: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 10/53] dmaengine: bcm2835: " Maxime Ripard
2014-10-16 15:27   ` Stephen Warren
2014-10-16 10:17 ` [PATCH v2 11/53] dmaengine: coh901318: " Maxime Ripard
2014-10-28 14:40   ` Linus Walleij
2014-10-16 10:17 ` [PATCH v2 12/53] dmaengine: cppi41: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 13/53] dmaengine: jz4740: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 14/53] dmaengine: dw: " Maxime Ripard
2014-10-16 11:17   ` Andy Shevchenko
2014-10-16 14:05     ` Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 15/53] dmaengine: edma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 16/53] dmaengine: ep93xx: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 17/53] dmaengine: fsl-edma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 18/53] dmaengine: imx: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 19/53] dmaengine: imx-sdma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 20/53] dmaengine: intel-mid-dma: " Maxime Ripard
2014-10-16 10:17 ` Maxime Ripard [this message]
2014-10-16 10:17 ` [PATCH v2 22/53] dmaengine: k3: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 23/53] dmaengine: mmp-pdma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 24/53] dmaengine: mmp-tdma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 25/53] dmaengine: moxart: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 26/53] dmaengine: fsl-dma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 27/53] dmaengine: mpc512x: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 28/53] dmaengine: mxs: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 29/53] dmaengine: nbpfaxi: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 30/53] dmaengine: omap: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 31/53] dmaengine: pl330: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 32/53] dmaengine: bam-dma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 33/53] dmaengine: s3c24xx: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 34/53] dmaengine: sa11x0: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 35/53] dmaengine: sh: " Maxime Ripard
2014-10-16 16:17   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 36/53] dmaengine: sirf: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 37/53] dmaengine: sun6i: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 38/53] dmaengine: d40: " Maxime Ripard
2014-10-28 14:41   ` Linus Walleij
2014-10-16 10:17 ` [PATCH v2 39/53] dmaengine: tegra20: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 40/53] dmaengine: xilinx: " Maxime Ripard
2014-10-16 16:20   ` Laurent Pinchart
2014-10-16 10:17 ` [PATCH v2 41/53] dmaengine: mv_xor: Remove device_control Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 42/53] dmaengine: pch-dma: Rename device_control Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 43/53] dmaengine: td: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 44/53] dmaengine: txx9: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 45/53] dmaengine: bcm2835: Declare slave capabilities for the generic code Maxime Ripard
2014-10-16 15:27   ` Stephen Warren
2014-10-16 10:17 ` [PATCH v2 46/53] dmaengine: fsl-edma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 47/53] dmaengine: edma: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 48/53] dmaengine: nbpfaxi: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 49/53] dmaengine: omap: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 50/53] dmaengine: pl330: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 51/53] dmaengine: sirf: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 52/53] dmaengine: sun6i: " Maxime Ripard
2014-10-16 10:17 ` [PATCH v2 53/53] dmaengine: Mark device_control and device_slave_caps as deprecated Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1413454672-27400-22-git-send-email-maxime.ripard@free-electrons.com \
    --to=maxime.ripard@free-electrons.com \
    --cc=antoine@free-electrons.com \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=lars@metafoo.de \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=vinod.koul@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®