* [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* 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
* [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* 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
* [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 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