From: Yonglong Liu <liuyongl...@huawei.com>

Bellow HNAE3_DEVICE_VERSION_V3, MAC pause mode just support one
TC, when enabled multiple TCs, force enable PFC mode.

HNAE3_DEVICE_VERSION_V3 can support MAC pause mode on multiple
TCs, so when enable multiple TCs, just keep MAC pause mode,
and enable PFC mode just according to the user settings.

Signed-off-by: Yonglong Liu <liuyongl...@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazh...@huawei.com>
---
 .../net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c  | 23 +++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
index 54767b0..b1026cd 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
@@ -715,7 +715,7 @@ static void hclge_tm_pg_info_init(struct hclge_dev *hdev)
        }
 }
 
-static void hclge_pfc_info_init(struct hclge_dev *hdev)
+static void hclge_update_fc_mode_by_dcb_flag(struct hclge_dev *hdev)
 {
        if (!(hdev->flag & HCLGE_FLAG_DCB_ENABLE)) {
                if (hdev->fc_mode_last_time == HCLGE_FC_PFC)
@@ -733,6 +733,27 @@ static void hclge_pfc_info_init(struct hclge_dev *hdev)
        }
 }
 
+static void hclge_update_fc_mode(struct hclge_dev *hdev)
+{
+       if (!hdev->tm_info.pfc_en) {
+               hdev->tm_info.fc_mode = hdev->fc_mode_last_time;
+               return;
+       }
+
+       if (hdev->tm_info.fc_mode != HCLGE_FC_PFC) {
+               hdev->fc_mode_last_time = hdev->tm_info.fc_mode;
+               hdev->tm_info.fc_mode = HCLGE_FC_PFC;
+       }
+}
+
+static void hclge_pfc_info_init(struct hclge_dev *hdev)
+{
+       if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V3)
+               hclge_update_fc_mode(hdev);
+       else
+               hclge_update_fc_mode_by_dcb_flag(hdev);
+}
+
 static void hclge_tm_schd_info_init(struct hclge_dev *hdev)
 {
        hclge_tm_pg_info_init(hdev);
-- 
2.7.4

Reply via email to