DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes
@ 2025-12-29 21:35 Ivan Malov
  2025-12-29 21:35 ` [PATCH 1/9] doc: remove support for AMD Solarflare SFN7xxx family boards Ivan Malov
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov

The series provides various fixes, primarily for Medford4 support.
It also fixes a legacy flow control bug; due to hardware constraints
in the fix, SFN7xxx NICs are now marked as deprecated.

Andy Moreton (1):
  common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4

Ivan Malov (8):
  doc: remove support for AMD Solarflare SFN7xxx family boards
  common/sfc_efx/base: fix flow control setting on legacy MCDI
  common/sfc_efx/base: fix indication of requestable FEC flags
  common/sfc_efx/base: define mask for pause mode capabilities
  net/sfc: avoid speed reset when setting FEC in started state
  net/sfc: rework the capability check that is done on FEC set
  net/sfc: drop AUTO from FEC capabilities and fix the comment
  net/sfc: fix reporting status of autonegotiation to the user

 doc/guides/nics/sfc_efx.rst            |  14 ---
 doc/guides/rel_notes/release_26_03.rst |   4 +
 drivers/common/sfc_efx/base/ef10_ev.c  |  41 +++++--
 drivers/common/sfc_efx/base/ef10_mac.c |  35 ++++--
 drivers/common/sfc_efx/base/ef10_nic.c |  57 +++++-----
 drivers/common/sfc_efx/base/efx.h      |   1 +
 drivers/common/sfc_efx/base/efx_np.c   |   2 +-
 drivers/net/sfc/sfc.h                  |   2 +-
 drivers/net/sfc/sfc_ethdev.c           | 141 +++++++++++++++----------
 drivers/net/sfc/sfc_ev.c               |   7 +-
 drivers/net/sfc/sfc_port.c             |   8 +-
 drivers/net/sfc/sfc_repr.c             |   2 +-
 12 files changed, 193 insertions(+), 121 deletions(-)

-- 
2.47.3


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

* [PATCH 1/9] doc: remove support for AMD Solarflare SFN7xxx family boards
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 2/9] common/sfc_efx/base: fix flow control setting on legacy MCDI Ivan Malov
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov

7000 series adaptors are out of support in terms of hardware.

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 doc/guides/nics/sfc_efx.rst            | 14 --------------
 doc/guides/rel_notes/release_26_03.rst |  4 ++++
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/doc/guides/nics/sfc_efx.rst b/doc/guides/nics/sfc_efx.rst
index 4bd9f8c441..ae5ef25715 100644
--- a/doc/guides/nics/sfc_efx.rst
+++ b/doc/guides/nics/sfc_efx.rst
@@ -52,20 +52,6 @@ Supported NICs
 
    - Solarflare SFN8722 Dual Port SFP+ OCP Server Adapter
 
-   - Solarflare SFN7002F Dual Port SFP+ Server Adapter
-
-   - Solarflare SFN7004F Quad Port SFP+ Server Adapter
-
-   - Solarflare SFN7042Q Dual Port QSFP+ Server Adapter
-
-   - Solarflare SFN7122F Dual Port SFP+ Server Adapter
-
-   - Solarflare SFN7124F Quad Port SFP+ Server Adapter
-
-   - Solarflare SFN7142Q Dual Port QSFP+ Server Adapter
-
-   - Solarflare SFN7322F Precision Time Synchronization Server Adapter
-
 
 Features
 --------
diff --git a/doc/guides/rel_notes/release_26_03.rst b/doc/guides/rel_notes/release_26_03.rst
index 15dabee7a1..52663580e3 100644
--- a/doc/guides/rel_notes/release_26_03.rst
+++ b/doc/guides/rel_notes/release_26_03.rst
@@ -68,6 +68,10 @@ Removed Items
    Also, make sure to start the actual text at the margin.
    =======================================================
 
+* **Removed support for AMD Solarflare SFN7xxx family boards.**
+
+  7000 series adaptors are out of support in terms of hardware.
+
 
 API Changes
 -----------
-- 
2.47.3


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

* [PATCH 2/9] common/sfc_efx/base: fix flow control setting on legacy MCDI
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
  2025-12-29 21:35 ` [PATCH 1/9] doc: remove support for AMD Solarflare SFN7xxx family boards Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 3/9] common/sfc_efx/base: fix indication of requestable FEC flags Ivan Malov
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

On X2 adaptors, tests have shown a mismatch between the mode the user asks
for and the resulting one, given the partner is set to use autonegotiation.
For example, asking for 'RX_PAUSE' results in 'FULL' being actually in use.

As per 'SET_MAC' MCDI documentation (in 'efx_regs_mcdi.h'), it is wrong to
set 'FCNTL' field to 'AUTO' when the user wants a fixed mode. Correct this.

