Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1267096
| From | Peter Ujfalusi <peter.ujfalusi@ti.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 4/4] dmaengine: omap-dma: Handle cases when the channel is polled for completion |
| Date | 2015-11-11 11:40 +0100 |
| Message-ID | <qtAYN-1zz-5@gated-at.bofh.it> (permalink) |
| References | <qtAYN-1zz-1@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
When a DMA client driver decides that it is not providing callback for completion of a transfer (and/or does not set the DMA_PREP_INTERRUPT) but it will poll the status of the transfer (in case of short memcpy for example) we will not get interrupt for the completion of the transfer and will not mark the transaction as done. Check the channel enable bit in the CCR when the status is queried and if the channel is no longer active, we call the omap_dma_callback() to handle the transfer completion. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> --- drivers/dma/omap-dma.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c index 4e4642f561f5..f86827ac0c8a 100644 --- a/drivers/dma/omap-dma.c +++ b/drivers/dma/omap-dma.c @@ -673,8 +673,14 @@ static enum dma_status omap_dma_tx_status(struct dma_chan *chan, struct omap_chan *c = to_omap_dma_chan(chan); struct virt_dma_desc *vd; enum dma_status ret; + uint32_t ccr; unsigned long flags; + ccr = omap_dma_chan_read(c, CCR); + /* The channel is no longer active, handle the completion right away */ + if (!(ccr & CCR_ENABLE)) + omap_dma_callback(c->dma_ch, 0, c); + ret = dma_cookie_status(chan, cookie, txstate); if (ret == DMA_COMPLETE || !txstate) return ret; -- 2.6.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 0/4] dmaengine: omap-dma: transfer start and short memcpy improvement Peter Ujfalusi <peter.ujfalusi@ti.com> - 2015-11-11 11:40 +0100 [PATCH 4/4] dmaengine: omap-dma: Handle cases when the channel is polled for completion Peter Ujfalusi <peter.ujfalusi@ti.com> - 2015-11-11 11:40 +0100 [PATCH 2/4] dmaengine: omap-dma: Clean up the prep_slave_sg sg list walk code Peter Ujfalusi <peter.ujfalusi@ti.com> - 2015-11-11 11:40 +0100 [PATCH 1/4] dmaengine: omap-dma: Correct status reporting for memcpy Peter Ujfalusi <peter.ujfalusi@ti.com> - 2015-11-11 11:40 +0100 [PATCH 3/4] dmaengine: omap-dma: Remove tasklet to start the transfers Peter Ujfalusi <peter.ujfalusi@ti.com> - 2015-11-11 11:40 +0100
csiph-web