* [PATCH iwl-net v3 1/3] ice: fix asymmetric pause negotiation reporting in ethtool
2026-09-18 13:32 [PATCH iwl-net v3 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
@ 2026-09-18 13:32 ` Aleksandr Loktionov
2026-09-18 13:32 ` [PATCH iwl-net v3 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
2026-09-18 13:32 ` [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
2 siblings, 0 replies; 7+ messages in thread
From: Aleksandr Loktionov @ 2026-09-18 13:32 UTC (permalink / raw)
To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
Cc: netdev, Tomasz Lichwala, Simon Horman
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>
---
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] 7+ messages in thread* [PATCH iwl-net v3 2/3] ice: fix autoneg disable when link partner doesn't support AN
2026-09-18 13:32 [PATCH iwl-net v3 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
2026-09-18 13:32 ` [PATCH iwl-net v3 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
@ 2026-09-18 13:32 ` Aleksandr Loktionov
2026-09-21 11:33 ` Tomasz Lichwala
2026-09-18 13:32 ` [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
2 siblings, 1 reply; 7+ messages in thread
From: Aleksandr Loktionov @ 2026-09-18 13:32 UTC (permalink / raw)
To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
Cc: netdev, Konrad Knitter, Simon Horman
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>
---
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] 7+ messages in thread* Re: [PATCH iwl-net v3 2/3] ice: fix autoneg disable when link partner doesn't support AN
2026-09-18 13:32 ` [PATCH iwl-net v3 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
@ 2026-09-21 11:33 ` Tomasz Lichwala
0 siblings, 0 replies; 7+ messages in thread
From: Tomasz Lichwala @ 2026-09-21 11:33 UTC (permalink / raw)
To: Aleksandr Loktionov, intel-wired-lan, anthony.l.nguyen
Cc: netdev, Konrad Knitter, Simon Horman
On 18.09.2026 15:32, 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>
> ---
> 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
> */
Reviewed-by: Tomasz Lichwala <tomasz.lichwala@linux.intel.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices
2026-09-18 13:32 [PATCH iwl-net v3 0/3] ice: fixes for pause reporting, autoneg and RDMA Aleksandr Loktionov
2026-09-18 13:32 ` [PATCH iwl-net v3 1/3] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
2026-09-18 13:32 ` [PATCH iwl-net v3 2/3] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
@ 2026-09-18 13:32 ` Aleksandr Loktionov
2026-09-21 11:34 ` Tomasz Lichwala
2026-09-21 14:19 ` Simon Horman
2 siblings, 2 replies; 7+ messages in thread
From: Aleksandr Loktionov @ 2026-09-18 13:32 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.
Move the 'RDMA functionality is not available' notice inside that same
condition so it is only printed when RDMA is actually being disabled,
instead of unconditionally whenever num_funcs > 4 -- otherwise E830
would log a spurious warning even though RDMA stays enabled.
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 | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 0463310..1c4421f 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -2510,16 +2510,16 @@ 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");
+ /* 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");
+ }
}
}
--
2.52.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices
2026-09-18 13:32 ` [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
@ 2026-09-21 11:34 ` Tomasz Lichwala
2026-09-21 14:19 ` Simon Horman
1 sibling, 0 replies; 7+ messages in thread
From: Tomasz Lichwala @ 2026-09-21 11:34 UTC (permalink / raw)
To: Aleksandr Loktionov, intel-wired-lan, anthony.l.nguyen
Cc: netdev, Lukasz Czapnik
On 18.09.2026 15:32, Aleksandr Loktionov wrote:
> 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.
> Move the 'RDMA functionality is not available' notice inside that same
> condition so it is only printed when RDMA is actually being disabled,
> instead of unconditionally whenever num_funcs > 4 -- otherwise E830
> would log a spurious warning even though RDMA stays enabled.
>
> 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 | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
> index 0463310..1c4421f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_common.c
> +++ b/drivers/net/ethernet/intel/ice/ice_common.c
> @@ -2510,16 +2510,16 @@ 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");
> + /* 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");
> + }
> }
> }
>
Reviewed-by: Tomasz Lichwala <tomasz.lichwala@linux.intel.com>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices
2026-09-18 13:32 ` [PATCH iwl-net v3 3/3] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
2026-09-21 11:34 ` Tomasz Lichwala
@ 2026-09-21 14:19 ` Simon Horman
1 sibling, 0 replies; 7+ messages in thread
From: Simon Horman @ 2026-09-21 14:19 UTC (permalink / raw)
To: Aleksandr Loktionov
Cc: intel-wired-lan, anthony.l.nguyen, netdev, Lukasz Czapnik
On Fri, Sep 18, 2026 at 03:32:34PM +0200, Aleksandr Loktionov wrote:
> 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.
> Move the 'RDMA functionality is not available' notice inside that same
> condition so it is only printed when RDMA is actually being disabled,
> instead of unconditionally whenever num_funcs > 4 -- otherwise E830
> would log a spurious warning even though RDMA stays enabled.
>
> 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>
Thanks for the v3 update.
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread