From: Vinod Koul <vinod.koul@intel.com>
To: Joel Fernandes <joelf@ti.com>
Cc: dmaengine@vger.kernel.org, Matt Porter <matt@ohporter.com>,
Russell King <linux@arm.linux.org.uk>, Dan Williams <djbw@fb.com>,
Jyri Sarha <jsarha@ti.com>, Lars Peter-Clausen <lars@metafoo.de>,
Linux OMAP List <linux-omap@vger.kernel.org>,
Linux ARM Kernel List <linux-arm-kernel@lists.infradead.org>,
Linux DaVinci Kernel List
<davinci-linux-open-source@linux.davincidsp.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
alsa-devel@alsa-project.org
Subject: Re: [PATCH 2/3] dma: edma: Add support for Cyclic DMA
Date: Thu, 31 Oct 2013 19:40:12 +0530 [thread overview]
Message-ID: <20131031141012.GJ18788@intel.com> (raw)
In-Reply-To: <52695F6E.4030002@ti.com>
On Thu, Oct 24, 2013 at 12:57:02PM -0500, Joel Fernandes wrote:
> Rebased on slave-dma/next branch and reapplied:
Looks like your MUA caused lines to get wrapped and patch is corrupt, can you
pls resend again using git-send email. I tried even the patch from
patchworks but that too failed!
>
> ----8<---
> From: Joel Fernandes <joelf@ti.com>
> Subject: [PATCH v2] dma: edma: Add support for Cyclic DMA
>
> Using the PaRAM configuration function that we split for reuse by the
> different DMA types, we implement Cyclic DMA support.
> For the cyclic case, we pass different configuration parameters to this
> function, and handle all the Cyclic-specific functionality separately.
>
> Callbacks to the DMA users are handled using vchan_cyclic_callback in
> the virt-dma layer. Linking is handled the same way as the slave SG case
> except for the last slot where we link it back to the first one in a
> cyclic fashion.
>
> For continuity, we check for cases where no.of periods is great than the
> MAX number of slots the driver can allocate for a particular descriptor
> and error out on such cases.
>
> Signed-off-by: Joel Fernandes <joelf@ti.com>
> ---
> drivers/dma/edma.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 151 insertions(+), 8 deletions(-)
>
> struct edma_chan *echan = data;
> @@ -464,24 +602,28 @@ static void edma_callback(unsigned ch_num, u16 ch_status,
> void *data)
This seems bad
> unsigned long flags;
> struct edmacc_param p;
>
> - /* Pause the channel */
> - edma_pause(echan->ch_num);
> + edesc = echan->edesc;
> +
> + /* Pause the channel for non-cyclic */
> + if (!edesc || (edesc && !edesc->cyclic))
> + edma_pause(echan->ch_num);
>
> switch (ch_status) {
> case DMA_COMPLETE:
> spin_lock_irqsave(&echan->vchan.lock, flags);
>
> - edesc = echan->edesc;
> if (edesc) {
> - if (edesc->processed == edesc->pset_nr) {
> + if (edesc->cyclic) {
> + vchan_cyclic_callback(&edesc->vdesc);
> + } else if (edesc->processed == edesc->pset_nr) {
> dev_dbg(dev, "Transfer complete, stopping channel %d\n", ch_num);
> edma_stop(echan->ch_num);
> vchan_cookie_complete(&edesc->vdesc);
> + edma_execute(echan);
> } else {
> dev_dbg(dev, "Intermediate transfer complete on channel %d\n", ch_num);
> + edma_execute(echan);
> }
> -
> - edma_execute(echan);
> }
>
> spin_unlock_irqrestore(&echan->vchan.lock, flags);
> @@ -677,6 +819,7 @@ static void edma_dma_init(struct edma_cc *ecc, struct
> dma_device *dma,
ditto and few other which checkpatch was not happy about!
> struct device *dev)
> {
> dma->device_prep_slave_sg = edma_prep_slave_sg;
> + dma->device_prep_dma_cyclic = edma_prep_dma_cyclic;
> dma->device_alloc_chan_resources = edma_alloc_chan_resources;
> dma->device_free_chan_resources = edma_free_chan_resources;
> dma->device_issue_pending = edma_issue_pending;
> --
> 1.8.1.2
>
--
~Vinod
WARNING: multiple messages have this Message-ID (diff)
From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/3] dma: edma: Add support for Cyclic DMA
Date: Thu, 31 Oct 2013 19:40:12 +0530 [thread overview]
Message-ID: <20131031141012.GJ18788@intel.com> (raw)
In-Reply-To: <52695F6E.4030002@ti.com>
On Thu, Oct 24, 2013 at 12:57:02PM -0500, Joel Fernandes wrote:
> Rebased on slave-dma/next branch and reapplied:
Looks like your MUA caused lines to get wrapped and patch is corrupt, can you
pls resend again using git-send email. I tried even the patch from
patchworks but that too failed!
>
> ----8<---
> From: Joel Fernandes <joelf@ti.com>
> Subject: [PATCH v2] dma: edma: Add support for Cyclic DMA
>
> Using the PaRAM configuration function that we split for reuse by the
> different DMA types, we implement Cyclic DMA support.
> For the cyclic case, we pass different configuration parameters to this
> function, and handle all the Cyclic-specific functionality separately.
>
> Callbacks to the DMA users are handled using vchan_cyclic_callback in
> the virt-dma layer. Linking is handled the same way as the slave SG case
> except for the last slot where we link it back to the first one in a
> cyclic fashion.
>
> For continuity, we check for cases where no.of periods is great than the
> MAX number of slots the driver can allocate for a particular descriptor
> and error out on such cases.
>
> Signed-off-by: Joel Fernandes <joelf@ti.com>
> ---
> drivers/dma/edma.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 151 insertions(+), 8 deletions(-)
>
> struct edma_chan *echan = data;
> @@ -464,24 +602,28 @@ static void edma_callback(unsigned ch_num, u16 ch_status,
> void *data)
This seems bad
> unsigned long flags;
> struct edmacc_param p;
>
> - /* Pause the channel */
> - edma_pause(echan->ch_num);
> + edesc = echan->edesc;
> +
> + /* Pause the channel for non-cyclic */
> + if (!edesc || (edesc && !edesc->cyclic))
> + edma_pause(echan->ch_num);
>
> switch (ch_status) {
> case DMA_COMPLETE:
> spin_lock_irqsave(&echan->vchan.lock, flags);
>
> - edesc = echan->edesc;
> if (edesc) {
> - if (edesc->processed == edesc->pset_nr) {
> + if (edesc->cyclic) {
> + vchan_cyclic_callback(&edesc->vdesc);
> + } else if (edesc->processed == edesc->pset_nr) {
> dev_dbg(dev, "Transfer complete, stopping channel %d\n", ch_num);
> edma_stop(echan->ch_num);
> vchan_cookie_complete(&edesc->vdesc);
> + edma_execute(echan);
> } else {
> dev_dbg(dev, "Intermediate transfer complete on channel %d\n", ch_num);
> + edma_execute(echan);
> }
> -
> - edma_execute(echan);
> }
>
> spin_unlock_irqrestore(&echan->vchan.lock, flags);
> @@ -677,6 +819,7 @@ static void edma_dma_init(struct edma_cc *ecc, struct
> dma_device *dma,
ditto and few other which checkpatch was not happy about!
> struct device *dev)
> {
> dma->device_prep_slave_sg = edma_prep_slave_sg;
> + dma->device_prep_dma_cyclic = edma_prep_dma_cyclic;
> dma->device_alloc_chan_resources = edma_alloc_chan_resources;
> dma->device_free_chan_resources = edma_free_chan_resources;
> dma->device_issue_pending = edma_issue_pending;
> --
> 1.8.1.2
>
--
~Vinod
next prev parent reply other threads:[~2013-10-31 14:10 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-23 23:05 [PATCH 0/3] dma: edma: Add cyclic DMA support Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
[not found] ` <1379977515-3794-1-git-send-email-joelf-l0cyMroinI0@public.gmane.org>
2013-09-23 23:05 ` [PATCH 1/3] dma: edma: Split out PaRAM set calculations into its own function Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-10-21 7:26 ` Vinod Koul
2013-10-21 7:26 ` Vinod Koul
2013-09-23 23:05 ` [PATCH 2/3] dma: edma: Add support for Cyclic DMA Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-10-21 6:53 ` Vinod Koul
2013-10-21 6:53 ` Vinod Koul
[not found] ` <20131021065319.GM14013-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-10-22 15:30 ` Joel Fernandes
2013-10-22 15:30 ` Joel Fernandes
2013-10-22 15:30 ` Joel Fernandes
2013-10-24 16:38 ` Vinod Koul
2013-10-24 16:38 ` Vinod Koul
[not found] ` <20131024163829.GA21230-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-10-24 17:57 ` Joel Fernandes
2013-10-24 17:57 ` Joel Fernandes
2013-10-24 17:57 ` Joel Fernandes
2013-10-31 14:10 ` Vinod Koul [this message]
2013-10-31 14:10 ` Vinod Koul
[not found] ` <20131031141012.GJ18788-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-10-31 16:03 ` Joel Fernandes
2013-10-31 16:03 ` Joel Fernandes
2013-10-31 16:03 ` Joel Fernandes
2013-09-23 23:05 ` [PATCH 3/3] dma: edma: Increase maximum SG limit to 20 Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-09-23 23:05 ` Joel Fernandes
2013-10-21 7:26 ` Vinod Koul
2013-10-21 7:26 ` Vinod Koul
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=20131031141012.GJ18788@intel.com \
--to=vinod.koul@intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=davinci-linux-open-source@linux.davincidsp.com \
--cc=djbw@fb.com \
--cc=dmaengine@vger.kernel.org \
--cc=joelf@ti.com \
--cc=jsarha@ti.com \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=matt@ohporter.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.