The memory mapped DMA engines (H2C and C2H) are enabled by setting the
run
bit in the Memory Mapped Engine Control Register. When the
run
bit is deasserted, descriptors can be dropped. Any descriptors
that have already started the source buffer fetch will continue to be processed.
Reassertion of the run
bit will result in resetting internal engine
state and should only be done when the engine is quiesced. Descriptors are received from
either the descriptor engine directly or the Descriptor Bypass Input interface. Any
queue that is in internal mode should not be given descriptors through the Descriptor
Bypass Input interface. Any descriptor sent to an MM engine that is not running will be
dropped. For configurations where a mix of Internal Mode queues and Bypass Mode queues
are enabled, round robin arbitration is performed to establish order.
The DMA Memory Mapped engine first generates the read request to the source
interface, splitting the descriptor at alignment boundaries specific to the interface.
Both PCIe and AXI read interfaces can be configured to split at different alignments.
Completion space for read data is preallocated when the read is issued. Likewise for the
write requests, the DMA engine will split at appropriate alignments. On the AXI
interface each engine will use a single AXI ID. The DMA engine will reorder the read
completion/write data to the order in which the reads were issued. Once sufficient read
completion data is received the write request will be issued to the destination
interface in the same order that the read data was requested. Before the request is
retired, the destination interfaces must accept all the write data and provide a
completion response. For PCIe the write completion is issued when the write request has
been accepted by the transaction layer and will be sent on the link next. For the AXI
Memory Mapped interface, the bresp
is the completion
criteria. Once the completion criteria has been met, the host writeback, interrupt
and/or marker response is generated for the descriptor as appropriate.
The DMA Memory Mapped engines also support the no_dma
field of
the Descriptor Bypass Input, and zero-length DMA. Both cases are treated identically in
the engine. The descriptors propagate through the DMA engine as all other descriptors,
so descriptor ordering within a queue is still observed. However no DMA read or write
requests are generated. The status update (writeback, interrupt, and/or marker response)
for zero-length/no_dma
descriptors is processed when all previous
descriptors have completed their status update checks.