149 lines
4.7 KiB
Diff
149 lines
4.7 KiB
Diff
From f55274aa83fb48f046a3b3abd5d924d6be0ba147 Mon Sep 17 00:00:00 2001
|
|
From: Ke Chen <chenke54@huawei.com>
|
|
Date: Mon, 7 Nov 2022 19:53:02 +0800
|
|
Subject: [PATCH 276/283] net: hns3: add ROH MAC type definitions and support
|
|
query MAC type
|
|
|
|
driver inclusion
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I5WKYW
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
HNAE3 framework add MAC type definitions for NIC or RoCE or ROH clients.
|
|
|
|
There are two types of MAC in Hip09, ethernet and ROH. In ROH
|
|
type, some operations are different, such as setting MAC address.
|
|
This type will be used as the judgment condition in subsequent
|
|
patches.
|
|
|
|
Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
|
|
Signed-off-by: Ke Chen <chenke54@huawei.com>
|
|
Reviewed-by: Gang Zhang <gang.zhang@huawei.com>
|
|
Reviewed-by: Yefeng Yan <yanyefeng@huawei.com>
|
|
Reviewed-by: Jingchao Dai <daijingchao1@huawei.com>
|
|
Reviewed-by: Jian Shen <shenjian15@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
---
|
|
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 12 ++++++++++++
|
|
.../hisilicon/hns3/hns3pf/hclge_debugfs.c | 18 +++++++++++++++++-
|
|
.../hisilicon/hns3/hns3pf/hclge_main.c | 17 ++++++++++++++++-
|
|
3 files changed, 45 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
index 3658c2b7247c..eebe7a4edaee 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
@@ -233,6 +233,11 @@ enum hnae3_client_type {
|
|
HNAE3_CLIENT_ROCE,
|
|
};
|
|
|
|
+enum hnae3_mac_type {
|
|
+ HNAE3_MAC_ETH,
|
|
+ HNAE3_MAC_ROH,
|
|
+};
|
|
+
|
|
/* mac media type */
|
|
enum hnae3_media_type {
|
|
HNAE3_MEDIA_TYPE_UNKNOWN,
|
|
@@ -967,6 +972,8 @@ struct hnae3_handle {
|
|
|
|
unsigned long supported_pflags;
|
|
unsigned long priv_flags;
|
|
+
|
|
+ enum hnae3_mac_type mac_type;
|
|
};
|
|
|
|
#define hnae3_set_field(origin, mask, shift, val) \
|
|
@@ -981,6 +988,11 @@ struct hnae3_handle {
|
|
#define hnae3_get_bit(origin, shift) \
|
|
hnae3_get_field(origin, 0x1 << (shift), shift)
|
|
|
|
+static inline bool hnae3_check_roh_mac_type(struct hnae3_handle *handle)
|
|
+{
|
|
+ return handle->mac_type == HNAE3_MAC_ROH;
|
|
+}
|
|
+
|
|
int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
|
|
void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
|
|
index 32f4245dfd6d..cf3bbfa2bac5 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
|
|
@@ -393,6 +393,16 @@ static int hclge_dbg_dump_mac_speed_duplex(struct hclge_dev *hdev, char *buf,
|
|
return 0;
|
|
}
|
|
|
|
+static void hclge_dbg_dump_mac_type(struct hclge_dev *hdev, char *buf, int len,
|
|
+ int *pos)
|
|
+{
|
|
+ struct hclge_vport *vport = &hdev->vport[0];
|
|
+ struct hnae3_handle *handle = &vport->nic;
|
|
+
|
|
+ *pos += scnprintf(buf + *pos, len - *pos, "type: %s\n",
|
|
+ handle->mac_type ? "ROH" : "Ethernet");
|
|
+}
|
|
+
|
|
static int hclge_dbg_dump_mac(struct hclge_dev *hdev, char *buf, int len)
|
|
{
|
|
int pos = 0;
|
|
@@ -406,7 +416,13 @@ static int hclge_dbg_dump_mac(struct hclge_dev *hdev, char *buf, int len)
|
|
if (ret)
|
|
return ret;
|
|
|
|
- return hclge_dbg_dump_mac_speed_duplex(hdev, buf, len, &pos);
|
|
+ ret = hclge_dbg_dump_mac_speed_duplex(hdev, buf, len, &pos);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ hclge_dbg_dump_mac_type(hdev, buf, len, &pos);
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
static int hclge_dbg_dump_dcb_qset(struct hclge_dev *hdev, char *buf, int len,
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
index 17468e2b8bc2..827d0e63ac1c 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
@@ -1608,6 +1608,20 @@ static int hclge_query_dev_specs(struct hclge_dev *hdev)
|
|
return 0;
|
|
}
|
|
|
|
+static void hclge_mac_type_init(struct hclge_dev *hdev)
|
|
+{
|
|
+ struct hclge_vport *vport = &hdev->vport[0];
|
|
+ struct hnae3_handle *handle = &vport->nic;
|
|
+ u32 dev_id = hdev->pdev->device;
|
|
+
|
|
+ if (dev_id == HNAE3_DEV_ID_100G_ROH ||
|
|
+ dev_id == HNAE3_DEV_ID_200G_ROH ||
|
|
+ dev_id == HNAE3_DEV_ID_400G_ROH)
|
|
+ handle->mac_type = HNAE3_MAC_ROH;
|
|
+ else
|
|
+ handle->mac_type = HNAE3_MAC_ETH;
|
|
+}
|
|
+
|
|
static int hclge_get_cap(struct hclge_dev *hdev)
|
|
{
|
|
int ret;
|
|
@@ -3074,12 +3088,13 @@ static void hclge_get_fec(struct hnae3_handle *handle, u8 *fec_ability,
|
|
if (fec_mode)
|
|
*fec_mode = mac->fec_mode;
|
|
}
|
|
-
|
|
static int hclge_mac_init(struct hclge_dev *hdev)
|
|
{
|
|
struct hclge_mac *mac = &hdev->hw.mac;
|
|
int ret;
|
|
|
|
+ hclge_mac_type_init(hdev);
|
|
+
|
|
hdev->support_sfp_query = true;
|
|
hdev->hw.mac.duplex = HCLGE_MAC_FULL;
|
|
ret = hclge_cfg_mac_speed_dup_hw(hdev, hdev->hw.mac.speed,
|
|
--
|
|
2.34.1
|
|
|