Commit c499696e authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: b53: Stop using dev->cpu_port incorrectly

dev->cpu_port is the driver local information that should only be used
to look up register offsets for a particular port, when they differ
(e.g: IMP port override), but it should certainly not be used in place
of the DSA configured CPU port.

Since the DSA switch layer calls port_vlan_{add,del}() on the CPU port
as well, we can remove the specific setting of the CPU port within
port_vlan_{add,del}.

Fixes: ff39c2d6 ("net: dsa: b53: Add bridge support")
Fixes: 967dd82f ("net: dsa: b53: Add support for Broadcom RoboSwitch")
Signed-off-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 4d215ae7
...@@ -505,7 +505,7 @@ EXPORT_SYMBOL(b53_imp_vlan_setup); ...@@ -505,7 +505,7 @@ EXPORT_SYMBOL(b53_imp_vlan_setup);
int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
unsigned int cpu_port = dev->cpu_port; unsigned int cpu_port = ds->ports[port].cpu_dp->index;
u16 pvlan; u16 pvlan;
/* Clear the Rx and Tx disable bits and set to no spanning tree */ /* Clear the Rx and Tx disable bits and set to no spanning tree */
...@@ -1054,7 +1054,6 @@ void b53_vlan_add(struct dsa_switch *ds, int port, ...@@ -1054,7 +1054,6 @@ void b53_vlan_add(struct dsa_switch *ds, int port,
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID; bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
unsigned int cpu_port = dev->cpu_port;
struct b53_vlan *vl; struct b53_vlan *vl;
u16 vid; u16 vid;
...@@ -1063,12 +1062,11 @@ void b53_vlan_add(struct dsa_switch *ds, int port, ...@@ -1063,12 +1062,11 @@ void b53_vlan_add(struct dsa_switch *ds, int port,
b53_get_vlan_entry(dev, vid, vl); b53_get_vlan_entry(dev, vid, vl);
vl->members |= BIT(port) | BIT(cpu_port); vl->members |= BIT(port);
if (untagged) if (untagged)
vl->untag |= BIT(port); vl->untag |= BIT(port);
else else
vl->untag &= ~BIT(port); vl->untag &= ~BIT(port);
vl->untag &= ~BIT(cpu_port);
b53_set_vlan_entry(dev, vid, vl); b53_set_vlan_entry(dev, vid, vl);
b53_fast_age_vlan(dev, vid); b53_fast_age_vlan(dev, vid);
...@@ -1432,8 +1430,8 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) ...@@ -1432,8 +1430,8 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br)
b53_write16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, reg); b53_write16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, reg);
} else { } else {
b53_get_vlan_entry(dev, pvid, vl); b53_get_vlan_entry(dev, pvid, vl);
vl->members |= BIT(port) | BIT(dev->cpu_port); vl->members |= BIT(port) | BIT(cpu_port);
vl->untag |= BIT(port) | BIT(dev->cpu_port); vl->untag |= BIT(port) | BIT(cpu_port);
b53_set_vlan_entry(dev, pvid, vl); b53_set_vlan_entry(dev, pvid, vl);
} }
} }
......
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