linux/drivers/net/dsa
Russell King db0e51afa4 net: dsa: fix mv88e6xxx switches
Since commit 76e398a627 ("net: dsa: use switchdev obj for VLAN add/del
ops"), the Marvell 88E6xxx switch has been unable to pass traffic
between ports - any received traffic is discarded by the switch.
Taking a port out of bridge mode and configuring a vlan on it also the
port to start passing traffic.

With the debugfs files re-instated to allow debug of this issue by
comparing the register settings between the working and non-working
case, the reason becomes clear:

     GLOBAL GLOBAL2 SERDES   0    1    2    3    4    5    6
- 7:  1111    707f    2001     2    2    2    2    2    0    2
+ 7:  1111    707f    2001     1    1    1    1    1    0    1

Register 7 for the ports is the default vlan tag register, and in the
non-working setup, it has been set to 2, despite vlan 2 not being
configured.  This causes the switch to drop all packets coming in to
these ports.  The working setup has the default vlan tag register set
to 1, which is the default vlan when none is configured.

Inspection of the code reveals why.  The code prior to this commit
was:

-		for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
...
-			if (!err && vlan->flags & BRIDGE_VLAN_INFO_PVID)
-				err = ds->drv->port_pvid_set(ds, p->port, vid);

but the new code is:

+	for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
...
+	}
...
+	if (pvid)
+		err = _mv88e6xxx_port_pvid_set(ds, port, vid);

This causes the new code to always set the default vlan to one higher
than the old code.

Fix this.

Fixes: 76e398a627 ("net: dsa: use switchdev obj for VLAN add/del ops")
Cc: <stable@vger.kernel.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-01-25 10:49:15 -08:00
..
bcm_sf2_regs.h net: dsa: bcm_sf2: Implement FDB operations 2015-10-26 18:14:02 -07:00
bcm_sf2.c net: dsa: bcm_sf2: Unhardcode port numbers 2015-10-26 18:23:59 -07:00
bcm_sf2.h net: dsa: bcm_sf2: Unhardcode port numbers 2015-10-26 18:23:59 -07:00
Kconfig dsa: mv88e6352/mv88e6xxx: Add support for Marvell 88E6320 and 88E6321 2015-07-09 14:34:23 -07:00
Makefile net: dsa: Add support for Marvell 88E6352 2014-10-30 14:54:10 -04:00
mv88e6xxx.c net: dsa: fix mv88e6xxx switches 2016-01-25 10:49:15 -08:00
mv88e6xxx.h dsa: mv88e6xxx: Add Second back of statistics 2015-12-23 22:17:00 -05:00
mv88e6060.c net: dsa: mv88e6060: replace magic values with register defines 2015-11-15 20:16:16 -05:00
mv88e6060.h net: dsa: mv88e6060: add register defines header file 2015-11-15 20:16:16 -05:00
mv88e6123_61_65.c net: dsa: mv88e6xxx: lookup switch name 2015-11-02 15:54:13 -05:00
mv88e6131.c net: dsa: mv88e6xxx: lookup switch name 2015-11-02 15:54:13 -05:00
mv88e6171.c net: dsa: mv88e6xxx: isolate unbridged ports 2015-11-05 13:37:23 -05:00
mv88e6352.c net: dsa: mv88e6xxx: isolate unbridged ports 2015-11-05 13:37:23 -05:00