Fixes: e7cd430c864f ("net/sfc/base: import SFN7xxx family support")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/common/sfc_efx/base/ef10_mac.c | 35 ++++++++++++++++++++------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/drivers/common/sfc_efx/base/ef10_mac.c b/drivers/common/sfc_efx/base/ef10_mac.c
index bfc82b80c7..016bd88774 100644
--- a/drivers/common/sfc_efx/base/ef10_mac.c
+++ b/drivers/common/sfc_efx/base/ef10_mac.c
@@ -273,6 +273,7 @@ ef10_mac_reconfigure(
 	efx_mcdi_req_t req;
 	EFX_MCDI_DECLARE_BUF(payload, MC_CMD_SET_MAC_IN_LEN,
 		MC_CMD_SET_MAC_OUT_LEN);
+	uint32_t fcntl;
 	efx_rc_t rc;
 
 	req.emr_cmd = MC_CMD_SET_MAC;
@@ -299,13 +300,29 @@ ef10_mac_reconfigure(
 				    SET_MAC_IN_REJECT_UNCST, 0,
 				    SET_MAC_IN_REJECT_BRDCST, 0);
 
-	/*
-	 * Flow control, whether it is auto-negotiated or not,
-	 * is set via the PHY advertised capabilities.  When set to
-	 * automatic the MAC will use the PHY settings to determine
-	 * the flow control settings.
-	 */
-	MCDI_IN_SET_DWORD(req, SET_MAC_IN_FCNTL, MC_CMD_FCNTL_AUTO);
+	if (epp->ep_fcntl_autoneg != B_FALSE) {
+		fcntl = MC_CMD_FCNTL_AUTO;
+	} else {
+		switch (epp->ep_fcntl) {
+		case 0:
+			fcntl = MC_CMD_FCNTL_OFF;
+			break;
+		case EFX_FCNTL_RESPOND:
+			fcntl = MC_CMD_FCNTL_RESPOND;
+			break;
+		case EFX_FCNTL_GENERATE:
+			fcntl = MC_CMD_FCNTL_GENERATE;
+			break;
+		case EFX_FCNTL_RESPOND | EFX_FCNTL_GENERATE:
+			fcntl = MC_CMD_FCNTL_BIDIR;
+			break;
+		default:
+			rc = EINVAL;
+			goto fail1;
+		}
+	}
+
+	MCDI_IN_SET_DWORD(req, SET_MAC_IN_FCNTL, fcntl);
 
 	/* Include the Ethernet frame checksum in RX packets if it's required */
 	MCDI_IN_POPULATE_DWORD_1(req, SET_MAC_IN_FLAGS,
@@ -321,7 +338,7 @@ ef10_mac_reconfigure(
 		 */
 		if (req.emr_rc != EACCES) {
 			rc = req.emr_rc;
-			goto fail1;
+			goto fail2;
 		}
 	}
 
@@ -338,6 +355,8 @@ ef10_mac_reconfigure(
 
 	return (0);
 
+fail2:
+	EFSYS_PROBE(fail2);
 fail1:
 	EFSYS_PROBE1(fail1, efx_rc_t, rc);
 
-- 
2.47.3


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

* [PATCH 3/9] common/sfc_efx/base: fix indication of requestable FEC flags
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
  2025-12-29 21:35 ` [PATCH 1/9] doc: remove support for AMD Solarflare SFN7xxx family boards Ivan Malov
  2025-12-29 21:35 ` [PATCH 2/9] common/sfc_efx/base: fix flow control setting on legacy MCDI Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 4/9] common/sfc_efx/base: define mask for pause mode capabilities Ivan Malov
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

Without these, the client driver will not allow to change default FEC mode.
The existing code assumes that the FW supplies them in the 'FEC_REQ' field
of the 'GET_FIXED_PORT_PROPERTIES' MCDI, but that is not the case. Arrange
the code to reuse the snippet from pre-X4 EF10 attach path to set the bits.

Fixes: a90549f527eb ("common/sfc_efx/base: get netport fixed capabilities on probe")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/common/sfc_efx/base/ef10_nic.c | 57 ++++++++++++++------------
 drivers/common/sfc_efx/base/efx_np.c   |  2 +-
 2 files changed, 32 insertions(+), 27 deletions(-)

diff --git a/drivers/common/sfc_efx/base/ef10_nic.c b/drivers/common/sfc_efx/base/ef10_nic.c
index 627144cfb0..9af4259d38 100644
--- a/drivers/common/sfc_efx/base/ef10_nic.c
+++ b/drivers/common/sfc_efx/base/ef10_nic.c
@@ -2220,35 +2220,23 @@ efx_mcdi_nic_board_cfg(
 
 	encp->enc_board_type = board_type;
 
-	if (efx_np_supported(enp) != B_FALSE)
-		goto skip_phy_props;
-
-	/* Fill out fields in enp->en_port and enp->en_nic_cfg from MCDI */
-	if ((rc = efx_mcdi_get_phy_cfg(enp)) != 0)
-		goto fail8;
+	if (efx_np_supported(enp) == B_FALSE) {
+		/*
+		 * Fill out fields in enp->en_port and enp->en_nic_cfg from MCDI
+		 */
+		rc = efx_mcdi_get_phy_cfg(enp);
+		if (rc != 0)
+			goto fail8;
 
-	/*
-	 * Firmware with support for *_FEC capability bits does not
-	 * report that the corresponding *_FEC_REQUESTED bits are supported.
-	 * Add them here so that drivers understand that they are supported.
-	 */
-	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_BASER_FEC))
-		epp->ep_phy_cap_mask |=
-		    (1u << EFX_PHY_CAP_BASER_FEC_REQUESTED);
-	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_RS_FEC))
-		epp->ep_phy_cap_mask |=
-		    (1u << EFX_PHY_CAP_RS_FEC_REQUESTED);
-	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_25G_BASER_FEC))
-		epp->ep_phy_cap_mask |=
-		    (1u << EFX_PHY_CAP_25G_BASER_FEC_REQUESTED);
+		/* Obtain the default PHY advertised capabilities */
+		rc = ef10_phy_get_link(enp, &els);
+		if (rc != 0)
+			goto fail9;
 
