UPGRADE YOUR BROWSER

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!

AR# 31297

10.1 EDK - LLTEMAC stops accepting packets for no apparent reason

Description

If the application sets multiple Buffer Descriptors (BD) for each RX packet, packet reception might stop working after a certain number of packets are received.

Solution

The LLDMA driver should clear the SOP and EOP bits on the RX packets. Clearing those BD flags by the LLDMA driver before giving the BDs to the DMA RX channel solves the issue.

The work-around is provided as a patch below:

Replace lines 712 - 715 and 747 - 750 in $XILINX/EDK/sw/XilinxProcessorIPLib/drivers/lldma_v1_00_a/src/xlldma_bdring.c

if (RingPtr->IsRxChannel) {

XLlDma_mBdWrite(CurBdPtr, XLLDMA_USERIP_APPWORD_OFFSET,

XLLDMA_USERIP_APPWORD_INITVALUE);

}

with:

if (RingPtr->IsRxChannel) {

XLlDma_mBdWrite(CurBdPtr, XLLDMA_USERIP_APPWORD_OFFSET,

XLLDMA_USERIP_APPWORD_INITVALUE);

/* The EOP flag may be set, so clear it */

XLlDma_mBdWrite(CurBdPtr, XLLDMA_BD_STSCTRL_USR0_OFFSET,

(BdStsCr & ~(XLLDMA_BD_STSCTRL_SOP_MASK | XLLDMA_BD_STSCTRL_EOP_MASK)));

}

This patch is scheduled to become mainstream in 11.1.

AR# 31297
Date Created 07/14/2008
Last Updated 12/15/2012
Status Active
Type General Article