net: hns3: keep MAC pause mode when multiple TCs are enabled
authorYonglong Liu <liuyonglong@huawei.com>
Sat, 28 Nov 2020 03:51:50 +0000 (11:51 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 1 Dec 2020 23:16:31 +0000 (15:16 -0800)
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 <liuyonglong@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c

index 54767b0..b1026cd 100644 (file)
@@ -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);