RE: [Intel-wired-lan] [PATCH iwl-next v2 2/3] igc: move autoneg-enabled settings into igc_handle_autoneg_enabled()

Loktionov, Aleksandr
2026-04-16T09:05:47Z

> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf
> Of KhaiWenTan
> Sent: Thursday, April 16, 2026 3:55 AM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>; andrew+netdev@lunn.ch;
> davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> pabeni@redhat.com
> Cc: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org; linux-
> kernel@vger.kernel.org; Abdul Rahim, Faizal
> <faizal.abdul.rahim@intel.com>; Looi, Hong Aun
> <hong.aun.looi@intel.com>; Tan, Khai Wen <khai.wen.tan@intel.com>;
> Faizal Rahim <faizal.abdul.rahim@linux.intel.com>; Looi; KhaiWenTan
> <khai.wen.tan@linux.intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-next v2 2/3] igc: move autoneg-
> enabled settings into igc_handle_autoneg_enabled()
>
> From: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
>
> 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 <hong.aun.looi@intel.com>
> Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
> Signed-off-by: KhaiWenTan <khai.wen.tan@linux.intel.com>
> ---
> 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");
> }
> --
> 2.43.0

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>