[PATCH v1 01/17] net/hinic3: fix offload and cmdq/compact CQE config
Jiacheng Ye
yejiacheng4 at h-partners.com
Sat Oct 10 16:44:52 CEST 2026
Some offload capabilities are reported based on the wrong conditions: QINQ
strip/insert and VXLAN TNL TSO are never advertised, and GENEVE/IPIP TSO is
gated by the HTN cmdq flag instead of those features' own flags. The cmdq
mode/depth are also set in the wrong helper and the compact CQE flag is not
written to firmware at vport enable.
Advertise the missing offloads, add QINQ to the TX offload mask so the QINQ
insert flag is honoured, gate tunnel TSO by the correct flags, set cmdq
mode/depth in hinic3_set_cmdq_depth(), and forward the compact CQE flag.
Fixes: aa31be38544e ("net/hinic3: enhance command queue for new SPx series NIC")
Cc: stable at dpdk.org
Signed-off-by: Jiacheng Ye <yejiacheng4 at h-partners.com>
---
.mailmap | 1 +
drivers/net/hinic3/base/hinic3_hw_comm.c | 9 +++---
drivers/net/hinic3/base/hinic3_nic_cfg.c | 1 +
drivers/net/hinic3/hinic3_ethdev.c | 36 +++++++++++++++---------
drivers/net/hinic3/hinic3_tx.c | 3 +-
5 files changed, 31 insertions(+), 19 deletions(-)
diff --git a/.mailmap b/.mailmap
index 2e348c3bce..53df9d44ff 100644
--- a/.mailmap
+++ b/.mailmap
@@ -749,6 +749,7 @@ Jesse Brandeburg <jesse.brandeburg at intel.com>
Jesse Bruni <jesse.bruni at intel.com>
Jia He <justin.he at arm.com> <jia.he at hxt-semitech.com>
Jia Yu <jyu at vmware.com>
+Jiacheng Ye <yejiacheng4 at h-partners.com>
Jian Wang <jianwang at trustnetic.com>
Jianbo Liu <jianbo.liu at arm.com> <jianbo.liu at linaro.org>
Jianfeng Tan <jianfeng.tan at intel.com>
diff --git a/drivers/net/hinic3/base/hinic3_hw_comm.c b/drivers/net/hinic3/base/hinic3_hw_comm.c
index 6541bc0428..2749faeba1 100644
--- a/drivers/net/hinic3/base/hinic3_hw_comm.c
+++ b/drivers/net/hinic3/base/hinic3_hw_comm.c
@@ -276,10 +276,6 @@ hinic3_set_root_ctxt(struct hinic3_hwdev *hwdev, uint32_t rq_depth,
root_ctxt.rq_depth = (uint16_t)rte_log2_u32(rq_depth);
root_ctxt.rx_buf_sz = get_hw_rx_buf_size(hwdev, rx_buf_sz);
root_ctxt.sq_depth = (uint16_t)rte_log2_u32(sq_depth);
- root_ctxt.cmdq_mode = hwdev->cmdqs->cmdq_mode;
-
- if (hwdev->cmdqs->cmdq_mode == HINIC3_ENHANCE_CMDQ)
- root_ctxt.cmdq_depth--;
err = hinic3_msg_to_mgmt_sync(hwdev, HINIC3_MOD_COMM,
HINIC3_MGMT_CMD_SET_VAT,
@@ -334,6 +330,11 @@ hinic3_set_cmdq_depth(struct hinic3_hwdev *hwdev, uint16_t cmdq_depth)
root_ctxt.set_cmdq_depth = 1;
root_ctxt.cmdq_depth = (uint8_t)rte_log2_u32(cmdq_depth);
+ root_ctxt.cmdq_mode = hwdev->cmdqs->cmdq_mode;
+
+ if (root_ctxt.cmdq_mode == HINIC3_ENHANCE_CMDQ)
+ root_ctxt.cmdq_depth--;
+
err = hinic3_msg_to_mgmt_sync(hwdev, HINIC3_MOD_COMM,
HINIC3_MGMT_CMD_SET_VAT,
&root_ctxt, sizeof(root_ctxt),
diff --git a/drivers/net/hinic3/base/hinic3_nic_cfg.c b/drivers/net/hinic3/base/hinic3_nic_cfg.c
index 5387626b98..bd3c39730f 100644
--- a/drivers/net/hinic3/base/hinic3_nic_cfg.c
+++ b/drivers/net/hinic3/base/hinic3_nic_cfg.c
@@ -454,6 +454,7 @@ hinic3_set_vport_enable(struct hinic3_hwdev *hwdev, bool enable)
en_state.func_id = hinic3_global_func_id(hwdev);
en_state.state = enable ? 1 : 0;
en_state.num_qps = nic_dev->num_rqs;
+ en_state.rx_compact_wqe_en = HINIC3_SUPPORT_RX_HW_COMPACT_CQE(nic_dev);
err = hinic3_msg_to_mgmt_sync(hwdev, HINIC3_MOD_L2NIC,
HINIC3_NIC_CMD_SET_VPORT_ENABLE,
diff --git a/drivers/net/hinic3/hinic3_ethdev.c b/drivers/net/hinic3/hinic3_ethdev.c
index eb5ddd9de6..623c836a3b 100644
--- a/drivers/net/hinic3/hinic3_ethdev.c
+++ b/drivers/net/hinic3/hinic3_ethdev.c
@@ -684,22 +684,30 @@ hinic3_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
info->max_lro_pkt_size = HINIC3_MAX_LRO_SIZE;
info->rx_queue_offload_capa = 0;
- info->rx_offload_capa =
- RTE_ETH_RX_OFFLOAD_VLAN_STRIP | RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |
- RTE_ETH_RX_OFFLOAD_UDP_CKSUM | RTE_ETH_RX_OFFLOAD_TCP_CKSUM |
- RTE_ETH_RX_OFFLOAD_SCTP_CKSUM | RTE_ETH_RX_OFFLOAD_VLAN_FILTER |
- RTE_ETH_RX_OFFLOAD_SCATTER | RTE_ETH_RX_OFFLOAD_TCP_LRO |
- RTE_ETH_RX_OFFLOAD_RSS_HASH;
+ info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_VLAN_STRIP |
+ RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |
+ RTE_ETH_RX_OFFLOAD_UDP_CKSUM |
+ RTE_ETH_RX_OFFLOAD_TCP_CKSUM |
+ RTE_ETH_RX_OFFLOAD_SCTP_CKSUM |
+ RTE_ETH_RX_OFFLOAD_VLAN_FILTER |
+ RTE_ETH_RX_OFFLOAD_SCATTER |
+ RTE_ETH_RX_OFFLOAD_TCP_LRO |
+ RTE_ETH_RX_OFFLOAD_RSS_HASH |
+ RTE_ETH_RX_OFFLOAD_QINQ_STRIP;
info->tx_queue_offload_capa = 0;
- info->tx_offload_capa =
- RTE_ETH_TX_OFFLOAD_VLAN_INSERT | RTE_ETH_TX_OFFLOAD_IPV4_CKSUM |
- RTE_ETH_TX_OFFLOAD_UDP_CKSUM | RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
- RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
- RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM |
- RTE_ETH_TX_OFFLOAD_TCP_TSO | RTE_ETH_TX_OFFLOAD_MULTI_SEGS;
- if (nic_dev->feature_cap & NIC_F_HTN_CMDQ)
- hinic3_dev_tnl_tso_support(info, nic_dev);
+ info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_VLAN_INSERT |
+ RTE_ETH_TX_OFFLOAD_IPV4_CKSUM |
+ RTE_ETH_TX_OFFLOAD_UDP_CKSUM |
+ RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
+ RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
+ RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM |
+ RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
+ RTE_ETH_TX_OFFLOAD_TCP_TSO |
+ RTE_ETH_TX_OFFLOAD_MULTI_SEGS |
+ RTE_ETH_TX_OFFLOAD_QINQ_INSERT;
+
+ hinic3_dev_tnl_tso_support(info, nic_dev);
info->hash_key_size = HINIC3_RSS_KEY_SIZE;
info->reta_size = HINIC3_RSS_INDIR_SIZE;
diff --git a/drivers/net/hinic3/hinic3_tx.c b/drivers/net/hinic3/hinic3_tx.c
index 6b2bffb14e..bbe8c1c085 100644
--- a/drivers/net/hinic3/hinic3_tx.c
+++ b/drivers/net/hinic3/hinic3_tx.c
@@ -24,7 +24,8 @@
#define MAX_TSO_NUM_FRAG 1024
#define HINIC3_TX_OFFLOAD_MASK \
- (HINIC3_TX_CKSUM_OFFLOAD_MASK | HINIC3_PKT_TX_VLAN_PKT)
+ (HINIC3_TX_CKSUM_OFFLOAD_MASK | HINIC3_PKT_TX_VLAN_PKT | \
+ HINIC3_PKT_TX_QINQ_PKT)
#define HINIC3_TX_CKSUM_OFFLOAD_MASK \
(HINIC3_PKT_TX_IP_CKSUM | HINIC3_PKT_TX_TCP_CKSUM | \
--
2.33.0
More information about the dev
mailing list