问题描述
如果应用程序为每个RX数据包设置多个缓冲区描述符(BD),则在接收到一定数量的数据包后,数据包接收可能会停止工作。
解决/修复方法
LLDMA驱动程序应清除RX数据包上的SOP和EOP位。在将BD提供给DMA RX通道之前,LLDMA驱动程序清除那些BD标志可以解决问题。
下面的解决方案提供了解决方法:
在$ XILINX / EDK / sw / XilinxProcessorIPLib / drivers / lldma_v1_00_a / src / xlldma_bdring.c中替换712 – 715和747 – 750行。
if(RingPtr-> IsRxChannel){
XLlDma_mBdWrite(CurBdPtr,XLLDMA_USERIP_APPWORD_OFFSET,
XLLDMA_USERIP_APPWORD_INITVALUE);
}
有:
if(RingPtr-> IsRxChannel){
XLlDma_mBdWrite(CurBdPtr,XLLDMA_USERIP_APPWORD_OFFSET,
XLLDMA_USERIP_APPWORD_INITVALUE);
/ *可以设置EOP标志,清除它* /
XLlDma_mBdWrite(CurBdPtr,XLLDMA_BD_STSCTRL_USR0_OFFSET,
(BdStsCr&〜(XLLDMA_BD_STSCTRL_SOP_MASK | XLLDMA_BD_STSCTRL_EOP_MASK)));
}
该补丁计划在11.1中成为主流。
没有回复内容