231 lines
8.5 KiB
Diff
231 lines
8.5 KiB
Diff
From c50d2600a4852ea1583b58a7868ee5a3bdeef168 Mon Sep 17 00:00:00 2001
|
|
From: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Date: Thu, 18 Nov 2021 20:44:44 +0800
|
|
Subject: [PATCH 145/283] net: hns3: modify functions of converting speed
|
|
ability to ethtool link mode
|
|
|
|
mainline inclusion
|
|
from mainline-v5.16-rc1
|
|
commit 58cb422ef625750fe8719045d1b8557e15875a9e
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMYT
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58cb422ef625750fe8719045d1b8557e15875a9e
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
The functions of converting speed ability to ethtool link mode just
|
|
support setting mac->supported currently, to reuse these functions to
|
|
set ethtool link mode for others(i.e. advertising), delete the argument
|
|
mac and add argument link_mode.
|
|
|
|
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
|
|
Conflicts:
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
---
|
|
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 3 +
|
|
.../hisilicon/hns3/hns3pf/hclge_main.c | 77 ++++++++++---------
|
|
2 files changed, 45 insertions(+), 35 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
index 744c0d4db199..9eb545677c05 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
|
|
@@ -149,6 +149,9 @@ enum HNAE3_DEV_CAP_BITS {
|
|
#define hnae3_dev_stash_supported(hdev) \
|
|
test_bit(HNAE3_DEV_SUPPORT_STASH_B, (hdev)->ae_dev->caps)
|
|
|
|
+#define hnae3_dev_pause_supported(hdev) \
|
|
+ test_bit(HNAE3_DEV_SUPPORT_PAUSE_B, (hdev)->ae_dev->caps)
|
|
+
|
|
#define hnae3_ae_dev_rxd_adv_layout_supported(ae_dev) \
|
|
test_bit(HNAE3_DEV_SUPPORT_RXD_ADV_LAYOUT_B, (ae_dev)->caps)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
index f774ba3f05c0..85087927a7f3 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
@@ -1073,94 +1073,100 @@ static int hclge_check_port_speed(struct hnae3_handle *handle, u32 speed)
|
|
return -EINVAL;
|
|
}
|
|
|
|
-#ifdef HAVE_ETHTOOL_CONVERT_U32_AND_LINK_MODE
|
|
-static void hclge_convert_setting_sr(struct hclge_mac *mac, u16 speed_ability)
|
|
+static void hclge_convert_setting_sr(u16 speed_ability,
|
|
+ unsigned long *link_mode)
|
|
{
|
|
if (speed_ability & HCLGE_SUPPORT_10G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_25G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_40G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_50G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_100G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_200G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
}
|
|
|
|
-static void hclge_convert_setting_lr(struct hclge_mac *mac, u16 speed_ability)
|
|
+static void hclge_convert_setting_lr(u16 speed_ability,
|
|
+ unsigned long *link_mode)
|
|
{
|
|
if (speed_ability & HCLGE_SUPPORT_10G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_25G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
+ if (speed_ability & HCLGE_SUPPORT_50G_BIT)
|
|
+ linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT,
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_40G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_100G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_200G_BIT)
|
|
linkmode_set_bit(
|
|
ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
}
|
|
|
|
-static void hclge_convert_setting_cr(struct hclge_mac *mac, u16 speed_ability)
|
|
+static void hclge_convert_setting_cr(u16 speed_ability,
|
|
+ unsigned long *link_mode)
|
|
{
|
|
if (speed_ability & HCLGE_SUPPORT_10G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseCR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_25G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_40G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_50G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_100G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_200G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
}
|
|
|
|
-static void hclge_convert_setting_kr(struct hclge_mac *mac, u16 speed_ability)
|
|
+static void hclge_convert_setting_kr(u16 speed_ability,
|
|
+ unsigned long *link_mode)
|
|
{
|
|
if (speed_ability & HCLGE_SUPPORT_1G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_10G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_25G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_40G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_50G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_100G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
if (speed_ability & HCLGE_SUPPORT_200G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT,
|
|
- mac->supported);
|
|
+ link_mode);
|
|
}
|
|
|
|
static void hclge_convert_setting_fec(struct hclge_mac *mac)
|
|
@@ -1196,7 +1202,6 @@ static void hclge_convert_setting_fec(struct hclge_mac *mac)
|
|
break;
|
|
}
|
|
}
|
|
-#endif
|
|
|
|
static void hclge_parse_fiber_link_mode(struct hclge_dev *hdev,
|
|
u16 speed_ability)
|
|
@@ -1208,10 +1213,10 @@ static void hclge_parse_fiber_link_mode(struct hclge_dev *hdev,
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
|
|
mac->supported);
|
|
|
|
- hclge_convert_setting_sr(mac, speed_ability);
|
|
- hclge_convert_setting_lr(mac, speed_ability);
|
|
- hclge_convert_setting_cr(mac, speed_ability);
|
|
- if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
|
|
+ hclge_convert_setting_sr(speed_ability, mac->supported);
|
|
+ hclge_convert_setting_lr(speed_ability, mac->supported);
|
|
+ hclge_convert_setting_cr(speed_ability, mac->supported);
|
|
+ if (hnae3_dev_fec_supported(hdev))
|
|
hclge_convert_setting_fec(mac);
|
|
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, mac->supported);
|
|
@@ -1239,9 +1244,10 @@ static void hclge_parse_backplane_link_mode(struct hclge_dev *hdev,
|
|
struct hclge_mac *mac = &hdev->hw.mac;
|
|
|
|
#ifdef HAVE_ETHTOOL_CONVERT_U32_AND_LINK_MODE
|
|
- hclge_convert_setting_kr(mac, speed_ability);
|
|
+ hclge_convert_setting_kr(speed_ability, mac->supported);
|
|
if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2)
|
|
hclge_convert_setting_fec(mac);
|
|
+
|
|
#else
|
|
if (speed_ability & HCLGE_SUPPORT_1G_BIT)
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
|
|
@@ -1250,6 +1256,7 @@ static void hclge_parse_backplane_link_mode(struct hclge_dev *hdev,
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
|
|
mac->supported);
|
|
#endif
|
|
+
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_Backplane_BIT, mac->supported);
|
|
linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, mac->supported);
|
|
}
|
|
--
|
|
2.34.1
|
|
|