I have a iMX6-DL based board running the NXP produced Linux kernel (V4.1.15). On this board, I have a SSI in TDM mode that is outputting an 8 slot bus at 8 kHz. I am trying to drive this with the SDMA using the Linux dmaengine API.
I am running into an issue where the SSI is encountering underrun errors. When this occurs, I see a 2 mS latency delay in the generation of the DMA callback from the end of data in the last DMA buffer. If I try to queue multiple DMA transactions that contain 8 mS of data, I still encounter the underrun errors.
At present, I am using the standard dmaengine_prep_slave_single DMA buffer methods. I have thought about using the cyclic methods but do not know how I would get access to the buffer being used to refresh the contents.
I am new to this DMA interface. Any suggestions?
Hello Doug,
if you can not allow the latency , you had better use the cyclic mode to implement your case, you could refer to the code drivers/tty/serial/imx.c in yocto release, there is the sample for how to use cyclic dma mode.
Have a nice day!
Best regards,
Weidong