Commit f7f58ae0 authored by David S. Miller's avatar David S. Miller

Merge branch 'dsa-cleanups'

Andrew Lunn says:

====================
DSA cleanup and fixes

The RFC patchset for re-architecturing DSA probing contains a few
standalone patches, either clean up or fixes. This pulls them out for
submission.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents dc91d7ef 5bcbe0f3
...@@ -91,7 +91,7 @@ CONFIG_SATA_MV=y ...@@ -91,7 +91,7 @@ CONFIG_SATA_MV=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_NET_DSA_MV88E6060=y CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y CONFIG_NET_DSA_MV88E6123=y
CONFIG_NET_DSA_MV88E6171=y CONFIG_NET_DSA_MV88E6171=y
CONFIG_NET_DSA_MV88E6352=y CONFIG_NET_DSA_MV88E6352=y
CONFIG_MV643XX_ETH=y CONFIG_MV643XX_ETH=y
......
...@@ -92,7 +92,7 @@ CONFIG_SATA_MV=y ...@@ -92,7 +92,7 @@ CONFIG_SATA_MV=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_NET_DSA_MV88E6060=y CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y CONFIG_NET_DSA_MV88E6123=y
CONFIG_NET_DSA_MV88E6171=y CONFIG_NET_DSA_MV88E6171=y
CONFIG_NET_DSA_MV88E6352=y CONFIG_NET_DSA_MV88E6352=y
CONFIG_MV643XX_ETH=y CONFIG_MV643XX_ETH=y
......
...@@ -86,7 +86,7 @@ CONFIG_SATA_MV=y ...@@ -86,7 +86,7 @@ CONFIG_SATA_MV=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_MII=y CONFIG_MII=y
CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y CONFIG_NET_DSA_MV88E6123=y
CONFIG_MV643XX_ETH=y CONFIG_MV643XX_ETH=y
CONFIG_MARVELL_PHY=y CONFIG_MARVELL_PHY=y
# CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_MOUSEDEV is not set
......
...@@ -222,7 +222,7 @@ CONFIG_TUN=y ...@@ -222,7 +222,7 @@ CONFIG_TUN=y
CONFIG_VETH=m CONFIG_VETH=m
CONFIG_NET_DSA_MV88E6060=y CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y CONFIG_NET_DSA_MV88E6123=y
CONFIG_SKY2=y CONFIG_SKY2=y
CONFIG_PTP_1588_CLOCK_TILEGX=y CONFIG_PTP_1588_CLOCK_TILEGX=y
# CONFIG_WLAN is not set # CONFIG_WLAN is not set
......
...@@ -341,7 +341,7 @@ CONFIG_TUN=y ...@@ -341,7 +341,7 @@ CONFIG_TUN=y
CONFIG_VETH=m CONFIG_VETH=m
CONFIG_NET_DSA_MV88E6060=y CONFIG_NET_DSA_MV88E6060=y
CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6131=y
CONFIG_NET_DSA_MV88E6123_61_65=y CONFIG_NET_DSA_MV88E6123=y
# CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_3COM is not set
CONFIG_E1000E=y CONFIG_E1000E=y
# CONFIG_WLAN is not set # CONFIG_WLAN is not set
......
...@@ -27,7 +27,7 @@ config NET_DSA_MV88E6131 ...@@ -27,7 +27,7 @@ config NET_DSA_MV88E6131
This enables support for the Marvell 88E6085/6095/6095F/6131 This enables support for the Marvell 88E6085/6095/6095F/6131
ethernet switch chips. ethernet switch chips.
config NET_DSA_MV88E6123_61_65 config NET_DSA_MV88E6123
tristate "Marvell 88E6123/6161/6165 ethernet switch chip support" tristate "Marvell 88E6123/6161/6165 ethernet switch chip support"
depends on NET_DSA depends on NET_DSA
select NET_DSA_MV88E6XXX select NET_DSA_MV88E6XXX
......
obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx_drv.o obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx_drv.o
mv88e6xxx_drv-y += mv88e6xxx.o mv88e6xxx_drv-y += mv88e6xxx.o
ifdef CONFIG_NET_DSA_MV88E6123_61_65 ifdef CONFIG_NET_DSA_MV88E6123
mv88e6xxx_drv-y += mv88e6123_61_65.o mv88e6xxx_drv-y += mv88e6123.o
endif endif
ifdef CONFIG_NET_DSA_MV88E6131 ifdef CONFIG_NET_DSA_MV88E6131
mv88e6xxx_drv-y += mv88e6131.o mv88e6xxx_drv-y += mv88e6131.o
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <net/dsa.h> #include <net/dsa.h>
#include "mv88e6xxx.h" #include "mv88e6xxx.h"
static const struct mv88e6xxx_switch_id mv88e6123_61_65_table[] = { static const struct mv88e6xxx_switch_id mv88e6123_table[] = {
{ PORT_SWITCH_ID_6123, "Marvell 88E6123" }, { PORT_SWITCH_ID_6123, "Marvell 88E6123" },
{ PORT_SWITCH_ID_6123_A1, "Marvell 88E6123 (A1)" }, { PORT_SWITCH_ID_6123_A1, "Marvell 88E6123 (A1)" },
{ PORT_SWITCH_ID_6123_A2, "Marvell 88E6123 (A2)" }, { PORT_SWITCH_ID_6123_A2, "Marvell 88E6123 (A2)" },
...@@ -29,13 +29,13 @@ static const struct mv88e6xxx_switch_id mv88e6123_61_65_table[] = { ...@@ -29,13 +29,13 @@ static const struct mv88e6xxx_switch_id mv88e6123_61_65_table[] = {
{ PORT_SWITCH_ID_6165_A2, "Marvell 88e6165 (A2)" }, { PORT_SWITCH_ID_6165_A2, "Marvell 88e6165 (A2)" },
}; };
static char *mv88e6123_61_65_probe(struct device *host_dev, int sw_addr) static char *mv88e6123_probe(struct device *host_dev, int sw_addr)
{ {
return mv88e6xxx_lookup_name(host_dev, sw_addr, mv88e6123_61_65_table, return mv88e6xxx_lookup_name(host_dev, sw_addr, mv88e6123_table,
ARRAY_SIZE(mv88e6123_61_65_table)); ARRAY_SIZE(mv88e6123_table));
} }
static int mv88e6123_61_65_setup_global(struct dsa_switch *ds) static int mv88e6123_setup_global(struct dsa_switch *ds)
{ {
u32 upstream_port = dsa_upstream_port(ds); u32 upstream_port = dsa_upstream_port(ds);
int ret; int ret;
...@@ -68,7 +68,7 @@ static int mv88e6123_61_65_setup_global(struct dsa_switch *ds) ...@@ -68,7 +68,7 @@ static int mv88e6123_61_65_setup_global(struct dsa_switch *ds)
return 0; return 0;
} }
static int mv88e6123_61_65_setup(struct dsa_switch *ds) static int mv88e6123_setup(struct dsa_switch *ds)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
int ret; int ret;
...@@ -93,18 +93,18 @@ static int mv88e6123_61_65_setup(struct dsa_switch *ds) ...@@ -93,18 +93,18 @@ static int mv88e6123_61_65_setup(struct dsa_switch *ds)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = mv88e6123_61_65_setup_global(ds); ret = mv88e6123_setup_global(ds);
if (ret < 0) if (ret < 0)
return ret; return ret;
return mv88e6xxx_setup_ports(ds); return mv88e6xxx_setup_ports(ds);
} }
struct dsa_switch_driver mv88e6123_61_65_switch_driver = { struct dsa_switch_driver mv88e6123_switch_driver = {
.tag_protocol = DSA_TAG_PROTO_EDSA, .tag_protocol = DSA_TAG_PROTO_EDSA,
.priv_size = sizeof(struct mv88e6xxx_priv_state), .priv_size = sizeof(struct mv88e6xxx_priv_state),
.probe = mv88e6123_61_65_probe, .probe = mv88e6123_probe,
.setup = mv88e6123_61_65_setup, .setup = mv88e6123_setup,
.set_addr = mv88e6xxx_set_addr_indirect, .set_addr = mv88e6xxx_set_addr_indirect,
.phy_read = mv88e6xxx_phy_read, .phy_read = mv88e6xxx_phy_read,
.phy_write = mv88e6xxx_phy_write, .phy_write = mv88e6xxx_phy_write,
......
...@@ -2989,8 +2989,8 @@ static int __init mv88e6xxx_init(void) ...@@ -2989,8 +2989,8 @@ static int __init mv88e6xxx_init(void)
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6131) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6131)
register_switch_driver(&mv88e6131_switch_driver); register_switch_driver(&mv88e6131_switch_driver);
#endif #endif
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6123_61_65) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6123)
register_switch_driver(&mv88e6123_61_65_switch_driver); register_switch_driver(&mv88e6123_switch_driver);
#endif #endif
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6352) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6352)
register_switch_driver(&mv88e6352_switch_driver); register_switch_driver(&mv88e6352_switch_driver);
...@@ -3010,8 +3010,8 @@ static void __exit mv88e6xxx_cleanup(void) ...@@ -3010,8 +3010,8 @@ static void __exit mv88e6xxx_cleanup(void)
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6352) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6352)
unregister_switch_driver(&mv88e6352_switch_driver); unregister_switch_driver(&mv88e6352_switch_driver);
#endif #endif
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6123_61_65) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6123)
unregister_switch_driver(&mv88e6123_61_65_switch_driver); unregister_switch_driver(&mv88e6123_switch_driver);
#endif #endif
#if IS_ENABLED(CONFIG_NET_DSA_MV88E6131) #if IS_ENABLED(CONFIG_NET_DSA_MV88E6131)
unregister_switch_driver(&mv88e6131_switch_driver); unregister_switch_driver(&mv88e6131_switch_driver);
......
...@@ -519,7 +519,7 @@ int mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page, ...@@ -519,7 +519,7 @@ int mv88e6xxx_phy_page_write(struct dsa_switch *ds, int port, int page,
int reg, int val); int reg, int val);
extern struct dsa_switch_driver mv88e6131_switch_driver; extern struct dsa_switch_driver mv88e6131_switch_driver;
extern struct dsa_switch_driver mv88e6123_61_65_switch_driver; extern struct dsa_switch_driver mv88e6123_switch_driver;
extern struct dsa_switch_driver mv88e6352_switch_driver; extern struct dsa_switch_driver mv88e6352_switch_driver;
extern struct dsa_switch_driver mv88e6171_switch_driver; extern struct dsa_switch_driver mv88e6171_switch_driver;
......
...@@ -285,7 +285,7 @@ int fixed_phy_add(unsigned int irq, int phy_addr, ...@@ -285,7 +285,7 @@ int fixed_phy_add(unsigned int irq, int phy_addr,
} }
EXPORT_SYMBOL_GPL(fixed_phy_add); EXPORT_SYMBOL_GPL(fixed_phy_add);
void fixed_phy_del(int phy_addr) static void fixed_phy_del(int phy_addr)
{ {
struct fixed_mdio_bus *fmb = &platform_fmb; struct fixed_mdio_bus *fmb = &platform_fmb;
struct fixed_phy *fp, *tmp; struct fixed_phy *fp, *tmp;
...@@ -300,7 +300,6 @@ void fixed_phy_del(int phy_addr) ...@@ -300,7 +300,6 @@ void fixed_phy_del(int phy_addr)
} }
} }
} }
EXPORT_SYMBOL_GPL(fixed_phy_del);
static int phy_fixed_addr; static int phy_fixed_addr;
static DEFINE_SPINLOCK(phy_fixed_addr_lock); static DEFINE_SPINLOCK(phy_fixed_addr_lock);
...@@ -371,6 +370,14 @@ struct phy_device *fixed_phy_register(unsigned int irq, ...@@ -371,6 +370,14 @@ struct phy_device *fixed_phy_register(unsigned int irq,
} }
EXPORT_SYMBOL_GPL(fixed_phy_register); EXPORT_SYMBOL_GPL(fixed_phy_register);
void fixed_phy_unregister(struct phy_device *phy)
{
phy_device_remove(phy);
fixed_phy_del(phy->mdio.addr);
}
EXPORT_SYMBOL_GPL(fixed_phy_unregister);
static int __init fixed_mdio_bus_init(void) static int __init fixed_mdio_bus_init(void)
{ {
struct fixed_mdio_bus *fmb = &platform_fmb; struct fixed_mdio_bus *fmb = &platform_fmb;
......
...@@ -19,7 +19,7 @@ extern struct phy_device *fixed_phy_register(unsigned int irq, ...@@ -19,7 +19,7 @@ extern struct phy_device *fixed_phy_register(unsigned int irq,
struct fixed_phy_status *status, struct fixed_phy_status *status,
int link_gpio, int link_gpio,
struct device_node *np); struct device_node *np);
extern void fixed_phy_del(int phy_addr); extern void fixed_phy_unregister(struct phy_device *phydev);
extern int fixed_phy_set_link_update(struct phy_device *phydev, extern int fixed_phy_set_link_update(struct phy_device *phydev,
int (*link_update)(struct net_device *, int (*link_update)(struct net_device *,
struct fixed_phy_status *)); struct fixed_phy_status *));
...@@ -40,9 +40,8 @@ static inline struct phy_device *fixed_phy_register(unsigned int irq, ...@@ -40,9 +40,8 @@ static inline struct phy_device *fixed_phy_register(unsigned int irq,
{ {
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
} }
static inline int fixed_phy_del(int phy_addr) static inline void fixed_phy_unregister(struct phy_device *phydev)
{ {
return -ENODEV;
} }
static inline int fixed_phy_set_link_update(struct phy_device *phydev, static inline int fixed_phy_set_link_update(struct phy_device *phydev,
int (*link_update)(struct net_device *, int (*link_update)(struct net_device *,
......
...@@ -430,35 +430,30 @@ static void dsa_switch_destroy(struct dsa_switch *ds) ...@@ -430,35 +430,30 @@ static void dsa_switch_destroy(struct dsa_switch *ds)
hwmon_device_unregister(ds->hwmon_dev); hwmon_device_unregister(ds->hwmon_dev);
#endif #endif
/* Disable configuration of the CPU and DSA ports */ /* Destroy network devices for physical switch ports. */
for (port = 0; port < DSA_MAX_PORTS; port++) { for (port = 0; port < DSA_MAX_PORTS; port++) {
if (!(dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port))) if (!(ds->phys_port_mask & (1 << port)))
continue;
if (!ds->ports[port])
continue; continue;
dsa_slave_destroy(ds->ports[port]);
}
/* Remove any fixed link PHYs */
for (port = 0; port < DSA_MAX_PORTS; port++) {
port_dn = cd->port_dn[port]; port_dn = cd->port_dn[port];
if (of_phy_is_fixed_link(port_dn)) { if (of_phy_is_fixed_link(port_dn)) {
phydev = of_phy_find_device(port_dn); phydev = of_phy_find_device(port_dn);
if (phydev) { if (phydev) {
int addr = phydev->mdio.addr;
phy_device_free(phydev); phy_device_free(phydev);
of_node_put(port_dn); of_node_put(port_dn);
fixed_phy_del(addr); fixed_phy_unregister(phydev);
} }
} }
} }
/* Destroy network devices for physical switch ports. */
for (port = 0; port < DSA_MAX_PORTS; port++) {
if (!(ds->phys_port_mask & (1 << port)))
continue;
if (!ds->ports[port])
continue;
dsa_slave_destroy(ds->ports[port]);
}
mdiobus_unregister(ds->slave_mii_bus); mdiobus_unregister(ds->slave_mii_bus);
} }
......
...@@ -896,11 +896,15 @@ static void dsa_slave_adjust_link(struct net_device *dev) ...@@ -896,11 +896,15 @@ static void dsa_slave_adjust_link(struct net_device *dev)
static int dsa_slave_fixed_link_update(struct net_device *dev, static int dsa_slave_fixed_link_update(struct net_device *dev,
struct fixed_phy_status *status) struct fixed_phy_status *status)
{ {
struct dsa_slave_priv *p = netdev_priv(dev); struct dsa_slave_priv *p;
struct dsa_switch *ds = p->parent; struct dsa_switch *ds;
if (ds->drv->fixed_link_update) if (dev) {
ds->drv->fixed_link_update(ds, p->port, status); p = netdev_priv(dev);
ds = p->parent;
if (ds->drv->fixed_link_update)
ds->drv->fixed_link_update(ds, p->port, status);
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment