Re: [PATCH v19 00/13] net/sxe: added Linkdata sxe ethernet driver

Stephen Hemminger
2026-03-22T16:38:05Z

On Sat, 14 Mar 2026 16:51:52 +0800
liujie5@linkdatatechnology.com wrote:

> From: Jie Liu <liujie5@linkdatatechnology.com>
>
> This patch set implements core functionality for the SXE PMD,
> including basic driver framework, data path setup, and advanced
> offload features (VLAN, RSS, DCB, PTP etc.).
>
> V19:
> - Addressed AI comments
>
> v18:
> - Addressed AI comments
>
> Jie Liu (13):
> net/sxe: add base driver directory and doc
> net/sxe: add ethdev probe and remove
> net/sxe: add tx rx setup and data path
> net/sxe: add link and mac layer operations
> net/sxe: support vlan filter
> net/sxe: add filter function
> net/sxe: support rss offload
> net/sxe: add dcb function
> net/sxe: support ptp
> net/sxe: add xstats function
> net/sxe: add custom cmd led ctrl
> net/sxe: add simd function
> net/sxe: add virtual function
>
> MAINTAINERS | 6 +
> doc/guides/nics/features/sxe.ini | 51 +
> doc/guides/nics/features/sxe_vf.ini | 37 +
> doc/guides/nics/index.rst | 1 +
> doc/guides/nics/sxe.rst | 71 +
> doc/guides/rel_notes/release_26_03.rst | 6 +
> drivers/net/meson.build | 1 +
> drivers/net/sxe/base/sxe_common.c | 45 +
> drivers/net/sxe/base/sxe_common.h | 13 +
> drivers/net/sxe/base/sxe_compat_platform.h | 73 +
> drivers/net/sxe/base/sxe_compat_version.h | 34 +
> drivers/net/sxe/base/sxe_errno.h | 61 +
> drivers/net/sxe/base/sxe_hw.c | 3271 ++++++++++++++++++++
> drivers/net/sxe/base/sxe_hw.h | 1010 ++++++
> drivers/net/sxe/base/sxe_logs.h | 105 +
> drivers/net/sxe/base/sxe_offload_common.c | 54 +
> drivers/net/sxe/base/sxe_offload_common.h | 14 +
> drivers/net/sxe/base/sxe_queue_common.c | 450 +++
> drivers/net/sxe/base/sxe_queue_common.h | 240 ++
> drivers/net/sxe/base/sxe_rx_common.c | 358 +++
> drivers/net/sxe/base/sxe_rx_common.h | 17 +
> drivers/net/sxe/base/sxe_tx_common.c | 40 +
> drivers/net/sxe/base/sxe_tx_common.h | 12 +
> drivers/net/sxe/base/sxe_types.h | 40 +
> drivers/net/sxe/base/sxevf_hw.c | 819 +++++
> drivers/net/sxe/base/sxevf_hw.h | 318 ++
> drivers/net/sxe/base/sxevf_regs.h | 119 +
> drivers/net/sxe/include/drv_msg.h | 18 +
> drivers/net/sxe/include/sxe/sxe_cli.h | 218 ++
> drivers/net/sxe/include/sxe/sxe_hdc.h | 43 +
> drivers/net/sxe/include/sxe/sxe_ioctl.h | 21 +
> drivers/net/sxe/include/sxe/sxe_msg.h | 135 +
> drivers/net/sxe/include/sxe/sxe_regs.h | 1270 ++++++++
> drivers/net/sxe/include/sxe_type.h | 795 +++++
> drivers/net/sxe/include/sxe_version.h | 29 +
> drivers/net/sxe/meson.build | 65 +
> drivers/net/sxe/pf/rte_pmd_sxe.h | 19 +
> drivers/net/sxe/pf/sxe.h | 93 +
> drivers/net/sxe/pf/sxe_dcb.c | 945 ++++++
> drivers/net/sxe/pf/sxe_dcb.h | 99 +
> drivers/net/sxe/pf/sxe_ethdev.c | 928 ++++++
> drivers/net/sxe/pf/sxe_ethdev.h | 28 +
> drivers/net/sxe/pf/sxe_filter.c | 923 ++++++
> drivers/net/sxe/pf/sxe_filter.h | 109 +
> drivers/net/sxe/pf/sxe_flow_ctrl.c | 98 +
> drivers/net/sxe/pf/sxe_flow_ctrl.h | 16 +
> drivers/net/sxe/pf/sxe_irq.c | 516 +++
> drivers/net/sxe/pf/sxe_irq.h | 48 +
> drivers/net/sxe/pf/sxe_main.c | 196 ++
> drivers/net/sxe/pf/sxe_offload.c | 336 ++
> drivers/net/sxe/pf/sxe_offload.h | 51 +
> drivers/net/sxe/pf/sxe_phy.c | 953 ++++++
> drivers/net/sxe/pf/sxe_phy.h | 117 +
> drivers/net/sxe/pf/sxe_pmd_hdc.c | 661 ++++
> drivers/net/sxe/pf/sxe_pmd_hdc.h | 42 +
> drivers/net/sxe/pf/sxe_ptp.c | 209 ++
> drivers/net/sxe/pf/sxe_ptp.h | 26 +
> drivers/net/sxe/pf/sxe_queue.c | 774 +++++
> drivers/net/sxe/pf/sxe_queue.h | 132 +
> drivers/net/sxe/pf/sxe_rx.c | 1459 +++++++++
> drivers/net/sxe/pf/sxe_rx.h | 188 ++
> drivers/net/sxe/pf/sxe_stats.c | 586 ++++
> drivers/net/sxe/pf/sxe_stats.h | 69 +
> drivers/net/sxe/pf/sxe_tx.c | 1051 +++++++
> drivers/net/sxe/pf/sxe_tx.h | 50 +
> drivers/net/sxe/pf/sxe_vec_common.h | 321 ++
> drivers/net/sxe/pf/sxe_vec_neon.c | 600 ++++
> drivers/net/sxe/pf/sxe_vec_sse.c | 622 ++++
> drivers/net/sxe/pf/sxe_vf.c | 1199 +++++++
> drivers/net/sxe/pf/sxe_vf.h | 200 ++
> drivers/net/sxe/sxe_drv_type.h | 15 +
> drivers/net/sxe/sxe_testpmd.c | 196 ++
> drivers/net/sxe/vf/sxevf.h | 42 +
> drivers/net/sxe/vf/sxevf_ethdev.c | 752 +++++
> drivers/net/sxe/vf/sxevf_ethdev.h | 16 +
> drivers/net/sxe/vf/sxevf_filter.c | 493 +++
> drivers/net/sxe/vf/sxevf_filter.h | 70 +
> drivers/net/sxe/vf/sxevf_irq.c | 432 +++
> drivers/net/sxe/vf/sxevf_irq.h | 34 +
> drivers/net/sxe/vf/sxevf_main.c | 82 +
> drivers/net/sxe/vf/sxevf_msg.c | 624 ++++
> drivers/net/sxe/vf/sxevf_msg.h | 201 ++
> drivers/net/sxe/vf/sxevf_offload.c | 30 +
> drivers/net/sxe/vf/sxevf_offload.h | 16 +
> drivers/net/sxe/vf/sxevf_queue.c | 208 ++
> drivers/net/sxe/vf/sxevf_queue.h | 69 +
> drivers/net/sxe/vf/sxevf_rx.c | 162 +
> drivers/net/sxe/vf/sxevf_rx.h | 18 +
> drivers/net/sxe/vf/sxevf_stats.c | 162 +
> drivers/net/sxe/vf/sxevf_stats.h | 31 +
> drivers/net/sxe/vf/sxevf_tx.c | 46 +
> drivers/net/sxe/vf/sxevf_tx.h | 14 +
> 92 files changed, 27237 insertions(+)
> create mode 100644 doc/guides/nics/features/sxe.ini
> create mode 100644 doc/guides/nics/features/sxe_vf.ini
> create mode 100644 doc/guides/nics/sxe.rst
> create mode 100644 drivers/net/sxe/base/sxe_common.c
> create mode 100644 drivers/net/sxe/base/sxe_common.h
> create mode 100644 drivers/net/sxe/base/sxe_compat_platform.h
> create mode 100644 drivers/net/sxe/base/sxe_compat_version.h
> create mode 100644 drivers/net/sxe/base/sxe_errno.h
> create mode 100644 drivers/net/sxe/base/sxe_hw.c
> create mode 100644 drivers/net/sxe/base/sxe_hw.h
> create mode 100644 drivers/net/sxe/base/sxe_logs.h
> create mode 100644 drivers/net/sxe/base/sxe_offload_common.c
> create mode 100644 drivers/net/sxe/base/sxe_offload_common.h
> create mode 100644 drivers/net/sxe/base/sxe_queue_common.c
> create mode 100644 drivers/net/sxe/base/sxe_queue_common.h
> create mode 100644 drivers/net/sxe/base/sxe_rx_common.c
> create mode 100644 drivers/net/sxe/base/sxe_rx_common.h
> create mode 100644 drivers/net/sxe/base/sxe_tx_common.c
> create mode 100644 drivers/net/sxe/base/sxe_tx_common.h
> create mode 100644 drivers/net/sxe/base/sxe_types.h
> create mode 100644 drivers/net/sxe/base/sxevf_hw.c
> create mode 100644 drivers/net/sxe/base/sxevf_hw.h
> create mode 100644 drivers/net/sxe/base/sxevf_regs.h
> create mode 100644 drivers/net/sxe/include/drv_msg.h
> create mode 100644 drivers/net/sxe/include/sxe/sxe_cli.h
> create mode 100644 drivers/net/sxe/include/sxe/sxe_hdc.h
> create mode 100644 drivers/net/sxe/include/sxe/sxe_ioctl.h
> create mode 100644 drivers/net/sxe/include/sxe/sxe_msg.h
> create mode 100644 drivers/net/sxe/include/sxe/sxe_regs.h
> create mode 100644 drivers/net/sxe/include/sxe_type.h
> create mode 100644 drivers/net/sxe/include/sxe_version.h
> create mode 100644 drivers/net/sxe/meson.build
> create mode 100644 drivers/net/sxe/pf/rte_pmd_sxe.h
> create mode 100644 drivers/net/sxe/pf/sxe.h
> create mode 100644 drivers/net/sxe/pf/sxe_dcb.c
> create mode 100644 drivers/net/sxe/pf/sxe_dcb.h
> create mode 100644 drivers/net/sxe/pf/sxe_ethdev.c
> create mode 100644 drivers/net/sxe/pf/sxe_ethdev.h
> create mode 100644 drivers/net/sxe/pf/sxe_filter.c
> create mode 100644 drivers/net/sxe/pf/sxe_filter.h
> create mode 100644 drivers/net/sxe/pf/sxe_flow_ctrl.c
> create mode 100644 drivers/net/sxe/pf/sxe_flow_ctrl.h
> create mode 100644 drivers/net/sxe/pf/sxe_irq.c
> create mode 100644 drivers/net/sxe/pf/sxe_irq.h
> create mode 100644 drivers/net/sxe/pf/sxe_main.c
> create mode 100644 drivers/net/sxe/pf/sxe_offload.c
> create mode 100644 drivers/net/sxe/pf/sxe_offload.h
> create mode 100644 drivers/net/sxe/pf/sxe_phy.c
> create mode 100644 drivers/net/sxe/pf/sxe_phy.h
> create mode 100644 drivers/net/sxe/pf/sxe_pmd_hdc.c
> create mode 100644 drivers/net/sxe/pf/sxe_pmd_hdc.h
> create mode 100644 drivers/net/sxe/pf/sxe_ptp.c
> create mode 100644 drivers/net/sxe/pf/sxe_ptp.h
> create mode 100644 drivers/net/sxe/pf/sxe_queue.c
> create mode 100644 drivers/net/sxe/pf/sxe_queue.h
> create mode 100644 drivers/net/sxe/pf/sxe_rx.c
> create mode 100644 drivers/net/sxe/pf/sxe_rx.h
> create mode 100644 drivers/net/sxe/pf/sxe_stats.c
> create mode 100644 drivers/net/sxe/pf/sxe_stats.h
> create mode 100644 drivers/net/sxe/pf/sxe_tx.c
> create mode 100644 drivers/net/sxe/pf/sxe_tx.h
> create mode 100644 drivers/net/sxe/pf/sxe_vec_common.h
> create mode 100644 drivers/net/sxe/pf/sxe_vec_neon.c
> create mode 100644 drivers/net/sxe/pf/sxe_vec_sse.c
> create mode 100644 drivers/net/sxe/pf/sxe_vf.c
> create mode 100644 drivers/net/sxe/pf/sxe_vf.h
> create mode 100644 drivers/net/sxe/sxe_drv_type.h
> create mode 100644 drivers/net/sxe/sxe_testpmd.c
> create mode 100644 drivers/net/sxe/vf/sxevf.h
> create mode 100644 drivers/net/sxe/vf/sxevf_ethdev.c
> create mode 100644 drivers/net/sxe/vf/sxevf_ethdev.h
> create mode 100644 drivers/net/sxe/vf/sxevf_filter.c
> create mode 100644 drivers/net/sxe/vf/sxevf_filter.h
> create mode 100644 drivers/net/sxe/vf/sxevf_irq.c
> create mode 100644 drivers/net/sxe/vf/sxevf_irq.h
> create mode 100644 drivers/net/sxe/vf/sxevf_main.c
> create mode 100644 drivers/net/sxe/vf/sxevf_msg.c
> create mode 100644 drivers/net/sxe/vf/sxevf_msg.h
> create mode 100644 drivers/net/sxe/vf/sxevf_offload.c
> create mode 100644 drivers/net/sxe/vf/sxevf_offload.h
> create mode 100644 drivers/net/sxe/vf/sxevf_queue.c
> create mode 100644 drivers/net/sxe/vf/sxevf_queue.h
> create mode 100644 drivers/net/sxe/vf/sxevf_rx.c
> create mode 100644 drivers/net/sxe/vf/sxevf_rx.h
> create mode 100644 drivers/net/sxe/vf/sxevf_stats.c
> create mode 100644 drivers/net/sxe/vf/sxevf_stats.h
> create mode 100644 drivers/net/sxe/vf/sxevf_tx.c
> create mode 100644 drivers/net/sxe/vf/sxevf_tx.h
>

