Re: [PATCH net-next v3 2/6] net: dsa: Initialize ds->enabled_port_mask and ds->phys_mii_mask

2016-06-07 Thread Andrew Lunn
On Tue, Jun 07, 2016 at 02:06:52PM -0700, Florian Fainelli wrote:
> 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().
> 
> Signed-off-by: Florian Fainelli 

Reviewed-by: Andrew Lunn 

Andrew


[PATCH net-next v3 2/6] net: dsa: Initialize ds->enabled_port_mask and ds->phys_mii_mask

2016-06-07 Thread Florian Fainelli
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().

Signed-off-by: Florian Fainelli 
---
 net/dsa/dsa2.c | 15 +++
 1 file changed, 15 insertions(+)

diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 80dfe08db825..921a36fd139d 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -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);
}
 }
 
@@ -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;
@@ -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;
-- 
2.7.4