* [PATCH net-next 0/2] phylink: API changes @ 2018-03-28 19:03 Florian Fainelli 2018-03-28 19:03 ` [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} Florian Fainelli 2018-03-28 19:03 ` [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool Florian Fainelli 0 siblings, 2 replies; 7+ messages in thread From: Florian Fainelli @ 2018-03-28 19:03 UTC (permalink / raw) To: netdev Cc: Florian Fainelli, Thomas Petazzoni, Andrew Lunn, David S. Miller, Russell King, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas Hi all, This patch series contains two API changes to PHYLINK which will later be used by DSA to migrate to PHYLINK. Because these are API changes that impact other outstanding work (e.g: MVPP2) I would rather get them included sooner to minimize conflicts. Thank you! Florian Fainelli (1): net: phy: phylink: Provide PHY interface to mac_link_{up,down} Russell King (1): sfp/phylink: move module EEPROM ethtool access into netdev core ethtool drivers/net/ethernet/marvell/mvneta.c | 22 +++------------------- drivers/net/phy/phylink.c | 32 +++----------------------------- drivers/net/phy/sfp-bus.c | 6 ++---- include/linux/netdevice.h | 3 +++ include/linux/phylink.h | 13 ++++++++----- net/core/ethtool.c | 7 +++++++ 6 files changed, 26 insertions(+), 57 deletions(-) -- 2.14.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} 2018-03-28 19:03 [PATCH net-next 0/2] phylink: API changes Florian Fainelli @ 2018-03-28 19:03 ` Florian Fainelli 2018-03-28 19:09 ` Russell King - ARM Linux 2018-03-28 19:03 ` [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool Florian Fainelli 1 sibling, 1 reply; 7+ messages in thread From: Florian Fainelli @ 2018-03-28 19:03 UTC (permalink / raw) To: netdev Cc: Florian Fainelli, Thomas Petazzoni, Andrew Lunn, David S. Miller, Russell King, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas In preparation for having DSA transition entirely to PHYLINK, we need to pass a PHY interface type to the mac_link_{up,down} callbacks because we may have to make decisions on that (e.g: turn on/off RGMII interfaces etc.). We do not pass an entire phylink_link_state because not all parameters (pause, duplex etc.) are defined when the link is down, only link and interface are. Update mvneta accordingly since it currently implements phylink_mac_ops. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/net/ethernet/marvell/mvneta.c | 4 +++- drivers/net/phy/phylink.c | 4 +++- include/linux/phylink.h | 10 ++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index eaa4bb80f1c9..cd09bde55596 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -3396,7 +3396,8 @@ static void mvneta_set_eee(struct mvneta_port *pp, bool enable) mvreg_write(pp, MVNETA_LPI_CTRL_1, lpi_ctl1); } -static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode) +static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode, + phy_interface_t interface) { struct mvneta_port *pp = netdev_priv(ndev); u32 val; @@ -3415,6 +3416,7 @@ static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode) } static void mvneta_mac_link_up(struct net_device *ndev, unsigned int mode, + phy_interface_t interface, struct phy_device *phy) { struct mvneta_port *pp = netdev_priv(ndev); diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 51a011a349fe..9b1e4721ea3a 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -470,10 +470,12 @@ static void phylink_resolve(struct work_struct *w) if (link_state.link != netif_carrier_ok(ndev)) { if (!link_state.link) { netif_carrier_off(ndev); - pl->ops->mac_link_down(ndev, pl->link_an_mode); + pl->ops->mac_link_down(ndev, pl->link_an_mode, + pl->phy_state.interface); netdev_info(ndev, "Link is Down\n"); } else { pl->ops->mac_link_up(ndev, pl->link_an_mode, + pl->phy_state.interface, pl->phydev); netif_carrier_on(ndev); diff --git a/include/linux/phylink.h b/include/linux/phylink.h index bd137c273d38..f29a40947de9 100644 --- a/include/linux/phylink.h +++ b/include/linux/phylink.h @@ -73,8 +73,10 @@ struct phylink_mac_ops { void (*mac_config)(struct net_device *ndev, unsigned int mode, const struct phylink_link_state *state); void (*mac_an_restart)(struct net_device *ndev); - void (*mac_link_down)(struct net_device *ndev, unsigned int mode); + void (*mac_link_down)(struct net_device *ndev, unsigned int mode, + phy_interface_t interface); void (*mac_link_up)(struct net_device *ndev, unsigned int mode, + phy_interface_t interface, struct phy_device *phy); }; @@ -161,17 +163,20 @@ void mac_an_restart(struct net_device *ndev); * mac_link_down() - take the link down * @ndev: a pointer to a &struct net_device for the MAC. * @mode: link autonegotiation mode + * @interface: link &typedef phy_interface_t mode * * If @mode is not an in-band negotiation mode (as defined by * phylink_autoneg_inband()), force the link down and disable any * Energy Efficient Ethernet MAC configuration. */ -void mac_link_down(struct net_device *ndev, unsigned int mode); +void mac_link_down(struct net_device *ndev, unsigned int mode, + phy_interface_t interface); /** * mac_link_up() - allow the link to come up * @ndev: a pointer to a &struct net_device for the MAC. * @mode: link autonegotiation mode + * @interface: link &typedef phy_interface_t mode * @phy: any attached phy * * If @mode is not an in-band negotiation mode (as defined by @@ -180,6 +185,7 @@ void mac_link_down(struct net_device *ndev, unsigned int mode); * phy_init_eee() and perform appropriate MAC configuration for EEE. */ void mac_link_up(struct net_device *ndev, unsigned int mode, + phy_interface_t interface, struct phy_device *phy); #endif -- 2.14.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} 2018-03-28 19:03 ` [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} Florian Fainelli @ 2018-03-28 19:09 ` Russell King - ARM Linux 0 siblings, 0 replies; 7+ messages in thread From: Russell King - ARM Linux @ 2018-03-28 19:09 UTC (permalink / raw) To: Florian Fainelli Cc: netdev, Thomas Petazzoni, Andrew Lunn, David S. Miller, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas On Wed, Mar 28, 2018 at 12:03:38PM -0700, Florian Fainelli wrote: > In preparation for having DSA transition entirely to PHYLINK, we need to pass a > PHY interface type to the mac_link_{up,down} callbacks because we may have to > make decisions on that (e.g: turn on/off RGMII interfaces etc.). We do not pass > an entire phylink_link_state because not all parameters (pause, duplex etc.) are > defined when the link is down, only link and interface are. > > Update mvneta accordingly since it currently implements phylink_mac_ops. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Similar comments to previous version wrt documentation, but... Acked-by: Russell King <rmk+kernel@armlinux.org.uk> > --- > drivers/net/ethernet/marvell/mvneta.c | 4 +++- > drivers/net/phy/phylink.c | 4 +++- > include/linux/phylink.h | 10 ++++++++-- > 3 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c > index eaa4bb80f1c9..cd09bde55596 100644 > --- a/drivers/net/ethernet/marvell/mvneta.c > +++ b/drivers/net/ethernet/marvell/mvneta.c > @@ -3396,7 +3396,8 @@ static void mvneta_set_eee(struct mvneta_port *pp, bool enable) > mvreg_write(pp, MVNETA_LPI_CTRL_1, lpi_ctl1); > } > > -static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode) > +static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface) > { > struct mvneta_port *pp = netdev_priv(ndev); > u32 val; > @@ -3415,6 +3416,7 @@ static void mvneta_mac_link_down(struct net_device *ndev, unsigned int mode) > } > > static void mvneta_mac_link_up(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface, > struct phy_device *phy) > { > struct mvneta_port *pp = netdev_priv(ndev); > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index 51a011a349fe..9b1e4721ea3a 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -470,10 +470,12 @@ static void phylink_resolve(struct work_struct *w) > if (link_state.link != netif_carrier_ok(ndev)) { > if (!link_state.link) { > netif_carrier_off(ndev); > - pl->ops->mac_link_down(ndev, pl->link_an_mode); > + pl->ops->mac_link_down(ndev, pl->link_an_mode, > + pl->phy_state.interface); > netdev_info(ndev, "Link is Down\n"); > } else { > pl->ops->mac_link_up(ndev, pl->link_an_mode, > + pl->phy_state.interface, > pl->phydev); > > netif_carrier_on(ndev); > diff --git a/include/linux/phylink.h b/include/linux/phylink.h > index bd137c273d38..f29a40947de9 100644 > --- a/include/linux/phylink.h > +++ b/include/linux/phylink.h > @@ -73,8 +73,10 @@ struct phylink_mac_ops { > void (*mac_config)(struct net_device *ndev, unsigned int mode, > const struct phylink_link_state *state); > void (*mac_an_restart)(struct net_device *ndev); > - void (*mac_link_down)(struct net_device *ndev, unsigned int mode); > + void (*mac_link_down)(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface); > void (*mac_link_up)(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface, > struct phy_device *phy); > }; > > @@ -161,17 +163,20 @@ void mac_an_restart(struct net_device *ndev); > * mac_link_down() - take the link down > * @ndev: a pointer to a &struct net_device for the MAC. > * @mode: link autonegotiation mode > + * @interface: link &typedef phy_interface_t mode > * > * If @mode is not an in-band negotiation mode (as defined by > * phylink_autoneg_inband()), force the link down and disable any > * Energy Efficient Ethernet MAC configuration. > */ > -void mac_link_down(struct net_device *ndev, unsigned int mode); > +void mac_link_down(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface); > > /** > * mac_link_up() - allow the link to come up > * @ndev: a pointer to a &struct net_device for the MAC. > * @mode: link autonegotiation mode > + * @interface: link &typedef phy_interface_t mode > * @phy: any attached phy > * > * If @mode is not an in-band negotiation mode (as defined by > @@ -180,6 +185,7 @@ void mac_link_down(struct net_device *ndev, unsigned int mode); > * phy_init_eee() and perform appropriate MAC configuration for EEE. > */ > void mac_link_up(struct net_device *ndev, unsigned int mode, > + phy_interface_t interface, > struct phy_device *phy); > #endif > > -- > 2.14.1 > -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up According to speedtest.net: 8.21Mbps down 510kbps up ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool 2018-03-28 19:03 [PATCH net-next 0/2] phylink: API changes Florian Fainelli 2018-03-28 19:03 ` [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} Florian Fainelli @ 2018-03-28 19:03 ` Florian Fainelli 2018-03-28 19:11 ` Russell King - ARM Linux 2018-03-28 22:02 ` Andrew Lunn 1 sibling, 2 replies; 7+ messages in thread From: Florian Fainelli @ 2018-03-28 19:03 UTC (permalink / raw) To: netdev Cc: Russell King, Thomas Petazzoni, Andrew Lunn, Florian Fainelli, David S. Miller, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas From: Russell King <rmk+kernel@armlinux.org.uk> Provide a pointer to the SFP bus in struct net_device, so that the ethtool module EEPROM methods can access the SFP directly, rather than needing every user to provide a hook for it. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- drivers/net/ethernet/marvell/mvneta.c | 18 ------------------ drivers/net/phy/phylink.c | 28 ---------------------------- drivers/net/phy/sfp-bus.c | 6 ++---- include/linux/netdevice.h | 3 +++ include/linux/phylink.h | 3 --- net/core/ethtool.c | 7 +++++++ 6 files changed, 12 insertions(+), 53 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index cd09bde55596..25ced96750bf 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -4075,22 +4075,6 @@ static int mvneta_ethtool_set_wol(struct net_device *dev, return ret; } -static int mvneta_ethtool_get_module_info(struct net_device *dev, - struct ethtool_modinfo *modinfo) -{ - struct mvneta_port *pp = netdev_priv(dev); - - return phylink_ethtool_get_module_info(pp->phylink, modinfo); -} - -static int mvneta_ethtool_get_module_eeprom(struct net_device *dev, - struct ethtool_eeprom *ee, u8 *buf) -{ - struct mvneta_port *pp = netdev_priv(dev); - - return phylink_ethtool_get_module_eeprom(pp->phylink, ee, buf); -} - static int mvneta_ethtool_get_eee(struct net_device *dev, struct ethtool_eee *eee) { @@ -4165,8 +4149,6 @@ static const struct ethtool_ops mvneta_eth_tool_ops = { .set_link_ksettings = mvneta_ethtool_set_link_ksettings, .get_wol = mvneta_ethtool_get_wol, .set_wol = mvneta_ethtool_set_wol, - .get_module_info = mvneta_ethtool_get_module_info, - .get_module_eeprom = mvneta_ethtool_get_module_eeprom, .get_eee = mvneta_ethtool_get_eee, .set_eee = mvneta_ethtool_set_eee, }; diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 9b1e4721ea3a..c582b2d7546c 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -1250,34 +1250,6 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl, } EXPORT_SYMBOL_GPL(phylink_ethtool_set_pauseparam); -int phylink_ethtool_get_module_info(struct phylink *pl, - struct ethtool_modinfo *modinfo) -{ - int ret = -EOPNOTSUPP; - - WARN_ON(!lockdep_rtnl_is_held()); - - if (pl->sfp_bus) - ret = sfp_get_module_info(pl->sfp_bus, modinfo); - - return ret; -} -EXPORT_SYMBOL_GPL(phylink_ethtool_get_module_info); - -int phylink_ethtool_get_module_eeprom(struct phylink *pl, - struct ethtool_eeprom *ee, u8 *buf) -{ - int ret = -EOPNOTSUPP; - - WARN_ON(!lockdep_rtnl_is_held()); - - if (pl->sfp_bus) - ret = sfp_get_module_eeprom(pl->sfp_bus, ee, buf); - - return ret; -} -EXPORT_SYMBOL_GPL(phylink_ethtool_get_module_eeprom); - /** * phylink_ethtool_get_eee_err() - read the energy efficient ethernet error * counter diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c index 3d4ff5d0d2a6..0381da78d228 100644 --- a/drivers/net/phy/sfp-bus.c +++ b/drivers/net/phy/sfp-bus.c @@ -342,6 +342,7 @@ static int sfp_register_bus(struct sfp_bus *bus) } if (bus->started) bus->socket_ops->start(bus->sfp); + bus->netdev->sfp_bus = bus; bus->registered = true; return 0; } @@ -356,6 +357,7 @@ static void sfp_unregister_bus(struct sfp_bus *bus) if (bus->phydev && ops && ops->disconnect_phy) ops->disconnect_phy(bus->upstream); } + bus->netdev->sfp_bus = NULL; bus->registered = false; } @@ -371,8 +373,6 @@ static void sfp_unregister_bus(struct sfp_bus *bus) */ int sfp_get_module_info(struct sfp_bus *bus, struct ethtool_modinfo *modinfo) { - if (!bus->registered) - return -ENOIOCTLCMD; return bus->socket_ops->module_info(bus->sfp, modinfo); } EXPORT_SYMBOL_GPL(sfp_get_module_info); @@ -391,8 +391,6 @@ EXPORT_SYMBOL_GPL(sfp_get_module_info); int sfp_get_module_eeprom(struct sfp_bus *bus, struct ethtool_eeprom *ee, u8 *data) { - if (!bus->registered) - return -ENOIOCTLCMD; return bus->socket_ops->module_eeprom(bus->sfp, ee, data); } EXPORT_SYMBOL_GPL(sfp_get_module_eeprom); diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 2a2d9cf50aa2..53f0cd64676b 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -58,6 +58,7 @@ struct device; struct phy_device; struct dsa_port; +struct sfp_bus; /* 802.11 specific */ struct wireless_dev; /* 802.15.4 specific */ @@ -1662,6 +1663,7 @@ enum netdev_priv_flags { * @priomap: XXX: need comments on this one * @phydev: Physical device may attach itself * for hardware timestamping + * @sfp_bus: attached &struct sfp_bus structure. * * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount @@ -1945,6 +1947,7 @@ struct net_device { struct netprio_map __rcu *priomap; #endif struct phy_device *phydev; + struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; struct lock_class_key *qdisc_running_key; bool proto_down; diff --git a/include/linux/phylink.h b/include/linux/phylink.h index f29a40947de9..67cd518d66d1 100644 --- a/include/linux/phylink.h +++ b/include/linux/phylink.h @@ -217,9 +217,6 @@ void phylink_ethtool_get_pauseparam(struct phylink *, struct ethtool_pauseparam *); int phylink_ethtool_set_pauseparam(struct phylink *, struct ethtool_pauseparam *); -int phylink_ethtool_get_module_info(struct phylink *, struct ethtool_modinfo *); -int phylink_ethtool_get_module_eeprom(struct phylink *, - struct ethtool_eeprom *, u8 *); int phylink_get_eee_err(struct phylink *); int phylink_ethtool_get_eee(struct phylink *, struct ethtool_eee *); int phylink_ethtool_set_eee(struct phylink *, struct ethtool_eee *); diff --git a/net/core/ethtool.c b/net/core/ethtool.c index bb6e498c6e3d..eb55252ca1fb 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -22,6 +22,7 @@ #include <linux/bitops.h> #include <linux/uaccess.h> #include <linux/vmalloc.h> +#include <linux/sfp.h> #include <linux/slab.h> #include <linux/rtnetlink.h> #include <linux/sched/signal.h> @@ -2245,6 +2246,9 @@ static int __ethtool_get_module_info(struct net_device *dev, const struct ethtool_ops *ops = dev->ethtool_ops; struct phy_device *phydev = dev->phydev; + if (dev->sfp_bus) + return sfp_get_module_info(dev->sfp_bus, modinfo); + if (phydev && phydev->drv && phydev->drv->module_info) return phydev->drv->module_info(phydev, modinfo); @@ -2279,6 +2283,9 @@ static int __ethtool_get_module_eeprom(struct net_device *dev, const struct ethtool_ops *ops = dev->ethtool_ops; struct phy_device *phydev = dev->phydev; + if (dev->sfp_bus) + return sfp_get_module_eeprom(dev->sfp_bus, ee, data); + if (phydev && phydev->drv && phydev->drv->module_eeprom) return phydev->drv->module_eeprom(phydev, ee, data); -- 2.14.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool 2018-03-28 19:03 ` [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool Florian Fainelli @ 2018-03-28 19:11 ` Russell King - ARM Linux 2018-03-28 19:12 ` Florian Fainelli 2018-03-28 22:02 ` Andrew Lunn 1 sibling, 1 reply; 7+ messages in thread From: Russell King - ARM Linux @ 2018-03-28 19:11 UTC (permalink / raw) To: Florian Fainelli Cc: netdev, Thomas Petazzoni, Andrew Lunn, David S. Miller, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas On Wed, Mar 28, 2018 at 12:03:39PM -0700, Florian Fainelli wrote: > From: Russell King <rmk+kernel@armlinux.org.uk> > > Provide a pointer to the SFP bus in struct net_device, so that the > ethtool module EEPROM methods can access the SFP directly, rather > than needing every user to provide a hook for it. > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> This probably ought to have your sign-off too as you're passing the patch along rather than me submitting it directly. DCO v1.1 (c) seems to apply to this situation. > --- > drivers/net/ethernet/marvell/mvneta.c | 18 ------------------ > drivers/net/phy/phylink.c | 28 ---------------------------- > drivers/net/phy/sfp-bus.c | 6 ++---- > include/linux/netdevice.h | 3 +++ > include/linux/phylink.h | 3 --- > net/core/ethtool.c | 7 +++++++ > 6 files changed, 12 insertions(+), 53 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c > index cd09bde55596..25ced96750bf 100644 > --- a/drivers/net/ethernet/marvell/mvneta.c > +++ b/drivers/net/ethernet/marvell/mvneta.c > @@ -4075,22 +4075,6 @@ static int mvneta_ethtool_set_wol(struct net_device *dev, > return ret; > } > > -static int mvneta_ethtool_get_module_info(struct net_device *dev, > - struct ethtool_modinfo *modinfo) > -{ > - struct mvneta_port *pp = netdev_priv(dev); > - > - return phylink_ethtool_get_module_info(pp->phylink, modinfo); > -} > - > -static int mvneta_ethtool_get_module_eeprom(struct net_device *dev, > - struct ethtool_eeprom *ee, u8 *buf) > -{ > - struct mvneta_port *pp = netdev_priv(dev); > - > - return phylink_ethtool_get_module_eeprom(pp->phylink, ee, buf); > -} > - > static int mvneta_ethtool_get_eee(struct net_device *dev, > struct ethtool_eee *eee) > { > @@ -4165,8 +4149,6 @@ static const struct ethtool_ops mvneta_eth_tool_ops = { > .set_link_ksettings = mvneta_ethtool_set_link_ksettings, > .get_wol = mvneta_ethtool_get_wol, > .set_wol = mvneta_ethtool_set_wol, > - .get_module_info = mvneta_ethtool_get_module_info, > - .get_module_eeprom = mvneta_ethtool_get_module_eeprom, > .get_eee = mvneta_ethtool_get_eee, > .set_eee = mvneta_ethtool_set_eee, > }; > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index 9b1e4721ea3a..c582b2d7546c 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -1250,34 +1250,6 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl, > } > EXPORT_SYMBOL_GPL(phylink_ethtool_set_pauseparam); > > -int phylink_ethtool_get_module_info(struct phylink *pl, > - struct ethtool_modinfo *modinfo) > -{ > - int ret = -EOPNOTSUPP; > - > - WARN_ON(!lockdep_rtnl_is_held()); > - > - if (pl->sfp_bus) > - ret = sfp_get_module_info(pl->sfp_bus, modinfo); > - > - return ret; > -} > -EXPORT_SYMBOL_GPL(phylink_ethtool_get_module_info); > - > -int phylink_ethtool_get_module_eeprom(struct phylink *pl, > - struct ethtool_eeprom *ee, u8 *buf) > -{ > - int ret = -EOPNOTSUPP; > - > - WARN_ON(!lockdep_rtnl_is_held()); > - > - if (pl->sfp_bus) > - ret = sfp_get_module_eeprom(pl->sfp_bus, ee, buf); > - > - return ret; > -} > -EXPORT_SYMBOL_GPL(phylink_ethtool_get_module_eeprom); > - > /** > * phylink_ethtool_get_eee_err() - read the energy efficient ethernet error > * counter > diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c > index 3d4ff5d0d2a6..0381da78d228 100644 > --- a/drivers/net/phy/sfp-bus.c > +++ b/drivers/net/phy/sfp-bus.c > @@ -342,6 +342,7 @@ static int sfp_register_bus(struct sfp_bus *bus) > } > if (bus->started) > bus->socket_ops->start(bus->sfp); > + bus->netdev->sfp_bus = bus; > bus->registered = true; > return 0; > } > @@ -356,6 +357,7 @@ static void sfp_unregister_bus(struct sfp_bus *bus) > if (bus->phydev && ops && ops->disconnect_phy) > ops->disconnect_phy(bus->upstream); > } > + bus->netdev->sfp_bus = NULL; > bus->registered = false; > } > > @@ -371,8 +373,6 @@ static void sfp_unregister_bus(struct sfp_bus *bus) > */ > int sfp_get_module_info(struct sfp_bus *bus, struct ethtool_modinfo *modinfo) > { > - if (!bus->registered) > - return -ENOIOCTLCMD; > return bus->socket_ops->module_info(bus->sfp, modinfo); > } > EXPORT_SYMBOL_GPL(sfp_get_module_info); > @@ -391,8 +391,6 @@ EXPORT_SYMBOL_GPL(sfp_get_module_info); > int sfp_get_module_eeprom(struct sfp_bus *bus, struct ethtool_eeprom *ee, > u8 *data) > { > - if (!bus->registered) > - return -ENOIOCTLCMD; > return bus->socket_ops->module_eeprom(bus->sfp, ee, data); > } > EXPORT_SYMBOL_GPL(sfp_get_module_eeprom); > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index 2a2d9cf50aa2..53f0cd64676b 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -58,6 +58,7 @@ struct device; > struct phy_device; > struct dsa_port; > > +struct sfp_bus; > /* 802.11 specific */ > struct wireless_dev; > /* 802.15.4 specific */ > @@ -1662,6 +1663,7 @@ enum netdev_priv_flags { > * @priomap: XXX: need comments on this one > * @phydev: Physical device may attach itself > * for hardware timestamping > + * @sfp_bus: attached &struct sfp_bus structure. > * > * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock > * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount > @@ -1945,6 +1947,7 @@ struct net_device { > struct netprio_map __rcu *priomap; > #endif > struct phy_device *phydev; > + struct sfp_bus *sfp_bus; > struct lock_class_key *qdisc_tx_busylock; > struct lock_class_key *qdisc_running_key; > bool proto_down; > diff --git a/include/linux/phylink.h b/include/linux/phylink.h > index f29a40947de9..67cd518d66d1 100644 > --- a/include/linux/phylink.h > +++ b/include/linux/phylink.h > @@ -217,9 +217,6 @@ void phylink_ethtool_get_pauseparam(struct phylink *, > struct ethtool_pauseparam *); > int phylink_ethtool_set_pauseparam(struct phylink *, > struct ethtool_pauseparam *); > -int phylink_ethtool_get_module_info(struct phylink *, struct ethtool_modinfo *); > -int phylink_ethtool_get_module_eeprom(struct phylink *, > - struct ethtool_eeprom *, u8 *); > int phylink_get_eee_err(struct phylink *); > int phylink_ethtool_get_eee(struct phylink *, struct ethtool_eee *); > int phylink_ethtool_set_eee(struct phylink *, struct ethtool_eee *); > diff --git a/net/core/ethtool.c b/net/core/ethtool.c > index bb6e498c6e3d..eb55252ca1fb 100644 > --- a/net/core/ethtool.c > +++ b/net/core/ethtool.c > @@ -22,6 +22,7 @@ > #include <linux/bitops.h> > #include <linux/uaccess.h> > #include <linux/vmalloc.h> > +#include <linux/sfp.h> > #include <linux/slab.h> > #include <linux/rtnetlink.h> > #include <linux/sched/signal.h> > @@ -2245,6 +2246,9 @@ static int __ethtool_get_module_info(struct net_device *dev, > const struct ethtool_ops *ops = dev->ethtool_ops; > struct phy_device *phydev = dev->phydev; > > + if (dev->sfp_bus) > + return sfp_get_module_info(dev->sfp_bus, modinfo); > + > if (phydev && phydev->drv && phydev->drv->module_info) > return phydev->drv->module_info(phydev, modinfo); > > @@ -2279,6 +2283,9 @@ static int __ethtool_get_module_eeprom(struct net_device *dev, > const struct ethtool_ops *ops = dev->ethtool_ops; > struct phy_device *phydev = dev->phydev; > > + if (dev->sfp_bus) > + return sfp_get_module_eeprom(dev->sfp_bus, ee, data); > + > if (phydev && phydev->drv && phydev->drv->module_eeprom) > return phydev->drv->module_eeprom(phydev, ee, data); > > -- > 2.14.1 > -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up According to speedtest.net: 8.21Mbps down 510kbps up ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool 2018-03-28 19:11 ` Russell King - ARM Linux @ 2018-03-28 19:12 ` Florian Fainelli 0 siblings, 0 replies; 7+ messages in thread From: Florian Fainelli @ 2018-03-28 19:12 UTC (permalink / raw) To: Russell King - ARM Linux Cc: netdev, Thomas Petazzoni, Andrew Lunn, David S. Miller, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas On 03/28/2018 12:11 PM, Russell King - ARM Linux wrote: > On Wed, Mar 28, 2018 at 12:03:39PM -0700, Florian Fainelli wrote: >> From: Russell King <rmk+kernel@armlinux.org.uk> >> >> Provide a pointer to the SFP bus in struct net_device, so that the >> ethtool module EEPROM methods can access the SFP directly, rather >> than needing every user to provide a hook for it. >> >> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > > This probably ought to have your sign-off too as you're passing the > patch along rather than me submitting it directly. DCO v1.1 (c) > seems to apply to this situation. Indeed: Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> -- Florian ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool 2018-03-28 19:03 ` [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool Florian Fainelli 2018-03-28 19:11 ` Russell King - ARM Linux @ 2018-03-28 22:02 ` Andrew Lunn 1 sibling, 0 replies; 7+ messages in thread From: Andrew Lunn @ 2018-03-28 22:02 UTC (permalink / raw) To: Florian Fainelli Cc: netdev, Russell King, Thomas Petazzoni, David S. Miller, open list, Antoine Tenart, Yan Markman, Stefan Chulski, Maxime Chevallier, Miquel Raynal, Marcin Wojtas On Wed, Mar 28, 2018 at 12:03:39PM -0700, Florian Fainelli wrote: > From: Russell King <rmk+kernel@armlinux.org.uk> > > Provide a pointer to the SFP bus in struct net_device, so that the > ethtool module EEPROM methods can access the SFP directly, rather > than needing every user to provide a hook for it. > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > --- > drivers/net/ethernet/marvell/mvneta.c | 18 ------------------ > drivers/net/phy/phylink.c | 28 ---------------------------- > drivers/net/phy/sfp-bus.c | 6 ++---- > include/linux/netdevice.h | 3 +++ > include/linux/phylink.h | 3 --- > net/core/ethtool.c | 7 +++++++ > 6 files changed, 12 insertions(+), 53 deletions(-) The diffstats look good, DSA and all other uses of phylink will make a similar saving in code. The new member in the netdev structure is well away from members which are commented as being cache line sensitive. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-03-28 22:02 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-03-28 19:03 [PATCH net-next 0/2] phylink: API changes Florian Fainelli 2018-03-28 19:03 ` [PATCH net-next 1/2] net: phy: phylink: Provide PHY interface to mac_link_{up,down} Florian Fainelli 2018-03-28 19:09 ` Russell King - ARM Linux 2018-03-28 19:03 ` [PATCH net-next 2/2] sfp/phylink: move module EEPROM ethtool access into netdev core ethtool Florian Fainelli 2018-03-28 19:11 ` Russell King - ARM Linux 2018-03-28 19:12 ` Florian Fainelli 2018-03-28 22:02 ` Andrew Lunn
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.