Since this is a new driver. added an AI review of documentation
(features matrix) vs code

Implemented (ops wired up):
Feature Status Evidence
Speed capabilities ✅ dev_infos_get reports speed_capa
Link speed configuration ✅ dev_set_link_up / dev_set_link_down
Link status ✅ link_update
Link status event ✅ LSC interrupt handler + SXE_IRQ_LINK_UPDATE
Rx interrupt ✅ rx_queue_intr_enable / rx_queue_intr_disable
Queue start/stop ✅ rx_queue_start/stop, tx_queue_start/stop
MTU update ✅ mtu_set
Scattered Rx ✅ scattered_rx logic in queue configure
LRO ✅ LRO Rx burst functions
TSO ✅ TSO offload in tx_offload_capa
Promiscuous mode ✅ promiscuous_enable / promiscuous_disable
Allmulticast mode ✅ allmulticast_enable / allmulticast_disable
Unicast MAC filter ✅ mac_addr_add / mac_addr_remove / mac_addr_set
Multicast MAC filter ✅ set_mc_addr_list
RSS hash ✅ rss_hash_update / rss_hash_conf_get
RSS key update ✅ via rss_hash_update
RSS reta update ✅ reta_update / reta_query
VMDq ✅ VMDQ configure code present
SR-IOV ✅ VF driver in patch 13, sxe_vt_configure
DCB ✅ get_dcb_info, DCB configure functions
VLAN filter ✅ vlan_filter_set
Flow control ✅ flow_ctrl_get / flow_ctrl_set / priority_flow_ctrl_set
CRC offload ✅ RTE_ETH_RX_OFFLOAD_KEEP_CRC handling
VLAN offload ✅ vlan_offload_set / vlan_strip_queue_set / vlan_tpid_set
L3/L4 checksum offload ✅ In offload capabilities
Packet type parsing ✅ dev_supported_ptypes_get, ptype tables
Timesync ✅ Full set of timesync ops
Rx descriptor status ✅ Assigned to eth_dev->rx_descriptor_status
Tx descriptor status ✅ Assigned to eth_dev->tx_descriptor_status
Basic stats ✅ stats_get / stats_reset
Extended stats ✅ xstats_get / xstats_reset / xstats_get_names
Stats per queue ✅ queue_stats_mapping_set
FW version ✅ fw_version_get
Registers dump ✅ get_reg
Module EEPROM dump ✅ get_module_info / get_module_eeprom
Linux ✅ Platform code present
x86-64 ✅ SIMD code in patch 12

Claimed but NOT implemented (no ops wired):
Feature Status Notes
EEPROM dump ❌ No get_eeprom_length or get_eeprom ops wired. sxe.ini claims EEPROM dump = Y but there's no get_eeprom callback in sxe_eth_dev_ops. Module EEPROM (get_module_eeprom) is present but that's a different feature.
Power mgmt address monitor ❓ No get_monitor_addr op visible in the ops struct. This feature requires the PMD to implement get_monitor_addr to support rte_power_monitor().
QinQ offload ❓ Claimed as P (partial). vlan_tpid_set is present, but I didn't see explicit QinQ double-tag handling in the offload path. The overhead calculations reference 2 * SXE_VLAN_TAG_SIZE suggesting awareness, but the actual hardware offload for QinQ insertion/stripping needs verification.
Inner L3/L4 checksum ❓ Claimed as P. The ptype tables cover NVGRE/VXLAN tunnel types, but whether inner checksum offload is actually wired in the Tx path needs verification against the offload capabilities returned.
ARMv8 ❓ Claimed as Y but the SIMD code in patch 12 appears to be x86-specific (SSE/AVX). No NEON intrinsics visible.