mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 14:10:43 +00:00
net: mt7628-eth: free rx descriptor on receiving failure
When received a packet with an invalid length recorded in rx descriptor, we should free this rx descriptor to allow us to continue to receive following packets. Without doing so, u-boot will stuck in a dead loop trying to process this invalid rx descriptor. This patch adds a call to mt7628_eth_free_pkt() after received an invalid packet length. Reviewed-by: Stefan Roese <sr@denx.de> Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
This commit is contained in:
parent
f079321009
commit
c88ee3ea0a
1 changed files with 3 additions and 0 deletions
|
@ -142,6 +142,8 @@ struct mt7628_eth_dev {
|
|||
struct phy_device *phy;
|
||||
};
|
||||
|
||||
static int mt7628_eth_free_pkt(struct udevice *dev, uchar *packet, int length);
|
||||
|
||||
static int mdio_wait_read(struct mt7628_eth_dev *priv, u32 mask, bool mask_set)
|
||||
{
|
||||
void __iomem *base = priv->eth_sw_base;
|
||||
|
@ -403,6 +405,7 @@ static int mt7628_eth_recv(struct udevice *dev, int flags, uchar **packetp)
|
|||
length = FIELD_GET(RX_DMA_PLEN0, priv->rx_ring[idx].rxd2);
|
||||
if (length == 0 || length > MTK_QDMA_PAGE_SIZE) {
|
||||
printf("%s: invalid length (%d bytes)\n", __func__, length);
|
||||
mt7628_eth_free_pkt(dev, NULL, 0);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue