From: "Kadosh, MoriyaX" <moriyax.kadosh@intel.com>
To: "Ruinskiy, Dima" <dima.ruinskiy@intel.com>,
KhaiWenTan <khai.wen.tan@linux.intel.com>,
<anthony.l.nguyen@intel.com>, <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>, <faizal.abdul.rahim@intel.com>,
<hong.aun.looi@intel.com>, <hector.blanco.alcaine@intel.com>,
<khai.wen.tan@intel.com>,
Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 4/4] igc: add support for forcing link speed without autonegotiation
Date: Mon, 22 Jun 2026 11:12:14 +0300 [thread overview]
Message-ID: <99635d62-c3da-4e25-ab22-d8875d2aa0c3@intel.com> (raw)
In-Reply-To: <d8f4f16c-adf6-4d99-bb76-09c047ba19eb@intel.com>
On 14/06/2026 10:17, Ruinskiy, Dima wrote:
> On 08/05/2026 0:47, KhaiWenTan wrote:
>> From: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
>>
>> Allow users to force 10/100 Mb/s link speed and duplex via ethtool
>> when autonegotiation is disabled. Previously, the driver rejected
>> these requests with "Force mode currently not supported.".
>>
>> Forcing at 1000 Mb/s and 2500 Mb/s is not supported.
>>
>> Reviewed-by: Looi Hong Aun <hong.aun.looi@intel.com>
>> Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
>> Signed-off-by: Khai Wen Tan <khai.wen.tan@linux.intel.com>
>> ---
>> drivers/net/ethernet/intel/igc/igc_base.c | 35 ++++-
>> drivers/net/ethernet/intel/igc/igc_defines.h | 9 +-
>> drivers/net/ethernet/intel/igc/igc_ethtool.c | 138 ++++++++++++++-----
>> drivers/net/ethernet/intel/igc/igc_hw.h | 9 ++
>> drivers/net/ethernet/intel/igc/igc_mac.c | 12 ++
>> drivers/net/ethernet/intel/igc/igc_main.c | 2 +-
>> drivers/net/ethernet/intel/igc/igc_phy.c | 65 ++++++++-
>> drivers/net/ethernet/intel/igc/igc_phy.h | 1 +
>> 8 files changed, 220 insertions(+), 51 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/igc/igc_base.c b/drivers/net/
>> ethernet/intel/igc/igc_base.c
>> index 1613b562d17c..ab9120a3127f 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_base.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_base.c
>> @@ -114,11 +114,35 @@ static s32 igc_setup_copper_link_base(struct
>> igc_hw *hw)
>> u32 ctrl;
>> ctrl = rd32(IGC_CTRL);
>> - ctrl |= IGC_CTRL_SLU;
>> - ctrl &= ~(IGC_CTRL_FRCSPD | IGC_CTRL_FRCDPX);
>> - wr32(IGC_CTRL, ctrl);
>> -
>> - ret_val = igc_setup_copper_link(hw);
>> + ctrl &= ~(IGC_CTRL_FRCSPD | IGC_CTRL_FRCDPX |
>> + IGC_CTRL_SPEED_MASK | IGC_CTRL_FD);
>> +
>> + if (hw->mac.autoneg_enabled) {
>> + ctrl |= IGC_CTRL_SLU;
>> + wr32(IGC_CTRL, ctrl);
>> + ret_val = igc_setup_copper_link(hw);
>> + } else {
>> + ctrl |= IGC_CTRL_SLU | IGC_CTRL_FRCSPD | IGC_CTRL_FRCDPX;
>> +
>> + switch (hw->mac.forced_speed_duplex) {
>> + case IGC_FORCED_10H:
>> + ctrl |= IGC_CTRL_SPEED_10;
>> + break;
>> + case IGC_FORCED_10F:
>> + ctrl |= IGC_CTRL_SPEED_10 | IGC_CTRL_FD;
>> + break;
>> + case IGC_FORCED_100H:
>> + ctrl |= IGC_CTRL_SPEED_100;
>> + break;
>> + case IGC_FORCED_100F:
>> + ctrl |= IGC_CTRL_SPEED_100 | IGC_CTRL_FD;
>> + break;
>> + default:
>> + return -IGC_ERR_CONFIG;
>> + }
>> + wr32(IGC_CTRL, ctrl);
>> + ret_val = igc_setup_copper_link(hw);
>> + }
>> return ret_val;
>> }
>> @@ -443,6 +467,7 @@ static const struct igc_phy_operations
>> igc_phy_ops_base = {
>> .reset = igc_phy_hw_reset,
>> .read_reg = igc_read_phy_reg_gpy,
>> .write_reg = igc_write_phy_reg_gpy,
>> + .force_speed_duplex = igc_force_speed_duplex,
>> };
>> const struct igc_info igc_base_info = {
>> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/
>> net/ethernet/intel/igc/igc_defines.h
>> index 9482ab11f050..3f504751c2d9 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
>> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
>> @@ -129,10 +129,13 @@
>> #define IGC_ERR_SWFW_SYNC 13
>> /* Device Control */
>> +#define IGC_CTRL_FD BIT(0) /* Full Duplex */
>> #define IGC_CTRL_RST 0x04000000 /* Global reset */
>> -
>> #define IGC_CTRL_PHY_RST 0x80000000 /* PHY Reset */
>> #define IGC_CTRL_SLU 0x00000040 /* Set link up (Force Link) */
>> +#define IGC_CTRL_SPEED_MASK GENMASK(10, 8)
>> +#define IGC_CTRL_SPEED_10 FIELD_PREP(IGC_CTRL_SPEED_MASK, 0)
>> +#define IGC_CTRL_SPEED_100 FIELD_PREP(IGC_CTRL_SPEED_MASK, 1)
>> #define IGC_CTRL_FRCSPD 0x00000800 /* Force Speed */
>> #define IGC_CTRL_FRCDPX 0x00001000 /* Force Duplex */
>> #define IGC_CTRL_VME 0x40000000 /* IEEE VLAN mode enable */
>> @@ -673,6 +676,10 @@
>> #define IGC_GEN_POLL_TIMEOUT 1920
>> /* PHY Control Register */
>> +#define MII_CR_SPEED_MASK (BIT(6) | BIT(13))
>> +#define MII_CR_SPEED_10 0x0000 /* SSM=0, SSL=0: 10 Mb/s */
>> +#define MII_CR_SPEED_100 BIT(13) /* SSM=0, SSL=1: 100 Mb/s */
>> +#define MII_CR_DUPLEX_EN BIT(8) /* 0 = Half Duplex, 1 = Full
>> Duplex */
>> #define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto
>> negotiation */
>> #define MII_CR_POWER_DOWN 0x0800 /* Power down */
>> #define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */
>> diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/
>> net/ethernet/intel/igc/igc_ethtool.c
>> index cfcbf2fdad6e..b103836a895f 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
>> @@ -1914,44 +1914,58 @@ static int
>> igc_ethtool_get_link_ksettings(struct net_device *netdev,
>> ethtool_link_ksettings_add_link_mode(cmd, supported, TP);
>> ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
>> - /* advertising link modes */
>> - if (hw->phy.autoneg_advertised & ADVERTISE_10_HALF)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 10baseT_Half);
>> - if (hw->phy.autoneg_advertised & ADVERTISE_10_FULL)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 10baseT_Full);
>> - if (hw->phy.autoneg_advertised & ADVERTISE_100_HALF)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 100baseT_Half);
>> - if (hw->phy.autoneg_advertised & ADVERTISE_100_FULL)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 100baseT_Full);
>> - if (hw->phy.autoneg_advertised & ADVERTISE_1000_FULL)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 1000baseT_Full);
>> - if (hw->phy.autoneg_advertised & ADVERTISE_2500_FULL)
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> 2500baseT_Full);
>> -
>> /* set autoneg settings */
>> ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
>> + if (hw->mac.autoneg_enabled) {
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
>> + cmd->base.autoneg = AUTONEG_ENABLE;
>> +
>> + /* advertising link modes only apply when autoneg is on */
>> + if (hw->phy.autoneg_advertised & ADVERTISE_10_HALF)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 10baseT_Half);
>> + if (hw->phy.autoneg_advertised & ADVERTISE_10_FULL)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 10baseT_Full);
>> + if (hw->phy.autoneg_advertised & ADVERTISE_100_HALF)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 100baseT_Half);
>> + if (hw->phy.autoneg_advertised & ADVERTISE_100_FULL)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 100baseT_Full);
>> + if (hw->phy.autoneg_advertised & ADVERTISE_1000_FULL)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 1000baseT_Full);
>> + if (hw->phy.autoneg_advertised & ADVERTISE_2500_FULL)
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + 2500baseT_Full);
>> +
>> + /* Set pause flow control advertising */
>> + switch (hw->fc.requested_mode) {
>> + case igc_fc_full:
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + Pause);
>> + break;
>> + case igc_fc_rx_pause:
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + Pause);
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + Asym_Pause);
>> + break;
>> + case igc_fc_tx_pause:
>> + ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> + Asym_Pause);
>> + break;
>> + default:
>> + break;
>> + }
>> + } else {
>> + cmd->base.autoneg = AUTONEG_DISABLE;
>> + }
>> - /* Set pause flow control settings */
>> + /* Pause is always supported */
>> ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
>> - switch (hw->fc.requested_mode) {
>> - case igc_fc_full:
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
>> - break;
>> - case igc_fc_rx_pause:
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> - Asym_Pause);
>> - break;
>> - case igc_fc_tx_pause:
>> - ethtool_link_ksettings_add_link_mode(cmd, advertising,
>> - Asym_Pause);
>> - break;
>> - default:
>> - break;
>> - }
>> -
>> status = pm_runtime_suspended(&adapter->pdev->dev) ?
>> 0 : rd32(IGC_STATUS);
>> @@ -1983,7 +1997,6 @@ static int igc_ethtool_get_link_ksettings(struct
>> net_device *netdev,
>> cmd->base.duplex = DUPLEX_UNKNOWN;
>> }
>> cmd->base.speed = speed;
>> - cmd->base.autoneg = AUTONEG_ENABLE;
>> /* MDI-X => 2; MDI =>1; Invalid =>0 */
>> if (hw->phy.media_type == igc_media_type_copper)
>> @@ -2000,6 +2013,37 @@ static int
>> igc_ethtool_get_link_ksettings(struct net_device *netdev,
>> return 0;
>> }
>> +/**
>> + * igc_handle_autoneg_disabled - Configure forced speed/duplex settings
>> + * @adapter: private driver structure
>> + * @speed: requested speed (must be SPEED_10 or SPEED_100)
>> + * @duplex: requested duplex
>> + *
>> + * Records forced speed/duplex when autoneg is disabled.
>> + * Caller must validate speed before calling this function.
>> + */
>> +static void igc_handle_autoneg_disabled(struct igc_adapter *adapter,
>> u32 speed,
>> + u8 duplex)
>> +{
>> + struct igc_mac_info *mac = &adapter->hw.mac;
>> +
>> + switch (speed) {
>> + case SPEED_10:
>> + mac->forced_speed_duplex = (duplex == DUPLEX_FULL) ?
>> + IGC_FORCED_10F : IGC_FORCED_10H;
>> + break;
>> + case SPEED_100:
>> + mac->forced_speed_duplex = (duplex == DUPLEX_FULL) ?
>> + IGC_FORCED_100F : IGC_FORCED_100H;
>> + break;
>> + default:
>> + WARN_ONCE(1, "Unsupported speed %u\n", speed);
>> + return;
>> + }
>> +
>> + mac->autoneg_enabled = false;
>> +}
>> +
>> /**
>> * igc_handle_autoneg_enabled - Configure autonegotiation advertisement
>> * @adapter: private driver structure
>> @@ -2038,6 +2082,7 @@ static void igc_handle_autoneg_enabled(struct
>> igc_adapter *adapter,
>> 10baseT_Half))
>> advertised |= ADVERTISE_10_HALF;
>> + hw->mac.autoneg_enabled = true;
>> hw->phy.autoneg_advertised = advertised;
>> if (adapter->fc_autoneg)
>> hw->fc.requested_mode = igc_fc_default;
>> @@ -2059,6 +2104,12 @@ igc_ethtool_set_link_ksettings(struct
>> net_device *netdev,
>> return -EINVAL;
>> }
>> + if (cmd->base.autoneg != AUTONEG_ENABLE &&
>> + cmd->base.autoneg != AUTONEG_DISABLE) {
>> + netdev_info(dev, "Unsupported autoneg setting\n");
>> + return -EINVAL;
>> + }
>> +
>> /* MDI setting is only allowed when autoneg enabled because
>> * some hardware doesn't allow MDI setting when speed or
>> * duplex is forced.
>> @@ -2071,14 +2122,25 @@ igc_ethtool_set_link_ksettings(struct
>> net_device *netdev,
>> }
>> }
>> + if (cmd->base.autoneg == AUTONEG_DISABLE) {
>> + if (cmd->base.speed != SPEED_10 && cmd->base.speed !=
>> SPEED_100) {
>> + netdev_info(dev, "Unsupported speed for forced link\n");
>> + return -EINVAL;
>> + }
>> + if (cmd->base.duplex != DUPLEX_HALF && cmd->base.duplex !=
>> DUPLEX_FULL) {
>> + netdev_info(dev, "Duplex must be half or full for forced
>> link\n");
>> + return -EINVAL;
>> + }
>> + }
>> +
>> while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
>> usleep_range(1000, 2000);
>> - if (cmd->base.autoneg == AUTONEG_ENABLE) {
>> + if (cmd->base.autoneg == AUTONEG_ENABLE)
>> igc_handle_autoneg_enabled(adapter, cmd);
>> - } else {
>> - netdev_info(dev, "Force mode currently not supported\n");
>> - }
>> + else
>> + igc_handle_autoneg_disabled(adapter, cmd->base.speed,
>> + cmd->base.duplex);
>> /* MDI-X => 2; MDI => 1; Auto => 3 */
>> if (cmd->base.eth_tp_mdix_ctrl) {
>> diff --git a/drivers/net/ethernet/intel/igc/igc_hw.h b/drivers/net/
>> ethernet/intel/igc/igc_hw.h
>> index 86ab8f566f44..62aaee55668a 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_hw.h
>> +++ b/drivers/net/ethernet/intel/igc/igc_hw.h
>> @@ -73,6 +73,13 @@ struct igc_info {
>> extern const struct igc_info igc_base_info;
>> +enum igc_forced_speed_duplex {
>> + IGC_FORCED_10H,
>> + IGC_FORCED_10F,
>> + IGC_FORCED_100H,
>> + IGC_FORCED_100F,
>> +};
>> +
>> struct igc_mac_info {
>> struct igc_mac_operations ops;
>> @@ -93,6 +100,8 @@ struct igc_mac_info {
>> bool arc_subsystem_valid;
>> bool get_link_status;
>> + bool autoneg_enabled;
>> + enum igc_forced_speed_duplex forced_speed_duplex;
>> };
>> struct igc_nvm_operations {
>> diff --git a/drivers/net/ethernet/intel/igc/igc_mac.c b/drivers/net/
>> ethernet/intel/igc/igc_mac.c
>> index 0a3d3f357505..d6f3f6618469 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_mac.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_mac.c
>> @@ -446,6 +446,17 @@ s32 igc_config_fc_after_link_up(struct igc_hw *hw)
>> u16 speed, duplex;
>> s32 ret_val = 0;
>> + /* Without autoneg, flow control capability is not exchanged with
>> the
>> + * link partner. IEEE 802.3 prohibits flow control in half-duplex
>> mode.
>> + */
>> + if (!hw->mac.autoneg_enabled) {
>> + if (hw->mac.forced_speed_duplex == IGC_FORCED_10H ||
>> + hw->mac.forced_speed_duplex == IGC_FORCED_100H)
>> + hw->fc.current_mode = igc_fc_none;
>> +
>> + goto force_fc;
>> + }
>> +
>> /* In auto-neg, we need to check and see if Auto-Neg has completed,
>> * and if so, how the PHY and link partner has flow control
>> * configured.
>> @@ -607,6 +618,7 @@ s32 igc_config_fc_after_link_up(struct igc_hw *hw)
>> /* Now we call a subroutine to actually force the MAC
>> * controller to use the correct flow control settings.
>> */
>> +force_fc:
>> ret_val = igc_force_mac_fc(hw);
>> if (ret_val) {
>> hw_dbg("Error forcing flow control settings\n");
>> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/
>> ethernet/intel/igc/igc_main.c
>> index 72bc5128d8b8..437e1d1ef1e4 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_main.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
>> @@ -7298,7 +7298,7 @@ static int igc_probe(struct pci_dev *pdev,
>> /* Initialize link properties that are user-changeable */
>> adapter->fc_autoneg = true;
>> hw->phy.autoneg_advertised = 0xaf;
>> -
>> + hw->mac.autoneg_enabled = true;
>> hw->fc.requested_mode = igc_fc_default;
>> hw->fc.current_mode = igc_fc_default;
>> diff --git a/drivers/net/ethernet/intel/igc/igc_phy.c b/drivers/net/
>> ethernet/intel/igc/igc_phy.c
>> index 6c4d204aecfa..4cf737fb3b21 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_phy.c
>> +++ b/drivers/net/ethernet/intel/igc/igc_phy.c
>> @@ -494,12 +494,20 @@ s32 igc_setup_copper_link(struct igc_hw *hw)
>> s32 ret_val = 0;
>> bool link;
>> - /* Setup autoneg and flow control advertisement and perform
>> - * autonegotiation.
>> - */
>> - ret_val = igc_copper_link_autoneg(hw);
>> - if (ret_val)
>> - goto out;
>> + if (hw->mac.autoneg_enabled) {
>> + /* Setup autoneg and flow control advertisement and perform
>> + * autonegotiation.
>> + */
>> + ret_val = igc_copper_link_autoneg(hw);
>> + if (ret_val)
>> + goto out;
>> + } else {
>> + ret_val = hw->phy.ops.force_speed_duplex(hw);
>> + if (ret_val) {
>> + hw_dbg("Error Forcing Speed/Duplex\n");
>> + goto out;
>> + }
>> + }
>> /* Check link status. Wait up to 100 microseconds for link to
>> become
>> * valid.
>> @@ -778,3 +786,48 @@ u16 igc_read_phy_fw_version(struct igc_hw *hw)
>> return gphy_version;
>> }
>> +
>> +/**
>> + * igc_force_speed_duplex - Force PHY speed and duplex settings
>> + * @hw: pointer to the HW structure
>> + *
>> + * Programs the GPY PHY control register to disable autonegotiation
>> + * and force the speed/duplex indicated by hw->mac.forced_speed_duplex.
>> + */
>> +s32 igc_force_speed_duplex(struct igc_hw *hw)
>> +{
>> + struct igc_phy_info *phy = &hw->phy;
>> + u16 phy_ctrl;
>> + s32 ret_val;
>> +
>> + ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
>> + if (ret_val)
>> + return ret_val;
>> +
>> + phy_ctrl &= ~(MII_CR_SPEED_MASK | MII_CR_DUPLEX_EN |
>> + MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
>> +
>> + switch (hw->mac.forced_speed_duplex) {
>> + case IGC_FORCED_10H:
>> + phy_ctrl |= MII_CR_SPEED_10;
>> + break;
>> + case IGC_FORCED_10F:
>> + phy_ctrl |= MII_CR_SPEED_10 | MII_CR_DUPLEX_EN;
>> + break;
>> + case IGC_FORCED_100H:
>> + phy_ctrl |= MII_CR_SPEED_100;
>> + break;
>> + case IGC_FORCED_100F:
>> + phy_ctrl |= MII_CR_SPEED_100 | MII_CR_DUPLEX_EN;
>> + break;
>> + default:
>> + return -IGC_ERR_CONFIG;
>> + }
>> +
>> + ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
>> + if (ret_val)
>> + return ret_val;
>> +
>> + hw->mac.get_link_status = true;
>> + return 0;
>> +}
>> diff --git a/drivers/net/ethernet/intel/igc/igc_phy.h b/drivers/net/
>> ethernet/intel/igc/igc_phy.h
>> index 832a7e359f18..d37a89174826 100644
>> --- a/drivers/net/ethernet/intel/igc/igc_phy.h
>> +++ b/drivers/net/ethernet/intel/igc/igc_phy.h
>> @@ -18,5 +18,6 @@ void igc_power_down_phy_copper(struct igc_hw *hw);
>> s32 igc_write_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 data);
>> s32 igc_read_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 *data);
>> u16 igc_read_phy_fw_version(struct igc_hw *hw);
>> +s32 igc_force_speed_duplex(struct igc_hw *hw);
>> #endif
> Reviewed-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Tested-by: Moriya Kadosh <moriyax.kadosh@intel.com>
next prev parent reply other threads:[~2026-06-22 8:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-07 21:47 [PATCH iwl-next v5 0/4] igc: add support for forcing link speed without autonegotiation KhaiWenTan
2026-05-07 21:47 ` [PATCH iwl-next v5 1/4] igc: remove unused autoneg_failed field KhaiWenTan
2026-06-14 7:16 ` [Intel-wired-lan] " Ruinskiy, Dima
2026-06-22 8:10 ` Kadosh, MoriyaX
2026-06-15 8:22 ` Kwapulinski, Piotr
2026-05-07 21:47 ` [PATCH iwl-next v5 2/4] igc: move autoneg-enabled settings into igc_handle_autoneg_enabled() KhaiWenTan
2026-06-14 7:17 ` [Intel-wired-lan] " Ruinskiy, Dima
2026-06-22 8:08 ` Kadosh, MoriyaX
2026-05-07 21:47 ` [PATCH iwl-next v5 3/4] igc: replace goto out with direct returns in igc_config_fc_after_link_up() KhaiWenTan
2026-06-14 7:17 ` [Intel-wired-lan] " Ruinskiy, Dima
2026-06-22 8:11 ` Kadosh, MoriyaX
2026-05-07 21:47 ` [PATCH iwl-next v5 4/4] igc: add support for forcing link speed without autonegotiation KhaiWenTan
2026-06-14 7:17 ` [Intel-wired-lan] " Ruinskiy, Dima
2026-06-22 8:12 ` Kadosh, MoriyaX [this message]
2026-05-11 16:28 ` [PATCH iwl-next v5 0/4] " Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=99635d62-c3da-4e25-ab22-d8875d2aa0c3@intel.com \
--to=moriyax.kadosh@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=dima.ruinskiy@intel.com \
--cc=edumazet@google.com \
--cc=faizal.abdul.rahim@intel.com \
--cc=faizal.abdul.rahim@linux.intel.com \
--cc=hector.blanco.alcaine@intel.com \
--cc=hong.aun.looi@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=khai.wen.tan@intel.com \
--cc=khai.wen.tan@linux.intel.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox