stmmac_vlan_update() turns on double/S-VLAN processing whenever an 802.1ad VLAN is registered, without checking whether the MAC actually supports double VLAN processing. That capability is reported in dma_cap.dvlan. This was found while investigating a separate bug in the double VLAN RX stripping path. The outer 802.1ad tags were unexpectedly stripped by the MAC (because the ESVL bit was set). Check dma_cap.dvlan before enabling EDVLP/ESVL/DOVLTC bits, so that double VLAN processing is enabled only on supported hardware. Fixes: 3cd1cfcba26e ("net: stmmac: Implement VLAN Hash Filtering in XGMAC") Signed-off-by: Ovidiu Panait --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index fc9f1342ea45..ecb8eb7e29ab 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -6802,6 +6802,9 @@ static int stmmac_vlan_update(struct stmmac_priv *priv, bool is_double) if (!netif_running(priv->dev)) return 0; + if (!priv->dma_cap.dvlan) + is_double = false; + return stmmac_update_vlan_hash(priv, priv->hw, hash, is_double); } -- 2.34.1