-	/* Obtain the default PHY advertised capabilities */
-	if ((rc = ef10_phy_get_link(enp, &els)) != 0)
-		goto fail9;
-	epp->ep_default_adv_cap_mask = els.epls.epls_adv_cap_mask;
-	epp->ep_adv_cap_mask = els.epls.epls_adv_cap_mask;
+		epp->ep_default_adv_cap_mask = els.epls.epls_adv_cap_mask;
+		epp->ep_adv_cap_mask = els.epls.epls_adv_cap_mask;
+	}
 
-skip_phy_props:
 	/* Check capabilities of running datapath firmware */
 	if ((rc = ef10_get_datapath_caps(enp)) != 0)
 		goto fail10;
@@ -2483,6 +2471,7 @@ ef10_nic_probe(
 {
 	efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
 	efx_drv_cfg_t *edcp = &(enp->en_drv_cfg);
+	efx_port_t *epp = &(enp->en_port);
 	efx_rc_t rc;
 
 	EFSYS_ASSERT(EFX_FAMILY_IS_EF10(enp));
@@ -2506,6 +2495,22 @@ ef10_nic_probe(
 	if (rc != 0)
 		goto fail5;
 
+	/*
+	 * Firmware with support for *_FEC capability bits does not
+	 * report that the corresponding *_FEC_REQUESTED bits are supported.
+	 * Add them here so that drivers understand that they are supported.
+	 */
+
+	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_BASER_FEC))
+		epp->ep_phy_cap_mask |=
+		    (1u << EFX_PHY_CAP_BASER_FEC_REQUESTED);
+	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_RS_FEC))
+		epp->ep_phy_cap_mask |=
+		    (1u << EFX_PHY_CAP_RS_FEC_REQUESTED);
+	if (epp->ep_phy_cap_mask & (1u << EFX_PHY_CAP_25G_BASER_FEC))
+		epp->ep_phy_cap_mask |=
+		    (1u << EFX_PHY_CAP_25G_BASER_FEC_REQUESTED);
+
 	/*
 	 * Set default driver config limits (based on board config).
 	 *
diff --git a/drivers/common/sfc_efx/base/efx_np.c b/drivers/common/sfc_efx/base/efx_np.c
index ca0eb09b4a..45f3cd07ed 100644
--- a/drivers/common/sfc_efx/base/efx_np.c
+++ b/drivers/common/sfc_efx/base/efx_np.c
@@ -1392,7 +1392,7 @@ efx_np_link_ctrl(
 		 * no 'FEC_REQUESTED' bits, use 'NONE' or 'AUTO' from above.
 		 */
 		EFX_NP_CAP_SW_MASK_TO_HW_ENUM(efx_np_cap_map_fec_req,
-		    ETH_AN_FIELDS_FEC_REQ, cap_data_raw, cap_mask_sw,
+		    ETH_AN_FIELDS_FEC_MASK, cap_data_raw, cap_mask_sw,
 		    NULL, NULL, &supported, &cap_enum_hw);
 
 		if ((cap_mask_sw & EFX_PHY_CAP_FEC_MASK) != 0
-- 
2.47.3


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

* [PATCH 4/9] common/sfc_efx/base: define mask for pause mode capabilities
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (2 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 3/9] common/sfc_efx/base: fix indication of requestable FEC flags Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 5/9] common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4 Ivan Malov
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov

Client drivers (DPDK) will leverage it to manipulate flow control settings.

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/common/sfc_efx/base/efx.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h
index 8958f1b170..2aa52b401d 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -1242,6 +1242,7 @@ typedef enum efx_phy_cap_type_e {
 	EFX_PHY_CAP_NTYPES
 } efx_phy_cap_type_t;
 
+#define EFX_PHY_CAP_PAUSE_MASK (EFX_PHY_CAP_PAUSE | EFX_PHY_CAP_ASYM)
 
 #define	EFX_PHY_CAP_CURRENT	0x00000000
 #define	EFX_PHY_CAP_DEFAULT	0x00000001
-- 
2.47.3


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

* [PATCH 5/9] common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (3 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 4/9] common/sfc_efx/base: define mask for pause mode capabilities Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 6/9] net/sfc: avoid speed reset when setting FEC in started state Ivan Malov
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov

