This series fixes offload capability advertisement, cmdq/compact CQE
configuration, and several defects found during review, and adds NIC
type identification, FEC, CIR drop statistics, VF LAG/link state, COS
mask/map, mbox recording, RSS hash configuration, compact CQE Rx/Tx
paths, TSO segment expansion, Tx burst mode reporting, queue statistics,
pseudo-header checksum, per-tile cmdq ops, SP560 NIC support, and device
kvargs tunables.

Thanks to Stephen Hemminger for the review. The review comments are addressed
in this version, and the changes are listed below.

v5:
- Register hinic3_prep_pkts() in the pseudo-header checksum patch
  instead of the compact CQE Rx patch, so the checksum fix is not dead
  code in the patches in between or in a stable backport of it.
- Mention only SP620 in that commit message, since SP560 support is
  introduced later in the series.
- Document that the RQ CEQ EN bit enables the compact CEQ context when
  SW compact CQE is active and that interrupt delivery is controlled by
  the INTR field, so the feature table and the code agree.
- Drop the per-packet ERR log for a zero tso_segsz; the drop is already
  counted in offload_errors.
- Keep log and error messages on a single line instead of splitting the
  format strings across lines.
- Check the non-TSO packet length before the early return for an
  already-valid SGE count, so a packet longer than the port maximum is
  rejected instead of being sent as is.
- Scale the coalescing parameters by their unit when printing them, so
  the log reports packet counts instead of the raw parameter values.

- Clear the stale Rx hardware CI write-back memory on queue reset to
  fix a pre-existing bug: after a port stop/start the driver took the
  whole ring as completed when the next packet arrived.

v4:
- Move the queue depth and state consistency patch ahead of the TSO
  expansion, so the copy pool is sized from a queue depth that is
  already validated, and keep resetting the cached depth in
  dev_configure().
- Validate the queue depth range before caching it as the first queue
  depth, so an out-of-range nb_desc cannot poison the saved depth and
  make a later valid setup fail the equality check.
- Reorder the series so the pseudo-header checksum fix follows the NIC
  type identification patch it depends on, repairing the bisect break
  in the later Tx/TSO patches.
- Size the TSO copy pool from the cached Tx queue depth and cap each
  queue at 256 mbufs, and start each segment copy at the remaining
  length via rte_pktmbuf_mtod_offset() so a segment spanning several
  copy mbufs is not copied twice.
- Keep the copy mbuf chain consistent: update nb_segs and pkt_len while
  the chain is built, and clear pkt_len on each newly allocated copy
  mbuf rather than on the original one.
- Drop the segment-count check from the transmit path together with the
  HINIC3_TSO_SEG_NUM_INVALID macro: 255 is the WQE buffer descriptor
  limit, not an input segment limit, and segments beyond the non-copy
  window are already compressed into copy mbufs.
- Reject TSO packets whose tso_segsz is zero instead of dividing by it.
- Fix the pseudo-header L4 protocol selection: pass IPPROTO_UDP or
  IPPROTO_TCP directly at each call site instead of testing the TCP
  offload bit, which also matched UDP packets because the UDP flag
  value shares that bit, and use rte_cpu_to_be_32() so the IPv6
  next-header value is placed correctly regardless of host endianness.
- Drop the IPv6 extension-header walk from the pseudo-header
  calculation as requested in review: rte_net_get_ptype() already
  accounts for the extension headers in mbuf->l3_len, so the walk was
  redundant.
- Split the SP230 Rx MSI-X masking out of the interrupt setup so
  dev_start keeps working on igb_uio/uio_pci_generic when Rx interrupts
  are disabled, and advertise full Rx interrupt support in hinic3.ini.
- Validate the VXLAN-GPE mask the same way as GENEVE, rejecting rules
  that match the flags, reserved bits or the next-protocol field, which
  cannot be programmed into the TCAM.
- Validate device kvargs against the accepted key list and parse their
  integer values in base 10, so a leading zero is not taken as an octal
  prefix.
- Program the TX completion index coalescing parameters into the SQ
  context tables: they were accepted as device arguments but the driver
  still programmed the built-in constants.
- Introduce rx_cqe_compact_en in the compact CQE Rx patch rather than in
  the kvargs patch, so every patch that accepts a parameter also makes
  it take effect.
- Remove unused Rx CQE packet-type enumerators, fix the DEAULT/DEFAULT
  typo, drop a duplicated "failed" in two log messages, use { 0 } for
  zero initialization, split over-long lines and repair alignment
  warnings reported by checkpatch.

v3:
- Move the ethertype-flow TCAM index leak fix out of the flow-refactor
  patch into its own patch with a Fixes tag and a stable Cc tag.
- Set burst function pointers and tx_pkt_prepare for both primary and
  secondary processes, and select the Tx path on its own feature bit.
- Zero the RQ/SQ context buffers and honour dp_intr_en for the STN CEQ
  attribute in compact CQE mode.
- Return the number of Tx packets consumed instead of the doorbell
  count, and guard the Tx prefetch against overreading the array.
- Validate device kvargs and reject values above the hardware field
  width; document the real defaults and units.
- Reject mismatched queue depths and reset saved depths in
  dev_configure(), and size the TSO copy pool per port.
- Report FEC capabilities per supported speed regardless of link state.
- Route the private dump through fprintf() on the provided FILE*.
- Derive the pseudo-header L4 protocol from the offload flags and fail
  shared or indirect mbufs; add Fixes and stable Cc tags.
- Drop stable Cc tags where the Fixes target is not in an LTS release
  and remove dead code and unused definitions.

