aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2017-04-24 17:27:21 -0400
committerDavid S. Miller <davem@davemloft.net>2017-04-24 18:28:56 -0400
commita424f0de61638cbb5047e0a888c54da9cf471f90 (patch)
tree3b496c07a3c9270854832de7e9f47c644166957b
parent38baf3a68bd2a8bca346abf0ba4b98a691543e7e (diff)
net: dsa: b53: Include IMP/CPU port in dumb forwarding mode
Since Broadcom tags are not enabled in b53 (DSA_PROTO_TAG_NONE), we need to make sure that the IMP/CPU port is included in the forwarding decision. Without this change, switching between non-management ports would work, but not between management ports and non-management ports thus breaking the default state in which DSA switch are brought up. Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch") Reported-by: Eric Anholt <eric@anholt.net> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/dsa/b53/b53_common.c10
-rw-r--r--drivers/net/dsa/b53/b53_regs.h4
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c
index 8cf4801994e8..ca7f3b005a29 100644
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -326,6 +326,7 @@ static void b53_get_vlan_entry(struct b53_device *dev, u16 vid,
326 326
327static void b53_set_forwarding(struct b53_device *dev, int enable) 327static void b53_set_forwarding(struct b53_device *dev, int enable)
328{ 328{
329 struct dsa_switch *ds = dev->ds;
329 u8 mgmt; 330 u8 mgmt;
330 331
331 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt); 332 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt);
@@ -336,6 +337,15 @@ static void b53_set_forwarding(struct b53_device *dev, int enable)
336 mgmt &= ~SM_SW_FWD_EN; 337 mgmt &= ~SM_SW_FWD_EN;
337 338
338 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt); 339 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt);
340
341 /* Include IMP port in dumb forwarding mode when no tagging protocol is
342 * set
343 */
344 if (ds->ops->get_tag_protocol(ds) == DSA_TAG_PROTO_NONE) {
345 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt);
346 mgmt |= B53_MII_DUMB_FWDG_EN;
347 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt);
348 }
339} 349}
340 350
341static void b53_enable_vlan(struct b53_device *dev, bool enable) 351static void b53_enable_vlan(struct b53_device *dev, bool enable)
diff --git a/drivers/net/dsa/b53/b53_regs.h b/drivers/net/dsa/b53/b53_regs.h
index 9fd24c418fa4..f2a060e7a637 100644
--- a/drivers/net/dsa/b53/b53_regs.h
+++ b/drivers/net/dsa/b53/b53_regs.h
@@ -104,6 +104,10 @@
104#define B53_UC_FWD_EN BIT(6) 104#define B53_UC_FWD_EN BIT(6)
105#define B53_MC_FWD_EN BIT(7) 105#define B53_MC_FWD_EN BIT(7)
106 106
107/* Switch control (8 bit) */
108#define B53_SWITCH_CTRL 0x22
109#define B53_MII_DUMB_FWDG_EN BIT(6)
110
107/* (16 bit) */ 111/* (16 bit) */
108#define B53_UC_FLOOD_MASK 0x32 112#define B53_UC_FLOOD_MASK 0x32
109#define B53_MC_FLOOD_MASK 0x34 113#define B53_MC_FLOOD_MASK 0x34