Hi,
One of my customers connects C6678 to a FPGA through SRIO. They encountered “DMA Access Error” when FPGA tried to read from DSP.
The basic operation flow at FPGA is:
NWRITE about 256KB to LL2 of DSP core 7
NWRITE about 256KB to LL2 of DSP core 6
……
NWRITE about 256KB to LL2 of DSP core 0
NREAD the data just written in LL2 of DSP core 7, and verify it
NREAD the data just written in LL2 of DSP core 6, and verify it
……
NREAD the data just written in LL2 of DSP core 0, and verify it
The DSP is in a while waiting loop during this operation, that is, there is no any SRIO transfer start by DSP during this period.
The test passed on most boards. The problem only happened on several of their boards when they verified the data in LL2 of core 0, while the data was verified successfully on core 7~1.
I checked one of their failure board. On that board, the operation always failed at a fixed address 0x10847500 (in the middle of data blocks, data start from 0x10820000). The problem could be reproduced consistently. Below is the error information get from error status registers:
Problem(RX_IO_DMA_ACCESS): A DMA access to the MAU was blocked (To clear this bit SW should write 0 to it)
Reason & Solution: The Direct IO pkt request received by the RX side MAU, contained an invalid destination
address which is not accessible in the device memory map.
Logical layer Error occurred in transaction from 0x0031 ---> 0x0041
DETAILS OF THE ERRONEOUS PKT:
PKT_TYPE ---> NREAD packet
DIO_XAMSBS ---> 0x00
DIO_ADDRESS_MSB ---> 0x00000000
DIO_ADDRESS_LSB ---> 0x10847500
IMP_SPECIFIC---> 0x0000
The problem is, the captured address in the SRIO message is a valid address (0x10847500), why SRIO DMA access error is triggered?
The customer does not setup memory protection for LL2, that is, it is fully accessible by all masters.
Is there any other condition can trigger the SRIO “DMA access error”?
I searched SRIO user’s guide and found following description, does it have something to do with this issue?
But FPGA does not transfer any SRIO message, that is, RXU is not used.
If the RXU descriptor dry out issue happens on a multisegment message that can't fit into the CDMA
buffers, then the RXU is stalled. When the RXU is stalled, all channels are stalled, not
just the one the channel with the dry out issue. If the condition lasts long enough, such
that all the RX shared buffers of the logical layer are used, then other protocol units
such as the TXU, LSU, MAU traffic is also blocked.
Thank you!
Brighton