Commit 6457edfe authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller

net: dsa: make slave close symmetrical to open

The DSA slave open function configures the unicast MAC addresses on the
master device, enable the switch port, change its STP state, then start
the PHY device.

Make the close function symmetric, by first stopping the PHY device,
then changing the STP state, disabling the switch port and restore the
master device.
Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6450f8f2
...@@ -133,6 +133,11 @@ static int dsa_slave_close(struct net_device *dev) ...@@ -133,6 +133,11 @@ static int dsa_slave_close(struct net_device *dev)
if (p->phy) if (p->phy)
phy_stop(p->phy); phy_stop(p->phy);
dsa_port_set_state_now(p->dp, BR_STATE_DISABLED);
if (ds->ops->port_disable)
ds->ops->port_disable(ds, p->dp->index, p->phy);
dev_mc_unsync(master, dev); dev_mc_unsync(master, dev);
dev_uc_unsync(master, dev); dev_uc_unsync(master, dev);
if (dev->flags & IFF_ALLMULTI) if (dev->flags & IFF_ALLMULTI)
...@@ -143,11 +148,6 @@ static int dsa_slave_close(struct net_device *dev) ...@@ -143,11 +148,6 @@ static int dsa_slave_close(struct net_device *dev)
if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
dev_uc_del(master, dev->dev_addr); dev_uc_del(master, dev->dev_addr);
if (ds->ops->port_disable)
ds->ops->port_disable(ds, p->dp->index, p->phy);
dsa_port_set_state_now(p->dp, BR_STATE_DISABLED);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment