]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: dsa: microchip: bypass dev_ops for port_setup()
authorBastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Thu, 21 May 2026 06:12:41 +0000 (08:12 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 23 May 2026 01:40:49 +0000 (18:40 -0700)
port_setup() is handled through a common function that redirects
the treatment to ksz_dev_ops callbacks. This layer of indirection
isn't needed since we now have a dsa_switch_ops for each switch family

Remove one indirection layer for KSZ switches, by connecting the
ksz_dev_ops :: port_setup() operations directly to dsa_switch_ops.
Make ksz9477_set_default_prio_queue_mapping() non-static since it's used
by ksz_common for tc operations and by ksz9477.c for this port_setup().
Remove the now unused port_setup() callback from ksz_dev_ops.

Signed-off-by: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Link: https://patch.msgid.link/20260521-clean-ksz-2nd-series-v3-6-75c38971c19a@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 acc898c68f9851f55912c21be1f73b86c2a9f981..09968aec6506395f5614d3e6d6d46892f5e8a224 100644 (file)
@@ -1692,6 +1692,17 @@ static void ksz8_port_setup(struct ksz_device *dev, int port, bool cpu_port)
                ksz8_pme_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0);
 }
 
+static int ksz8_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+       struct ksz_device *dev = ds->priv;
+
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
+       ksz8_port_setup(dev, port, false);
+       return ksz_dcb_init_port(dev, port);
+}
+
 static void ksz88x3_config_rmii_clk(struct ksz_device *dev)
 {
        struct dsa_port *cpu_dp = dsa_to_port(dev->ds, dev->cpu_port);
@@ -2319,7 +2330,6 @@ const struct phylink_mac_ops ksz8_phylink_mac_ops = {
 const struct ksz_dev_ops ksz8463_dev_ops = {
        .get_port_addr = ksz8463_get_port_addr,
        .cfg_port_member = ksz8_cfg_port_member,
-       .port_setup = ksz8_port_setup,
        .r_phy = ksz8463_r_phy,
        .w_phy = ksz8463_w_phy,
        .r_mib_cnt = ksz8_r_mib_cnt,
@@ -2333,7 +2343,6 @@ const struct ksz_dev_ops ksz8463_dev_ops = {
 const struct ksz_dev_ops ksz87xx_dev_ops = {
        .get_port_addr = ksz8_get_port_addr,
        .cfg_port_member = ksz8_cfg_port_member,
-       .port_setup = ksz8_port_setup,
        .r_phy = ksz8_r_phy,
        .w_phy = ksz8_w_phy,
        .r_mib_cnt = ksz8_r_mib_cnt,
@@ -2350,7 +2359,6 @@ const struct ksz_dev_ops ksz87xx_dev_ops = {
 const struct ksz_dev_ops ksz88xx_dev_ops = {
        .get_port_addr = ksz8_get_port_addr,
        .cfg_port_member = ksz8_cfg_port_member,
-       .port_setup = ksz8_port_setup,
        .r_phy = ksz8_r_phy,
        .w_phy = ksz8_w_phy,
        .r_mib_cnt = ksz8_r_mib_cnt,
@@ -2373,7 +2381,7 @@ const struct dsa_switch_ops ksz8463_switch_ops = {
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
        .phylink_get_caps       = ksz8_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
+       .port_setup             = ksz8_dsa_port_setup,
        .get_strings            = ksz_get_strings,
        .get_ethtool_stats      = ksz_get_ethtool_stats,
        .get_sset_count         = ksz_sset_count,
@@ -2433,7 +2441,7 @@ const struct dsa_switch_ops ksz87xx_switch_ops = {
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
        .phylink_get_caps       = ksz8_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
+       .port_setup             = ksz8_dsa_port_setup,
        .get_strings            = ksz_get_strings,
        .get_ethtool_stats      = ksz_get_ethtool_stats,
        .get_sset_count         = ksz_sset_count,
@@ -2493,7 +2501,7 @@ const struct dsa_switch_ops ksz88xx_switch_ops = {
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
        .phylink_get_caps       = ksz8_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
+       .port_setup             = ksz8_dsa_port_setup,
        .get_strings            = ksz_get_strings,
        .get_ethtool_stats      = ksz_get_ethtool_stats,
        .get_sset_count         = ksz_sset_count,
index 7385aa4e788a1b14344cfa1c7f8dfc63e326f667..aac7fc478eda8e46dc95c2bde681925afe344ed8 100644 (file)
@@ -1309,6 +1309,23 @@ static void ksz9477_port_setup(struct ksz_device *dev, int port, bool cpu_port)
        ksz_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0);
 }
 
+static int ksz9477_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+       struct ksz_device *dev = ds->priv;
+       int ret;
+
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
+       ksz9477_port_setup(dev, port, false);
+
+       ret = ksz9477_set_default_prio_queue_mapping(dev, port);
+       if (ret)
+               return ret;
+
+       return ksz_dcb_init_port(dev, port);
+}
+
 static void ksz9477_config_cpu_port(struct dsa_switch *ds)
 {
        struct ksz_device *dev = ds->priv;
@@ -1895,7 +1912,6 @@ const struct phylink_mac_ops ksz9477_phylink_mac_ops = {
 const struct ksz_dev_ops ksz9477_dev_ops = {
        .get_port_addr = ksz9477_get_port_addr,
        .cfg_port_member = ksz9477_cfg_port_member,
-       .port_setup = ksz9477_port_setup,
        .r_phy = ksz9477_r_phy,
        .w_phy = ksz9477_w_phy,
        .r_mib_cnt = ksz9477_r_mib_cnt,
@@ -1919,7 +1935,7 @@ const struct dsa_switch_ops ksz9477_switch_ops = {
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
        .phylink_get_caps       = ksz9477_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
+       .port_setup             = ksz9477_dsa_port_setup,
        .set_ageing_time        = ksz9477_set_ageing_time,
        .get_strings            = ksz_get_strings,
        .get_ethtool_stats      = ksz_get_ethtool_stats,
index 103f79179446964dd7955b1ac74fa92f965efa64..e3f481c32e09305bea3f6f8262459abf06b7c97c 100644 (file)
@@ -2947,8 +2947,7 @@ void ksz_port_bridge_leave(struct dsa_switch *ds, int port,
         */
 }
 
-static int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev,
-                                                 int port)
+int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int port)
 {
        u32 queue_map = 0;
        int ipm;
@@ -2970,30 +2969,6 @@ static int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev,
        return ksz_pwrite32(dev, port, KSZ9477_PORT_MRI_TC_MAP__4, queue_map);
 }
 
-int ksz_port_setup(struct dsa_switch *ds, int port)
-{
-       struct ksz_device *dev = ds->priv;
-       int ret;
-
-       if (!dsa_is_user_port(ds, port))
-               return 0;
-
-       /* setup user port */
-       dev->dev_ops->port_setup(dev, port, false);
-
-       if (!is_ksz8(dev)) {
-               ret = ksz9477_set_default_prio_queue_mapping(dev, port);
-               if (ret)
-                       return ret;
-       }
-
-       /* port_stp_state_set() will be called after to enable the port so
-        * there is no need to do anything.
-        */
-
-       return ksz_dcb_init_port(dev, port);
-}
-
 void ksz_port_stp_state_set(struct dsa_switch *ds, int port, u8 state)
 {
        struct ksz_device *dev = ds->priv;
index f80034488cd1ba41fd96e36a9d2eb9643f3c4cf3..c66d75347c6cb6308853aedb9fa9aec3c80d3b25 100644 (file)
@@ -361,7 +361,6 @@ struct alu_struct {
 struct ksz_dev_ops {
        u32 (*get_port_addr)(int port, int offset);
        void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member);
-       void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port);
 
        /**
         * @mdio_bus_preinit: Function pointer to pre-initialize the MDIO bus
@@ -427,7 +426,6 @@ int ksz_switch_suspend(struct device *dev);
 int ksz_switch_resume(struct device *dev);
 
 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);
 
 void ksz_init_mib_timer(struct ksz_device *dev);
@@ -515,6 +513,7 @@ int ksz_pirq_setup(struct ksz_device *dev, u8 p);
 int ksz_girq_setup(struct ksz_device *dev);
 void ksz_irq_free(struct ksz_irq *kirq);
 int ksz_parse_drive_strength(struct ksz_device *dev);
+int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int port);
 
 /* Common register access functions */
 static inline struct regmap *ksz_regmap_8(struct ksz_device *dev)
index ecb072cd998197fa433672134372e6dcd86eb025..690f99da0bfee633680f7b84e88ad3dd2f27e85b 100644 (file)
@@ -411,6 +411,23 @@ static void lan937x_port_setup(struct ksz_device *dev, int port, bool cpu_port)
        dev->dev_ops->cfg_port_member(dev, port, member);
 }
 
+static int lan937x_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+       struct ksz_device *dev = ds->priv;
+       int ret;
+
+       if (!dsa_is_user_port(ds, port))
+               return 0;
+
+       lan937x_port_setup(dev, port, false);
+
+       ret = ksz9477_set_default_prio_queue_mapping(dev, port);
+       if (ret)
+               return ret;
+
+       return ksz_dcb_init_port(dev, port);
+}
+
 static void lan937x_config_cpu_port(struct dsa_switch *ds)
 {
        struct ksz_device *dev = ds->priv;
@@ -799,7 +816,6 @@ const struct phylink_mac_ops lan937x_phylink_mac_ops = {
 const struct ksz_dev_ops lan937x_dev_ops = {
        .get_port_addr = ksz9477_get_port_addr,
        .cfg_port_member = ksz9477_cfg_port_member,
-       .port_setup = lan937x_port_setup,
        .mdio_bus_preinit = lan937x_mdio_bus_preinit,
        .create_phy_addr_map = lan937x_create_phy_addr_map,
        .r_phy = lan937x_r_phy,
@@ -823,7 +839,7 @@ const struct dsa_switch_ops lan937x_switch_ops = {
        .phy_read               = ksz_phy_read16,
        .phy_write              = ksz_phy_write16,
        .phylink_get_caps       = lan937x_phylink_get_caps,
-       .port_setup             = ksz_port_setup,
+       .port_setup             = lan937x_dsa_port_setup,
        .set_ageing_time        = lan937x_set_ageing_time,
        .get_strings            = ksz_get_strings,
        .get_ethtool_stats      = ksz_get_ethtool_stats,