* [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds
@ 2023-10-15 23:43 Paul Greenwalt
2023-10-15 23:43 ` [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps Paul Greenwalt
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Paul Greenwalt @ 2023-10-15 23:43 UTC (permalink / raw)
To: netdev
Cc: andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, horms, kuba,
d-tatianin, pabeni, davem, jiri, Paul Greenwalt
The following patch set was initially a part of [1]. As the purpose of the
original series was to add the support of the new hardware to the intel ice
driver, the refactoring of advertised link modes mapping was extracted to a
new set.
The patch set adds a common mechanism for mapping Ethtool forced speeds
with Ethtool supported link modes, which can be used in drivers code.
[1] https://lore.kernel.org/netdev/20230823180633.2450617-1-pawel.chmielewski@intel.com
Changelog:
v4->v5:
Separated ethtool and qede changes into two patches, fixed indentation,
and moved ethtool_forced_speed_maps_init() from ioctl.c to ethtool.h
v3->v4:
Moved the macro for setting fields into the common header file
v2->v3:
Fixed whitespaces, added missing line at end of file
v1->v2:
Fixed formatting, typo, moved declaration of iterator to loop line.
Paul Greenwalt (2):
ethtool: Add forced speed to supported link modes maps
qede: Refactor qede_forced_speed_maps_init()
Pawel Chmielewski (1):
ice: Refactor finding advertised link speed
drivers/net/ethernet/intel/ice/ice.h | 1 +
drivers/net/ethernet/intel/ice/ice_ethtool.c | 193 ++++++++++++------
drivers/net/ethernet/intel/ice/ice_main.c | 2 +
.../net/ethernet/qlogic/qede/qede_ethtool.c | 46 ++---
include/linux/ethtool.h | 37 ++++
include/linux/linkmode.h | 29 +--
6 files changed, 195 insertions(+), 113 deletions(-)
base-commit: ac4dec3fd63c7da703c244698fc92efb411ff0d4
--
2.40.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps
2023-10-15 23:43 [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds Paul Greenwalt
@ 2023-10-15 23:43 ` Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-15 23:43 ` [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init() Paul Greenwalt
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Paul Greenwalt @ 2023-10-15 23:43 UTC (permalink / raw)
To: netdev
Cc: andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, horms, kuba,
d-tatianin, pabeni, davem, jiri, Paul Greenwalt, Jacob Keller,
Przemek Kitszel
The need to map Ethtool forced speeds to Ethtool supported link modes is
common among drivers. To support this, add a common structure for forced
speed maps and a function to init them. This is solution was originally
introduced in commit 1d4e4ecccb11 ("qede: populate supported link modes
maps on module init") for qede driver.
ethtool_forced_speed_maps_init() should be called during driver init
with an array of struct ethtool_forced_speed_map to populate the mapping.
Definitions for maps themselves are left in the driver code, as the sets
of supported link modes may vary between the devices.
Suggested-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
---
include/linux/ethtool.h | 37 +++++++++++++++++++++++++++++++++++++
include/linux/linkmode.h | 29 +++++++++++++++--------------
2 files changed, 52 insertions(+), 14 deletions(-)
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 62b61527bcc4..8e91e8b8a693 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -13,6 +13,7 @@
#ifndef _LINUX_ETHTOOL_H
#define _LINUX_ETHTOOL_H
+#include <linux/linkmode.h>
#include <linux/bitmap.h>
#include <linux/compat.h>
#include <linux/if_ether.h>
@@ -1052,4 +1053,40 @@ static inline int ethtool_mm_frag_size_min_to_add(u32 val_min, u32 *val_add,
* next string.
*/
extern __printf(2, 3) void ethtool_sprintf(u8 **data, const char *fmt, ...);
+
+/* Link mode to forced speed capabilities maps */
+struct ethtool_forced_speed_map {
+ u32 speed;
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(caps);
+
+ const u32 *cap_arr;
+ u32 arr_size;
+};
+
+#define ETHTOOL_FORCED_SPEED_MAP(prefix, value) \
+{ \
+ .speed = SPEED_##value, \
+ .cap_arr = prefix##_##value, \
+ .arr_size = ARRAY_SIZE(prefix##_##value), \
+}
+
+/**
+ * ethtool_forced_speed_maps_init
+ * @maps: Pointer to an array of Ethtool forced speed map
+ * @size: Array size
+ *
+ * Initialize an array of Ethtool forced speed map to Ethtool link modes. This
+ * should be called during driver module init.
+ */
+static inline void
+ethtool_forced_speed_maps_init(struct ethtool_forced_speed_map *maps, u32 size)
+{
+ for (u32 i = 0; i < size; i++) {
+ struct ethtool_forced_speed_map *map = &maps[i];
+
+ linkmode_set_bit_array(map->cap_arr, map->arr_size, map->caps);
+ map->cap_arr = NULL;
+ map->arr_size = 0;
+ }
+}
#endif /* _LINUX_ETHTOOL_H */
diff --git a/include/linux/linkmode.h b/include/linux/linkmode.h
index 15e0e0209da4..cd38f89553e6 100644
--- a/include/linux/linkmode.h
+++ b/include/linux/linkmode.h
@@ -2,6 +2,21 @@
#define __LINKMODE_H
#include <linux/bitmap.h>
+
+static inline void linkmode_set_bit(int nr, volatile unsigned long *addr)
+{
+ __set_bit(nr, addr);
+}
+
+static inline void linkmode_set_bit_array(const int *array, int array_size,
+ unsigned long *addr)
+{
+ int i;
+
+ for (i = 0; i < array_size; i++)
+ linkmode_set_bit(array[i], addr);
+}
+
#include <linux/ethtool.h>
#include <uapi/linux/ethtool.h>
@@ -38,20 +53,6 @@ static inline int linkmode_andnot(unsigned long *dst, const unsigned long *src1,
return bitmap_andnot(dst, src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
}
-static inline void linkmode_set_bit(int nr, volatile unsigned long *addr)
-{
- __set_bit(nr, addr);
-}
-
-static inline void linkmode_set_bit_array(const int *array, int array_size,
- unsigned long *addr)
-{
- int i;
-
- for (i = 0; i < array_size; i++)
- linkmode_set_bit(array[i], addr);
-}
-
static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr)
{
__clear_bit(nr, addr);
--
2.40.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init()
2023-10-15 23:43 [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds Paul Greenwalt
2023-10-15 23:43 ` [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps Paul Greenwalt
@ 2023-10-15 23:43 ` Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-15 23:43 ` [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed Paul Greenwalt
2023-10-18 8:40 ` [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds patchwork-bot+netdevbpf
3 siblings, 1 reply; 8+ messages in thread
From: Paul Greenwalt @ 2023-10-15 23:43 UTC (permalink / raw)
To: netdev
Cc: andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, horms, kuba,
d-tatianin, pabeni, davem, jiri, Paul Greenwalt, Jacob Keller,
Przemek Kitszel
Refactor qede_forced_speed_maps_init() to use commen implementation
ethtool_forced_speed_maps_init().
The qede driver was compile tested only.
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
---
.../net/ethernet/qlogic/qede/qede_ethtool.c | 46 +++++--------------
1 file changed, 12 insertions(+), 34 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
index 95820cf1cd6c..b6b849a079ed 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
@@ -201,21 +201,6 @@ static const char qede_tests_str_arr[QEDE_ETHTOOL_TEST_MAX][ETH_GSTRING_LEN] = {
/* Forced speed capabilities maps */
-struct qede_forced_speed_map {
- u32 speed;
- __ETHTOOL_DECLARE_LINK_MODE_MASK(caps);
-
- const u32 *cap_arr;
- u32 arr_size;
-};
-
-#define QEDE_FORCED_SPEED_MAP(value) \
-{ \
- .speed = SPEED_##value, \
- .cap_arr = qede_forced_speed_##value, \
- .arr_size = ARRAY_SIZE(qede_forced_speed_##value), \
-}
-
static const u32 qede_forced_speed_1000[] __initconst = {
ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
@@ -263,28 +248,21 @@ static const u32 qede_forced_speed_100000[] __initconst = {
ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
};
-static struct qede_forced_speed_map qede_forced_speed_maps[] __ro_after_init = {
- QEDE_FORCED_SPEED_MAP(1000),
- QEDE_FORCED_SPEED_MAP(10000),
- QEDE_FORCED_SPEED_MAP(20000),
- QEDE_FORCED_SPEED_MAP(25000),
- QEDE_FORCED_SPEED_MAP(40000),
- QEDE_FORCED_SPEED_MAP(50000),
- QEDE_FORCED_SPEED_MAP(100000),
+static struct ethtool_forced_speed_map
+qede_forced_speed_maps[] __ro_after_init = {
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 1000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 10000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 20000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 25000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 40000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 50000),
+ ETHTOOL_FORCED_SPEED_MAP(qede_forced_speed, 100000),
};
void __init qede_forced_speed_maps_init(void)
{
- struct qede_forced_speed_map *map;
- u32 i;
-
- for (i = 0; i < ARRAY_SIZE(qede_forced_speed_maps); i++) {
- map = qede_forced_speed_maps + i;
-
- linkmode_set_bit_array(map->cap_arr, map->arr_size, map->caps);
- map->cap_arr = NULL;
- map->arr_size = 0;
- }
+ ethtool_forced_speed_maps_init(qede_forced_speed_maps,
+ ARRAY_SIZE(qede_forced_speed_maps));
}
/* Ethtool callbacks */
@@ -564,8 +542,8 @@ static int qede_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{
const struct ethtool_link_settings *base = &cmd->base;
+ const struct ethtool_forced_speed_map *map;
struct qede_dev *edev = netdev_priv(dev);
- const struct qede_forced_speed_map *map;
struct qed_link_output current_link;
struct qed_link_params params;
u32 i;
--
2.40.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed
2023-10-15 23:43 [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds Paul Greenwalt
2023-10-15 23:43 ` [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps Paul Greenwalt
2023-10-15 23:43 ` [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init() Paul Greenwalt
@ 2023-10-15 23:43 ` Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-18 8:40 ` [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds patchwork-bot+netdevbpf
3 siblings, 1 reply; 8+ messages in thread
From: Paul Greenwalt @ 2023-10-15 23:43 UTC (permalink / raw)
To: netdev
Cc: andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, horms, kuba,
d-tatianin, pabeni, davem, jiri, Jacob Keller, Przemek Kitszel,
Paul Greenwalt
From: Pawel Chmielewski <pawel.chmielewski@intel.com>
Refactor ice_get_link_ksettings to using forced speed to link modes
mapping.
Suggested-by : Alexander Lobakin <aleksander.lobakin@intel.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
---
drivers/net/ethernet/intel/ice/ice.h | 1 +
drivers/net/ethernet/intel/ice/ice_ethtool.c | 193 ++++++++++++-------
drivers/net/ethernet/intel/ice/ice_main.c | 2 +
3 files changed, 131 insertions(+), 65 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index ad5614d4449c..64d0af39cb98 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -969,6 +969,7 @@ int ice_stop(struct net_device *netdev);
void ice_service_task_schedule(struct ice_pf *pf);
int ice_load(struct ice_pf *pf);
void ice_unload(struct ice_pf *pf);
+void ice_adv_lnk_speed_maps_init(void);
/**
* ice_set_rdma_cap - enable RDMA support
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 5545906f39af..7870a3984547 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -345,6 +345,79 @@ static const struct ice_priv_flag ice_gstrings_priv_flags[] = {
#define ICE_PRIV_FLAG_ARRAY_SIZE ARRAY_SIZE(ice_gstrings_priv_flags)
+static const u32 ice_adv_lnk_speed_100[] __initconst = {
+ ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_1000[] __initconst = {
+ ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
+ ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+ ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_2500[] __initconst = {
+ ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
+ ETHTOOL_LINK_MODE_2500baseX_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_5000[] __initconst = {
+ ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_10000[] __initconst = {
+ ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
+ ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
+ ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
+ ETHTOOL_LINK_MODE_10000baseLR_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_25000[] __initconst = {
+ ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
+ ETHTOOL_LINK_MODE_25000baseSR_Full_BIT,
+ ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_40000[] __initconst = {
+ ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
+ ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT,
+ ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT,
+ ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_50000[] __initconst = {
+ ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT,
+ ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT,
+ ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT,
+};
+
+static const u32 ice_adv_lnk_speed_100000[] __initconst = {
+ ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT,
+ ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT,
+};
+
+static struct ethtool_forced_speed_map ice_adv_lnk_speed_maps[] __ro_after_init = {
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 100),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 1000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 2500),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 5000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 10000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 25000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 40000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 50000),
+ ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 100000),
+};
+
+void __init ice_adv_lnk_speed_maps_init(void)
+{
+ ethtool_forced_speed_maps_init(ice_adv_lnk_speed_maps,
+ ARRAY_SIZE(ice_adv_lnk_speed_maps));
+}
+
static void
__ice_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo,
struct ice_vsi *vsi)
@@ -2008,6 +2081,55 @@ ice_get_link_ksettings(struct net_device *netdev,
return err;
}
+/**
+ * ice_speed_to_aq_link - Get AQ link speed by Ethtool forced speed
+ * @speed: ethtool forced speed
+ */
+static u16 ice_speed_to_aq_link(int speed)
+{
+ int aq_speed;
+
+ switch (speed) {
+ case SPEED_10:
+ aq_speed = ICE_AQ_LINK_SPEED_10MB;
+ break;
+ case SPEED_100:
+ aq_speed = ICE_AQ_LINK_SPEED_100MB;
+ break;
+ case SPEED_1000:
+ aq_speed = ICE_AQ_LINK_SPEED_1000MB;
+ break;
+ case SPEED_2500:
+ aq_speed = ICE_AQ_LINK_SPEED_2500MB;
+ break;
+ case SPEED_5000:
+ aq_speed = ICE_AQ_LINK_SPEED_5GB;
+ break;
+ case SPEED_10000:
+ aq_speed = ICE_AQ_LINK_SPEED_10GB;
+ break;
+ case SPEED_20000:
+ aq_speed = ICE_AQ_LINK_SPEED_20GB;
+ break;
+ case SPEED_25000:
+ aq_speed = ICE_AQ_LINK_SPEED_25GB;
+ break;
+ case SPEED_40000:
+ aq_speed = ICE_AQ_LINK_SPEED_40GB;
+ break;
+ case SPEED_50000:
+ aq_speed = ICE_AQ_LINK_SPEED_50GB;
+ break;
+ case SPEED_100000:
+ aq_speed = ICE_AQ_LINK_SPEED_100GB;
+ break;
+ default:
+ aq_speed = ICE_AQ_LINK_SPEED_UNKNOWN;
+ break;
+ }
+ return aq_speed;
+}
+
/**
* ice_ksettings_find_adv_link_speed - Find advertising link speed
* @ks: ethtool ksettings
@@ -2015,73 +2137,14 @@ ice_get_link_ksettings(struct net_device *netdev,
static u16
ice_ksettings_find_adv_link_speed(const struct ethtool_link_ksettings *ks)
{
+ const struct ethtool_forced_speed_map *map;
u16 adv_link_speed = 0;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100baseT_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_100MB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 1000baseX_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 1000baseT_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 1000baseKX_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_1000MB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 2500baseT_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 2500baseX_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_2500MB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 5000baseT_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_5GB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 10000baseT_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 10000baseKR_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 10000baseSR_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 10000baseLR_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_10GB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 25000baseCR_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 25000baseSR_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 25000baseKR_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_25GB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 40000baseCR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 40000baseSR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 40000baseLR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 40000baseKR4_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_40GB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 50000baseCR2_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 50000baseKR2_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 50000baseSR2_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_50GB;
- if (ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseCR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseSR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseLR4_ER4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseKR4_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseCR2_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseSR2_Full) ||
- ethtool_link_ksettings_test_link_mode(ks, advertising,
- 100000baseKR2_Full))
- adv_link_speed |= ICE_AQ_LINK_SPEED_100GB;
+ for (u32 i = 0; i < ARRAY_SIZE(ice_adv_lnk_speed_maps); i++) {
+ map = ice_adv_lnk_speed_maps + i;
+ if (linkmode_intersects(ks->link_modes.advertising, map->caps))
+ adv_link_speed |= ice_speed_to_aq_link(map->speed);
+ }
return adv_link_speed;
}
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index a58da0024fe5..e5aad584aedb 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -5756,6 +5756,8 @@ static int __init ice_module_init(void)
pr_info("%s\n", ice_driver_string);
pr_info("%s\n", ice_copyright);
+ ice_adv_lnk_speed_maps_init();
+
ice_wq = alloc_workqueue("%s", 0, 0, KBUILD_MODNAME);
if (!ice_wq) {
pr_err("Failed to create workqueue\n");
--
2.40.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps
2023-10-15 23:43 ` [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps Paul Greenwalt
@ 2023-10-17 9:26 ` Simon Horman
0 siblings, 0 replies; 8+ messages in thread
From: Simon Horman @ 2023-10-17 9:26 UTC (permalink / raw)
To: Paul Greenwalt
Cc: netdev, andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, kuba, d-tatianin,
pabeni, davem, jiri, Jacob Keller, Przemek Kitszel
On Sun, Oct 15, 2023 at 07:43:02PM -0400, Paul Greenwalt wrote:
> The need to map Ethtool forced speeds to Ethtool supported link modes is
> common among drivers. To support this, add a common structure for forced
> speed maps and a function to init them. This is solution was originally
> introduced in commit 1d4e4ecccb11 ("qede: populate supported link modes
> maps on module init") for qede driver.
>
> ethtool_forced_speed_maps_init() should be called during driver init
> with an array of struct ethtool_forced_speed_map to populate the mapping.
>
> Definitions for maps themselves are left in the driver code, as the sets
> of supported link modes may vary between the devices.
>
> Suggested-by: Andrew Lunn <andrew@lunn.ch>
> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
Thanks Paul,
I verified that this duplicates infrastructure added by the commit quoted
above. And splits adding the new from removing the old into separate
patches as suggested by Jiri in his review of v2.
This leads to nice code reuse in patch 3/3
and makes for a nicely constructed patchset.
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init()
2023-10-15 23:43 ` [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init() Paul Greenwalt
@ 2023-10-17 9:26 ` Simon Horman
0 siblings, 0 replies; 8+ messages in thread
From: Simon Horman @ 2023-10-17 9:26 UTC (permalink / raw)
To: Paul Greenwalt
Cc: netdev, andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, kuba, d-tatianin,
pabeni, davem, jiri, Jacob Keller, Przemek Kitszel
On Sun, Oct 15, 2023 at 07:43:03PM -0400, Paul Greenwalt wrote:
> Refactor qede_forced_speed_maps_init() to use commen implementation
> ethtool_forced_speed_maps_init().
>
> The qede driver was compile tested only.
>
> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed
2023-10-15 23:43 ` [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed Paul Greenwalt
@ 2023-10-17 9:26 ` Simon Horman
0 siblings, 0 replies; 8+ messages in thread
From: Simon Horman @ 2023-10-17 9:26 UTC (permalink / raw)
To: Paul Greenwalt
Cc: netdev, andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, kuba, d-tatianin,
pabeni, davem, jiri, Jacob Keller, Przemek Kitszel
On Sun, Oct 15, 2023 at 07:43:04PM -0400, Paul Greenwalt wrote:
> From: Pawel Chmielewski <pawel.chmielewski@intel.com>
>
> Refactor ice_get_link_ksettings to using forced speed to link modes
> mapping.
>
> Suggested-by : Alexander Lobakin <aleksander.lobakin@intel.com>
> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
> Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds
2023-10-15 23:43 [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds Paul Greenwalt
` (2 preceding siblings ...)
2023-10-15 23:43 ` [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed Paul Greenwalt
@ 2023-10-18 8:40 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 8+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-10-18 8:40 UTC (permalink / raw)
To: Paul Greenwalt
Cc: netdev, andrew, aelior, manishc, vladimir.oltean, jdamato,
pawel.chmielewski, edumazet, intel-wired-lan, horms, kuba,
d-tatianin, pabeni, davem, jiri
Hello:
This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:
On Sun, 15 Oct 2023 19:43:01 -0400 you wrote:
> The following patch set was initially a part of [1]. As the purpose of the
> original series was to add the support of the new hardware to the intel ice
> driver, the refactoring of advertised link modes mapping was extracted to a
> new set.
>
> The patch set adds a common mechanism for mapping Ethtool forced speeds
> with Ethtool supported link modes, which can be used in drivers code.
>
> [...]
Here is the summary with links:
- [net-next,v5,1/3] ethtool: Add forced speed to supported link modes maps
https://git.kernel.org/netdev/net-next/c/26c5334d344d
- [net-next,v5,2/3] qede: Refactor qede_forced_speed_maps_init()
https://git.kernel.org/netdev/net-next/c/a5b65cd2a317
- [net-next,v5,3/3] ice: Refactor finding advertised link speed
https://git.kernel.org/netdev/net-next/c/982b0192db45
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-10-18 8:40 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-15 23:43 [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds Paul Greenwalt
2023-10-15 23:43 ` [PATCH net-next v5 1/3] ethtool: Add forced speed to supported link modes maps Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-15 23:43 ` [PATCH net-next v5 2/3] qede: Refactor qede_forced_speed_maps_init() Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-15 23:43 ` [PATCH net-next v5 3/3] ice: Refactor finding advertised link speed Paul Greenwalt
2023-10-17 9:26 ` Simon Horman
2023-10-18 8:40 ` [PATCH net-next v5 0/3] ethtool: Add link mode maps for forced speeds patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).