diff options
| author | Serge Semin <fancer.lancer@gmail.com> | 2025-04-18 15:42:38 +0300 |
|---|---|---|
| committer | Serge Semin <fancer.lancer@gmail.com> | 2026-08-13 20:34:11 +0300 |
| commit | b677e3eaaede2a55acdefa38b100d4be6d4348b2 (patch) | |
| tree | 748124e3467b73ee5a5dcba546892129e5e8b827 | |
| parent | 91f9e9a3b7d78e3ad06ce928f6518cc304991244 (diff) | |
| download | linux-b677e3eaaede2a55acdefa38b100d4be6d4348b2.tar.gz linux-b677e3eaaede2a55acdefa38b100d4be6d4348b2.zip | |
net: stmmac: dwxgmac2: Fix control packets recv after promiscous mode off
The commit 8c5f48d99de2 ("net: stmmac: dwxgmac2: Also pass control frames
while in promisc mode") made sure that the Ethernet flow-control packets
get to be passed to the system memory when IFF_PROMISC by setting the
MAC_Packet_Filter.PCF flag. But it forgot to have the bit cleared after
the promiscuous mode was disabled. Let's fix that.
Fixes: 8c5f48d99de2 ("net: stmmac: dwxgmac2: Also pass control frames while in promisc mode")
Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c index ea1252730f6c..7a7c3c91fc52 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c @@ -572,11 +572,15 @@ static void dwxgmac2_set_filter(struct mac_device_info *hw, struct net_device *dev) { void __iomem *ioaddr = (void __iomem *)dev->base_addr; - u32 value = readl(ioaddr + XGMAC_PACKET_FILTER); int mcbitslog2 = hw->mcast_bits_log2; - u32 mc_filter[8]; + u32 value, mc_filter[8]; + + value = readl(ioaddr + XGMAC_PACKET_FILTER); + value &= ~XGMAC_FILTER_PCF; + value &= ~XGMAC_FILTER_PM; + value &= ~XGMAC_FILTER_HMC; + value &= ~XGMAC_FILTER_PR; - value &= ~(XGMAC_FILTER_PR | XGMAC_FILTER_HMC | XGMAC_FILTER_PM); value |= XGMAC_FILTER_HPF; memset(mc_filter, 0, sizeof(mc_filter)); |
