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?