]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: dsa: dsa_loop: remove usage of mdio_board_info
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 13 Sep 2025 21:07:08 +0000 (23:07 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 17 Sep 2025 22:24:01 +0000 (15:24 -0700)
dsa_loop is the last remaining user of mdio_board_info. Let's remove
using mdio_board_info, so that support for it can be dropped from
phylib.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Tested-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://patch.msgid.link/da9563a4-8e14-41cf-bfea-cf5f1b58a4b7@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/Makefile
drivers/net/dsa/dsa_loop.c
drivers/net/dsa/dsa_loop.h [deleted file]
drivers/net/dsa/dsa_loop_bdinfo.c [deleted file]

index c0a534fe6eaf7532866240d66d44517ebe2e92b3..0f8ff4a1a313bc2810cc1cec28745b66a993200c 100644 (file)
@@ -2,9 +2,6 @@
 obj-$(CONFIG_NET_DSA_BCM_SF2)  += bcm-sf2.o
 bcm-sf2-objs                   := bcm_sf2.o bcm_sf2_cfp.o
 obj-$(CONFIG_NET_DSA_LOOP)     += dsa_loop.o
-ifdef CONFIG_NET_DSA_LOOP
-obj-$(CONFIG_FIXED_PHY)                += dsa_loop_bdinfo.o
-endif
 obj-$(CONFIG_NET_DSA_KS8995)   += ks8995.o
 obj-$(CONFIG_NET_DSA_MT7530)   += mt7530.o
 obj-$(CONFIG_NET_DSA_MT7530_MDIO) += mt7530-mdio.o
index 8112515d545ea2daed85939bdec7eea28e91a178..720738807e129e349236d50186084d703f97877b 100644 (file)
 #include <linux/dsa/loop.h>
 #include <net/dsa.h>
 
-#include "dsa_loop.h"
+#define DSA_LOOP_NUM_PORTS     6
+#define DSA_LOOP_CPU_PORT      (DSA_LOOP_NUM_PORTS - 1)
+#define NUM_FIXED_PHYS         (DSA_LOOP_NUM_PORTS - 2)
+
+struct dsa_loop_pdata {
+       /* Must be first, such that dsa_register_switch() can access this
+        * without gory pointer manipulations
+        */
+       struct dsa_chip_data cd;
+       const char *name;
+       unsigned int enabled_ports;
+       const char *netdev;
+};
 
 static struct dsa_loop_mib_entry dsa_loop_mibs[] = {
        [DSA_LOOP_PHY_READ_OK]  = { "phy_read_ok", },
@@ -27,6 +39,7 @@ static struct dsa_loop_mib_entry dsa_loop_mibs[] = {
 };
 
 static struct phy_device *phydevs[PHY_MAX_ADDR];
+static struct mdio_device *switch_mdiodev;
 
 enum dsa_loop_devlink_resource_id {
        DSA_LOOP_DEVLINK_PARAM_ID_VTU,
@@ -392,6 +405,42 @@ static void dsa_loop_phydevs_unregister(void)
        }
 }
 
+static int __init dsa_loop_create_switch_mdiodev(void)
+{
+       static struct dsa_loop_pdata dsa_loop_pdata = {
+               .cd = {
+                       .port_names[0] = "lan1",
+                       .port_names[1] = "lan2",
+                       .port_names[2] = "lan3",
+                       .port_names[3] = "lan4",
+                       .port_names[DSA_LOOP_CPU_PORT] = "cpu",
+               },
+               .name = "DSA mockup driver",
+               .enabled_ports = 0x1f,
+               .netdev = "eth0",
+       };
+       struct mii_bus *bus;
+       int ret = -ENODEV;
+
+       bus = mdio_find_bus("fixed-0");
+       if (WARN_ON(!bus))
+               return ret;
+
+       switch_mdiodev = mdio_device_create(bus, 31);
+       if (IS_ERR(switch_mdiodev))
+               goto out;
+
+       strscpy(switch_mdiodev->modalias, "dsa-loop");
+       switch_mdiodev->dev.platform_data = &dsa_loop_pdata;
+
+       ret = mdio_device_register(switch_mdiodev);
+       if (ret)
+               mdio_device_free(switch_mdiodev);
+out:
+       put_device(&bus->dev);
+       return ret;
+}
+
 static int __init dsa_loop_init(void)
 {
        struct fixed_phy_status status = {
@@ -402,12 +451,19 @@ static int __init dsa_loop_init(void)
        unsigned int i;
        int ret;
 
+       ret = dsa_loop_create_switch_mdiodev();
+       if (ret)
+               return ret;
+
        for (i = 0; i < NUM_FIXED_PHYS; i++)
                phydevs[i] = fixed_phy_register(&status, NULL);
 
        ret = mdio_driver_register(&dsa_loop_drv);
-       if (ret)
+       if (ret) {
                dsa_loop_phydevs_unregister();
+               mdio_device_remove(switch_mdiodev);
+               mdio_device_free(switch_mdiodev);
+       }
 
        return ret;
 }
@@ -417,10 +473,11 @@ static void __exit dsa_loop_exit(void)
 {
        mdio_driver_unregister(&dsa_loop_drv);
        dsa_loop_phydevs_unregister();
+       mdio_device_remove(switch_mdiodev);
+       mdio_device_free(switch_mdiodev);
 }
 module_exit(dsa_loop_exit);
 
-MODULE_SOFTDEP("pre: dsa_loop_bdinfo");
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Florian Fainelli");
 MODULE_DESCRIPTION("DSA loopback driver");
diff --git a/drivers/net/dsa/dsa_loop.h b/drivers/net/dsa/dsa_loop.h
deleted file mode 100644 (file)
index 93e5c15..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef __DSA_LOOP_H
-#define __DSA_LOOP_H
-
-struct dsa_chip_data;
-
-struct dsa_loop_pdata {
-       /* Must be first, such that dsa_register_switch() can access this
-        * without gory pointer manipulations
-        */
-       struct dsa_chip_data cd;
-       const char *name;
-       unsigned int enabled_ports;
-       const char *netdev;
-};
-
-#define DSA_LOOP_NUM_PORTS     6
-#define DSA_LOOP_CPU_PORT      (DSA_LOOP_NUM_PORTS - 1)
-
-#endif /* __DSA_LOOP_H */
diff --git a/drivers/net/dsa/dsa_loop_bdinfo.c b/drivers/net/dsa/dsa_loop_bdinfo.c
deleted file mode 100644 (file)
index 14ca424..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/phy.h>
-#include <net/dsa.h>
-
-#include "dsa_loop.h"
-
-static struct dsa_loop_pdata dsa_loop_pdata = {
-       .cd = {
-               .port_names[0] = "lan1",
-               .port_names[1] = "lan2",
-               .port_names[2] = "lan3",
-               .port_names[3] = "lan4",
-               .port_names[DSA_LOOP_CPU_PORT] = "cpu",
-       },
-       .name = "DSA mockup driver",
-       .enabled_ports = 0x1f,
-       .netdev = "eth0",
-};
-
-static const struct mdio_board_info bdinfo = {
-       .bus_id = "fixed-0",
-       .modalias = "dsa-loop",
-       .mdio_addr = 31,
-       .platform_data = &dsa_loop_pdata,
-};
-
-static int __init dsa_loop_bdinfo_init(void)
-{
-       return mdiobus_register_board_info(&bdinfo, 1);
-}
-arch_initcall(dsa_loop_bdinfo_init)
-
-MODULE_DESCRIPTION("DSA mock-up switch driver");
-MODULE_LICENSE("GPL");