On 8/18/19 10:35 AM, Vivien Didelot wrote: > The .port_enable and .port_disable operations are currently only > called for user ports, hence assuming they have a slave device. In > preparation for using these operations for other port types as well, > simply guard all implementations against non user ports and return > directly in such case. > > Signed-off-by: Vivien Didelot <vivien.dide...@gmail.com> > ---
[snip] > diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c > index 907af62846ba..1639ea7b7dab 100644 > --- a/drivers/net/dsa/b53/b53_common.c > +++ b/drivers/net/dsa/b53/b53_common.c > @@ -510,10 +510,15 @@ EXPORT_SYMBOL(b53_imp_vlan_setup); > int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) > { > struct b53_device *dev = ds->priv; > - unsigned int cpu_port = ds->ports[port].cpu_dp->index; > + unsigned int cpu_port; > int ret = 0; > u16 pvlan; > > + if (!dsa_is_user_port(ds, port)) > + return 0; > + > + cpu_port = ds->ports[port].cpu_dp->index; > + > if (dev->ops->irq_enable) > ret = dev->ops->irq_enable(dev, port); > if (ret) > @@ -547,6 +552,9 @@ void b53_disable_port(struct dsa_switch *ds, int port) > struct b53_device *dev = ds->priv; > u8 reg; > > + if (!dsa_is_user_port(ds, port)) > + return; > + > /* Disable Tx/Rx for the port */ > b53_read8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), ®); > reg |= PORT_CTRL_RX_DISABLE | PORT_CTRL_TX_DISABLE; For b53, the changes are correct, for bcm_sf2, see comments below: > diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c > index 49f99436018a..3d06262817bd 100644 > --- a/drivers/net/dsa/bcm_sf2.c > +++ b/drivers/net/dsa/bcm_sf2.c > @@ -157,6 +157,9 @@ static int bcm_sf2_port_setup(struct dsa_switch *ds, int > port, > unsigned int i; > u32 reg; > > + if (!dsa_is_user_port(ds, port)) > + return 0; > + > /* Clear the memory power down */ > reg = core_readl(priv, CORE_MEM_PSM_VDD_CTRL); > reg &= ~P_TXQ_PSM_VDD(port); > @@ -222,6 +225,9 @@ static void bcm_sf2_port_disable(struct dsa_switch *ds, > int port) > struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); > u32 reg; > > + if (!dsa_is_user_port(ds, port)) > + return; in bcm_sf2_sw_suspend(), we do call bcm_sf2_port_disable() against the user and CPU port. -- Florian