]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: microchip: split ksz_get_tag_protocol()
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 5 May 2026 14:25:08 +0000 (16:25 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 9 May 2026 02:09:14 +0000 (19:09 -0700)
All the switch families use a common function to implement
.get_tag_protocol(). This function then returns the relevant protocol
depending on the chip ID.

Make the protocol to dsa_switch_ops association a little bit more
obvious by having separate implementations.

Change made by manually checking which chip id has which dsa_switch_ops
assigned to it, then filtering the common ksz_get_tag_protocol() for
just those chip IDs pertaining to it.

As an important benefit, we no longer have that weird-looking
DSA_TAG_PROTO_NONE fallback which was never actually returned.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Link: https://patch.msgid.link/20260505-clean-ksz-driver-v1-8-05d70fa42461@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz8.c
drivers/net/dsa/microchip/ksz9477.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/ksz_common.h
drivers/net/dsa/microchip/lan937x_main.c

index f7801269b11a473e2d5ec7af1e71e25374b194da..fa2e1256323c2b71bfd949d075cad7ea2ec0220d 100644 (file)
@@ -2100,6 +2100,32 @@ static void ksz8_switch_exit(struct ksz_device *dev)
        ksz8_reset_switch(dev);
 }
 
+static enum dsa_tag_protocol ksz8463_get_tag_protocol(struct dsa_switch *ds,
+                                                     int port,
+                                                     enum dsa_tag_protocol mp)
+{
+       return DSA_TAG_PROTO_KSZ9893;
+}
+
+static enum dsa_tag_protocol ksz87xx_get_tag_protocol(struct dsa_switch *ds,
+                                                     int port,
+                                                     enum dsa_tag_protocol mp)
+{
+       return DSA_TAG_PROTO_KSZ8795;
+}
+
+static enum dsa_tag_protocol ksz88xx_get_tag_protocol(struct dsa_switch *ds,
+                                                     int port,
+                                                     enum dsa_tag_protocol mp)
+{
+       struct ksz_device *dev = ds->priv;
+
+       if (ksz_is_8895_family(dev)) /* KSZ8864, KSZ8895 */
+               return DSA_TAG_PROTO_KSZ8795;
+
+       return DSA_TAG_PROTO_KSZ9893;
+}
+
 static void ksz88x3_phylink_mac_config(struct phylink_config *config,
                                       unsigned int mode,
                                       const struct phylink_link_state *state)
@@ -2229,7 +2255,7 @@ const struct ksz_dev_ops ksz88xx_dev_ops = {
 };
 
 const struct dsa_switch_ops ksz8463_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
+       .get_tag_protocol       = ksz8463_get_tag_protocol,
        .connect_tag_protocol   = ksz_connect_tag_protocol,
        .get_phy_flags          = ksz_get_phy_flags,
        .setup                  = ksz_setup,
@@ -2290,7 +2316,7 @@ const struct dsa_switch_ops ksz8463_switch_ops = {
 };
 
 const struct dsa_switch_ops ksz87xx_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
+       .get_tag_protocol       = ksz87xx_get_tag_protocol,
        .connect_tag_protocol   = ksz_connect_tag_protocol,
        .get_phy_flags          = ksz_get_phy_flags,
        .setup                  = ksz_setup,
@@ -2351,7 +2377,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops = {
 };
 
 const struct dsa_switch_ops ksz88xx_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
+       .get_tag_protocol       = ksz88xx_get_tag_protocol,
        .connect_tag_protocol   = ksz_connect_tag_protocol,
        .get_phy_flags          = ksz_get_phy_flags,
        .setup                  = ksz_setup,
index 9fb0169b5e29ef39ea0a53d0863a10da90973d79..9bac95bb079ffe5916351aee5ba42c68dcca7133 100644 (file)
@@ -1610,6 +1610,20 @@ static void ksz9477_switch_exit(struct ksz_device *dev)
        ksz9477_reset_switch(dev);
 }
 