From: Andy Moreton <andy.moreton@amd.com>

On X4 the MAC hardware reports both over-size packets and CRC errors
in the RX event flag RX_TRUNC_ERR. Over-size packets are only likely
as a result of a misconfigured network, so count the RX_TRUNC_ERR
events as CRC errors.
This workaround is only needed for the per-queue counters maintained
by the driver. The DMA statistics counters maintained by firmware
are not affected.

Signed-off-by: Andy Moreton <andy.moreton@amd.com>
Signed-off-by: Viacheslav Galaktionov <viacheslav.galaktionov@arknetworks.am>
---
 drivers/common/sfc_efx/base/ef10_ev.c | 41 +++++++++++++++++++++------
 1 file changed, 33 insertions(+), 8 deletions(-)

diff --git a/drivers/common/sfc_efx/base/ef10_ev.c b/drivers/common/sfc_efx/base/ef10_ev.c
index a97c1bf43e..ea430d0d5f 100644
--- a/drivers/common/sfc_efx/base/ef10_ev.c
+++ b/drivers/common/sfc_efx/base/ef10_ev.c
@@ -418,6 +418,7 @@ ef10_ev_rx_packed_stream(
 	__in		const efx_ev_callbacks_t *eecp,
 	__in_opt	void *arg)
 {
+	efx_nic_t *enp = eep->ee_enp;
 	uint32_t label;
 	uint32_t pkt_count_lbits;
 	uint16_t flags;
@@ -466,10 +467,22 @@ ef10_ev_rx_packed_stream(
 
 	/* Check for errors that invalidate checksum and L3/L4 fields */
 	if (EFX_QWORD_FIELD(*eqp, ESF_DZ_RX_TRUNC_ERR) != 0) {
-		/* RX frame truncated */
-		EFX_EV_QSTAT_INCR(eep, EV_RX_FRM_TRUNC);
-		flags |= EFX_DISCARD;
-		goto deliver;
+		/*
+		 * X4 uses RX_TRUNC_ERR for packet size and CRC errors. Count
+		 * these as CRC errors (as over-size packets are only likely in
+		 * a misconfigured network).
+		 */
+		if (enp->en_family == EFX_FAMILY_MEDFORD4) {
+			/* Bad Ethernet frame CRC */
+			EFX_EV_QSTAT_INCR(eep, EV_RX_ETH_CRC_ERR);
+			flags |= EFX_DISCARD;
+			goto deliver;
+		} else {
+			/* RX frame truncated */
+			EFX_EV_QSTAT_INCR(eep, EV_RX_FRM_TRUNC);
+			flags |= EFX_DISCARD;
+			goto deliver;
+		}
 	}
 	if (EFX_QWORD_FIELD(*eqp, ESF_DZ_RX_ECRC_ERR) != 0) {
 		/* Bad Ethernet frame CRC */
@@ -630,10 +643,22 @@ ef10_ev_rx(
 
 	/* Check for errors that invalidate checksum and L3/L4 fields */
 	if (EFX_QWORD_FIELD(*eqp, ESF_DZ_RX_TRUNC_ERR) != 0) {
-		/* RX frame truncated */
-		EFX_EV_QSTAT_INCR(eep, EV_RX_FRM_TRUNC);
-		flags |= EFX_DISCARD;
-		goto deliver;
+		/*
+		 * X4 uses RX_TRUNC_ERR for packet size and CRC errors. Count
+		 * these as CRC errors (as over-size packets are only likely in
+		 * a misconfigured network).
+		 */
+		if (enp->en_family == EFX_FAMILY_MEDFORD4) {
+			/* Bad Ethernet frame CRC */
+			EFX_EV_QSTAT_INCR(eep, EV_RX_ETH_CRC_ERR);
+			flags |= EFX_DISCARD;
+			goto deliver;
+		} else {
+			/* RX frame truncated */
+			EFX_EV_QSTAT_INCR(eep, EV_RX_FRM_TRUNC);
+			flags |= EFX_DISCARD;
+			goto deliver;
+		}
 	}
 	if (EFX_QWORD_FIELD(*eqp, ESF_DZ_RX_ECRC_ERR) != 0) {
 		/* Bad Ethernet frame CRC */
-- 
2.47.3


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

* [PATCH 6/9] net/sfc: avoid speed reset when setting FEC in started state
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (4 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 5/9] common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4 Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 7/9] net/sfc: rework the capability check that is done on FEC set Ivan Malov
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

The 'current' mask of PHY capabilities in libefx indicates autonegotiation
regardless of whether the last invocation of 'efx_phy_adv_cap_set' enabled
or disabled it. The port start code is aware of this and pays attention to
preserve the existing setting when making 'efx_phy_adv_cap_set' invocation.

FEC set method uses the 'current' mask as a base for the new value and may
thus reset fixed speed to autonegotiated. Fix it to keep the speed setting.

Fixes: 5efa8fc1cfc0 ("net/sfc: support FEC feature")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/net/sfc/sfc_ethdev.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 99141bdda5..6d2349a999 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -2857,8 +2857,13 @@ sfc_fec_set(struct rte_eth_dev *dev, uint32_t fec_capa)
 	if (sa->state == SFC_ETHDEV_STARTED) {
 		efx_phy_adv_cap_get(sa->nic, EFX_PHY_CAP_CURRENT,
 				    &updated_caps);
-		updated_caps = updated_caps & ~EFX_PHY_CAP_FEC_MASK;
-		updated_caps |= efx_fec_caps;
+
+		/* Keep pause capabilities set by efx_mac_fcntl_set(). */
+		updated_caps = (updated_caps & EFX_PHY_CAP_PAUSE_MASK) |
+			       (port->phy_adv_cap & ~EFX_PHY_CAP_PAUSE_MASK);
+
+		updated_caps = (updated_caps & ~EFX_PHY_CAP_FEC_MASK) |
+			       (efx_fec_caps & EFX_PHY_CAP_FEC_MASK);
 
 		rc = efx_phy_adv_cap_set(sa->nic, updated_caps);
 		if (rc != 0)
-- 
2.47.3


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

* [PATCH 7/9] net/sfc: rework the capability check that is done on FEC set
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (5 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 6/9] net/sfc: avoid speed reset when setting FEC in started state Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 8/9] net/sfc: drop AUTO from FEC capabilities and fix the comment Ivan Malov
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

The current code that sets new FEC mode does not consult capabilities when
the ethdev is not started. This leads to accepting FEC flags that the last
configured link speed cannot handle. This is shown in 'testpmd' as follows:

port stop all
port config 0 speed 10000 duplex full
port start 0
port stop 0
set port 0 fec_mode rs

In the case of X4 adaptors, RS FEC cannot be supported for such low speeds
and the last command should print 'Function not implemented' error message,
but it doesn't. To fix this, enforce the proper checks in every port state.

Fixes: 5efa8fc1cfc0 ("net/sfc: support FEC feature")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/net/sfc/sfc_ethdev.c | 96 ++++++++++++++++++++++--------------
 1 file changed, 59 insertions(+), 37 deletions(-)

diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 6d2349a999..fc759f52fe 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -7,6 +7,8 @@
  * for Solarflare) and Solarflare Communications, Inc.
  */
 
+#include <stdbool.h>
+
 #include <dev_driver.h>
 #include <ethdev_driver.h>
 #include <ethdev_pci.h>
@@ -14,6 +16,7 @@
 #include <bus_pci_driver.h>
 #include <rte_errno.h>
 #include <rte_string_fns.h>
+#include <rte_bitops.h>
 #include <rte_ether.h>
 
 #include "efx.h"
@@ -2496,6 +2499,10 @@ sfc_rx_metadata_negotiate(struct rte_eth_dev *dev, uint64_t *features)
 	return 0;
 }
 
+/*
+ * When adding support for new speeds/capabilities, make sure to adjust
+ * validity checks conducted by 'sfc_fec_capa_check' for user input.
+ */
 static unsigned int
 sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 			      struct rte_eth_fec_capa *speed_fec_capa)
@@ -2721,60 +2728,75 @@ sfc_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa)
 	return -rc;
 }
 
