Merge tag 'nfsd-4.6' of git://linux-nfs.org/~bfields/linux
[cascardo/linux.git] / drivers / net / dsa / bcm_sf2.c
index 6f946fe..95944d5 100644 (file)
@@ -483,16 +483,17 @@ static int bcm_sf2_sw_fast_age_port(struct dsa_switch  *ds, int port)
 }
 
 static int bcm_sf2_sw_br_join(struct dsa_switch *ds, int port,
-                             u32 br_port_mask)
+                             struct net_device *bridge)
 {
        struct bcm_sf2_priv *priv = ds_to_priv(ds);
        unsigned int i;
        u32 reg, p_ctl;
 
+       priv->port_sts[port].bridge_dev = bridge;
        p_ctl = core_readl(priv, CORE_PORT_VLAN_CTL_PORT(port));
 
        for (i = 0; i < priv->hw_params.num_ports; i++) {
-               if (!((1 << i) & br_port_mask))
+               if (priv->port_sts[i].bridge_dev != bridge)
                        continue;
 
                /* Add this local port to the remote port VLAN control
@@ -515,10 +516,10 @@ static int bcm_sf2_sw_br_join(struct dsa_switch *ds, int port,
        return 0;
 }
 
-static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port,
-                              u32 br_port_mask)
+static void bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port)
 {
        struct bcm_sf2_priv *priv = ds_to_priv(ds);
+       struct net_device *bridge = priv->port_sts[port].bridge_dev;
        unsigned int i;
        u32 reg, p_ctl;
 
@@ -526,7 +527,7 @@ static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port,
 
        for (i = 0; i < priv->hw_params.num_ports; i++) {
                /* Don't touch the remaining ports */
-               if (!((1 << i) & br_port_mask))
+               if (priv->port_sts[i].bridge_dev != bridge)
                        continue;
 
                reg = core_readl(priv, CORE_PORT_VLAN_CTL_PORT(i));
@@ -541,8 +542,7 @@ static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port,
 
        core_writel(priv, p_ctl, CORE_PORT_VLAN_CTL_PORT(port));
        priv->port_sts[port].vlan_ctl_mask = p_ctl;
-
-       return 0;
+       priv->port_sts[port].bridge_dev = NULL;
 }
 
 static int bcm_sf2_sw_br_set_stp_state(struct dsa_switch *ds, int port,
@@ -1385,8 +1385,8 @@ static struct dsa_switch_driver bcm_sf2_switch_driver = {
        .port_disable           = bcm_sf2_port_disable,
        .get_eee                = bcm_sf2_sw_get_eee,
        .set_eee                = bcm_sf2_sw_set_eee,
-       .port_join_bridge       = bcm_sf2_sw_br_join,
-       .port_leave_bridge      = bcm_sf2_sw_br_leave,
+       .port_bridge_join       = bcm_sf2_sw_br_join,
+       .port_bridge_leave      = bcm_sf2_sw_br_leave,
        .port_stp_update        = bcm_sf2_sw_br_set_stp_state,
        .port_fdb_prepare       = bcm_sf2_sw_fdb_prepare,
        .port_fdb_add           = bcm_sf2_sw_fdb_add,