Hard Processor System Technical Reference Manual: Agilex™ 5 SoCs

ID 814346
Date 7/19/2024
Public
Document Table of Contents

5.1.7.10.2. Receive DMA Channel

On getting an AXI error response, the RX DMA channel sets its fatal bus error interrupt status (FBE bits of DMA_CH(#i)_Status register), goes into ERROR state and gracefully terminates any ongoing packet transfer immediately. It also accepts and drops the rest of the packet from the MTL RX queue. It then goes into the STOP state after setting the DMA stopped interrupt status bits (RPS bits of DMA_CH(#i)_Status register). The sbd_intr_o interrupt is generated if the corresponding interrupts are enabled in the DMA_CH(#i)_Interrupt_Enable register.

The software driver flow for the RX DMA channel bus error recovery is as follows:

  1. Wait for the FBE interrupt. (FBE bit of DMA_CH(#i)_Status register)
  2. Wait till the DMA receives the stopped interrupt. (RPS bits of DMA_CH(#i)_Status register)
  3. You can program RPF, bit 31 of the DMA_CH(#i)_Rx_Control register to prevent head-of-line blocking and instructs the EMAC to drop packets in any RX queue intended to this RX DMA channel in STOP/ERROR state.
  4. Fix the root cause of the bus error.
  5. Service the FBE and RPS interrupts and clear those interrupts by writing DMA_CH(#i)_Status register.
  6. Issue a soft reset by setting the SWR field of the DMA_Mode register and wait until the SWR field is cleared.
  7. You are allowed to re-configure the DMA, new PBLs, and new ring length.
  8. You must program the new list address.
  9. Start the DMA by setting ST of DMA_CH0_Tx_Control register.
Note: Step 6 initiates the descriptor list. The descriptors that would have fetched before the bus error event is ignored by EMAC.