We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

Showing results for 
Search instead for 
Did you mean: 
Observer davirol
Registered: ‎08-16-2017

SG-DMA issue working with linux

 Hi all,


We have a problem with baremetal app and linux. Our baremetal app runs on CPU1 whereas linux is running in CPU0. Checking the status log we see that there is always an error when working with linux, and it doesn't happen when working on standalone. The status error is 0000 0000 0000 0001 0000 0010 0001 1001 (S2MM_DMASR (S2MM DMA Status Register – Offset 34h). Looking into the documentation there are two bit with errors:


Bit 4 = 1 -> DMA Internal Error. This error occurs if the buffer length specified in the fetched descriptor is set to 0. Also, when in Scatter Gather Mode and using the status app length field, this error occurs when the Status AXI4-Stream packet RxLength field does not match the S2MM packet being received by the S_AXIS_S2MM interface. When Scatter Gather is disabled, this error is flagged if any error occurs during Memory write or if the incoming packet is bigger than what is specified in the DMA length register. This error condition causes the AXI DMA to halt gracefully. The DMACR.RS bit is set to 0, and when the engine has completely shut down, the DMASR.Halted bit is set to 1.


Bit 9 = 1 -> Scatter Gather Slave Error. This error occurs if the slave read from on the Memory Map interface issues a Slave Error.


But it is really strange. Since we are not using the reading channel in the DMA (that is disabled), only the writing channel, and it seems that this error has to do with the reading channel.


Anyone knows what can be happening? Without any doubt it seems to be related to some problem when using linux.


Thanks, regards

0 Kudos