v2:
- Add five bug fixes (SP230 VF PCI device ID, ethertype flow double
  removal, VXLAN VNI spec/mask, vport enable null dereference, and
  secondary-process ethdev ops setup).
- Split NIC type identification into its own patch and drop the mbox
  count telemetry patch.
- Add hinic3.rst and features/hinic3.ini documentation.
- Drop the tx_free_loop and rx_empty_threshold devargs and the Tx/Rx
  spin loops.
- Use the correct GENEVE/VXLAN-GPE flow item types and reject
  unsupported mask fields; reject IP-in-IP rules on SP620.
- Remove QINQ offload advertisement, split link_status and
  vf_valid_status into separate variables, use memcpy for unaligned mbox
  reads, and drop module parameter reads.
- Split the Tx burst patch into focused, self-contained commits for
  queue depth/state consistency, SP230 VF software statistics, Tx burst
  mode reporting, and Tx queue copied-mbuf statistics.
- Reword commit messages with full Fixes hashes and add
  [email protected] Cc tags where the defect exists in a released version.

Signed-off-by: Jiacheng Ye <[email protected]>

Jiacheng Ye (28):
  net/hinic3: fix SP230 VF PCI device ID
  net/hinic3: fix double removal in ethertype flow destroy
  net/hinic3: fix TCAM index leak on ethertype flow set
  net/hinic3: fix VXLAN VNI spec and mask write
  net/hinic3: fix vport enable null dereference
  net/hinic3: clear stale Rx hardware CI on queue reset
  net/hinic3: attach ethdev and set ops in secondary process
  net/hinic3: add NIC type identification
  net/hinic3: fix pseudo-header checksum calculation
  net/hinic3: add SP230 Rx queue interrupt handling
  net/hinic3: fix offload and cmdq/compact CQE config
  net/hinic3: add CIR drop statistics and VF LAG support
  net/hinic3: add FEC mode get/set and capability support
  net/hinic3: add mbox message recording and debug dump
  net/hinic3: add COS mask and COS map support
  net/hinic3: add VF link state and promiscuous support
  net/hinic3: convert cmdq ops to static global variables
  net/hinic3: update RSS hash type configuration
  net/hinic3: refactor flow rule parsing
  net/hinic3: add SP560 NIC type identification and handling
  net/hinic3: add device kvargs parameters support
  net/hinic3: add compact CQE Rx path and ptype table
  net/hinic3: ensure queue depth and state consistency
  net/hinic3: expand TSO from 127 to 255 segments
  net/hinic3: split Tx burst function for compact CQE support
  net/hinic3: add SP230 VF software statistics
  net/hinic3: add Tx burst mode get
  net/hinic3: expose Tx queue copied-mbuf statistics

 .mailmap                                      |    1 +
 doc/guides/nics/features/hinic3.ini           |    4 +
 doc/guides/nics/hinic3.rst                    |   24 +-
 doc/guides/rel_notes/release_26_11.rst        |   13 +
 drivers/net/hinic3/base/hinic3_cmd.h          |    2 +
 drivers/net/hinic3/base/hinic3_csr.h          |    6 +-
 drivers/net/hinic3/base/hinic3_eqs.c          |   65 +-
 drivers/net/hinic3/base/hinic3_eqs.h          |    6 +-
 drivers/net/hinic3/base/hinic3_hw_cfg.c       |    2 +
 drivers/net/hinic3/base/hinic3_hw_cfg.h       |    8 +-
 drivers/net/hinic3/base/hinic3_hw_comm.c      |    9 +-
 drivers/net/hinic3/base/hinic3_hwdev.h        |    3 +-
 drivers/net/hinic3/base/hinic3_hwif.c         |    4 +-
 drivers/net/hinic3/base/hinic3_mbox.c         |   45 +
 drivers/net/hinic3/base/hinic3_mbox.h         |   19 +
 drivers/net/hinic3/base/hinic3_nic_cfg.c      |  191 ++-
 drivers/net/hinic3/base/hinic3_nic_cfg.h      |  105 +-
 drivers/net/hinic3/base/hinic3_nic_event.c    |   68 +-
 drivers/net/hinic3/hinic3_ethdev.c            |  816 +++++++++++--
 drivers/net/hinic3/hinic3_ethdev.h            |   55 +-
 drivers/net/hinic3/hinic3_fdir.c              |   39 +-
 drivers/net/hinic3/hinic3_fdir.h              |    8 +-
 drivers/net/hinic3/hinic3_flow.c              |  585 +++++++---
 drivers/net/hinic3/hinic3_flow.h              |  196 ----
 drivers/net/hinic3/hinic3_nic_io.c            |  157 +--
 drivers/net/hinic3/hinic3_nic_io.h            |   98 ++
 drivers/net/hinic3/hinic3_rx.c                |  619 ++++++++--
 drivers/net/hinic3/hinic3_rx.h                |  203 ++--
 drivers/net/hinic3/hinic3_tx.c                | 1020 +++++++++++++----
 drivers/net/hinic3/hinic3_tx.h                |   53 +-
 .../net/hinic3/htn_adapt/hinic3_htn_cmdq.c    |   65 +-
 .../net/hinic3/htn_adapt/hinic3_htn_cmdq.h    |    6 +-
 .../net/hinic3/stn_adapt/hinic3_stn_cmdq.c    |   76 +-
 .../net/hinic3/stn_adapt/hinic3_stn_cmdq.h    |    6 +-
 34 files changed, 3434 insertions(+), 1143 deletions(-)
 delete mode 100644 drivers/net/hinic3/hinic3_flow.h

-- 
2.33.0

Reply via email to