diff options
author | Jan Kuliga <jankul@alatek.krakow.pl> | 2023-12-18 14:39:43 +0300 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2023-12-22 09:49:41 +0300 |
commit | 2f8f90cd2f8d237c51c2775a53ef0d8c8acaa707 (patch) | |
tree | 8ed14ab62ec14583403fcfe5a49c86fc4e1ee011 /drivers/fpga/fpga-bridge.c | |
parent | 3e184e64c2e5145e51dc57872b0a64e3a6736888 (diff) | |
download | linux-2f8f90cd2f8d237c51c2775a53ef0d8c8acaa707.tar.xz |
dmaengine: xilinx: xdma: Implement interleaved DMA transfers
Interleaved DMA functionality allows dmaengine clients' to express
DMA transfers in an arbitrary way. This is extremely useful in FPGA
environments, where a greater transfer flexibility is needed. For
instance, in one FPGA design there may be need to do DMA to/from a FIFO
at a fixed address, and also to do DMA to/from a (non)contiguous RAM
memory.
Introduce separate tx preparation callback and add tx-flags handling
logic. Their behavior is based on the description of interleaved DMA
transfers in both source code and the DMAEngine's documentation.
Since XDMA is a fully-fledged scatter-gather dma engine, the logic of
xdma_prep_interleaved_dma() is fairly simple and similar to the other
tx preparation callbacks. The whole tx-flags handling logic resides in
xdma_channel_isr(). Transfer of a single frame from a interleaved DMA
transfer template is pretty similar to the single sg transaction.
Therefore, the transaction of the whole interleaved DMA transfer
template is basically a cyclic dma transaction with finite cycles/periods
(equal to the frame of count) of a single sg transfers.
Signed-off-by: Jan Kuliga <jankul@alatek.krakow.pl>
Link: https://lore.kernel.org/r/20231218113943.9099-9-jankul@alatek.krakow.pl
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/fpga/fpga-bridge.c')
0 files changed, 0 insertions, 0 deletions