Xilinx / embeddedsw

Xilinx Embedded Software (embeddedsw) Development

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

XEmacPs_BdGetBufAddr doesn't mask with XEMACPS_RXBUF_ADD_MASK

mazhenke opened this issue · comments

See file https://github.com/Xilinx/embeddedsw/blob/master/XilinxProcessorIPLib/drivers/emacps/src/xemacps_bd.h line 242

/**

  • Get the address (bits 0..31) of the BD's buffer address (word 0)
  • @param BdPtr is the BD pointer to operate on
  • @note
  • C-style signature:
  • UINTPTR XEmacPs_BdGetBufAddr(XEmacPs_Bd* BdPtr)

*****************************************************************************/
#if defined(aarch64) || defined(arch64)
#define XEmacPs_BdGetBufAddr(BdPtr)
(XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_OFFSET) |
(XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_HI_OFFSET)) << 32U)
#else
#define XEmacPs_BdGetBufAddr(BdPtr)
(XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_OFFSET))
#endif

The XEmacPs_BdGetBufAddr shall mask with XEMACPS_RXBUF_ADD_MASK to get the correct address, like this:

#if defined(aarch64) || defined(arch64)
#define XEmacPs_BdGetBufAddr(BdPtr)
((XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_OFFSET) & XEMACPS_RXBUF_ADD_MASK) |
(XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_HI_OFFSET)) << 32U)
#else
#define XEmacPs_BdGetBufAddr(BdPtr)
(XEmacPs_BdRead((BdPtr), XEMACPS_BD_ADDR_OFFSET) & XEMACPS_RXBUF_ADD_MASK )
#endif

Thanks for reporting @mazhenke This will be fixed in the next release.