+/*
+ * When adding checks for new speeds and/or capabilities, keep that consistent
+ * with capabilities that 'sfc_fec_get_capa_speed_to_fec' reports to the user.
+ */
 static int
 sfc_fec_capa_check(struct rte_eth_dev *dev, uint32_t fec_capa,
 		   uint32_t supported_caps)
 {
-	struct rte_eth_fec_capa *speed_fec_capa;
-	struct rte_eth_link current_link;
-	bool is_supported = false;
-	unsigned int num_entries;
-	bool auto_fec = false;
-	unsigned int i;
-
 	struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
-
-	if (sa->state != SFC_ETHDEV_STARTED)
-		return 0;
+	unsigned int ncaps = rte_popcount32(fec_capa);
+	/* Set by 'sfc_phy_cap_from_link_speeds'. */
+	uint32_t speeds_cur = sa->port.phy_adv_cap;
+	uint32_t speeds_baser = 0;
+	uint32_t speeds_rs = 0;
 
 	if (fec_capa & RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_AUTO)) {
-		auto_fec = true;
-		fec_capa &= ~RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_AUTO);
+		if (ncaps == 1) {
+			/* Let the FW choose a best-effort setting. */
+			return 0;
+		} else {
+			/*
+			 * Each requested FEC capability must be supported in
+			 * general and at least one speed that supports this
+			 * FEC mode must be currently advertised/configured.
+			 */
+		}
+	} else if (ncaps != 1) {
+		/*
+		 * Fixed FEC mode does not allow for multiple capabilities.
+		 * Empty mask is invalid, as No-FEC has a capability bit.
+		 */
+		return EINVAL;
+	} else if (fec_capa & RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_NOFEC)) {
+		/* No-FEC is assumed to be always acceptable. */
+		return 0;
 	}
 
