bcfb7465c0
When creating a DMA transaction with multiple descriptors, the async_tx cookie is set to 0 for each descriptor in the chain, excluding the last descriptor, whose cookie is set to -EBUSY. When fsl_dma_tx_submit() is run, it only assigns a cookie to the first descriptor. All of the remaining descriptors keep their original value, including the last descriptor, which is set to -EBUSY. After the DMA completes, the driver will update the last completed cookie to be -EBUSY, which is an error code instead of a valid cookie. This causes dma_async_is_complete() to always return DMA_IN_PROGRESS. This causes the fsldma driver to never cleanup the queue of link descriptors, and the driver will re-run the DMA transaction on the hardware each time it receives the End-of-Chain interrupt. This causes an infinite loop. With this patch, fsl_dma_tx_submit() is changed to assign a cookie to every descriptor in the chain. The rest of the code then works without problems. Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu> Signed-off-by: Li Yang <leoli@freescale.com> |
||
---|---|---|
.. | ||
ipu | ||
dmaengine.c | ||
dmatest.c | ||
dw_dmac_regs.h | ||
dw_dmac.c | ||
fsldma.c | ||
fsldma.h | ||
ioat_dca.c | ||
ioat_dma.c | ||
ioat.c | ||
ioatdma_hw.h | ||
ioatdma_registers.h | ||
ioatdma.h | ||
iop-adma.c | ||
iovlock.c | ||
Kconfig | ||
Makefile | ||
mv_xor.c | ||
mv_xor.h |