Commit 8eeb1f4b authored by Guojia Liao's avatar Guojia Liao Committed by David S. Miller

net: hns3: adjust rss indirection table configure command

For the max rss size of PF may be up to 512, so adjust the
command of configuring rss indirection table to support
queue id larger than 255. The width of queue id is extended
from 8 bits to 10 bits. The high 2 bits are stored in filed
rss_qid_h when the queue id is larger than 255.
Signed-off-by: default avatarGuojia Liao <liaoguojia@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f1c2e66d
...@@ -560,12 +560,15 @@ struct hclge_rss_input_tuple_cmd { ...@@ -560,12 +560,15 @@ struct hclge_rss_input_tuple_cmd {
}; };
#define HCLGE_RSS_CFG_TBL_SIZE 16 #define HCLGE_RSS_CFG_TBL_SIZE 16
#define HCLGE_RSS_CFG_TBL_SIZE_H 4
#define HCLGE_RSS_CFG_TBL_BW_H 2U
#define HCLGE_RSS_CFG_TBL_BW_L 8U
struct hclge_rss_indirection_table_cmd { struct hclge_rss_indirection_table_cmd {
__le16 start_table_index; __le16 start_table_index;
__le16 rss_set_bitmap; __le16 rss_set_bitmap;
u8 rsv[4]; u8 rss_qid_h[HCLGE_RSS_CFG_TBL_SIZE_H];
u8 rss_result[HCLGE_RSS_CFG_TBL_SIZE]; u8 rss_qid_l[HCLGE_RSS_CFG_TBL_SIZE];
}; };
#define HCLGE_RSS_TC_OFFSET_S 0 #define HCLGE_RSS_TC_OFFSET_S 0
......
...@@ -4282,8 +4282,12 @@ static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir) ...@@ -4282,8 +4282,12 @@ static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir)
{ {
struct hclge_rss_indirection_table_cmd *req; struct hclge_rss_indirection_table_cmd *req;
struct hclge_desc desc; struct hclge_desc desc;
int i, j; u8 rss_msb_oft;
u8 rss_msb_val;
int ret; int ret;
u16 qid;
int i;
u32 j;
req = (struct hclge_rss_indirection_table_cmd *)desc.data; req = (struct hclge_rss_indirection_table_cmd *)desc.data;
...@@ -4294,11 +4298,15 @@ static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir) ...@@ -4294,11 +4298,15 @@ static int hclge_set_rss_indir_table(struct hclge_dev *hdev, const u16 *indir)
req->start_table_index = req->start_table_index =
cpu_to_le16(i * HCLGE_RSS_CFG_TBL_SIZE); cpu_to_le16(i * HCLGE_RSS_CFG_TBL_SIZE);
req->rss_set_bitmap = cpu_to_le16(HCLGE_RSS_SET_BITMAP_MSK); req->rss_set_bitmap = cpu_to_le16(HCLGE_RSS_SET_BITMAP_MSK);
for (j = 0; j < HCLGE_RSS_CFG_TBL_SIZE; j++) {
for (j = 0; j < HCLGE_RSS_CFG_TBL_SIZE; j++) qid = indir[i * HCLGE_RSS_CFG_TBL_SIZE + j];
req->rss_result[j] = req->rss_qid_l[j] = qid & 0xff;
indir[i * HCLGE_RSS_CFG_TBL_SIZE + j]; rss_msb_oft =
j * HCLGE_RSS_CFG_TBL_BW_H / BITS_PER_BYTE;
rss_msb_val = (qid >> HCLGE_RSS_CFG_TBL_BW_L & 0x1) <<
(j * HCLGE_RSS_CFG_TBL_BW_H % BITS_PER_BYTE);
req->rss_qid_h[rss_msb_oft] |= rss_msb_val;
}
ret = hclge_cmd_send(&hdev->hw, &desc, 1); ret = hclge_cmd_send(&hdev->hw, &desc, 1);
if (ret) { if (ret) {
dev_err(&hdev->pdev->dev, dev_err(&hdev->pdev->dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment