From: Dengdui Huang <huangdengdui@huawei.com>
To: <dev@dpdk.org>
Cc: <stephen@networkplumber.org>, <lihuisong@huawei.com>,
<fengchengwen@huawei.com>, <liuyonglong@huawei.com>
Subject: [PATCH 1/6] net/hns3: fix VF fail to config queue TC
Date: Wed, 11 Jun 2025 16:18:55 +0800 [thread overview]
Message-ID: <20250611081900.3658421-2-huangdengdui@huawei.com> (raw)
In-Reply-To: <20250611081900.3658421-1-huangdengdui@huawei.com>
From: Chengwen Feng <fengchengwen@huawei.com>
The VF cannot configure the mapping of queue to TC by directly writing
the register. Instead, the mapping must be modified by using firmware
command.
Fixes: bba636698316 ("net/hns3: support Rx/Tx and related operations")
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
---
drivers/net/hns3/hns3_cmd.h | 8 ++++++++
drivers/net/hns3/hns3_rxtx.c | 26 +++++++++++++++++++++-----
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/drivers/net/hns3/hns3_cmd.h b/drivers/net/hns3/hns3_cmd.h
index 4d707c13b2..e21a2b652f 100644
--- a/drivers/net/hns3/hns3_cmd.h
+++ b/drivers/net/hns3/hns3_cmd.h
@@ -178,6 +178,7 @@ enum hns3_opcode_type {
/* TQP commands */
HNS3_OPC_QUERY_TX_STATUS = 0x0B03,
+ HNS3_OPC_TQP_TX_QUEUE_TC = 0x0B04,
HNS3_OPC_QUERY_RX_STATUS = 0x0B13,
HNS3_OPC_CFG_COM_TQP_QUEUE = 0x0B20,
HNS3_OPC_RESET_TQP_QUEUE = 0x0B22,
@@ -970,6 +971,13 @@ struct hns3_reset_tqp_queue_cmd {
uint8_t rsv[19];
};
+struct hns3vf_tx_ring_tc_cmd {
+ uint16_t tqp_id;
+ uint16_t rsv1;
+ uint8_t tc_id;
+ uint8_t rsv2[19];
+};
+
#define HNS3_CFG_RESET_MAC_B 3
#define HNS3_CFG_RESET_FUNC_B 7
#define HNS3_CFG_RESET_RCB_B 1
diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c
index f9fde3948a..785e06db9c 100644
--- a/drivers/net/hns3/hns3_rxtx.c
+++ b/drivers/net/hns3/hns3_rxtx.c
@@ -1180,12 +1180,14 @@ hns3_init_txq(struct hns3_tx_queue *txq)
hns3_init_tx_queue_hw(txq);
}
-static void
+static int
hns3_init_tx_ring_tc(struct hns3_adapter *hns)
{
+ struct hns3_cmd_desc desc;
+ struct hns3vf_tx_ring_tc_cmd *req = (struct hns3vf_tx_ring_tc_cmd *)desc.data;
struct hns3_hw *hw = &hns->hw;
struct hns3_tx_queue *txq;
- int i, num;
+ int i, num, ret;
for (i = 0; i < HNS3_MAX_TC_NUM; i++) {
struct hns3_tc_queue_info *tc_queue = &hw->tc_queue[i];
@@ -1200,9 +1202,24 @@ hns3_init_tx_ring_tc(struct hns3_adapter *hns)
if (txq == NULL)
continue;
- hns3_write_dev(txq, HNS3_RING_TX_TC_REG, tc_queue->tc);
+ if (!hns->is_vf) {
+ hns3_write_dev(txq, HNS3_RING_TX_TC_REG, tc_queue->tc);
+ continue;
+ }
+
+ hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_TQP_TX_QUEUE_TC, false);
+ req->tqp_id = rte_cpu_to_le_16(num);
+ req->tc_id = tc_queue->tc;
+ ret = hns3_cmd_send(hw, &desc, 1);
+ if (ret != 0) {
+ hns3_err(hw, "config Tx queue (%u)'s TC failed! ret = %d.",
+ num, ret);
+ return ret;
+ }
}
}
+
+ return 0;
}
static int
@@ -1278,9 +1295,8 @@ hns3_init_tx_queues(struct hns3_adapter *hns)
txq = (struct hns3_tx_queue *)hw->fkq_data.tx_queues[i];
hns3_init_txq(txq);
}
- hns3_init_tx_ring_tc(hns);
- return 0;
+ return hns3_init_tx_ring_tc(hns);
}
/*
--
2.33.0
next prev parent reply other threads:[~2025-06-11 8:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-11 8:18 [PATCH 0/6] net/hns3: VF support multi-TCs Dengdui Huang
2025-06-11 8:18 ` Dengdui Huang [this message]
2025-06-11 8:18 ` [PATCH 2/6] net/hns3: remove duplicate struct field Dengdui Huang
2025-06-11 8:18 ` [PATCH 3/6] net/hns3: refactor DCB module code Dengdui Huang
2025-06-11 8:18 ` [PATCH 4/6] net/hns3: VF support parse max TC number Dengdui Huang
2025-06-11 8:18 ` [PATCH 5/6] net/hns3: VF support discover multi-TCs capability Dengdui Huang
2025-06-11 8:19 ` [PATCH 6/6] net/hns3: VF support multi-TCs configure Dengdui Huang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250611081900.3658421-2-huangdengdui@huawei.com \
--to=huangdengdui@huawei.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=lihuisong@huawei.com \
--cc=liuyonglong@huawei.com \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).