summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerge Semin <fancer.lancer@gmail.com>2025-04-18 15:42:38 +0300
committerSerge Semin <fancer.lancer@gmail.com>2026-08-13 20:34:11 +0300
commitb677e3eaaede2a55acdefa38b100d4be6d4348b2 (patch)
tree748124e3467b73ee5a5dcba546892129e5e8b827
parent91f9e9a3b7d78e3ad06ce928f6518cc304991244 (diff)
downloadlinux-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.c10
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));