mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-19 20:10:43 +09:00
Stopping Dma after last req transfer. add an API to return the completed transfer count of a pending, active or finished DMA request originally fixed by Gary King <gking@nvidia.com> It is observed that the dma interrupt has the lower priority then its client interupt priority. When client's isr calls dma get transfer, the dma status has not been upated as dma isr have not been served yet. So before reading the status, explicitly checking the interrupt status and handling accordingly. The another issue which is observed is that if dma has transferred the data of amount = requested -4 and if it moves to invalid requestor before stopping then status got reset and tarnsfered bytes becomes 0. This seems the apb dma hw behavior. Following is the suggestion to overcome this issue: - Disable global enable bit. - Read status. - Stop dma. - Enable global status bit. Added this workaround and it worked fine. originally fixed by Laxman Dewangan <ldewangan@nvidia.com> In continous mode, dma should stop after last transfer completed and if there is no more req pending. If there is pending req then it should check whether it has updated in hw for next transfer or not and if it has not started then stop dma and start new req immediatley. originally fixed by Laxman Dewangan <ldewangan@nvidia.com> Change-Id: I49c97c96eacdf4060de6b21cec0e71d940d33f00