Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH iwl-net v2 0/3] ice: fixes for pause reporting, autoneg and RDMA
@ 2026-09-15 12:55 Aleksandr Loktionov
  2026-09-15 12:55 ` [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Aleksandr Loktionov @ 2026-09-15 12:55 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev

This is v2 of the ice fixes patchset for iwl-net.

v2 changes:
 - Dropped patch "ice: fix 'adjust' timer programming for E830 devices"
   as it has already been applied to the iwl-net tree.
 - Dropped patch "ice: report EIPE checksum errors to the OS on E830"
   from this send pending further internal review; will be resent on
   its own once that concludes, rather than holding back the other
   three unrelated fixes.

This series fixes three issues in the Intel ice driver:

- Asymmetric Pause capability was missing from the ethtool-reported
  supported link modes, causing ethtool to always show Pause as
  unsupported even when the hardware supports asymmetric flow control.

- Autoneg disable was only attempted when AN had already completed,
  ignoring the case where the link partner does not advertise AN ability
  at all (AN37).  Both conditions should allow the user to disable
  autoneg.

- RDMA was incorrectly disabled on E830 devices with 4 or more ports
  because the generic port-limited-capabilities path capped maxtc=4 and
  then cleared the RDMA capability bit.  E830 does not have that
  limitation and must be skipped.

Konrad Knitter (1):
  ice: fix autoneg disable when link partner doesn't support AN

Lukasz Czapnik (1):
  ice: support RDMA on 4+-port E830 devices

Tomasz Lichwala (1):
  ice: fix asymmetric pause negotiation reporting in ethtool

 drivers/net/ethernet/intel/ice/ice_common.c  |  2 +-
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 29 ++++++++++++++++++--
 2 files changed, 27 insertions(+), 4 deletions(-)

-- 
2.52.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool
  2026-09-15 12:55 [PATCH iwl-net v2 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
@ 2026-09-15 12:55 ` Aleksandr Loktionov
  2026-09-16 14:05   ` Simon Horman
  2026-09-15 12:55 ` [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
  2026-09-15 12:55 ` [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
  2 siblings, 1 reply; 9+ messages in thread
From: Aleksandr Loktionov @ 2026-09-15 12:55 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
  Cc: netdev, Tomasz Lichwala

From: Tomasz Lichwala <tomasz.lichwala@intel.com>

Add Asym_Pause to the supported link modes so that asymmetric pause
negotiation is properly reported via ethtool. Without Asym_Pause in
the supported modes, 'ethtool -a' incorrectly shows 'RX/TX negotiated: off'
for asymmetric pause configurations, even when pause is properly
negotiated and functional at the hardware level.

Fixes: 5a056cd7ead2 ("ice: add lp_advertising flow control support")
Signed-off-by: Tomasz Lichwala <tomasz.lichwala@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index bf9a821..a257b7d 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -2365,8 +2365,9 @@ ice_get_link_ksettings(struct net_device *netdev,
 		break;
 	}
 
-	/* flow control is symmetric and always supported */
+	/* flow control is symmetric or asymmetric and always supported */
 	ethtool_link_ksettings_add_link_mode(ks, supported, Pause);
+	ethtool_link_ksettings_add_link_mode(ks, supported, Asym_Pause);
 
 	caps = kzalloc_obj(*caps);
 	if (!caps)
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN
  2026-09-15 12:55 [PATCH iwl-net v2 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
  2026-09-15 12:55 ` [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
@ 2026-09-15 12:55 ` Aleksandr Loktionov
  2026-09-16 14:06   ` Simon Horman
  2026-09-17  9:22   ` Tomasz Lichwala
  2026-09-15 12:55 ` [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
  2 siblings, 2 replies; 9+ messages in thread
From: Aleksandr Loktionov @ 2026-09-15 12:55 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
  Cc: netdev, Konrad Knitter

From: Konrad Knitter <konrad.knitter@intel.com>

Disabling autonegotiation was silently ignored when autoneg had not yet
completed (ICE_AQ_AN_COMPLETED was not set), leaving the configuration
unchanged with no error. This could prevent link from forming if the
link partner requires non-autoneg mode.

Extend the condition to also allow disabling autoneg when the link
partner reports no AN ability (ICE_AQ_LP_AN_ABILITY clear). Gate the
ICE_AQ_LP_AN_ABILITY check on the link being up so that stale or
zeroed an_info when link is down does not produce a false positive.
Introduce the helper ice_autoneg_disable_allowed() to make the check
explicit.

Fixes: f1a4a66d2310 ("ice: fix set pause param autoneg check")
Signed-off-by: Konrad Knitter <konrad.knitter@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 26 ++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index a257b7d..4ce198f 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -2501,6 +2501,28 @@ ice_ksettings_find_adv_link_speed(const struct ethtool_link_ksettings *ks)
 	return adv_link_speed;
 }
 
+/**
+ * ice_autoneg_disable_allowed - check if autoneg can be disabled
+ * @p: port info
+ *
+ * Check if autonegotiation can be disabled based on link state.
+ * ICE_AQ_LP_AN_ABILITY is only valid when the link is up; gate that
+ * check accordingly to avoid false positives from stale link data.
+ *
+ * Return: true if autoneg has completed, or if the link is up and the
+ *         link partner does not advertise autonegotiation capability.
+ */
+static bool ice_autoneg_disable_allowed(struct ice_port_info *p)
+{
+	u8 an_info = p->phy.link_info.an_info;
+
+	if (an_info & ICE_AQ_AN_COMPLETED)
+		return true;
+	/* ICE_AQ_LP_AN_ABILITY is only valid when link is up */
+	return (p->phy.link_info.link_info & ICE_AQ_LINK_UP) &&
+	       !(an_info & ICE_AQ_LP_AN_ABILITY);
+}
+
 /**
  * ice_setup_autoneg
  * @p: port info
@@ -2539,8 +2561,8 @@ ice_setup_autoneg(struct ice_port_info *p, struct ethtool_link_ksettings *ks,
 			}
 		}
 	} else {
-		/* If autoneg is currently enabled */
-		if (p->phy.link_info.an_info & ICE_AQ_AN_COMPLETED) {
+		/* If autoneg completed or link partner does not support AN */
+		if (ice_autoneg_disable_allowed(p)) {
 			/* If autoneg is supported 10GBASE_T is the only PHY
 			 * that can disable it, so otherwise return error
 			 */
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices
  2026-09-15 12:55 [PATCH iwl-net v2 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
  2026-09-15 12:55 ` [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
  2026-09-15 12:55 ` [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
@ 2026-09-15 12:55 ` Aleksandr Loktionov
  2026-09-16 14:03   ` Simon Horman
  2026-09-17  9:35   ` Tomasz Lichwala
  2 siblings, 2 replies; 9+ messages in thread
From: Aleksandr Loktionov @ 2026-09-15 12:55 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
  Cc: netdev, Lukasz Czapnik

From: Lukasz Czapnik <lukasz.czapnik@intel.com>

E810 and E82X devices do not support RDMA on configurations with more
than 4 ports. This limitation does not apply to E830 devices, which
have a different hardware design and support RDMA regardless of the
port count.

Narrow the RDMA capability disable condition to skip E830 devices.

Fixes: ba1124f58afd ("ice: Add E830 device IDs, MAC type and registers")
Signed-off-by: Lukasz Czapnik <lukasz.czapnik@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index ef1ce10..d53307b 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -2507,7 +2507,7 @@ ice_recalc_port_limited_caps(struct ice_hw *hw, struct ice_hw_common_caps *caps)
 		caps->maxtc = 4;
 		ice_debug(hw, ICE_DBG_INIT, "reducing maxtc to %d (based on #ports)\n",
 			  caps->maxtc);
-		if (caps->rdma) {
+		if (caps->rdma && hw->mac_type != ICE_MAC_E830) {
 			ice_debug(hw, ICE_DBG_INIT, "forcing RDMA off\n");
 			caps->rdma = 0;
 		}
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices
  2026-09-15 12:55 ` [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
@ 2026-09-16 14:03   ` Simon Horman
  2026-09-17  9:35   ` Tomasz Lichwala
  1 sibling, 0 replies; 9+ messages in thread
From: Simon Horman @ 2026-09-16 14:03 UTC (permalink / raw)
  To: aleksandr.loktionov
  Cc: Simon Horman, intel-wired-lan, anthony.l.nguyen, netdev,
	lukasz.czapnik

This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://sashiko.dev/#/patchset/20260915125529.3975723-3-aleksandr.loktionov@intel.com?part=3
---
ice: support RDMA on 4+-port E830 devices

This patch updates the ice driver to support RDMA on E830 devices configured
with more than 4 ports. It modifies the port limit check to skip disabling
RDMA capabilities for E830 hardware.

> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index 04633103e3e61..d85ae6d1c309a 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -2510,7 +2510,7 @@ ice_recalc_port_limited_caps(struct ice_hw *hw, struct ice_hw_common_caps *caps)
>  		caps->maxtc = 4;
>  		ice_debug(hw, ICE_DBG_INIT, "reducing maxtc to %d (based on #ports)\n",
>  			  caps->maxtc);
> -		if (caps->rdma) {
> +		if (caps->rdma && hw->mac_type != ICE_MAC_E830) {
>  			ice_debug(hw, ICE_DBG_INIT, "forcing RDMA off\n");
>  			caps->rdma = 0;
>  		}

[Severity: Medium]
Will this still log an inaccurate warning for E830 devices?

While this patch successfully preserves the RDMA capability for E830 hardware
with more than 4 ports, the code immediately following this block in
ice_recalc_port_limited_caps() remains:

		/* print message only when processing device capabilities
		 * during initialization.
		 */
		if (caps == &hw->dev_caps.common_cap)
			dev_info(ice_hw_to_dev(hw), "RDMA functionality is not available with the current device configuration.\n");

Because hw->dev_caps.num_funcs > 4 is true, will E830 devices incorrectly
trigger this warning during initialization even though RDMA remains enabled?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool
  2026-09-15 12:55 ` [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
@ 2026-09-16 14:05   ` Simon Horman
  0 siblings, 0 replies; 9+ messages in thread
From: Simon Horman @ 2026-09-16 14:05 UTC (permalink / raw)
  To: Aleksandr Loktionov
  Cc: intel-wired-lan, anthony.l.nguyen, netdev, Tomasz Lichwala

On Tue, Sep 15, 2026 at 02:55:27PM +0200, Aleksandr Loktionov wrote:
> From: Tomasz Lichwala <tomasz.lichwala@intel.com>
> 
> Add Asym_Pause to the supported link modes so that asymmetric pause
> negotiation is properly reported via ethtool. Without Asym_Pause in
> the supported modes, 'ethtool -a' incorrectly shows 'RX/TX negotiated: off'
> for asymmetric pause configurations, even when pause is properly
> negotiated and functional at the hardware level.
> 
> Fixes: 5a056cd7ead2 ("ice: add lp_advertising flow control support")
> Signed-off-by: Tomasz Lichwala <tomasz.lichwala@intel.com>
> Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN
  2026-09-15 12:55 ` [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
@ 2026-09-16 14:06   ` Simon Horman
  2026-09-17  9:22   ` Tomasz Lichwala
  1 sibling, 0 replies; 9+ messages in thread
From: Simon Horman @ 2026-09-16 14:06 UTC (permalink / raw)
  To: Aleksandr Loktionov
  Cc: intel-wired-lan, anthony.l.nguyen, netdev, Konrad Knitter

On Tue, Sep 15, 2026 at 02:55:28PM +0200, Aleksandr Loktionov wrote:
> From: Konrad Knitter <konrad.knitter@intel.com>
> 
> Disabling autonegotiation was silently ignored when autoneg had not yet
> completed (ICE_AQ_AN_COMPLETED was not set), leaving the configuration
> unchanged with no error. This could prevent link from forming if the
> link partner requires non-autoneg mode.
> 
> Extend the condition to also allow disabling autoneg when the link
> partner reports no AN ability (ICE_AQ_LP_AN_ABILITY clear). Gate the
> ICE_AQ_LP_AN_ABILITY check on the link being up so that stale or
> zeroed an_info when link is down does not produce a false positive.
> Introduce the helper ice_autoneg_disable_allowed() to make the check
> explicit.
> 
> Fixes: f1a4a66d2310 ("ice: fix set pause param autoneg check")
> Signed-off-by: Konrad Knitter <konrad.knitter@intel.com>
> Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN
  2026-09-15 12:55 ` [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
  2026-09-16 14:06   ` Simon Horman
@ 2026-09-17  9:22   ` Tomasz Lichwala
  1 sibling, 0 replies; 9+ messages in thread
From: Tomasz Lichwala @ 2026-09-17  9:22 UTC (permalink / raw)
  To: Aleksandr Loktionov, intel-wired-lan, anthony.l.nguyen
  Cc: netdev, Konrad Knitter



On 15.09.2026 14:55, Aleksandr Loktionov wrote:

> +static bool ice_autoneg_disable_allowed(struct ice_port_info *p)
> +{
> +	u8 an_info = p->phy.link_info.an_info;
> +
> +	if (an_info & ICE_AQ_AN_COMPLETED)
> +		return true;
> +	/* ICE_AQ_LP_AN_ABILITY is only valid when link is up */
> +	return (p->phy.link_info.link_info & ICE_AQ_LINK_UP) &&
> +	       !(an_info & ICE_AQ_LP_AN_ABILITY);

When link is down and AN hasn't completed, this still silently no-ops the disable request (unchanged from before). Worth confirming that's the intended UX, or returning -EINVAL here too.

> +}
> +
>  /**
>   * ice_setup_autoneg
>   * @p: port info
> @@ -2539,8 +2561,8 @@ ice_setup_autoneg(struct ice_port_info *p, struct ethtool_link_ksettings *ks,
>  			}
>  		}
>  	} else {
> -		/* If autoneg is currently enabled */
> -		if (p->phy.link_info.an_info & ICE_AQ_AN_COMPLETED) {
> +		/* If autoneg completed or link partner does not support AN */
> +		if (ice_autoneg_disable_allowed(p)) {
>  			/* If autoneg is supported 10GBASE_T is the only PHY
>  			 * that can disable it, so otherwise return error
>  			 */

Thanks,
Tomasz

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices
  2026-09-15 12:55 ` [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
  2026-09-16 14:03   ` Simon Horman
@ 2026-09-17  9:35   ` Tomasz Lichwala
  1 sibling, 0 replies; 9+ messages in thread
From: Tomasz Lichwala @ 2026-09-17  9:35 UTC (permalink / raw)
  To: Aleksandr Loktionov, intel-wired-lan, anthony.l.nguyen
  Cc: netdev, Lukasz Czapnik



On 15.09.2026 14:55, Aleksandr Loktionov wrote:

> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index ef1ce10..d53307b 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -2507,7 +2507,7 @@ ice_recalc_port_limited_caps(struct ice_hw *hw, struct ice_hw_common_caps *caps)
>  		caps->maxtc = 4;
>  		ice_debug(hw, ICE_DBG_INIT, "reducing maxtc to %d (based on #ports)\n",
>  			  caps->maxtc);
> -		if (caps->rdma) {
> +		if (caps->rdma && hw->mac_type != ICE_MAC_E830) {
>  			ice_debug(hw, ICE_DBG_INIT, "forcing RDMA off\n");
>  			caps->rdma = 0;
>  		}


		/* print message only when processing device capabilities
		 * during initialization.
		 */
		if (caps == &hw->dev_caps.common_cap)
			dev_info(ice_hw_to_dev(hw), "RDMA functionality is not available with the current device configuration.\n");


This message is still printed whenever num_funcs > 4, regardless of the new mac_type != ICE_MAC_E830 check above it. On E830 devices with more than 4 ports, RDMA now stays enabled but this log line still claims it's unavailable. Please gate it on the same condition used to actually disable caps->rdma.


Thanks,
Tomasz


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-09-17  9:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-15 12:55 [PATCH iwl-net v2 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
2026-09-15 12:55 ` [PATCH iwl-net v2 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
2026-09-16 14:05   ` Simon Horman
2026-09-15 12:55 ` [PATCH iwl-net v2 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
2026-09-16 14:06   ` Simon Horman
2026-09-17  9:22   ` Tomasz Lichwala
2026-09-15 12:55 ` [PATCH iwl-net v2 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
2026-09-16 14:03   ` Simon Horman
2026-09-17  9:35   ` Tomasz Lichwala

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox