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: David S. Miller <davem@davemloft.net>
This commit is contained in:
@ -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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
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 @@
|
|||||||
#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[] = {
|
|||||||
{ 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
#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)
|
|||||||
#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,
|
|||||||
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 @@ err_regs:
|
|||||||
}
|
}
|
||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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,
|
|||||||
}
|
}
|
||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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,24 +430,6 @@ 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 */
|
|
||||||
for (port = 0; port < DSA_MAX_PORTS; port++) {
|
|
||||||
if (!(dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
port_dn = cd->port_dn[port];
|
|
||||||
if (of_phy_is_fixed_link(port_dn)) {
|
|
||||||
phydev = of_phy_find_device(port_dn);
|
|
||||||
if (phydev) {
|
|
||||||
int addr = phydev->mdio.addr;
|
|
||||||
|
|
||||||
phy_device_free(phydev);
|
|
||||||
of_node_put(port_dn);
|
|
||||||
fixed_phy_del(addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Destroy network devices for physical switch 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 (!(ds->phys_port_mask & (1 << port)))
|
if (!(ds->phys_port_mask & (1 << port)))
|
||||||
@ -459,6 +441,19 @@ static void dsa_switch_destroy(struct dsa_switch *ds)
|
|||||||
dsa_slave_destroy(ds->ports[port]);
|
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];
|
||||||
|
if (of_phy_is_fixed_link(port_dn)) {
|
||||||
|
phydev = of_phy_find_device(port_dn);
|
||||||
|
if (phydev) {
|
||||||
|
phy_device_free(phydev);
|
||||||
|
of_node_put(port_dn);
|
||||||
|
fixed_phy_unregister(phydev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user