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 you do not flow control the read/SRC when the FCI is configured to the flow control DST, the channel can issue multiple read transactions and utilize the entire common buffer. This will starve other channels. To resolve this issue, software configures the maximum number of entries used by the DMA channel. Once the DMA channel exceeds the programmed value, it will not issue more read transactions. The PROG_CELL_CNT of the 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 full AXI burst.
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 do 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.