| From foo@baz Sun 09 Feb 2020 10:47:54 PM CET |
| From: "Tan, Tee Min" <tee.min.tan@intel.com> |
| Date: Fri, 7 Feb 2020 15:33:20 +0800 |
| Subject: net: stmmac: fix incorrect GMAC_VLAN_TAG register writting in GMAC4+ |
| |
| From: "Tan, Tee Min" <tee.min.tan@intel.com> |
| |
| [ Upstream commit 9eeeb3c9de4e3aeaa2bec097162f09305dd9f4c3 ] |
| |
| It should always do a read of current value of GMAC_VLAN_TAG instead of |
| directly overwriting the register value. |
| |
| Fixes: c1be0022df0d ("net: stmmac: Add VLAN HASH filtering support in GMAC4+") |
| Signed-off-by: Tan, Tee Min <tee.min.tan@intel.com> |
| Signed-off-by: Ong Boon Leong <boon.leong.ong@intel.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c |
| +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c |
| @@ -736,11 +736,14 @@ static void dwmac4_update_vlan_hash(stru |
| __le16 perfect_match, bool is_double) |
| { |
| void __iomem *ioaddr = hw->pcsr; |
| + u32 value; |
| |
| writel(hash, ioaddr + GMAC_VLAN_HASH_TABLE); |
| |
| + value = readl(ioaddr + GMAC_VLAN_TAG); |
| + |
| if (hash) { |
| - u32 value = GMAC_VLAN_VTHM | GMAC_VLAN_ETV; |
| + value |= GMAC_VLAN_VTHM | GMAC_VLAN_ETV; |
| if (is_double) { |
| value |= GMAC_VLAN_EDVLP; |
| value |= GMAC_VLAN_ESVL; |
| @@ -759,8 +762,6 @@ static void dwmac4_update_vlan_hash(stru |
| |
| writel(value | perfect_match, ioaddr + GMAC_VLAN_TAG); |
| } else { |
| - u32 value = readl(ioaddr + GMAC_VLAN_TAG); |
| - |
| value &= ~(GMAC_VLAN_VTHM | GMAC_VLAN_ETV); |
| value &= ~(GMAC_VLAN_EDVLP | GMAC_VLAN_ESVL); |
| value &= ~GMAC_VLAN_DOVLTC; |