Commits

Robin Gong committed eb869b7d7bc
MLK-11358-5: dma: imx-sdma: add overide cyclic callback for virtual dma In some high loading case, some BDs done interrupt may not be handled timely because of high loading, for example: 1).No.1 BD done interrupt pending. 2).No.2 BD done interrupt trigged, and be handled in time. 3).found No.1 and No.2 bds finished, set BD_DONE to prepare for next time. 4).call vchan_cyclic_callback twice to tasklet_schedule(). But unfortunately, only one tasklet can be scheduled one time. And SDMA interrupt will never be trigged again for No.2 or No.1 BD. That means one callback loss. To fix the above case, extend override callback in virt dma framework, so that sdma driver can do some specific job before every callback: 1).No.1 BD done interrupt pending. 2).No.2 BD done interrupt trigged, and be handled in time. 3).call vchan_cyclic_callback to tasklet_schedule(). 4) vchan_complete() call overide_callback 5) found No.1 BD done, set BD_DONE and call desc->vd.tx.callback 6) found No.2 BD done, set BD_DONE and call desc->vd.tx.callback, no callback missed here. Signed-off-by: Robin Gong <b38343@freescale.com>