From: "Abdul Rahim, Faizal" <faizal.abdul.rahim@linux.intel.com>
To: Paul Menzel <pmenzel@molgen.mpg.de>
Cc: khai.wen.tan@linux.intel.com, anthony.l.nguyen@intel.com,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com,
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, khai.wen.tan@intel.com,
Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v4 1/3] igc: remove unused autoneg_failed field
Date: Wed, 6 May 2026 14:07:53 +0800 [thread overview]
Message-ID: <9645f07a-a124-4c0e-b88c-e4262e1b2df0@linux.intel.com> (raw)
In-Reply-To: <d3d4915c-1bc5-4e04-bfc4-9d9787849c6f@molgen.mpg.de>
On 28/4/2026 11:06 pm, Paul Menzel wrote:
> Dear Faizal,
>
>
> Am 28.04.26 um 12:39 schrieb Abdul Rahim, Faizal:
>
>> On 28/4/2026 2:56 pm, Paul Menzel wrote:
>
>>> Am 28.04.26 um 08:00 schrieb KhaiWenTan:
>>>
>>> (Should spaces be added in your name?)
>>>
>>>> From: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
>>>>
>>>> autoneg_failed in struct igc_mac_info is never set in the igc driver.
>>>> Remove the field and the dead code checking it in
>>>> igc_config_fc_after_link_up().
>>>
>>> Could you please elaborate. Why is removal the correct fix, and it’s not
>>> an incomplete feature? Does auto-negotiation always succeed?
>>
>> Auto-negotiation does not always succeed, but igc does not use
>> autoneg_failed to handle that case, the field was never set anywhere
>> in the igc driver.
>>
>> Before this patch, the only igc references to autoneg_failed were
>> the struct member declaration and the read in
>> igc_config_fc_after_link_up(). No igc code ever assigned it to true,
>> and git history shows no commit that added a setter since the code
>> creation in 2018.
>>
>> The field originates from the e1000/e1000e fiber/serdes forced-link
>> path: when MAC-level auto-negotiation on fiber times out, the driver
>> forces link up and sets autoneg_failed so the flow-control code knows
>> pause was not negotiated and must be forced. igc has no fiber or
>> serdes media, it only supports copper (igc_media_type_copper), so
>> the code that sets autoneg_failed was never ported.
>>
>> On copper, PHY auto-negotiation failure is handled differently:
>> - No link at all: igc_check_for_copper_link() returns before reaching
>> flow-control configuration, there's nothing to configure FC on.
>> - Link present but autoneg not yet complete:
>> igc_config_fc_after_link_up() checks MII_SR_AUTONEG_COMPLETE and
>> returns early without resolving pause. The next link-status event
>> re-triggers the check.
>> - Autoneg completes (including via parallel detection fallback when
>> the link partner doesn't autoneg): the PHY still sets
>> AUTONEG_COMPLETE but LP_ABILITY won't have PAUSE bits since the
>> partner never sent autoneg pages. The existing flow-control logic
>> in igc_config_fc_after_link_up() handles that correctly, it falls
>> through to igc_fc_none or igc_fc_rx_pause based on requested_mode.
>>
>> None of these paths need autoneg_failed. Keeping the field would be
>> misleading to reader.
>
> Thank you. For me the information about just supporting copper would be
> great to have in the commit message.
Will update.
>
>>>> Reviewed-by: Looi, Hong Aun <hong.aun.looi@intel.com>
>>>
>>> Please order it to not use the comma: Hong Aun Looi
>>
>> Will do, thanks.
>>
>>>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@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_hw.h | 1 -
>>>> drivers/net/ethernet/intel/igc/igc_mac.c | 16 +---------------
>>>> 2 files changed, 1 insertion(+), 16 deletions(-)
>>>>
>>>> diff --git a/drivers/net/ethernet/intel/igc/igc_hw.h b/drivers/net/
>>>> ethernet/intel/igc/igc_hw.h
>>>> index be8a49a86d09..86ab8f566f44 100644
>>>> --- a/drivers/net/ethernet/intel/igc/igc_hw.h
>>>> +++ b/drivers/net/ethernet/intel/igc/igc_hw.h
>>>> @@ -92,7 +92,6 @@ struct igc_mac_info {
>>>> bool asf_firmware_present;
>>>> bool arc_subsystem_valid;
>>>>
>>>> - bool autoneg_failed;
>>>> bool get_link_status;
>>>> };
>>>>
>>>> diff --git a/drivers/net/ethernet/intel/igc/igc_mac.c b/drivers/net/
>>>> ethernet/intel/igc/igc_mac.c
>>>> index 7ac6637f8db7..142beb9ae557 100644
>>>> --- a/drivers/net/ethernet/intel/igc/igc_mac.c
>>>> +++ b/drivers/net/ethernet/intel/igc/igc_mac.c
>>>> @@ -438,28 +438,14 @@ void igc_config_collision_dist(struct igc_hw *hw)
>>>> * Checks the status of auto-negotiation after link up to ensure that
>>>> the
>
> Just for your information, that your mailer wraps the lines of the quotes.
Ohh okay, let me check, thanks!
> […]
>
>>>> * speed and duplex were not forced. If the link needed to be
>>>> forced, then
>>>> * flow control needs to be forced also. If auto-negotiation is enabled
>>>> - * and did not fail, then we configure flow control based on our link
>>>> - * partner.
>>>> + * then we configure flow control based on our link partner.
>>>> */
>>>> s32 igc_config_fc_after_link_up(struct igc_hw *hw)
>>>> {
>>>> u16 mii_status_reg, mii_nway_adv_reg, mii_nway_lp_ability_reg;
>>>> - struct igc_mac_info *mac = &hw->mac;
>>>> u16 speed, duplex;
>>>> s32 ret_val = 0;
>>>>
>>>> - /* Check for the case where we have fiber media and auto-neg failed
>>>> - * so we had to force link. In this case, we need to force the
>>>> - * configuration of the MAC to match the "fc" parameter.
>>>> - */
>>>> - if (mac->autoneg_failed)
>>>> - ret_val = igc_force_mac_fc(hw);
>>>> -
>>>> - if (ret_val) {
>>>> - hw_dbg("Error forcing flow control settings\n");
>>>> - goto out;
>>>> - }
>>>> -
>>>> /* 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.
>
> Kind regards,
>
> Paul
>
next prev parent reply other threads:[~2026-05-06 6:08 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 6:00 [PATCH iwl-next v4 0/3] igc: add support for forcing link speed without autonegotiation KhaiWenTan
2026-04-28 6:00 ` [PATCH iwl-next v4 1/3] igc: remove unused autoneg_failed field KhaiWenTan
2026-04-28 6:56 ` [Intel-wired-lan] " Paul Menzel
2026-04-28 10:39 ` Abdul Rahim, Faizal
2026-04-28 15:06 ` Paul Menzel
2026-05-06 6:07 ` Abdul Rahim, Faizal [this message]
2026-04-28 6:00 ` [PATCH iwl-next v4 2/3] igc: move autoneg-enabled settings into igc_handle_autoneg_enabled() KhaiWenTan
2026-04-28 6:00 ` [PATCH iwl-next v4 3/3] igc: add support for forcing link speed without autonegotiation KhaiWenTan
2026-04-30 13:50 ` Simon Horman
2026-05-06 6:25 ` Abdul Rahim, Faizal
2026-04-30 14:41 ` [PATCH iwl-next v4 0/3] " David Laight
2026-05-06 6:21 ` Abdul Rahim, Faizal
2026-05-06 9:40 ` David Laight
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=9645f07a-a124-4c0e-b88c-e4262e1b2df0@linux.intel.com \
--to=faizal.abdul.rahim@linux.intel.com \
--cc=aleksandr.loktionov@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=faizal.abdul.rahim@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=pmenzel@molgen.mpg.de \
/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