net: dsa: do not enable or disable non user ports
authorVivien Didelot <vivien.didelot@gmail.com>
Mon, 19 Aug 2019 20:00:49 +0000 (16:00 -0400)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Aug 2019 19:33:49 +0000 (12:33 -0700)
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.

Note that bcm_sf2_sw_suspend() currently calls bcm_sf2_port_disable()
(and thus b53_disable_port()) against the user and CPU ports, so do
not guards those functions. They will be called for unused ports in
the future, but that was expected by those drivers anyway.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/b53/b53_common.c
drivers/net/dsa/bcm_sf2.c
drivers/net/dsa/lan9303-core.c
drivers/net/dsa/lantiq_gswip.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/mt7530.c
drivers/net/dsa/mv88e6xxx/chip.c

index 907af62846ba88c01bb745c2f1801d7d37de993f..7d328a5f0161290c577393fa3d945d4af4cc8e63 100644 (file)
@@ -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)
index 49f99436018a382794b8ff4412d93507f66c245f..4f839348011d753cff7fc5a1faacd339cf5fc70e 100644 (file)
@@ -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);
index 7a2063e7737a3e2c7a44963da932bc1c3971b9d6..bbec86b9418e632ee9bd1ff374f231639a2c136f 100644 (file)
@@ -1079,6 +1079,9 @@ static int lan9303_port_enable(struct dsa_switch *ds, int port,
 {
        struct lan9303 *chip = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
        return lan9303_enable_processing_port(chip, port);
 }
 
@@ -1086,6 +1089,9 @@ static void lan9303_port_disable(struct dsa_switch *ds, int port)
 {
        struct lan9303 *chip = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return;
+
        lan9303_disable_processing_port(chip, port);
        lan9303_phy_write(ds, chip->phy_addr_base + port, MII_BMCR, BMCR_PDOWN);
 }
index 2175ec13bb2c0e88f167316affa2ddbba358affa..a69c9b9878b7d5a5ec6ee7f6b87e437a09844530 100644 (file)
@@ -642,6 +642,9 @@ static int gswip_port_enable(struct dsa_switch *ds, int port,
        struct gswip_priv *priv = ds->priv;
        int err;
 
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
        if (!dsa_is_cpu_port(ds, port)) {
                err = gswip_add_single_port_br(priv, port, true);
                if (err)
@@ -678,6 +681,9 @@ static void gswip_port_disable(struct dsa_switch *ds, int port)
 {
        struct gswip_priv *priv = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return;
+
        if (!dsa_is_cpu_port(ds, port)) {
                gswip_mdio_mask(priv, GSWIP_MDIO_PHY_LINK_DOWN,
                                GSWIP_MDIO_PHY_LINK_MASK,
index b45c7b972cec74ff3595d2c70ce87216335a56d9..b0b870f0c252095f7844230b3e3fe700e14d75fe 100644 (file)
@@ -361,6 +361,9 @@ int ksz_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy)
 {
        struct ksz_device *dev = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
        /* setup slave port */
        dev->dev_ops->port_setup(dev, port, false);
        if (dev->dev_ops->phy_setup)
@@ -378,6 +381,9 @@ void ksz_disable_port(struct dsa_switch *ds, int port)
 {
        struct ksz_device *dev = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return;
+
        dev->on_ports &= ~(1 << port);
        dev->live_ports &= ~(1 << port);
 
index 3181e95586d67c43fdca1bfa453ee89fa789fe37..c48e29486b10b50c82d416966945c725fefc822c 100644 (file)
@@ -726,6 +726,9 @@ mt7530_port_enable(struct dsa_switch *ds, int port,
 {
        struct mt7530_priv *priv = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
        mutex_lock(&priv->reg_mutex);
 
        /* Setup the MAC for the user port */
@@ -751,6 +754,9 @@ mt7530_port_disable(struct dsa_switch *ds, int port)
 {
        struct mt7530_priv *priv = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return;
+
        mutex_lock(&priv->reg_mutex);
 
        /* Clear up all port matrix which could be restored in the next
index 9b3ad22a5b981426262d607c94335063ed081db7..5e557545df6df05a4fc0176dcb291f724cc29fc9 100644 (file)
@@ -2267,6 +2267,9 @@ static int mv88e6xxx_port_enable(struct dsa_switch *ds, int port,
        struct mv88e6xxx_chip *chip = ds->priv;
        int err;
 
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
        mv88e6xxx_reg_lock(chip);
 
        err = mv88e6xxx_serdes_power(chip, port, true);
@@ -2283,6 +2286,9 @@ static void mv88e6xxx_port_disable(struct dsa_switch *ds, int port)
 {
        struct mv88e6xxx_chip *chip = ds->priv;
 
+       if (!dsa_is_user_port(ds, port))
+               return;
+
        mv88e6xxx_reg_lock(chip);
 
        if (mv88e6xxx_port_set_state(chip, port, BR_STATE_DISABLED))