Skip to content

Commit 6e830d8

Browse files
ffainellidavem330
authored andcommitted
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: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 0b7b498 commit 6e830d8

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

net/dsa/dsa2.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ static void dsa_user_port_unapply(struct device_node *port, u32 index,
283283
if (ds->ports[index].netdev) {
284284
dsa_slave_destroy(ds->ports[index].netdev);
285285
ds->ports[index].netdev = NULL;
286+
ds->enabled_port_mask &= ~(1 << index);
286287
}
287288
}
288289

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

296+
/* Initialize ds->phys_mii_mask before registering the slave MDIO bus
297+
* driver and before drv->setup() has run, since the switch drivers and
298+
* the slave MDIO bus driver rely on these values for probing PHY
299+
* devices or not
300+
*/
301+
ds->phys_mii_mask = ds->enabled_port_mask;
302+
295303
err = ds->drv->setup(ds);
296304
if (err < 0)
297305
return err;
@@ -511,6 +519,13 @@ static int dsa_parse_ports_dn(struct device_node *ports, struct dsa_switch *ds)
511519
return -EINVAL;
512520

513521
ds->ports[reg].dn = port;
522+
523+
/* Initialize enabled_port_mask now for drv->setup()
524+
* to have access to a correct value, just like what
525+
* net/dsa/dsa.c::dsa_switch_setup_one does.
526+
*/
527+
if (!dsa_port_is_cpu(port))
528+
ds->enabled_port_mask |= 1 << reg;
514529
}
515530

516531
return 0;

0 commit comments

Comments
 (0)