+static enum dsa_tag_protocol ksz9477_get_tag_protocol(struct dsa_switch *ds,
+                                                     int port,
+                                                     enum dsa_tag_protocol mp)
+{
+       struct ksz_device *dev = ds->priv;
+
+       if (dev->chip_id == KSZ8563_CHIP_ID ||
+           dev->chip_id == KSZ9893_CHIP_ID ||
+           dev->chip_id == KSZ9563_CHIP_ID)
+               return DSA_TAG_PROTO_KSZ9893;
+
+       return DSA_TAG_PROTO_KSZ9477;
+}
+
 static void ksz9477_set_gbit(struct ksz_device *dev, int port, bool gbit)
 {
        const u8 *bitval = dev->info->xmii_ctrl1;
@@ -1775,7 +1789,7 @@ const struct ksz_dev_ops ksz9477_dev_ops = {
 };
 
 const struct dsa_switch_ops ksz9477_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
+       .get_tag_protocol       = ksz9477_get_tag_protocol,
        .connect_tag_protocol   = ksz_connect_tag_protocol,
        .get_phy_flags          = ksz_get_phy_flags,
        .setup                  = ksz_setup,
index 37e575bf4e14d72e59afe2df82c1406be037dd01..1be055d3f1994f54afdf5fde595e7f8590f886ca 100644 (file)
@@ -3304,37 +3304,6 @@ int ksz_port_bridge_flags(struct dsa_switch *ds, int port,
        return 0;
 }
 
-enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds,
-                                          int port,
-                                          enum dsa_tag_protocol mp)
-{
-       struct ksz_device *dev = ds->priv;
-       enum dsa_tag_protocol proto = DSA_TAG_PROTO_NONE;
-
-       if (ksz_is_ksz87xx(dev) || ksz_is_8895_family(dev))
-               proto = DSA_TAG_PROTO_KSZ8795;
-
-       if (dev->chip_id == KSZ88X3_CHIP_ID ||
-           dev->chip_id == KSZ8463_CHIP_ID ||
-           dev->chip_id == KSZ8563_CHIP_ID ||
-           dev->chip_id == KSZ9893_CHIP_ID ||
-           dev->chip_id == KSZ9563_CHIP_ID)
-               proto = DSA_TAG_PROTO_KSZ9893;
-
-       if (dev->chip_id == KSZ8567_CHIP_ID ||
-           dev->chip_id == KSZ9477_CHIP_ID ||
-           dev->chip_id == KSZ9896_CHIP_ID ||
-           dev->chip_id == KSZ9897_CHIP_ID ||
-           dev->chip_id == KSZ9567_CHIP_ID ||
-           dev->chip_id == LAN9646_CHIP_ID)
-               proto = DSA_TAG_PROTO_KSZ9477;
-
-       if (is_lan937x(dev))
-               proto = DSA_TAG_PROTO_LAN937X;
-
-       return proto;
-}
-
 int ksz_connect_tag_protocol(struct dsa_switch *ds,
                             enum dsa_tag_protocol proto)
 {
index 37923a1c43d80aab94e752b36db1a075e55c8eba..39486b5571bd69bc33414483ef6edc1a87469f1f 100644 (file)
@@ -473,9 +473,6 @@ void ksz_teardown(struct dsa_switch *ds);
 int ksz_port_setup(struct dsa_switch *ds, int port);
 void ksz_port_teardown(struct dsa_switch *ds, int port);
 
-enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds,
-                                          int port,
-                                          enum dsa_tag_protocol mp);
 int ksz_connect_tag_protocol(struct dsa_switch *ds,
                             enum dsa_tag_protocol proto);
 void ksz_init_mib_timer(struct ksz_device *dev);
index ff931b1143a525e29f68a5074f3bae50d9e516ea..c39be6eb50121bfea3386080fda505706aae61a1 100644 (file)
@@ -667,6 +667,13 @@ static void lan937x_switch_exit(struct ksz_device *dev)
        lan937x_reset_switch(dev);
 }
 
+static enum dsa_tag_protocol lan937x_get_tag_protocol(struct dsa_switch *ds,
+                                                     int port,
+                                                     enum dsa_tag_protocol mp)
+{
+       return DSA_TAG_PROTO_LAN937X;
+}
+
 const struct phylink_mac_ops lan937x_phylink_mac_ops = {
        .mac_config     = ksz_phylink_mac_config,
        .mac_link_down  = ksz_phylink_mac_link_down,
@@ -714,7 +721,7 @@ const struct ksz_dev_ops lan937x_dev_ops = {
 };
 
 const struct dsa_switch_ops lan937x_switch_ops = {
-       .get_tag_protocol       = ksz_get_tag_protocol,
+       .get_tag_protocol       = lan937x_get_tag_protocol,
        .connect_tag_protocol   = ksz_connect_tag_protocol,
        .get_phy_flags          = ksz_get_phy_flags,
        .setup                  = ksz_setup,