On 14/06/2026 10:17, Ruinskiy, Dima wrote:
On 08/05/2026 0:47, KhaiWenTan wrote:
From: Faizal Rahim <[email protected]>

Move the advertised link modes and flow control configuration from
igc_ethtool_set_link_ksettings() into igc_handle_autoneg_enabled().

No functional change.

Reviewed-by: Looi Hong Aun <[email protected]>
Reviewed-by: Aleksandr Loktionov <[email protected]>
Signed-off-by: Faizal Rahim <[email protected]>
Signed-off-by: Khai Wen Tan <[email protected]>
---
  drivers/net/ethernet/intel/igc/igc_ethtool.c | 72 ++++++++++++--------
  1 file changed, 44 insertions(+), 28 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/ net/ethernet/intel/igc/igc_ethtool.c
index 0122009bedd0..cfcbf2fdad6e 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -2000,6 +2000,49 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev,
      return 0;
  }
+/**
+ * igc_handle_autoneg_enabled - Configure autonegotiation advertisement
+ * @adapter: private driver structure
+ * @cmd: ethtool link ksettings from user
+ *
+ * Records advertised speeds and flow control settings when autoneg
+ * is enabled.
+ */
+static void igc_handle_autoneg_enabled(struct igc_adapter *adapter,
+                       const struct ethtool_link_ksettings *cmd)
+{
+    struct igc_hw *hw = &adapter->hw;
+    u16 advertised = 0;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          2500baseT_Full))
+        advertised |= ADVERTISE_2500_FULL;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          1000baseT_Full))
+        advertised |= ADVERTISE_1000_FULL;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          100baseT_Full))
+        advertised |= ADVERTISE_100_FULL;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          100baseT_Half))
+        advertised |= ADVERTISE_100_HALF;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          10baseT_Full))
+        advertised |= ADVERTISE_10_FULL;
+
+    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+                          10baseT_Half))
+        advertised |= ADVERTISE_10_HALF;
+
+    hw->phy.autoneg_advertised = advertised;
+    if (adapter->fc_autoneg)
+        hw->fc.requested_mode = igc_fc_default;
+}
+
  static int
  igc_ethtool_set_link_ksettings(struct net_device *netdev,
                     const struct ethtool_link_ksettings *cmd)
@@ -2007,7 +2050,6 @@ igc_ethtool_set_link_ksettings(struct net_device *netdev,
      struct igc_adapter *adapter = netdev_priv(netdev);
      struct net_device *dev = adapter->netdev;
      struct igc_hw *hw = &adapter->hw;
-    u16 advertised = 0;
      /* When adapter in resetting mode, autoneg/speed/duplex
       * cannot be changed
@@ -2032,34 +2074,8 @@ igc_ethtool_set_link_ksettings(struct net_device *netdev,
      while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
          usleep_range(1000, 2000);
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          2500baseT_Full))
-        advertised |= ADVERTISE_2500_FULL;
-
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          1000baseT_Full))
-        advertised |= ADVERTISE_1000_FULL;
-
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          100baseT_Full))
-        advertised |= ADVERTISE_100_FULL;
-
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          100baseT_Half))
-        advertised |= ADVERTISE_100_HALF;
-
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          10baseT_Full))
-        advertised |= ADVERTISE_10_FULL;
-
-    if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
-                          10baseT_Half))
-        advertised |= ADVERTISE_10_HALF;
-
      if (cmd->base.autoneg == AUTONEG_ENABLE) {
-        hw->phy.autoneg_advertised = advertised;
-        if (adapter->fc_autoneg)
-            hw->fc.requested_mode = igc_fc_default;
+        igc_handle_autoneg_enabled(adapter, cmd);
      } else {
          netdev_info(dev, "Force mode currently not supported\n");
      }
Reviewed-by: Dima Ruinskiy <[email protected]>
Tested-by: Moriya Kadosh <[email protected]>

Reply via email to