public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE
@ 2026-04-17  6:29 Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 1/4] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Aleksandr Loktionov @ 2026-04-17  6:29 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.

This series fixes four 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.

- On E830, Ethernet Inline IPsec Engine (EIPE) decryption errors trigger
  a checksum-error path that returned early without reporting the error
  to the OS.  The packet must be forwarded to the stack with the
  checksum error flag set so the OS can handle it correctly.

Jan Glaza (1):
  ice: report EIPE checksum errors to the OS on E830

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  | 30 ++++++++++++++++++++++++--
 drivers/net/ethernet/intel/ice/ice_txrx_lib.c |  2 ++
 3 files changed, 31 insertions(+), 3 deletions(-)

-- 
2.52.0


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

* [PATCH iwl-net 1/4] ice: fix asymmetric pause negotiation reporting in ethtool
  2026-04-17  6:29 [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE Aleksandr Loktionov
@ 2026-04-17  6:29 ` Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 2/4] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Aleksandr Loktionov @ 2026-04-17  6:29 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 e6a20af..30d2550 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -2373,8 +2373,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] 5+ messages in thread

* [PATCH iwl-net 2/4] ice: fix autoneg disable when link partner doesn't support AN
  2026-04-17  6:29 [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 1/4] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
@ 2026-04-17  6:29 ` Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 3/4] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 4/4] ice: report EIPE checksum errors to the OS on E830 Aleksandr Loktionov
  3 siblings, 0 replies; 5+ messages in thread
From: Aleksandr Loktionov @ 2026-04-17  6:29 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 30d2550..e41fc8d 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -2509,6 +2509,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
@@ -2547,8 +2569,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] 5+ messages in thread

* [PATCH iwl-net 3/4] ice: support RDMA on 4+-port E830 devices
  2026-04-17  6:29 [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 1/4] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 2/4] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
@ 2026-04-17  6:29 ` Aleksandr Loktionov
  2026-04-17  6:29 ` [PATCH iwl-net 4/4] ice: report EIPE checksum errors to the OS on E830 Aleksandr Loktionov
  3 siblings, 0 replies; 5+ messages in thread
From: Aleksandr Loktionov @ 2026-04-17  6:29 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 ce11fea..0e40011 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -2509,7 +2509,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] 5+ messages in thread

* [PATCH iwl-net 4/4] ice: report EIPE checksum errors to the OS on E830
  2026-04-17  6:29 [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE Aleksandr Loktionov
                   ` (2 preceding siblings ...)
  2026-04-17  6:29 ` [PATCH iwl-net 3/4] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
@ 2026-04-17  6:29 ` Aleksandr Loktionov
  3 siblings, 0 replies; 5+ messages in thread
From: Aleksandr Loktionov @ 2026-04-17  6:29 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev, Jan Glaza

From: Jan Glaza <jan.glaza@intel.com>

For E830 adapters the hardware-reported EIPE (Ethernet Inline IPsec
Engine) error is a reliable indication that a received packet failed
decryption and has a bad checksum. Route EIPE errors through the
generic checksum error path on E830 so the error is visible via
standard ethtool statistics (rx_csum_bad).

On previous devices (E810, E82X) the EIPE flag can be spuriously set
on encapsulated packets with inner L2 padding, so those adapters only
increment the driver-private hw_rx_eipe_error counter without routing
through the checksum error path.

Fixes: 0ca6755f3cc2 ("ice: Add a new counter for Rx EIPE errors")
Signed-off-by: Jan Glaza <jan.glaza@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
index e695a66..82d9d2c4 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c
@@ -140,6 +140,8 @@ ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,

 	if (ipv4 && (rx_status0 & (BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S)))) {
 		ring->vsi->back->hw_rx_eipe_error++;
+		if (ring->vsi->back->hw.mac_type == ICE_MAC_E830)
+			goto checksum_fail;
 		return;
 	}

--
2.52.0


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

end of thread, other threads:[~2026-04-17  6:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-17  6:29 [PATCH iwl-net 0/4] ice: fixes for pause reporting, autoneg, RDMA and EIPE Aleksandr Loktionov
2026-04-17  6:29 ` [PATCH iwl-net 1/4] ice: fix asymmetric pause negotiation reporting in ethtool Aleksandr Loktionov
2026-04-17  6:29 ` [PATCH iwl-net 2/4] ice: fix autoneg disable when link partner doesn't support AN Aleksandr Loktionov
2026-04-17  6:29 ` [PATCH iwl-net 3/4] ice: support RDMA on 4+-port E830 devices Aleksandr Loktionov
2026-04-17  6:29 ` [PATCH iwl-net 4/4] ice: report EIPE checksum errors to the OS on E830 Aleksandr Loktionov

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