Hi,

NXP Confidential
> -----Original Message-----
> From: Stephen Hemminger <[email protected]>
> Sent: Friday, August 21, 2026 9:19 PM
> To: Gagandeep Singh <[email protected]>
> Cc: [email protected]; Hemant Agrawal <[email protected]>
> Subject: Re: [PATCH v12 00/15] et/enetc: add new features for ENETC4 on i.MX95
>
> On Fri, 21 Aug 2026 11:26:28 +0530
> Gagandeep Singh <[email protected]> wrote:
>
> > V12-Changes:
> >  - Fixed documentation for:
> >    - missing double quotes for enetc4_txq_prior
> >    - In accurate comment related to secondary process burst functions.
> >    - Added a note related to LRO and its BD size chosen.
> >  - Fixed secondary process burst functions selection.
> >  - Removed "Unicast MAC filter" from vf, but comment regarding "RSS
> >    hash" is false positive as or RSS hash, the only mandatory
> >    requirement is `[provides] rte_eth_dev_info: flow_type_rss_offloads
> >    , which the VF sets in enetc4_vf_dev_infos_get
> >    (`dev_info->flow_type_rss_offloads = ENETC_RSS_OFFLOAD_ALL`).
> >  - Fixed lro and scattered_rx configuration by enabling only after
> >    rsc_enable branch.
> >
> > V11-Changes:
> >  - Added enetc4_vf.ini for VF only features.
> >  - Fixed the secondary-process guards leave the burst function
> >    pointers NULL
> >  - Fixed rxq_info_get and txq_info_get report the doubled ring size
> >  - Move the VFs only features to enetc4_vf.ini
> >  - Setting the dev->data->lro
> >  - Added a comment to use devargs to change delay and timeout to process
> >    PSI message to avoid any interrupts stall.
> >  - Fixed link_update() now rewrites RBMR on every Rx ring.
> >  - Regestering - enetc4_txq_wr in VF
> >  - Updated enetc4_rd64 with re-read to confirm the correctness.
> >  - Removed the dead code and un-used macros.
> >  - Added Vlan check for maximum allowed value.
> >  - fixed pre-existing ring write function for TX path.
> >
> > V10-Changes:
> >  - Fixed enetc4_txq_prior and enetc4_txq_wrr have no effect at queue
> >    setup issue.
> >  - Updated ENETC_CLASS_ID_SI_VLAN_ISO reply check.
> >  - Updated enetc4.ini for VLAN offload.
> >  - Added else part for burst functions selection for RSC and TSO.
> >  - Updated enetc4_rd64()
> >  - Fixed RBICR0 issue.
> >  - Removed GENMASK.
> >
> > V9-Changes:
> >  - Mid-body variable declaration moved to top of the function.
> >  - ret=0 dead code is removed.
> >  - Added check on return value of rte_intr_callback_unregister()
> >  - The pre-existing reply_msg leak fixed.
> >  - Added primary-process guard in enetc4_vf_dev_init
> >  - Removed Flow control from enetc4.ini
> >  - Fixed VF stats_reset baseline underflows on counter wrap
> >  - Fixed VF vlan_pvid_set fails on every successful command
> >
> > V8-changes:
> >  - Fixed Warning RBMR RMW races between threads by adding lock
> >  - Fixed `static const` arrays in `enetc.h`
> >  - Proper pthread_mutexattr_t initialization added as suggested by AI
> >  - VSIMSGSR stale re-read race is eliminated
> >
> > V7-changes:
> >  - added missing 14th patch.
> >
> > V6-changes:
> >  - fixed free() on memory allocated with rte_zmalloc().
> >  - fixed eventfd and vector-list leak on interrupt teardown
> >  - fixed Rx ring doubling still bypasses
> >  - fixed VSI-PSI transaction issued from the interrupt handler
> >  - fixed the free-and-reallocate of msg is unnecessary churn
> >  - fixed unsynchronized access to tx_pause_active and RBMR
> >  - fixed signed shift overflow in the register-dump version field
> >  - fixed the fw_size == 0 early return reports the length of "0.0"
> >  - unwanted blank lines removed.
> >  - parse_txq_prior() returns updated.
> >
> > V5-changes:
> >  - 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.
> >
> > 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 (15):
> >   net/enetc: add keep-CRC Rx offload for ENETC4
> >   net/enetc: add TSO support for ENETC4 VF
> >   net/enetc: add RSC (hardware LRO) support for ENETC4
> >   net/enetc: extend PF-VF link speed field to 8 bits
> >   net/enetc: add VF supported features file
> >   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
> >
> >  MAINTAINERS                            |   1 +
> >  doc/guides/nics/enetc4.rst             | 114 ++-
> >  doc/guides/nics/features/enetc4.ini    |   4 +
> >  doc/guides/nics/features/enetc4_vf.ini |  28 +
> > doc/guides/rel_notes/release_26_11.rst |  21 +
> >  drivers/net/enetc/base/enetc4_hw.h     | 148 +++-
> >  drivers/net/enetc/base/enetc_hw.h      |   6 +
> >  drivers/net/enetc/enetc.h              | 133 +++-
> >  drivers/net/enetc/enetc4_ethdev.c      | 527 ++++++++++++--
> >  drivers/net/enetc/enetc4_vf.c          | 928 ++++++++++++++++++++++---
> >  drivers/net/enetc/enetc_rxtx.c         | 530 +++++++++++++-
> >  11 files changed, 2254 insertions(+), 186 deletions(-)  create mode
> > 100644 doc/guides/nics/features/enetc4_vf.ini
> >
>
> Much better, really close. I apologize for the AI review being so long 
> winded, but
> what is complaining about now looks valid.
>
> ENETC4 v11 series review - 15 patches
>
> No Reviewed-by, but this is close.  Everything reported against v10 is 
> addressed
> and nothing new is broken; what remains is four documentation/state-hygiene
> warnings and no errors.  Applied cleanly onto c1a46b9.  Built this time: full 
> driver
> build with -Dwerror=true -Denable_drivers=common/dpaax,bus/pci,bus/vdev,
> mempool/ring,net/enetc is clean, and all five enetc translation units compile 
> with
> no diagnostics at every one of the 15 commits, so the series bisects.
>
>
> Fixed from v10
>
> The features matrix is split.  enetc4_vf.ini is a new file added in patch 05 
> with only
> the entries that hold at that point; FW version, Registers dump and Rx 
> interrupt
> are added by the later patches that implement them, so doc and code land
> together.  "Rx interrupt" and "FW version" are out of enetc4.ini, and
> MAINTAINERS covers the new file.
>
> rxq_info_get and txq_info_get divide by two when rsc_enable / lso_enable is 
> set,
> so the application gets back the descriptor count it asked for.  
> enetc4_rd64() reads
> high / low / high again and retries on a carry.  enetc4_dev_configure() 
> resets the
> Tx rings with
> enetc4_txbdr_wr() instead of enetc4_rxbdr_wr(), which also fixes the 
> pre-existing
> bug where the Tx rings were never reset.
> enetc4_vf_set_congestion_mode() returns early when tx_pause_active already
> matches, so link_update() no longer rewrites RBMR on every poll.  Both pvid
> setters range-check vlan_id.  enetc4_txq_prior and enetc4_txq_wrr are in the 
> VF
> param string.  ENETC4_TXBD_EXT_FLAGS_F and ENETC_SPEED_MAX are gone,
> the rsc_size == 0 fallback is gone, and the BDR register arrays carry explicit
> dimensions in both the declaration and the definition so a drift becomes a 
> compile
> error.
>
> ENETC_CLASS_ID_SI_VLAN_ISO is out of the enetc4_msg_vsi_send() whitelist,
> which is now consistent with the reply handling in
> enetc4_vf_vlan_pvid_set() and with your explanation that 0x24 is never echoed
> back.
>
> The 200 ms interrupt-thread stall is documented rather than changed.
> That is a reasonable call, and the devarg names in the new comment
> ("enetc4_vsi_timeout", "enetc4_vsi_delay") do match the macros, so the advice
> is actionable.
>
> RSC now refuses to start unless the application asked for
> RTE_ETH_RX_OFFLOAD_SCATTER, and sets dev->data->lro and
> dev->data->scattered_rx.  That closes the gap where the driver built
> multi-segment clusters for an application that had not opted in.
>
>
> Warnings
>
> Patch 09 - the secondary-process burst pointers still do not match what the
> primary is running.
>
> The NULL dereference is gone, which was the point.  But both branches hardcode
> enetc_recv_pkts_cacheable / enetc_xmit_pkts_cacheable, and the comment
> claims this "matches the pre-guard behaviour where
> enetc4_dev_hw_init() set these defaults in both processes".  It does
> not: dev_hw_init() parses the nc devarg and switches to enetc_recv_pkts_nc /
> enetc_xmit_pkts_nc when nc_mode is set, and the guard returns before that.
>
> For nc the mismatch is the harmless direction.  For RSC and LSO it is
> not: those rings are 2 slots per descriptor, and a secondary polling one with 
> the
> 16-byte-stride cacheable burst reads the extension half as a descriptor.  
> That is
> silent garbage rather than a crash.
>
> hw->nc_mode lives in dev_private, which is shared, so the secondary can
> at least honour it.  RSC and LSO cannot be resolved at probe time, since they
> come from offloads chosen later by the primary.  If multi-process is meant to
> work here, the burst selection needs to happen after the primary has 
> configured;
> if it is not, saying so in enetc4.rst and rejecting LRO/TSO in that case 
> would be
> clearer than handing the secondary a burst function for the wrong ring layout.
>
> Patch 03 - the new RSC restrictions are not in enetc4.rst.
>
> enetc4_rx_queue_setup() now returns -EINVAL for LRO in three cases:
> with KEEP_CRC, with nc=1, and without RTE_ETH_RX_OFFLOAD_SCATTER.  The
> guide documents only the first.  An application that enables LRO without 
> SCATTER
> now fails queue setup with no hint in the docs; both of the new conditions 
> belong
> in the LRO bullet next to the FCS one.
>
> Patch 03 - dev->data->lro and dev->data->scattered_rx are set but never 
> cleared.
>
> Both are assigned 1 in enetc4_rx_queue_setup() when RSC is on, and nothing
> assigns 0 anywhere.  After dev_stop plus a reconfigure without LRO, they keep
> the stale value, so rxq_info_get() reports scattered_rx = 1 on a 
> non-scattered ring
> and telemetry reports lro = 1 for a port that is not doing LRO.  Assign from
> rsc_enable unconditionally rather than only in the rsc_enable branch, or clear
> both in dev_configure().
>
> Patch 05 - two entries in the new enetc4_vf.ini do not hold.
>
> "Unicast MAC filter" requires mac_addr_set, mac_addr_add and
> mac_addr_remove per features.rst; enetc4_vf_ops has the first two and no
> mac_addr_remove.  "RSS hash" lists offloads:RTE_ETH_RX_OFFLOAD_RSS_HASH,
> which is not in the VF dev_rx_offloads_sup, though flow_type_rss_offloads is
> provided.  Both were inherited from enetc4.ini, so they are not new claims, 
> but a
> new file is the right moment to drop the ones that do not match.
>
>
> Info
>
> doc/guides/nics/enetc4.rst line 167 still has
>
>   dpdk-testpmd -a 0000:00:00.0,enetc4_txq_prior=1|2|3 -- -i
>
> Unquoted, the shell reads the pipes as a pipeline.  Pre-existing, but the
> enetc4_txq_wrr example added twelve lines below quotes its value, so the two
> now disagree on the same page.

AI comments are on V11 series, can you please check? I have fixed the V11 
issues in V12.

Reply via email to