net: hns3: Disable SerDes serial loopback for HiLink H60
authorHao Lan <lanhao@huawei.com>
Thu, 7 Mar 2024 01:01:10 +0000 (09:01 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Mar 2024 12:01:32 +0000 (12:01 +0000)
When the hilink version is H60, the serdes serial loopback test is not
supported. This patch add hilink version detection. When the version
is H60, the serdes serial loopback test will be disable.

Signed-off-by: Hao Lan <lanhao@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hnae3.h
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

index d7e175a9cb49b5495b1cc995e238a519a2594251..a72caaf05475f2259cc093ab8ac19581190bd51b 100644 (file)
@@ -388,6 +388,7 @@ struct hnae3_dev_specs {
        u16 mc_mac_size;
        u32 mac_stats_num;
        u8 tnl_num;
+       u8 hilink_version;
 };
 
 struct hnae3_client_ops {
index c083d1d10767bbfff0c8a58099b5b25dc8a5e7ff..807eb3bbb11c0408fbdcfa678586646fb92f8861 100644 (file)
@@ -1097,6 +1097,8 @@ hns3_dbg_dev_specs(struct hnae3_handle *h, char *buf, int len, int *pos)
        *pos += scnprintf(buf + *pos, len - *pos,
                          "TX timeout threshold: %d seconds\n",
                          dev->watchdog_timeo / HZ);
+       *pos += scnprintf(buf + *pos, len - *pos, "Hilink Version: %u\n",
+                         dev_specs->hilink_version);
 }
 
 static int hns3_dbg_dev_info(struct hnae3_handle *h, char *buf, int len)
index 4d15eb73b972857f6a1760e3c414488d2af347cf..9bb708fa42f24ee3192e5333486962e32cdb2ec2 100644 (file)
@@ -828,7 +828,8 @@ struct hclge_dev_specs_1_cmd {
        __le16 mc_mac_size;
        u8 rsv1[6];
        u8 tnl_num;
-       u8 rsv2[5];
+       u8 hilink_version;
+       u8 rsv2[4];
 };
 
 /* mac speed type defined in firmware command */
index 21f3e2bf5ef826b5888cb3c6ebed9ccb33ed4466..16860eea980007c10a5c197db596c671cf96fad3 100644 (file)
@@ -645,8 +645,12 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
                        handle->flags |= HNAE3_SUPPORT_APP_LOOPBACK;
                }
 
-               count += 1;
-               handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
+               if (hdev->ae_dev->dev_specs.hilink_version !=
+                   HCLGE_HILINK_H60) {
+                       count += 1;
+                       handle->flags |= HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK;
+               }
+
                count += 1;
                handle->flags |= HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK;
                count += 1;
@@ -1358,6 +1362,7 @@ static void hclge_parse_dev_specs(struct hclge_dev *hdev,
        ae_dev->dev_specs.umv_size = le16_to_cpu(req1->umv_size);
        ae_dev->dev_specs.mc_mac_size = le16_to_cpu(req1->mc_mac_size);
        ae_dev->dev_specs.tnl_num = req1->tnl_num;
+       ae_dev->dev_specs.hilink_version = req1->hilink_version;
 }
 
 static void hclge_check_dev_specs(struct hclge_dev *hdev)
index a2877b64e0856cf75dafd846cfa00561f2f33846..e821dd2f15289012651bb5a4d0ac5cfb6cfbec3a 100644 (file)
@@ -256,6 +256,12 @@ enum HCLGE_MAC_DUPLEX {
        HCLGE_MAC_FULL
 };
 
+/* hilink version */
+enum hclge_hilink_version {
+       HCLGE_HILINK_H32 = 0,
+       HCLGE_HILINK_H60 = 1,
+};
+
 #define QUERY_SFP_SPEED                0
 #define QUERY_ACTIVE_SPEED     1