Skip to content

Commit

Permalink
net: stmmac: dwmac4: extend timeout for VLAN Tag register busy bit check
Browse files Browse the repository at this point in the history
Increase the timeout for checking the busy bit of the VLAN Tag register
from 10µs to 500ms. This change is necessary to accommodate scenarios
where Energy Efficient Ethernet (EEE) is enabled.

Overnight testing revealed that when EEE is active, the busy bit can
remain set for up to approximately 300ms. The new 500ms timeout provides
a safety margin.

Fixes: ed64639 ("net: stmmac: Add support for VLAN Rx filtering")
Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
Signed-off-by: NipaLocal <nipa@local>
  • Loading branch information
Shenwei Wang authored and NipaLocal committed Sep 20, 2024
1 parent 0bc3099 commit f660d71
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/slab.h>
#include <linux/ethtool.h>
#include <linux/io.h>
#include <linux/iopoll.h>
#include "stmmac.h"
#include "stmmac_pcs.h"
#include "dwmac4.h"
Expand Down Expand Up @@ -471,7 +472,7 @@ static int dwmac4_write_vlan_filter(struct net_device *dev,
u8 index, u32 data)
{
void __iomem *ioaddr = (void __iomem *)dev->base_addr;
int i, timeout = 10;
int ret, timeout = 500000; //500ms
u32 val;

if (index >= hw->num_vlan)
Expand All @@ -487,12 +488,11 @@ static int dwmac4_write_vlan_filter(struct net_device *dev,

writel(val, ioaddr + GMAC_VLAN_TAG);

for (i = 0; i < timeout; i++) {
val = readl(ioaddr + GMAC_VLAN_TAG);
if (!(val & GMAC_VLAN_TAG_CTRL_OB))
return 0;
udelay(1);
}
ret = readl_poll_timeout(ioaddr + GMAC_VLAN_TAG, val,
!(val & GMAC_VLAN_TAG_CTRL_OB),
1000, timeout);
if (!ret)
return 0;

netdev_err(dev, "Timeout accessing MAC_VLAN_Tag_Filter\n");

Expand Down

0 comments on commit f660d71

Please sign in to comment.