To enqueue a DMA command from the PPE, access the MFC Command-Parameter
Registers in this sequence:
- Write the LS address to the MFC_LSA register.
- Write the effective address high and low parts to the MFC_EAH and MFC_EAL registers.
- Write the transfer size and tag ID to the MFC_Size and MFC_TagID registers.
- Write the class ID and command opcode to the MFC_ClassID_CMD registers.
- Read the MFC_CMDStatus register to determine the success
or failure of the attempt to enqueue a DMA command.
The least-significant 2 bits of the command status value returned from
the read of the MFC_CMDStatus register indicate the success
or error of the attempt to enqueue a DMA. The values of these two bits have
the following meanings:
- 0 – Indicates that the enqueue was successful.
- 1 – Indicates that a sequence error occurred while enqueuing the DMA.
For example, an interrupt occurred, then another DMA was started within an
interrupt handler. In this case, the DMA enqueue sequence must be restarted
at step 1.
- 2 – Indicates that the enqueue failed due to insufficient space in the
command queue.
- 3 – Indicates that both errors occurred.
In the case of insufficient space, software could wait for space to become
available before attempting the DMA transfer again, or software could simply
continue attempting to enqueue the DMA until successful.