Message ID | 20220921121235.169761-4-simon.horman@corigine.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | nfp: support FEC mode reporting and auto-neg | expand |
On Wed, 21 Sep 2022 14:12:35 +0200 Simon Horman wrote: > + err = nfp_port_configure(netdev, false); > + if (err) { > + netdev_info(netdev, "Link down failed: %d\n", err); > + return err; > + } > + > + err = nfp_port_configure(netdev, true); > + if (err) { > + netdev_info(netdev, "Link up failed: %d\n", err); > + return err; > + } > + > + netdev_info(netdev, "Link reset succeeded\n"); > + return 0; This will not do anything if the port is forced up by multi host or NC-SI.
On Thu, 22 Sep 2022 17:54:53 -0700 Jakub Kicinski wrote: > On Wed, 21 Sep 2022 14:12:35 +0200 Simon Horman wrote: > > + > > + netdev_info(netdev, "Link reset succeeded\n"); > > + return 0; > > This will not do anything if the port is forced up by multi host > or NC-SI. OK, we're going to do the reset thing as long as it's physically configured up.
> On Thu, 22 Sep 2022 17:54:53 -0700 Jakub Kicinski wrote: > > On Wed, 21 Sep 2022 14:12:35 +0200 Simon Horman wrote: > > > + > > > + netdev_info(netdev, "Link reset succeeded\n"); > > > + return 0; > > > > This will not do anything if the port is forced up by multi host > > or NC-SI. > > OK, we're going to do the reset thing as long as it's physically > configured up. Sorry, I may misunderstand, will use ` nfp_eth_set_configured` directly.
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c index 00aacc48a7a2..ceda4d0b98bf 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c @@ -228,6 +228,37 @@ nfp_net_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo) nfp_get_drvinfo(nn->app, nn->pdev, vnic_version, drvinfo); } +static int +nfp_net_nway_reset(struct net_device *netdev) +{ + struct nfp_eth_table_port *eth_port; + struct nfp_port *port; + int err; + + port = nfp_port_from_netdev(netdev); + eth_port = nfp_port_get_eth_port(port); + if (!eth_port) + return -EOPNOTSUPP; + + if (!netif_running(netdev)) + return 0; + + err = nfp_port_configure(netdev, false); + if (err) { + netdev_info(netdev, "Link down failed: %d\n", err); + return err; + } + + err = nfp_port_configure(netdev, true); + if (err) { + netdev_info(netdev, "Link up failed: %d\n", err); + return err; + } + + netdev_info(netdev, "Link reset succeeded\n"); + return 0; +} + static void nfp_app_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo) { @@ -1854,6 +1885,7 @@ static const struct ethtool_ops nfp_net_ethtool_ops = { ETHTOOL_COALESCE_MAX_FRAMES | ETHTOOL_COALESCE_USE_ADAPTIVE, .get_drvinfo = nfp_net_get_drvinfo, + .nway_reset = nfp_net_nway_reset, .get_link = ethtool_op_get_link, .get_ringparam = nfp_net_get_ringparam, .set_ringparam = nfp_net_set_ringparam, @@ -1891,6 +1923,7 @@ static const struct ethtool_ops nfp_net_ethtool_ops = { const struct ethtool_ops nfp_port_ethtool_ops = { .get_drvinfo = nfp_app_get_drvinfo, + .nway_reset = nfp_net_nway_reset, .get_link = ethtool_op_get_link, .get_strings = nfp_port_get_strings, .get_ethtool_stats = nfp_port_get_stats,