Tool/software: Linux
Hello there,
I am looking to do scatter-gather DMA transfers to a device connected to the GPMC bus. The GPMC bus operates in non-NAND mode. Our driver uses the dmaengine interface.
I can do single transfers by passing DMA_MEMCPY to dma_request_channel, then use dmaengine_prep_memcpy, and that works... The issue with that is that I need to context switch after every transfer (via wait_for_completion + a callback on the dma descriptor). This seems inefficient when doing several small-sized transfers, and by the way the 'device' works, we need to do a lot of tiny transfers.
I can't operate the DMA to GPMC in slave mode (i.e. dmaengine_prep_slave_sg, dmaengine_prep_slave_single), and as I understand it, slave only works when the GPMC is configured in NAND mode.
dmaengine_prep_dma_sg() seems to be exactly what I need. The EDMA driver in linux 4.4 doesn't implement this. I've briefly scanned TI's linux tree on gitorious, but didn't find any such implementation in either 4.4 or 4.9 branches.
Is there another similar interface that I can use to do these scatter-gather transfers? Are there plans to implement the DMA_SG interface in the edma driver?
Thanks for any input you can provide!
-Amanda