vivadozynqcortex-axilinx-edk

Stuck in API XAxiDma_BdRingFromHw, why doesn't the S2MM Block descriptor's Completed bit Set?


I am working on Zynq 7z030 and i am trying to receive data on the DDR from the PL side. I am using the AXI DMA SG poll code provided as example by xilinx on SDK. (xaxidma_example_sg_poll.c)

After Configuring DMA -> Setting up the RX channel -> Starting DMA -> I enter the API CheckDmaResult. Here I call XAxiDma_BdRingFromHw API.

while ((ProcessedBdCount = XAxiDma_BdRingFromHw(RxRingPtr,
                               XAXIDMA_ALL_BDS,
                               &BdPtr)) == 0) {
    }

This API calls Xil_DCacheInvalidateRange which returns and then the Block descriptor status remains always 0. Thus resulting in forever looping of the XAxiDma_BdRingFromHw. The complete bit never sets. This happens eventhough I see the TREADY of S2MM go high and receive data in ILA(integrated logic analyser on FPGA end/PL end)

main
     ....
        Status1 = CheckDmaResult(&AxiDma);
     .....
-> static int CheckDmaResult(XAxiDma * AxiDmaInstPtr)  
....             
 while ((ProcessedBdCount = 
XAxiDma_BdRingFromHw(RxRingPtr,
                               XAXIDMA_ALL_BDS,
                               &BdPtr)) == 0) {
    } 
....
-> XAxiDma_BdRingFromHw(XAxiDma_BdRing * RingPtr, int BdLimit,
                 XAxiDma_Bd ** BdSetPtr)

   ....
      while (BdCount < BdLimit) {
        /* Read the status */
        XAXIDMA_CACHE_INVALIDATE(CurBdPtr);
        BdSts = XAxiDma_BdRead(CurBdPtr, XAXIDMA_BD_STS_OFFSET);
        BdCr = XAxiDma_BdRead(CurBdPtr, XAXIDMA_BD_CTRL_LEN_OFFSET);

        /* If the hardware still hasn't processed this BD then we are
         * done
         */
        if (!(BdSts & XAXIDMA_BD_STS_COMPLETE_MASK)) {
            break;
        }
.....

could someone please suggest possible reasons or directions i should consider to solve this problem.. any and every suggestion would be a great help. Thanks in advance!


Solution

  • The problem was with the board (ESD damage). The DDR started receiving data as soon as the board was changed and the following were observed

    further in debug config settings the following needed to be ticked on Under Target Setup

    Under Application tab