Skip to content

Commit

Permalink
net: dsa: Initialize ds->enabled_port_mask and ds->phys_mii_mask
Browse files Browse the repository at this point in the history
Some drivers rely on these two bitmasks to contain the correct values
for them to successfully probe and initialize at drv->setup() time,
calculate correct values to put in both masks as early as possible in
dsa_get_ports_dn().

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Florian Fainelli authored and David S. Miller committed Jun 8, 2016
1 parent 0b7b498 commit 6e830d8
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions net/dsa/dsa2.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ static void dsa_user_port_unapply(struct device_node *port, u32 index,
if (ds->ports[index].netdev) {
dsa_slave_destroy(ds->ports[index].netdev);
ds->ports[index].netdev = NULL;
ds->enabled_port_mask &= ~(1 << index);
}
}

Expand All @@ -292,6 +293,13 @@ static int dsa_ds_apply(struct dsa_switch_tree *dst, struct dsa_switch *ds)
u32 index;
int err;

/* Initialize ds->phys_mii_mask before registering the slave MDIO bus
* driver and before drv->setup() has run, since the switch drivers and
* the slave MDIO bus driver rely on these values for probing PHY
* devices or not
*/
ds->phys_mii_mask = ds->enabled_port_mask;

err = ds->drv->setup(ds);
if (err < 0)
return err;
Expand Down Expand Up @@ -511,6 +519,13 @@ static int dsa_parse_ports_dn(struct device_node *ports, struct dsa_switch *ds)
return -EINVAL;

ds->ports[reg].dn = port;

/* Initialize enabled_port_mask now for drv->setup()
* to have access to a correct value, just like what
* net/dsa/dsa.c::dsa_switch_setup_one does.
*/
if (!dsa_port_is_cpu(port))
ds->enabled_port_mask |= 1 << reg;
}

return 0;
Expand Down

0 comments on commit 6e830d8

Please sign in to comment.