Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: dsa_loop: remove usage of mdio_board_info

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>

authored by

Heiner Kallweit and committed by
Jakub Kicinski
41357bc7 2479cba2

+60 -62
-3
drivers/net/dsa/Makefile
··· 2 2 obj-$(CONFIG_NET_DSA_BCM_SF2) += bcm-sf2.o 3 3 bcm-sf2-objs := bcm_sf2.o bcm_sf2_cfp.o 4 4 obj-$(CONFIG_NET_DSA_LOOP) += dsa_loop.o 5 - ifdef CONFIG_NET_DSA_LOOP 6 - obj-$(CONFIG_FIXED_PHY) += dsa_loop_bdinfo.o 7 - endif 8 5 obj-$(CONFIG_NET_DSA_KS8995) += ks8995.o 9 6 obj-$(CONFIG_NET_DSA_MT7530) += mt7530.o 10 7 obj-$(CONFIG_NET_DSA_MT7530_MDIO) += mt7530-mdio.o
+60 -3
drivers/net/dsa/dsa_loop.c
··· 17 17 #include <linux/dsa/loop.h> 18 18 #include <net/dsa.h> 19 19 20 - #include "dsa_loop.h" 20 + #define DSA_LOOP_NUM_PORTS 6 21 + #define DSA_LOOP_CPU_PORT (DSA_LOOP_NUM_PORTS - 1) 22 + #define NUM_FIXED_PHYS (DSA_LOOP_NUM_PORTS - 2) 23 + 24 + struct dsa_loop_pdata { 25 + /* Must be first, such that dsa_register_switch() can access this 26 + * without gory pointer manipulations 27 + */ 28 + struct dsa_chip_data cd; 29 + const char *name; 30 + unsigned int enabled_ports; 31 + const char *netdev; 32 + }; 21 33 22 34 static struct dsa_loop_mib_entry dsa_loop_mibs[] = { 23 35 [DSA_LOOP_PHY_READ_OK] = { "phy_read_ok", }, ··· 39 27 }; 40 28 41 29 static struct phy_device *phydevs[PHY_MAX_ADDR]; 30 + static struct mdio_device *switch_mdiodev; 42 31 43 32 enum dsa_loop_devlink_resource_id { 44 33 DSA_LOOP_DEVLINK_PARAM_ID_VTU, ··· 405 392 } 406 393 } 407 394 395 + static int __init dsa_loop_create_switch_mdiodev(void) 396 + { 397 + static struct dsa_loop_pdata dsa_loop_pdata = { 398 + .cd = { 399 + .port_names[0] = "lan1", 400 + .port_names[1] = "lan2", 401 + .port_names[2] = "lan3", 402 + .port_names[3] = "lan4", 403 + .port_names[DSA_LOOP_CPU_PORT] = "cpu", 404 + }, 405 + .name = "DSA mockup driver", 406 + .enabled_ports = 0x1f, 407 + .netdev = "eth0", 408 + }; 409 + struct mii_bus *bus; 410 + int ret = -ENODEV; 411 + 412 + bus = mdio_find_bus("fixed-0"); 413 + if (WARN_ON(!bus)) 414 + return ret; 415 + 416 + switch_mdiodev = mdio_device_create(bus, 31); 417 + if (IS_ERR(switch_mdiodev)) 418 + goto out; 419 + 420 + strscpy(switch_mdiodev->modalias, "dsa-loop"); 421 + switch_mdiodev->dev.platform_data = &dsa_loop_pdata; 422 + 423 + ret = mdio_device_register(switch_mdiodev); 424 + if (ret) 425 + mdio_device_free(switch_mdiodev); 426 + out: 427 + put_device(&bus->dev); 428 + return ret; 429 + } 430 + 408 431 static int __init dsa_loop_init(void) 409 432 { 410 433 struct fixed_phy_status status = { ··· 451 402 unsigned int i; 452 403 int ret; 453 404 405 + ret = dsa_loop_create_switch_mdiodev(); 406 + if (ret) 407 + return ret; 408 + 454 409 for (i = 0; i < NUM_FIXED_PHYS; i++) 455 410 phydevs[i] = fixed_phy_register(&status, NULL); 456 411 457 412 ret = mdio_driver_register(&dsa_loop_drv); 458 - if (ret) 413 + if (ret) { 459 414 dsa_loop_phydevs_unregister(); 415 + mdio_device_remove(switch_mdiodev); 416 + mdio_device_free(switch_mdiodev); 417 + } 460 418 461 419 return ret; 462 420 } ··· 473 417 { 474 418 mdio_driver_unregister(&dsa_loop_drv); 475 419 dsa_loop_phydevs_unregister(); 420 + mdio_device_remove(switch_mdiodev); 421 + mdio_device_free(switch_mdiodev); 476 422 } 477 423 module_exit(dsa_loop_exit); 478 424 479 - MODULE_SOFTDEP("pre: dsa_loop_bdinfo"); 480 425 MODULE_LICENSE("GPL"); 481 426 MODULE_AUTHOR("Florian Fainelli"); 482 427 MODULE_DESCRIPTION("DSA loopback driver");
-20
drivers/net/dsa/dsa_loop.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 2 - #ifndef __DSA_LOOP_H 3 - #define __DSA_LOOP_H 4 - 5 - struct dsa_chip_data; 6 - 7 - struct dsa_loop_pdata { 8 - /* Must be first, such that dsa_register_switch() can access this 9 - * without gory pointer manipulations 10 - */ 11 - struct dsa_chip_data cd; 12 - const char *name; 13 - unsigned int enabled_ports; 14 - const char *netdev; 15 - }; 16 - 17 - #define DSA_LOOP_NUM_PORTS 6 18 - #define DSA_LOOP_CPU_PORT (DSA_LOOP_NUM_PORTS - 1) 19 - 20 - #endif /* __DSA_LOOP_H */
-36
drivers/net/dsa/dsa_loop_bdinfo.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - #include <linux/kernel.h> 3 - #include <linux/init.h> 4 - #include <linux/phy.h> 5 - #include <net/dsa.h> 6 - 7 - #include "dsa_loop.h" 8 - 9 - static struct dsa_loop_pdata dsa_loop_pdata = { 10 - .cd = { 11 - .port_names[0] = "lan1", 12 - .port_names[1] = "lan2", 13 - .port_names[2] = "lan3", 14 - .port_names[3] = "lan4", 15 - .port_names[DSA_LOOP_CPU_PORT] = "cpu", 16 - }, 17 - .name = "DSA mockup driver", 18 - .enabled_ports = 0x1f, 19 - .netdev = "eth0", 20 - }; 21 - 22 - static const struct mdio_board_info bdinfo = { 23 - .bus_id = "fixed-0", 24 - .modalias = "dsa-loop", 25 - .mdio_addr = 31, 26 - .platform_data = &dsa_loop_pdata, 27 - }; 28 - 29 - static int __init dsa_loop_bdinfo_init(void) 30 - { 31 - return mdiobus_register_board_info(&bdinfo, 1); 32 - } 33 - arch_initcall(dsa_loop_bdinfo_init) 34 - 35 - MODULE_DESCRIPTION("DSA mock-up switch driver"); 36 - MODULE_LICENSE("GPL");