embeddedsw
embeddedsw copied to clipboard
XEmacPs_BdGetBufAddr doesn't mask with XEMACPS_RXBUF_ADD_MASK
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.