]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ethernet: cortina: Implement .set_pauseparam()
authorLinus Walleij <linus.walleij@linaro.org>
Wed, 29 May 2024 14:00:02 +0000 (16:00 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 1 Jun 2024 23:07:29 +0000 (16:07 -0700)
The Cortina Gemini ethernet can very well set up TX or RX
pausing, so add this functionality to the driver in a
.set_pauseparam() callback. Essentially just call down to
phylib and let phylib deal with this, .adjust_link()
will respect the setting from phylib.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240529-gemini-phylib-fixes-v4-3-16487ca4c2fe@linaro.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cortina/gemini.c

index a37d21ceb1318d8403bc83db8ca3b489b67a2828..73e1c71c5092e4bcaeddb9e2a6dbfc9771afd5c6 100644 (file)
@@ -2126,6 +2126,19 @@ static void gmac_get_pauseparam(struct net_device *netdev,
        pparam->autoneg = true;
 }
 
+static int gmac_set_pauseparam(struct net_device *netdev,
+                              struct ethtool_pauseparam *pparam)
+{
+       struct phy_device *phydev = netdev->phydev;
+
+       if (!pparam->autoneg)
+               return -EOPNOTSUPP;
+
+       phy_set_asym_pause(phydev, pparam->rx_pause, pparam->tx_pause);
+
+       return 0;
+}
+
 static void gmac_get_ringparam(struct net_device *netdev,
                               struct ethtool_ringparam *rp,
                               struct kernel_ethtool_ringparam *kernel_rp,
@@ -2246,6 +2259,7 @@ static const struct ethtool_ops gmac_351x_ethtool_ops = {
        .set_link_ksettings = gmac_set_ksettings,
        .nway_reset     = gmac_nway_reset,
        .get_pauseparam = gmac_get_pauseparam,
+       .set_pauseparam = gmac_set_pauseparam,
        .get_ringparam  = gmac_get_ringparam,
        .set_ringparam  = gmac_set_ringparam,
        .get_coalesce   = gmac_get_coalesce,