net: lan966x: Fix the vlan used by host ports
authorHoratiu Vultur <horatiu.vultur@microchip.com>
Thu, 23 Dec 2021 14:01:13 +0000 (15:01 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Dec 2021 12:16:30 +0000 (12:16 +0000)
The blamed commit changed the vlan used by the host ports to be 4095
instead of 0.
Because of this change the following issues are seen:
- when the port is probed first it was adding an entry in the MAC table
  with the wrong vlan (port->pvid which is default 0) and not HOST_PVID
- when the port is removed from a bridge, it was using the wrong vlan to
  add entries in the MAC table. It was using the old PVID and not the
  HOST_PVID

This patch fixes this two issues by using the HOST_PVID instead of
port->pvid.

Fixes: 6d2c186afa5d5d ("net: lan966x: Add vlan support.")
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/microchip/lan966x/lan966x_main.c

index 16f4d87..2c6bf7b 100644 (file)
@@ -322,7 +322,7 @@ static int lan966x_mc_unsync(struct net_device *dev, const unsigned char *addr)
        struct lan966x_port *port = netdev_priv(dev);
        struct lan966x *lan966x = port->lan966x;
 
-       return lan966x_mac_forget(lan966x, addr, port->pvid, ENTRYTYPE_LOCKED);
+       return lan966x_mac_forget(lan966x, addr, HOST_PVID, ENTRYTYPE_LOCKED);
 }
 
 static int lan966x_mc_sync(struct net_device *dev, const unsigned char *addr)
@@ -330,7 +330,7 @@ static int lan966x_mc_sync(struct net_device *dev, const unsigned char *addr)
        struct lan966x_port *port = netdev_priv(dev);
        struct lan966x *lan966x = port->lan966x;
 
-       return lan966x_mac_cpu_learn(lan966x, addr, port->pvid);
+       return lan966x_mac_cpu_learn(lan966x, addr, HOST_PVID);
 }
 
 static void lan966x_port_set_rx_mode(struct net_device *dev)
@@ -594,7 +594,7 @@ static int lan966x_probe_port(struct lan966x *lan966x, u32 p,
 
        eth_hw_addr_gen(dev, lan966x->base_mac, p + 1);
 
-       lan966x_mac_learn(lan966x, PGID_CPU, dev->dev_addr, port->pvid,
+       lan966x_mac_learn(lan966x, PGID_CPU, dev->dev_addr, HOST_PVID,
                          ENTRYTYPE_LOCKED);
 
        port->phylink_config.dev = &port->dev->dev;