[PATCH v3 4/7] dmaengine: stm32-dma: Add DMA/MDMA chaining support
From: Pierre Yves MORDRET <hidden>
Date: 2018-10-10 07:03:05
Also in:
dmaengine, linux-devicetree, lkml
On 10/10/2018 06:03 AM, Vinod wrote:
On 09-10-18, 10:40, Pierre Yves MORDRET wrote:quoted
On 10/07/2018 06:00 PM, Vinod wrote:quoted
On 28-09-18, 15:01, Pierre-Yves MORDRET wrote:quoted
This patch adds support of DMA/MDMA chaining support. It introduces an intermediate transfer between peripherals and STM32 DMA. This intermediate transfer is triggered by SW for single M2D transfer and by STM32 DMA IP for all other modes (sg, cyclic) and direction (D2M). A generic SRAM allocator is used for this intermediate buffer Each DMA channel will be able to define its SRAM needs to achieve chaining feature : (2 ^ order) * PAGE_SIZE. For cyclic, SRAM buffer is derived from period length (rounded on PAGE_SIZE).So IIUC, you chain two dma txns together and transfer data via an SRAM?Correct. one DMA is DMAv2 (stm32-dma) and the other is MDMA(stm32-mdma). Intermediate transfer is between device and memory. This intermediate transfer is using SDRAM.Ah so you use dma calls to setup mdma xtfers? I dont think that is a good idea. How do you know you should use mdma for subsequent transfer?
When user bindings told to setup chaining intermediate MDMA transfers are always triggers. For instance if a user requests a Dev2Mem transfer with chaining. From client pov this is still a prep_slave_sg. Internally DMAv2 is setup in cyclic mode (in double buffer mode indeed => 2 buffer of PAGE_SIZE/2) and destination is SDRAM. DMAv2 will flip/flop on those 2 buffers. At the same time DMAv2 driver prepares a MDMA SG that will fetch data from those 2 buffers in SDRAM and fills final destination memory.
quoted
quoted
quoted
drivers/dma/stm32-dma.c | 879 ++++++++++++++++++++++++++++++++++++++++++------that is a lot of change for a driver, consider splitting it up logically in smaller changes...This feature is rather monolithic. Difficult to split up. All the code is required at once.It can be enabled at last but split up logically. Intrusive changes to a driver make it hard to review..
Ok. I will to think about it how to proceed.