]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: sparx5/lan969x: Add support for ethtool pause parameters
authorDaniel Machon <daniel.machon@microchip.com>
Wed, 17 Sep 2025 11:49:43 +0000 (13:49 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 18 Sep 2025 22:55:54 +0000 (15:55 -0700)
Implement get_pauseparam() and set_pauseparam() ethtool operations for
Sparx5 ports.  This allows users to query and configure IEEE 802.3x
pause frame settings via:

ethtool -a ethX
ethtool -A ethX rx on|off tx on|off autoneg on|off

The driver delegates pause parameter handling to phylink through
phylink_ethtool_get_pauseparam() and phylink_ethtool_set_pauseparam().

The underlying configuration of pause frame generation and reception is
already implemented in the driver; this patch only wires it up to the
standard ethtool interface, making the feature accessible to userspace.

Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/20250917-802-3x-pause-v1-1-3d1565a68a96@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c

index 832f4ae57c83c1397eb78723cc199f57f882a5d1..049541eeaae0de19baa40fb0074cc5939a1c5ea2 100644 (file)
@@ -1212,6 +1212,22 @@ static int sparx5_get_ts_info(struct net_device *dev,
        return 0;
 }
 
+static void sparx5_get_pauseparam(struct net_device *dev,
+                                 struct ethtool_pauseparam *pause)
+{
+       struct sparx5_port *port = netdev_priv(dev);
+
+       phylink_ethtool_get_pauseparam(port->phylink, pause);
+}
+
+static int sparx5_set_pauseparam(struct net_device *dev,
+                                struct ethtool_pauseparam *pause)
+{
+       struct sparx5_port *port = netdev_priv(dev);
+
+       return phylink_ethtool_set_pauseparam(port->phylink, pause);
+}
+
 const struct ethtool_ops sparx5_ethtool_ops = {
        .get_sset_count         = sparx5_get_sset_count,
        .get_strings            = sparx5_get_sset_strings,
@@ -1224,6 +1240,8 @@ const struct ethtool_ops sparx5_ethtool_ops = {
        .get_eth_ctrl_stats     = sparx5_get_eth_mac_ctrl_stats,
        .get_rmon_stats         = sparx5_get_eth_rmon_stats,
        .get_ts_info            = sparx5_get_ts_info,
+       .get_pauseparam         = sparx5_get_pauseparam,
+       .set_pauseparam         = sparx5_set_pauseparam,
 };
 
 int sparx_stats_init(struct sparx5 *sparx5)