Skip to content

Commit cc9bb43

Browse files
Yunsheng Lindavem330
authored andcommitted
net: hns3: Add tc-based TM support for sriov enabled port
When sriov is enabled and TM is in tc-based mode, vf's TM parameters is not set in TM initialization process. This patch add the tc_based TM support for sriov enabled using the information in vport struct. Signed-off-by: Yunsheng Lin <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0a5677d commit cc9bb43

File tree

1 file changed

+31
-18
lines changed
  • drivers/net/ethernet/hisilicon/hns3/hns3pf

1 file changed

+31
-18
lines changed

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -388,13 +388,13 @@ static int hclge_tm_pri_schd_mode_cfg(struct hclge_dev *hdev, u8 pri_id)
388388
return hclge_cmd_send(&hdev->hw, &desc, 1);
389389
}
390390

391-
static int hclge_tm_qs_schd_mode_cfg(struct hclge_dev *hdev, u16 qs_id)
391+
static int hclge_tm_qs_schd_mode_cfg(struct hclge_dev *hdev, u16 qs_id, u8 mode)
392392
{
393393
struct hclge_desc desc;
394394

395395
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_TM_QS_SCH_MODE_CFG, false);
396396

397-
if (hdev->tm_info.tc_info[qs_id].tc_sch_mode == HCLGE_SCH_MODE_DWRR)
397+
if (mode == HCLGE_SCH_MODE_DWRR)
398398
desc.data[1] = cpu_to_le32(HCLGE_TM_TX_SCHD_DWRR_MSK);
399399
else
400400
desc.data[1] = 0;
@@ -638,17 +638,18 @@ static int hclge_tm_pri_q_qs_cfg(struct hclge_dev *hdev)
638638
{
639639
struct hclge_vport *vport = hdev->vport;
640640
int ret;
641-
u32 i;
641+
u32 i, k;
642642

643643
if (hdev->tx_sch_mode == HCLGE_FLAG_TC_BASE_SCH_MODE) {
644644
/* Cfg qs -> pri mapping, one by one mapping */
645-
for (i = 0; i < hdev->tm_info.num_tc; i++) {
646-
ret = hclge_tm_qs_to_pri_map_cfg(hdev, i, i);
647-
if (ret)
648-
return ret;
649-
}
645+
for (k = 0; k < hdev->num_alloc_vport; k++)
646+
for (i = 0; i < hdev->tm_info.num_tc; i++) {
647+
ret = hclge_tm_qs_to_pri_map_cfg(
648+
hdev, vport[k].qs_offset + i, i);
649+
if (ret)
650+
return ret;
651+
}
650652
} else if (hdev->tx_sch_mode == HCLGE_FLAG_VNET_BASE_SCH_MODE) {
651-
int k;
652653
/* Cfg qs -> pri mapping, qs = tc, pri = vf, 8 qs -> 1 pri */
653654
for (k = 0; k < hdev->num_alloc_vport; k++)
654655
for (i = 0; i < HNAE3_MAX_TC; i++) {
@@ -797,10 +798,11 @@ static int hclge_tm_pri_shaper_cfg(struct hclge_dev *hdev)
797798

798799
static int hclge_tm_pri_tc_base_dwrr_cfg(struct hclge_dev *hdev)
799800
{
801+
struct hclge_vport *vport = hdev->vport;
800802
struct hclge_pg_info *pg_info;
801803
u8 dwrr;
802804
int ret;
803-
u32 i;
805+
u32 i, k;
804806

805807
for (i = 0; i < hdev->tm_info.num_tc; i++) {
806808
pg_info =
@@ -811,9 +813,13 @@ static int hclge_tm_pri_tc_base_dwrr_cfg(struct hclge_dev *hdev)
811813
if (ret)
812814
return ret;
813815

814-
ret = hclge_tm_qs_weight_cfg(hdev, i, dwrr);
815-
if (ret)
816-
return ret;
816+
for (k = 0; k < hdev->num_alloc_vport; k++) {
817+
ret = hclge_tm_qs_weight_cfg(
818+
hdev, vport[k].qs_offset + i,
819+
vport[k].dwrr);
820+
if (ret)
821+
return ret;
822+
}
817823
}
818824

819825
return 0;
@@ -944,7 +950,10 @@ static int hclge_tm_schd_mode_vnet_base_cfg(struct hclge_vport *vport)
944950
return ret;
945951

946952
for (i = 0; i < kinfo->num_tc; i++) {
947-
ret = hclge_tm_qs_schd_mode_cfg(hdev, vport->qs_offset + i);
953+
u8 sch_mode = hdev->tm_info.tc_info[i].tc_sch_mode;
954+
955+
ret = hclge_tm_qs_schd_mode_cfg(hdev, vport->qs_offset + i,
956+
sch_mode);
948957
if (ret)
949958
return ret;
950959
}
@@ -956,17 +965,21 @@ static int hclge_tm_lvl34_schd_mode_cfg(struct hclge_dev *hdev)
956965
{
957966
struct hclge_vport *vport = hdev->vport;
958967
int ret;
959-
u8 i;
968+
u8 i, k;
960969

961970
if (hdev->tx_sch_mode == HCLGE_FLAG_TC_BASE_SCH_MODE) {
962971
for (i = 0; i < hdev->tm_info.num_tc; i++) {
963972
ret = hclge_tm_pri_schd_mode_cfg(hdev, i);
964973
if (ret)
965974
return ret;
966975

967-
ret = hclge_tm_qs_schd_mode_cfg(hdev, i);
968-
if (ret)
969-
return ret;
976+
for (k = 0; k < hdev->num_alloc_vport; k++) {
977+
ret = hclge_tm_qs_schd_mode_cfg(
978+
hdev, vport[k].qs_offset + i,
979+
HCLGE_SCH_MODE_DWRR);
980+
if (ret)
981+
return ret;
982+
}
970983
}
971984
} else {
972985
for (i = 0; i < hdev->num_alloc_vport; i++) {

0 commit comments

Comments
 (0)