-	/*
-	 * If only the AUTO bit is set, the decision on which FEC
-	 * mode to use will be made by HW/FW or driver.
-	 */
-	if (auto_fec && fec_capa == 0)
-		return 0;
+	/* 25G BASE-R is accounted for separately below. */
+	speeds_baser |= (1U << EFX_PHY_CAP_50000FDX);
+	speeds_baser |= (1U << EFX_PHY_CAP_40000FDX);
+	speeds_baser |= (1U << EFX_PHY_CAP_10000FDX);
 
-	sfc_dev_get_rte_link(dev, 1, &current_link);
+	speeds_rs |= (1U << EFX_PHY_CAP_200000FDX);
+	speeds_rs |= (1U << EFX_PHY_CAP_100000FDX);
+	speeds_rs |= (1U << EFX_PHY_CAP_50000FDX);
+	speeds_rs |= (1U << EFX_PHY_CAP_25000FDX);
 
-	num_entries = sfc_fec_get_capa_speed_to_fec(supported_caps, NULL);
-	if (num_entries == 0)
-		return ENOTSUP;
+	if (fec_capa & RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_BASER)) {
+		bool supported = false;
 
-	speed_fec_capa = rte_calloc("fec_capa", num_entries,
-				    sizeof(*speed_fec_capa), 0);
-	num_entries = sfc_fec_get_capa_speed_to_fec(supported_caps,
-						    speed_fec_capa);
+		if ((supported_caps & EFX_PHY_CAP_FEC_BIT(25G_BASER_FEC)) &&
+		    (speeds_cur & (1U << EFX_PHY_CAP_25000FDX)))
+			supported = true;
 
-	for (i = 0; i < num_entries; i++) {
-		if (speed_fec_capa[i].speed == current_link.link_speed) {
-			if ((fec_capa & speed_fec_capa[i].capa) != 0)
-				is_supported = true;
+		if ((supported_caps & EFX_PHY_CAP_FEC_BIT(BASER_FEC)) &&
+		    (speeds_cur & speeds_baser))
+			supported = true;
 
-			break;
-		}
+		if (!supported)
+			return ENOTSUP;
 	}
 
-	rte_free(speed_fec_capa);
-
-	if (is_supported)
-		return 0;
+	if (fec_capa & RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_RS)) {
+		if ((supported_caps & EFX_PHY_CAP_FEC_BIT(RS_FEC)) == 0 ||
+		    (speeds_cur & speeds_rs) == 0)
+			return ENOTSUP;
+	}
 
-	return ENOTSUP;
+	return 0;
 }
 
 static int
-- 
2.47.3


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

