Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1549072 > unrolled thread
| Started by | M'boumba Cedric Madianga <cedric.madianga@gmail.com> |
|---|---|
| First post | 2017-01-02 10:40 +0100 |
| Last post | 2017-01-03 18:10 +0100 |
| Articles | 3 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH RESEND] dmaengine: stm32-dma: Rework starting transfer management M'boumba Cedric Madianga <cedric.madianga@gmail.com> - 2017-01-02 10:40 +0100
Re: [PATCH RESEND] dmaengine: stm32-dma: Rework starting transfer management Vinod Koul <vinod.koul@intel.com> - 2017-01-03 05:00 +0100
Re: [PATCH RESEND] dmaengine: stm32-dma: Rework starting transfer management "M'boumba Cedric Madianga" <cedric.madianga@gmail.com> - 2017-01-03 18:10 +0100
| From | M'boumba Cedric Madianga <cedric.madianga@gmail.com> |
|---|---|
| Date | 2017-01-02 10:40 +0100 |
| Subject | [PATCH RESEND] dmaengine: stm32-dma: Rework starting transfer management |
| Message-ID | <sV7fY-4MF-9@gated-at.bofh.it> |
This patch reworks the way to manage transfer starting.
Now, starting DMA is only allowed when the channel is not busy.
Then, stm32_dma_start_transfer is declared as void.
At least, after each transfer completion, we start the next transfer if a
new descriptor as been queued in the issued list during an ongoing
transfer.
Signed-off-by: M'boumba Cedric Madianga <cedric.madianga@gmail.com>
Reviewed-by: Ludovic BARRE <ludovic.barre@st.com>
---
drivers/dma/stm32-dma.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c
index 3056ce7..adb846c 100644
--- a/drivers/dma/stm32-dma.c
+++ b/drivers/dma/stm32-dma.c
@@ -421,7 +421,7 @@ static void stm32_dma_dump_reg(struct stm32_dma_chan *chan)
dev_dbg(chan2dev(chan), "SFCR: 0x%08x\n", sfcr);
}
-static int stm32_dma_start_transfer(struct stm32_dma_chan *chan)
+static void stm32_dma_start_transfer(struct stm32_dma_chan *chan)
{
struct stm32_dma_device *dmadev = stm32_dma_get_dev(chan);
struct virt_dma_desc *vdesc;
@@ -432,12 +432,12 @@ static int stm32_dma_start_transfer(struct stm32_dma_chan *chan)
ret = stm32_dma_disable_chan(chan);
if (ret < 0)
- return ret;
+ return;
if (!chan->desc) {
vdesc = vchan_next_desc(&chan->vchan);
if (!vdesc)
- return -EPERM;
+ return;
chan->desc = to_stm32_dma_desc(vdesc);
chan->next_sg = 0;
@@ -471,7 +471,7 @@ static int stm32_dma_start_transfer(struct stm32_dma_chan *chan)
chan->busy = true;
- return 0;
+ dev_dbg(chan2dev(chan), "vchan %p: started\n", &chan->vchan);
}
static void stm32_dma_configure_next_sg(struct stm32_dma_chan *chan)
@@ -552,15 +552,13 @@ static void stm32_dma_issue_pending(struct dma_chan *c)
{
struct stm32_dma_chan *chan = to_stm32_dma_chan(c);
unsigned long flags;
- int ret;
spin_lock_irqsave(&chan->vchan.lock, flags);
- if (!chan->busy) {
- if (vchan_issue_pending(&chan->vchan) && !chan->desc) {
- ret = stm32_dma_start_transfer(chan);
- if ((!ret) && (chan->desc->cyclic))
- stm32_dma_configure_next_sg(chan);
- }
+ if (vchan_issue_pending(&chan->vchan) && !chan->desc && !chan->busy) {
+ dev_dbg(chan2dev(chan), "vchan %p: issued\n", &chan->vchan);
+ stm32_dma_start_transfer(chan);
+ if (chan->desc->cyclic)
+ stm32_dma_configure_next_sg(chan);
}
spin_unlock_irqrestore(&chan->vchan.lock, flags);
}
--
1.9.1
[toc] | [next] | [standalone]
| From | Vinod Koul <vinod.koul@intel.com> |
|---|---|
| Date | 2017-01-03 05:00 +0100 |
| Subject | Re: [PATCH RESEND] dmaengine: stm32-dma: Rework starting transfer management |
| Message-ID | <sVoqt-cw-3@gated-at.bofh.it> |
| In reply to | #1549072 |
On Mon, Jan 02, 2017 at 10:33:27AM +0100, M'boumba Cedric Madianga wrote: > This patch reworks the way to manage transfer starting. > Now, starting DMA is only allowed when the channel is not busy. > Then, stm32_dma_start_transfer is declared as void. > At least, after each transfer completion, we start the next transfer if a > new descriptor as been queued in the issued list during an ongoing > transfer. ah sorry, i missed to push topic/stm32-dma. can you rebase onnthis and resend again. Btw this fails as as well.. -- ~Vinod
[toc] | [prev] | [next] | [standalone]
| From | "M'boumba Cedric Madianga" <cedric.madianga@gmail.com> |
|---|---|
| Date | 2017-01-03 18:10 +0100 |
| Message-ID | <sVAL0-10T-21@gated-at.bofh.it> |
| In reply to | #1549520 |
Hi Vinod, > ah sorry, i missed to push topic/stm32-dma. can you rebase onnthis and > resend again. Btw this fails as as well.. I have tried again and I don't have any issue. Please see below my way of working and let me know if there is something I don't understand: slave-dma git://git.infradead.org/users/vkoul/slave-dma.git $ git fetch slave-dma $ git checkout -b dma-fixes slave-dma/topic/dma-fixes $ git checkout -b dma-stm32 slave-dma/topic/stm32-dma $ git rebase dma-fixes First, rewinding head to replay your work on top of it... Applying: dmaengine: stm32-dma: Fix typo in Kconfig Applying: dt-bindings: stm32-dma: Fix typo regarding DMA client binding Applying: dmaengine: stm32-dma: Rework starting transfer management Applying: dmaengine: stm32-dma: Fix residue computation issue in cyclic mode Applying: dmaengine: stm32-dma: Add synchronization support Applying: dmaengine: stm32-dma: Add max_burst support Best regards, Cedric
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web