net: stmmac: xgmac: Fix VLAN register handling

Commit 907a076881, forgot that we need to clear old values of
XGMAC_VLAN_TAG register when we switch from VLAN perfect matching to
HASH matching.

Fix it.

Fixes: 907a076881 ("net: stmmac: xgmac: fix incorrect XGMAC_VLAN_TAG register writting")
Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jose Abreu 2020-04-02 15:57:07 +02:00 committed by David S. Miller
parent a7d40cbb24
commit 21f64e72e7
1 changed files with 11 additions and 0 deletions

View File

@ -577,8 +577,13 @@ static void dwxgmac2_update_vlan_hash(struct mac_device_info *hw, u32 hash,
value |= XGMAC_VLAN_EDVLP; value |= XGMAC_VLAN_EDVLP;
value |= XGMAC_VLAN_ESVL; value |= XGMAC_VLAN_ESVL;
value |= XGMAC_VLAN_DOVLTC; value |= XGMAC_VLAN_DOVLTC;
} else {
value &= ~XGMAC_VLAN_EDVLP;
value &= ~XGMAC_VLAN_ESVL;
value &= ~XGMAC_VLAN_DOVLTC;
} }
value &= ~XGMAC_VLAN_VID;
writel(value, ioaddr + XGMAC_VLAN_TAG); writel(value, ioaddr + XGMAC_VLAN_TAG);
} else if (perfect_match) { } else if (perfect_match) {
u32 value = readl(ioaddr + XGMAC_PACKET_FILTER); u32 value = readl(ioaddr + XGMAC_PACKET_FILTER);
@ -589,13 +594,19 @@ static void dwxgmac2_update_vlan_hash(struct mac_device_info *hw, u32 hash,
value = readl(ioaddr + XGMAC_VLAN_TAG); value = readl(ioaddr + XGMAC_VLAN_TAG);
value &= ~XGMAC_VLAN_VTHM;
value |= XGMAC_VLAN_ETV; value |= XGMAC_VLAN_ETV;
if (is_double) { if (is_double) {
value |= XGMAC_VLAN_EDVLP; value |= XGMAC_VLAN_EDVLP;
value |= XGMAC_VLAN_ESVL; value |= XGMAC_VLAN_ESVL;
value |= XGMAC_VLAN_DOVLTC; value |= XGMAC_VLAN_DOVLTC;
} else {
value &= ~XGMAC_VLAN_EDVLP;
value &= ~XGMAC_VLAN_ESVL;
value &= ~XGMAC_VLAN_DOVLTC;
} }
value &= ~XGMAC_VLAN_VID;
writel(value | perfect_match, ioaddr + XGMAC_VLAN_TAG); writel(value | perfect_match, ioaddr + XGMAC_VLAN_TAG);
} else { } else {
u32 value = readl(ioaddr + XGMAC_PACKET_FILTER); u32 value = readl(ioaddr + XGMAC_PACKET_FILTER);