* [PATCH 8/9] net/sfc: drop AUTO from FEC capabilities and fix the comment
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (6 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 7/9] net/sfc: rework the capability check that is done on FEC set Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-29 21:35 ` [PATCH 9/9] net/sfc: fix reporting status of autonegotiation to the user Ivan Malov
  2025-12-31 19:13 ` [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Stephen Hemminger
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

AUTO is not a capability. It is rather a special value. Do not indicate it.
Also, improve the comment to explain this change and the overall principle.

Fixes: b526903f308e ("net/sfc: offer support for 200G link ability on new adaptors")
Fixes: 5efa8fc1cfc0 ("net/sfc: support FEC feature")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/net/sfc/sfc_ethdev.c | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index fc759f52fe..7c2abaab6b 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -2517,18 +2517,20 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		rs = true;
 
 	/*
-	 * NOFEC and AUTO FEC modes are always supported.
-	 * FW does not provide information about the supported
-	 * FEC modes per the link speed.
-	 * Supported FEC depends on supported link speeds and
-	 * supported FEC modes by a device.
+	 * NOFEC can always be requested, but if the link technology for the
+	 * intended speed mandates FEC, doing so will not bring the link up.
+	 *
+	 * FW cannot report supported FEC modes per speed/link technology,
+	 * so use best-effort approximation to fill in the capabilities.
+	 *
+	 * Do not indicate 'AUTO'. This bit is reserved for user
+	 * input. It has nothing to do with capability reporting.
 	 */
 	if (supported_caps & (1u << EFX_PHY_CAP_10000FDX)) {
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_10G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (baser) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(BASER);
@@ -2540,8 +2542,7 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_25G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (baser) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(BASER);
@@ -2557,8 +2558,7 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_40G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (baser) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(BASER);
@@ -2570,8 +2570,7 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_50G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (baser) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(BASER);
@@ -2587,8 +2586,7 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_100G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (rs) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(RS);
@@ -2600,8 +2598,7 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
 		if (speed_fec_capa != NULL) {
 			speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_200G;
 			speed_fec_capa[num].capa =
-				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
-				RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+				RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC);
 			if (rs) {
 				speed_fec_capa[num].capa |=
 					RTE_ETH_FEC_MODE_CAPA_MASK(RS);
-- 
2.47.3


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

* [PATCH 9/9] net/sfc: fix reporting status of autonegotiation to the user
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (7 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 8/9] net/sfc: drop AUTO from FEC capabilities and fix the comment Ivan Malov
@ 2025-12-29 21:35 ` Ivan Malov
  2025-12-31 19:13 ` [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Stephen Hemminger
  9 siblings, 0 replies; 11+ messages in thread
From: Ivan Malov @ 2025-12-29 21:35 UTC (permalink / raw)
  To: dev
  Cc: Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov, stable

Currently, the driver always indicates speed autonegotiation to be enabled,
even when the user has disabled it. Fix the code to report the true status.

Fixes: 886f8d8a05bf ("net/sfc: retrieve link info")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton@amd.com>
---
 drivers/net/sfc/sfc.h        | 2 +-
 drivers/net/sfc/sfc_ethdev.c | 5 +++--
 drivers/net/sfc/sfc_ev.c     | 7 ++++++-
 drivers/net/sfc/sfc_port.c   | 8 +++++---
 drivers/net/sfc/sfc_repr.c   | 2 +-
 5 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index af32ccfaa3..629578549f 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -417,7 +417,7 @@ int sfc_port_configure(struct sfc_adapter *sa);
 void sfc_port_close(struct sfc_adapter *sa);
 int sfc_port_start(struct sfc_adapter *sa);
 void sfc_port_stop(struct sfc_adapter *sa);
-void sfc_port_link_mode_to_info(efx_link_mode_t link_mode,
+void sfc_port_link_mode_to_info(efx_link_mode_t link_mode, uint32_t phy_cap_req,
 				struct rte_eth_link *link_info);
 int sfc_port_update_mac_stats(struct sfc_adapter *sa, boolean_t manual_update);
 int sfc_port_get_mac_stats(struct sfc_adapter *sa, struct rte_eth_xstat *xstats,
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 7c2abaab6b..6be98c49d0 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -262,13 +262,14 @@ sfc_dev_get_rte_link(struct rte_eth_dev *dev, int wait_to_complete,
 	SFC_ASSERT(link != NULL);
 
 	if (sa->state != SFC_ETHDEV_STARTED) {
-		sfc_port_link_mode_to_info(EFX_LINK_UNKNOWN, link);
+		sfc_port_link_mode_to_info(EFX_LINK_UNKNOWN, 0, link);
 	} else if (wait_to_complete) {
 		efx_link_mode_t link_mode;
 
 		if (efx_port_poll(sa->nic, &link_mode) != 0)
 			link_mode = EFX_LINK_UNKNOWN;
-		sfc_port_link_mode_to_info(link_mode, link);
+		sfc_port_link_mode_to_info(link_mode, sa->port.phy_adv_cap,
+					   link);
 	} else {
 		sfc_ev_mgmt_qpoll(sa);
 		rte_eth_linkstatus_get(dev, link);
diff --git a/drivers/net/sfc/sfc_ev.c b/drivers/net/sfc/sfc_ev.c
index 1d1ee0671f..f058b3cb9b 100644
--- a/drivers/net/sfc/sfc_ev.c
+++ b/drivers/net/sfc/sfc_ev.c
@@ -516,7 +516,12 @@ sfc_ev_link_change(void *arg, efx_link_mode_t link_mode)
 	}
 
 decode_comprehensive:
-	sfc_port_link_mode_to_info(link_mode, &new_link);
+	/*
+	 * Reading 'sa->port.phy_adv_cap' without acquiring adaptor lock may
+	 * render autonegotiation status inaccurate, but that's not critical,
+	 * as it's unlikely to happen often and may be a practical trade-off.
+	 */
+	sfc_port_link_mode_to_info(link_mode, sa->port.phy_adv_cap, &new_link);
 
 set:
 	if (rte_eth_linkstatus_set(sa->eth_dev, &new_link) == 0)
diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
index e5a7b8358d..33b53f7ac8 100644
--- a/drivers/net/sfc/sfc_port.c
+++ b/drivers/net/sfc/sfc_port.c
@@ -130,7 +130,8 @@ sfc_port_init_dev_link(struct sfc_adapter *sa)
 	if (rc != 0)
 		return rc;
 
-	sfc_port_link_mode_to_info(link_mode, &current_link);
+	sfc_port_link_mode_to_info(link_mode, sa->port.phy_adv_cap,
+				   &current_link);
 
 	EFX_STATIC_ASSERT(sizeof(*dev_link) == sizeof(rte_atomic64_t));
 	rte_atomic64_set((rte_atomic64_t *)dev_link,
@@ -614,7 +615,7 @@ sfc_set_rx_mode(struct sfc_adapter *sa)
 }
 
 void
-sfc_port_link_mode_to_info(efx_link_mode_t link_mode,
+sfc_port_link_mode_to_info(efx_link_mode_t link_mode, uint32_t phy_cap_req,
 			   struct rte_eth_link *link_info)
 {
 	SFC_ASSERT(link_mode < EFX_LINK_NMODES);
@@ -684,7 +685,8 @@ sfc_port_link_mode_to_info(efx_link_mode_t link_mode,
 		break;
 	}
 
-	link_info->link_autoneg = RTE_ETH_LINK_AUTONEG;
+	if ((phy_cap_req & (1U << EFX_PHY_CAP_AN)) != 0)
+		link_info->link_autoneg = RTE_ETH_LINK_AUTONEG;
 }
 
 int
diff --git a/drivers/net/sfc/sfc_repr.c b/drivers/net/sfc/sfc_repr.c
index 93da97387c..fbb5f58a8e 100644
--- a/drivers/net/sfc/sfc_repr.c
+++ b/drivers/net/sfc/sfc_repr.c
@@ -533,7 +533,7 @@ sfc_repr_dev_link_update(struct rte_eth_dev *dev,
 	struct rte_eth_link link;
 
 	if (sr->state != SFC_ETHDEV_STARTED) {
-		sfc_port_link_mode_to_info(EFX_LINK_UNKNOWN, &link);
+		sfc_port_link_mode_to_info(EFX_LINK_UNKNOWN, 0, &link);
 	} else {
 		memset(&link, 0, sizeof(link));
 		link.link_status = RTE_ETH_LINK_UP;
-- 
2.47.3


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

* Re: [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes
  2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
                   ` (8 preceding siblings ...)
  2025-12-29 21:35 ` [PATCH 9/9] net/sfc: fix reporting status of autonegotiation to the user Ivan Malov
@ 2025-12-31 19:13 ` Stephen Hemminger
  9 siblings, 0 replies; 11+ messages in thread
From: Stephen Hemminger @ 2025-12-31 19:13 UTC (permalink / raw)
  To: Ivan Malov
  Cc: dev, Andrew Rybchenko, Andy Moreton, Pieter Jansen Van Vuuren,
	Viacheslav Galaktionov

On Tue, 30 Dec 2025 01:35:18 +0400
Ivan Malov <ivan.malov@arknetworks.am> wrote:

> The series provides various fixes, primarily for Medford4 support.
> It also fixes a legacy flow control bug; due to hardware constraints
> in the fix, SFN7xxx NICs are now marked as deprecated.
> 
> Andy Moreton (1):
>   common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4
> 
> Ivan Malov (8):
>   doc: remove support for AMD Solarflare SFN7xxx family boards
>   common/sfc_efx/base: fix flow control setting on legacy MCDI
>   common/sfc_efx/base: fix indication of requestable FEC flags
>   common/sfc_efx/base: define mask for pause mode capabilities
>   net/sfc: avoid speed reset when setting FEC in started state
>   net/sfc: rework the capability check that is done on FEC set
>   net/sfc: drop AUTO from FEC capabilities and fix the comment
>   net/sfc: fix reporting status of autonegotiation to the user
> 
>  doc/guides/nics/sfc_efx.rst            |  14 ---
>  doc/guides/rel_notes/release_26_03.rst |   4 +
>  drivers/common/sfc_efx/base/ef10_ev.c  |  41 +++++--
>  drivers/common/sfc_efx/base/ef10_mac.c |  35 ++++--
>  drivers/common/sfc_efx/base/ef10_nic.c |  57 +++++-----
>  drivers/common/sfc_efx/base/efx.h      |   1 +
>  drivers/common/sfc_efx/base/efx_np.c   |   2 +-
>  drivers/net/sfc/sfc.h                  |   2 +-
>  drivers/net/sfc/sfc_ethdev.c           | 141 +++++++++++++++----------
>  drivers/net/sfc/sfc_ev.c               |   7 +-
>  drivers/net/sfc/sfc_port.c             |   8 +-
>  drivers/net/sfc/sfc_repr.c             |   2 +-
>  12 files changed, 193 insertions(+), 121 deletions(-)
> 

Queued to next-net

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

end of thread, other threads:[~2025-12-31 19:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-29 21:35 [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Ivan Malov
2025-12-29 21:35 ` [PATCH 1/9] doc: remove support for AMD Solarflare SFN7xxx family boards Ivan Malov
2025-12-29 21:35 ` [PATCH 2/9] common/sfc_efx/base: fix flow control setting on legacy MCDI Ivan Malov
2025-12-29 21:35 ` [PATCH 3/9] common/sfc_efx/base: fix indication of requestable FEC flags Ivan Malov
2025-12-29 21:35 ` [PATCH 4/9] common/sfc_efx/base: define mask for pause mode capabilities Ivan Malov
2025-12-29 21:35 ` [PATCH 5/9] common/sfc_efx/base: count Rx TRUNC ERR as CRC errors on X4 Ivan Malov
2025-12-29 21:35 ` [PATCH 6/9] net/sfc: avoid speed reset when setting FEC in started state Ivan Malov
2025-12-29 21:35 ` [PATCH 7/9] net/sfc: rework the capability check that is done on FEC set Ivan Malov
2025-12-29 21:35 ` [PATCH 8/9] net/sfc: drop AUTO from FEC capabilities and fix the comment Ivan Malov
2025-12-29 21:35 ` [PATCH 9/9] net/sfc: fix reporting status of autonegotiation to the user Ivan Malov
2025-12-31 19:13 ` [PATCH 0/9] net/sfc: SFN7xxx deprecation and Medford fixes Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).