Commit 6e830d8f authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: Initialize ds->enabled_port_mask and ds->phys_mii_mask

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: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0b7b498d
...@@ -283,6 +283,7 @@ static void dsa_user_port_unapply(struct device_node *port, u32 index, ...@@ -283,6 +283,7 @@ static void dsa_user_port_unapply(struct device_node *port, u32 index,
if (ds->ports[index].netdev) { if (ds->ports[index].netdev) {
dsa_slave_destroy(ds->ports[index].netdev); dsa_slave_destroy(ds->ports[index].netdev);
ds->ports[index].netdev = NULL; ds->ports[index].netdev = NULL;
ds->enabled_port_mask &= ~(1 << index);
} }
} }
...@@ -292,6 +293,13 @@ static int dsa_ds_apply(struct dsa_switch_tree *dst, struct dsa_switch *ds) ...@@ -292,6 +293,13 @@ static int dsa_ds_apply(struct dsa_switch_tree *dst, struct dsa_switch *ds)
u32 index; u32 index;
int err; 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); err = ds->drv->setup(ds);
if (err < 0) if (err < 0)
return err; return err;
...@@ -511,6 +519,13 @@ static int dsa_parse_ports_dn(struct device_node *ports, struct dsa_switch *ds) ...@@ -511,6 +519,13 @@ static int dsa_parse_ports_dn(struct device_node *ports, struct dsa_switch *ds)
return -EINVAL; return -EINVAL;
ds->ports[reg].dn = port; 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; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment