In a DMA channel writing to a flow controlling the PL slave scenario, the software configures the FCI to flow control the DST. Each valid credit allows the DMA channel to perform one AXI write command. If the read/SRC is not flow controlled when the FCI is configured to the flow control DST, the channel can issue multiple read transactions and use the entire common buffer, which starves other channels. To resolve this issue, software configures the maximum number of entries used by the DMA channel. After the DMA channel exceeds the programmed value, it does not issue more read transactions. The PROG_CELL_CNT of the PS_ZDMA.CH_FCI register can be programmed in the register.
Maximum number of occupied cells = (ARLEN + 1) << PROG_CELL_CNT
If the software programs PROG_CELL_CNT to zero, the maximum number of entries occupied by the DMA channel is the same as one AXI4burst.
Because the SRC and DST addresses are unaligned and over fetch can be disabled, the DMA
channel might have to generate multiple read transactions to perform a single write
transaction. Because of this, it is advised to program PROG_CELL_CNT to a
1. As explained previously, the number of SRC and DST transfers can
be different and unless the software calculates the number of valid transactions
required for DMA transfer, the PL slave cannot use the valid transactions.
The DMA channel generates write data transactions only if credits are available. The write command is only generated when enough credit and enough data is available to generate one write transaction.