diff options
Diffstat (limited to 'drivers/net/dsa')
| -rw-r--r-- | drivers/net/dsa/b53/b53_common.c | 9 | ||||
| -rw-r--r-- | drivers/net/dsa/bcm_sf2.c | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/bcm_sf2_cfp.c | 4 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/chip.c | 34 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/port.c | 1 | 
5 files changed, 27 insertions, 22 deletions
| diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index f5a8dd96fd75..4498ab897d94 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -1500,10 +1500,13 @@ static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds,  {  	struct b53_device *dev = ds->priv; -	/* Older models support a different tag format that we do not -	 * support in net/dsa/tag_brcm.c yet. +	/* Older models (5325, 5365) support a different tag format that we do +	 * not support in net/dsa/tag_brcm.c yet. 539x and 531x5 require managed +	 * mode to be turned on which means we need to specifically manage ARL +	 * misses on multicast addresses (TBD).  	 */ -	if (is5325(dev) || is5365(dev) || !b53_can_enable_brcm_tags(ds, port)) +	if (is5325(dev) || is5365(dev) || is539x(dev) || is531x5(dev) || +	    !b53_can_enable_brcm_tags(ds, port))  		return DSA_TAG_PROTO_NONE;  	/* Broadcom BCM58xx chips have a flow accelerator on Port 8 diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index ea01f24f15e7..b62d47210db8 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -14,7 +14,6 @@  #include <linux/netdevice.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> -#include <linux/of.h>  #include <linux/phy.h>  #include <linux/phy_fixed.h>  #include <linux/mii.h> diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index b721a2009b50..23b45da784cb 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -625,7 +625,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port,  	bcm_sf2_cfp_slice_ipv6(priv, v6_spec->ip6src, v6_spec->psrc,  				slice_num, false);  	bcm_sf2_cfp_slice_ipv6(priv, v6_m_spec->ip6src, v6_m_spec->psrc, -				slice_num, true); +				SLICE_NUM_MASK, true);  	/* Insert into TCAM now because we need to insert a second rule */  	bcm_sf2_cfp_rule_addr_set(priv, rule_index[0]); @@ -699,7 +699,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port,  	/* Insert into Action and policer RAMs now, set chain ID to  	 * the one we are chained to  	 */ -	ret = bcm_sf2_cfp_act_pol_set(priv, rule_index[0], port_num, +	ret = bcm_sf2_cfp_act_pol_set(priv, rule_index[1], port_num,  				      queue_num, true);  	if (ret)  		goto out_err; diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 8171055fde7a..66d33e97cbc5 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -339,7 +339,7 @@ static void mv88e6xxx_g1_irq_free(struct mv88e6xxx_chip *chip)  	u16 mask;  	mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &mask); -	mask |= GENMASK(chip->g1_irq.nirqs, 0); +	mask &= ~GENMASK(chip->g1_irq.nirqs, 0);  	mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask);  	free_irq(chip->irq, chip); @@ -395,7 +395,7 @@ static int mv88e6xxx_g1_irq_setup(struct mv88e6xxx_chip *chip)  	return 0;  out_disable: -	mask |= GENMASK(chip->g1_irq.nirqs, 0); +	mask &= ~GENMASK(chip->g1_irq.nirqs, 0);  	mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask);  out_mapping: @@ -2177,6 +2177,19 @@ static const struct of_device_id mv88e6xxx_mdio_external_match[] = {  	{ },  }; +static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip) + +{ +	struct mv88e6xxx_mdio_bus *mdio_bus; +	struct mii_bus *bus; + +	list_for_each_entry(mdio_bus, &chip->mdios, list) { +		bus = mdio_bus->bus; + +		mdiobus_unregister(bus); +	} +} +  static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,  				    struct device_node *np)  { @@ -2201,27 +2214,16 @@ static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,  		match = of_match_node(mv88e6xxx_mdio_external_match, child);  		if (match) {  			err = mv88e6xxx_mdio_register(chip, child, true); -			if (err) +			if (err) { +				mv88e6xxx_mdios_unregister(chip);  				return err; +			}  		}  	}  	return 0;  } -static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip) - -{ -	struct mv88e6xxx_mdio_bus *mdio_bus; -	struct mii_bus *bus; - -	list_for_each_entry(mdio_bus, &chip->mdios, list) { -		bus = mdio_bus->bus; - -		mdiobus_unregister(bus); -	} -} -  static int mv88e6xxx_get_eeprom_len(struct dsa_switch *ds)  {  	struct mv88e6xxx_chip *chip = ds->priv; diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c index a7801f6668a5..6315774d72b3 100644 --- a/drivers/net/dsa/mv88e6xxx/port.c +++ b/drivers/net/dsa/mv88e6xxx/port.c @@ -338,6 +338,7 @@ int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,  		cmode = MV88E6XXX_PORT_STS_CMODE_2500BASEX;  		break;  	case PHY_INTERFACE_MODE_XGMII: +	case PHY_INTERFACE_MODE_XAUI:  		cmode = MV88E6XXX_PORT_STS_CMODE_XAUI;  		break;  	case PHY_INTERFACE_MODE_RXAUI: |