RE: [PATCH v4 00/14] net/enetc: add new features for ENETC4 on i.MX95
Gagandeep Singh <[email protected]>
| Newsgroups | org.dpdk.dev |
|---|---|
| Message-ID | <AMBPR04MB1228184B4EB17FB1F84CB224FE1DE2@AMBPR04MB12281.eurprd04.prod.outlook.com> |
Hi > -----Original Message----- > From: Stephen Hemminger <[email protected]> > Sent: Monday, August 10, 2026 2:30 AM > To: Gagandeep Singh <[email protected]> > Cc: [email protected]; Hemant Agrawal <[email protected]> > Subject: Re: [PATCH v4 00/14] net/enetc: add new features for ENETC4 on i.MX95 > > On Fri, 7 Aug 2026 16:56:09 +0530 > Gagandeep Singh <[email protected]> wrote: > > > V4-changes: > > - fix doc build issue: WARNING: undefined label: pmd_build_and_test > > > > v3-changes: > > - fix doc build issue. > > - fix compilation issue on fedore:43-gcc-minsize > > > > V2-changes: > > - compilation fixes. > > > > V1-changes: > > This series adds new PMD features to the ENETC4 driver targeting the > > NXP i.MX95 NETC IP. > > > > The series covers: > > > > - KEEP_CRC Rx offload: preserve the Ethernet FCS in the receive buffer. > > - TSO: TCP Segmentation Offload for the VF Tx path. > > - RSC/LRO: hardware Receive Segment Coalesce for PF and VF Rx paths. > > - Link speed code: extend the PF-to-VF mailbox field from 4-bit to > > 8-bit to support speeds beyond 10G. > > - Firmware version: report the NETC IP version via fw_version_get. > > - Register dump: dump SI, port (PF) and BD ring registers. > > - Ring parameters: implement rxq_info_get / txq_info_get for the VF. > > - Link-up interrupt: refresh the cached link speed on each VF link-up > > interrupt so that link_update returns the current speed immediately. > > - Stats reset: software snapshot/delta approach for VF counter reset. > > - Per-queue Rx interrupt: MSI-X per-queue Rx interrupts for the VF, > > enabling interrupt-driven receive with l3fwd-power. > > - SI VLAN: hardware port VLAN insertion/removal for PF and VF. > > - VF link status bitmask: switch VF link status to bitmask encoding > > to align with the PF and newer kernel driver conventions. > > - TX PAUSE: VF sets Rx congestion mode when the PF signals TX PAUSE > > negotiated on the wire; adds Flow control = Y to enetc4.ini. > > - WRR Tx scheduler: per-ring WRR weights via enetc4_txq_wrr devarg. > > > > Gagandeep Singh (14): > > net/enetc: add KEEP_CRC offload support for ENETC4 > > net/enetc: add TSO support for ENETC4 VF > > net/enetc: add RSC (hardware LRO) support for ENETC4 > > net/enetc: extend link speed code field to 8-bit for PF-to-VF message > > net/enetc: support firmware version get for VF > > net/enetc: support registers dump > > net/enetc: support ethtool ring parameters > > net/enetc: refresh link speed on VF link-up interrupt > > net/enetc: support stats reset for VF > > net/enetc4: add per-queue Rx interrupt support for VF > > net/enetc4: add SI-based port VLAN insertion and removal > > net/enetc4: update VF link status to bitmask encoding > > net/enetc4: enable TX PAUSE via VF RX congestion mode > > net/enetc4: add WRR Tx scheduler devarg for VF rings > > > > doc/guides/nics/enetc4.rst | 77 +++ > > doc/guides/nics/features/enetc4.ini | 8 + > > doc/guides/rel_notes/release_26_11.rst | 19 + > > drivers/net/enetc/base/enetc4_hw.h | 129 +++- > > drivers/net/enetc/base/enetc_hw.h | 6 + > > drivers/net/enetc/enetc.h | 135 ++++- > > drivers/net/enetc/enetc4_ethdev.c | 402 +++++++++++-- > > drivers/net/enetc/enetc4_vf.c | 779 ++++++++++++++++++++++--- > > drivers/net/enetc/enetc_rxtx.c | 529 ++++++++++++++++- > > 9 files changed, 1939 insertions(+), 145 deletions(-) > > > > Still lots of issues, the biggest one is that not each patch builds; not bisectable. > > More extensive AI review. > > ENETC4 v4 series review - 14 patches > > No Reviewed-by. The headline finding from the previous round is > unchanged: 13 of the 14 commits fail to build. Only the final commit is clean, so > git bisect is broken across essentially the whole series. > > Build (applied on c1a46b9, gcc 13.3, -Dwerror=true): > > [1] 8a0a793 01/14 add KEEP_CRC offload support for ENETC4 > [1] 63cae7e 02/14 add TSO support for ENETC4 VF > [1] b28e1a8 03/14 add RSC (hardware LRO) support > ... all fail ... > [1] e334f6c 13/14 enable TX PAUSE via VF RX congestion mode > [0] b5e71d6 14/14 add WRR Tx scheduler devarg for VF rings > > Three distinct causes, all introduced in patch 01. > > > Patch 01 > > Error: prev_seg used but never declared (fails commits 01-02). > > enetc_rxtx.c:597:25: error: 'prev_seg' undeclared > enetc_rxtx.c:844:25: error: 'prev_seg' undeclared > > Patch 01 assigns prev_seg and passes it to enetc_rx_crc_trim() in both > enetc_clean_rx_ring_nc() and enetc_clean_rx_ring_cacheable(), but the > declaration hunk only changes first_seg/cur_seg to = NULL. The *prev_seg = > NULL declaration does not arrive until patch 03. Move it to patch 01. > > Error: duplicate offload arrays (fails commits 01-13). > > enetc4_ethdev.c:110:17: error: redefinition of 'dev_rx_offloads_sup' > enetc4_ethdev.c:117:17: error: redefinition of 'dev_tx_offloads_sup' > > Patch 01 adds a second copy of both arrays at the top of enetc4_ethdev.c; the > pre-existing ones near line 97 are not deleted until patch 14. The deletion hunk > belongs in patch 01. > > Error: duplicate rx_enable declaration (fails commits 01-13). > > enetc4_ethdev.c:552:18: error: redeclaration of 'rx_enable' with no > linkage > > enetc4_rx_queue_setup() already declares uint32_t rx_enable upstream. > Patch 01 adds a second one; the removal is in patch 14. > > This is the signature of building only the squashed series. Please run > devtools/test-meson-builds.sh, or at minimum a -Dwerror=true build at each > commit, before v5. > > Error: PF loses Scattered Rx and Multi-segment Tx. > > The old arrays deleted in patch 14 contained RTE_ETH_RX_OFFLOAD_SCATTER > and RTE_ETH_TX_OFFLOAD_MULTI_SEGS. The replacements added in patch 01 > do not. Net result at the tip: > > upstream after the series > RX: IPV4|UDP|TCP|SCATTER RX: IPV4|UDP|TCP|KEEP_CRC|TCP_LRO > TX: IPV4|UDP|TCP|MULTI_SEGS TX: IPV4|UDP|TCP|TCP_TSO|UDP_TSO > > Nothing in any commit message says this is intentional. enetc4.ini still declares > "Scattered Rx = Y", and the new RSC path builds multi-segment clusters, so the > capability is still needed. The VF arrays keep both - only the PF regresses. > > > Patch 02 > > Error: mbuf leak in enetc_xmit_pkts_lso(). > > Two validation paths drop a TSO frame with "start++; continue;": > > - hdr_len >= pkt_len || hdr_len > data_len > - tso_segsz == 0 || data_unit > ENETC4_LSO_MAX_DATA_UNIT || > hdr_len + tso_segsz > ENETC4_LSO_MAX_FRAME > > Neither writes q_swbd[i].buffer_addr, and neither frees the mbuf, but both count > the packet in the burst return value. The application considers it transmitted; > enetc_clean_tx_ring() never sees it. > Free-and-continue is the right shape here - add rte_pktmbuf_free(seg) before > each start++. > > Error: 16-bit byte swap on a uint8_t field. > > In the non-TSO path of the same function: > > txbd->flags |= rte_cpu_to_le_16(ENETC4_TXBD_FLAGS_F); > > struct enetc_tx_bd.flags is uint8_t. On big-endian this evaluates to > 0x8000 and truncates to 0, so the frame-last flag is never set and Tx stalls. > Upstream and the LSO path in this very function both use plain "txbd->flags |= > ENETC4_TXBD_FLAGS_F;". Drop the conversion. > > Warning: ring doubling bypasses MAX_BD_COUNT. > > Both enetc4_alloc_txbdr() (LSO, patch 02) and enetc4_alloc_rxbdr() (RSC, patch > 03) double nb_desc, but the nb_desc > MAX_BD_COUNT check runs before the > doubling. With MAX_BD_COUNT at 64000 the effective ring reaches 128000 > descriptors, and ENETC_RTBLENR_LEN(n) is just > ((n) & ~0x7) with no upper clamp. Validate the post-doubling count, or halve the > accepted nb_desc when LSO/RSC is on. > > > Patch 04 > > Warning: link speed decode has no upper bound. > > link.link_speed = (reply_msg->status - ENETC_SPEED_5000) * 1000 + 5000; > > status is uint8_t and the default arm now catches everything from 8 to 255, so a > garbage or unrecognized code yields a fabricated speed (0xFF -> 253000 Mbps) > rather than RTE_ETH_SPEED_NUM_UNKNOWN. Note also that 0xF, previously > ENETC_SPEED_NOT_SUPPORTED, now decodes as 13000 Mbps in non-legacy > mode. Bound the result, or reject codes that do not map to a defined > RTE_ETH_SPEED_NUM_* value. > > Warning: flipping the reply-status extraction from 4-bit to 8-bit by default is a > wire-protocol compatibility break. Users on a PF kernel older than 6.18.37 must > add vf_link_legacy=1 or link reporting breaks silently. That deserves an explicit > line in the release notes, not just "extended the field to 8-bit". > > Info: adds a second #include <rte_kvargs.h> immediately below the existing one. > > > Series-wide > > Warning: mailbox ops added to the no-VSI ops table. > > enetc4_vf_ops_no_vsi_m is selected when the user passes enetc4_vsi_disable, > that is, explicitly asks for no VSI-PSI messaging. > The series adds fw_version_get, mac_addr_set, mac_addr_add, promiscuous_*, > allmulticast_*, vlan_filter_set, vlan_offload_set, vlan_pvid_set and stats_reset to > it. Most of those reach > enetc4_msg_vsi_send() directly or through a helper, so they will now attempt a > transaction on the disabled mailbox and stall until vsi_timeout. Previously ethdev > returned -ENOTSUP immediately. Only the genuinely register-local ops (get_reg, > rxq_info_get, txq_info_get, and stats_reset if it stays direct-register) belong in that > table. > > Warning: new devargs undocumented. > > vf_link_legacy (patch 04) and enetc4_txq_wrr (patch 14) are both in > RTE_PMD_REGISTER_PARAM_STRING but absent from > doc/guides/nics/enetc4.rst, which documents every pre-existing devarg. > Same gap flagged in the previous round. > > Info: patch 01 adds two stray blank lines in enetc4_ethdev.c (one before > enetc4_rx_queue_release, later removed in patch 03); patch 02 adds three more > around enetc4_alloc_txbdr/enetc4_free_bdr and in struct enetc_bdr. > > Info: enetc_recv_pkts_rsc is assigned to dev->rx_pkt_burst from > enetc4_rx_queue_setup(), which will silently override the nc=1 burst selection > made in dev_init. Worth a guard or at least a comment on precedence. > > I stopped short of a full read of patches 05-14 since the build breakage has to be > resolved first and several of these findings will shift hunks around. I can go back > through 05-14 in detail once there is a v5, or now if you would rather have the > complete list before the author respins. V5 sent. I missed to mention V5-changes in the cover letter. The changes are: - Patch 1 Build fixes which includes: 'prev_seg' undeclared fixed. redefinition of 'dev_rx_offloads_sup' fixed. Error: duplicate rx_enable declaration fixed. PF loses Scattered Rx and Multi-segment Tx - mbuf leak in enetc_xmit_pkts_lso() fixed. - fixed conversion on ENETC4_TXBD_FLAGS_F issue. - fixed link speed decode has no upper bound. - fixed mailbox ops added to the no-VSI ops table. - new devargs documented. Regards, Gagan