Message ID | 20230823180633.2450617-3-pawel.chmielewski@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ice: Add basic E830 support | expand |
Hi Pawel, kernel test robot noticed the following build errors: [auto build test ERROR on tnguy-next-queue/dev-queue] url: https://github.com/intel-lab-lkp/linux/commits/Pawel-Chmielewski/ice-Add-E830-device-IDs-MAC-type-and-registers/20230824-021235 base: https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git dev-queue patch link: https://lore.kernel.org/r/20230823180633.2450617-3-pawel.chmielewski%40intel.com patch subject: [Intel-wired-lan] [PATCH iwl-next v3 2/8] ethtool: Add forced speed to supported link modes maps config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20230826/202308260616.Sf8QzI7c-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce: (https://download.01.org/0day-ci/archive/20230826/202308260616.Sf8QzI7c-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202308260616.Sf8QzI7c-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/net/ethernet/qlogic/qede/qede_ethtool.c: In function 'qede_set_link_ksettings': >> drivers/net/ethernet/qlogic/qede/qede_ethtool.c:584:29: error: assignment to 'const struct qede_forced_speed_map *' from incompatible pointer type 'struct ethtool_forced_speed_map *' [-Werror=incompatible-pointer-types] 584 | map = qede_forced_speed_maps + i; | ^ >> drivers/net/ethernet/qlogic/qede/qede_ethtool.c:586:47: error: invalid use of undefined type 'const struct qede_forced_speed_map' 586 | if (base->speed != map->speed || | ^~ drivers/net/ethernet/qlogic/qede/qede_ethtool.c:588:53: error: invalid use of undefined type 'const struct qede_forced_speed_map' 588 | map->caps)) | ^~ drivers/net/ethernet/qlogic/qede/qede_ethtool.c:592:70: error: invalid use of undefined type 'const struct qede_forced_speed_map' 592 | current_link.supported_caps, map->caps); | ^~ cc1: some warnings being treated as errors vim +584 drivers/net/ethernet/qlogic/qede/qede_ethtool.c 133fac0eedc355 Sudarsana Kalluru 2015-10-26 546 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 547 static int qede_set_link_ksettings(struct net_device *dev, 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 548 const struct ethtool_link_ksettings *cmd) 133fac0eedc355 Sudarsana Kalluru 2015-10-26 549 { 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 550 const struct ethtool_link_settings *base = &cmd->base; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 551 struct qede_dev *edev = netdev_priv(dev); 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 552 const struct qede_forced_speed_map *map; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 553 struct qed_link_output current_link; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 554 struct qed_link_params params; 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 555 u32 i; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 556 fe7cd2bfdac4d8 Yuval Mintz 2016-04-22 557 if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) { 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 558 DP_INFO(edev, "Link settings are not allowed to be changed\n"); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 559 return -EOPNOTSUPP; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 560 } 133fac0eedc355 Sudarsana Kalluru 2015-10-26 561 memset(¤t_link, 0, sizeof(current_link)); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 562 memset(¶ms, 0, sizeof(params)); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 563 edev->ops->common->get_link(edev->cdev, ¤t_link); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 564 133fac0eedc355 Sudarsana Kalluru 2015-10-26 565 params.override_flags |= QED_LINK_OVERRIDE_SPEED_ADV_SPEEDS; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 566 params.override_flags |= QED_LINK_OVERRIDE_SPEED_AUTONEG; bdb5d8ec47611c Alexander Lobakin 2020-07-20 567 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 568 if (base->autoneg == AUTONEG_ENABLE) { bdb5d8ec47611c Alexander Lobakin 2020-07-20 569 if (!phylink_test(current_link.supported_caps, Autoneg)) { 161adb046b9119 sudarsana.kalluru@cavium.com 2017-05-04 570 DP_INFO(edev, "Auto negotiation is not supported\n"); 161adb046b9119 sudarsana.kalluru@cavium.com 2017-05-04 571 return -EOPNOTSUPP; 161adb046b9119 sudarsana.kalluru@cavium.com 2017-05-04 572 } 161adb046b9119 sudarsana.kalluru@cavium.com 2017-05-04 573 133fac0eedc355 Sudarsana Kalluru 2015-10-26 574 params.autoneg = true; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 575 params.forced_speed = 0; bdb5d8ec47611c Alexander Lobakin 2020-07-20 576 bdb5d8ec47611c Alexander Lobakin 2020-07-20 577 linkmode_copy(params.adv_speeds, cmd->link_modes.advertising); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 578 } else { /* forced speed */ 133fac0eedc355 Sudarsana Kalluru 2015-10-26 579 params.override_flags |= QED_LINK_OVERRIDE_SPEED_FORCED_SPEED; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 580 params.autoneg = false; 054c67d1c82afd Sudarsana Reddy Kalluru 2016-08-09 581 params.forced_speed = base->speed; bdb5d8ec47611c Alexander Lobakin 2020-07-20 582 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 583 for (i = 0; i < ARRAY_SIZE(qede_forced_speed_maps); i++) { 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 @584 map = qede_forced_speed_maps + i; bdb5d8ec47611c Alexander Lobakin 2020-07-20 585 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 @586 if (base->speed != map->speed || 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 587 !linkmode_intersects(current_link.supported_caps, 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 588 map->caps)) 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 589 continue; bdb5d8ec47611c Alexander Lobakin 2020-07-20 590 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 591 linkmode_and(params.adv_speeds, 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 592 current_link.supported_caps, map->caps); 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 593 goto set_link; bdb5d8ec47611c Alexander Lobakin 2020-07-20 594 } bdb5d8ec47611c Alexander Lobakin 2020-07-20 595 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 596 DP_INFO(edev, "Unsupported speed %u\n", base->speed); 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 597 return -EINVAL; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 598 } 133fac0eedc355 Sudarsana Kalluru 2015-10-26 599 1d4e4ecccb1144 Alexander Lobakin 2020-07-20 600 set_link: 133fac0eedc355 Sudarsana Kalluru 2015-10-26 601 params.link_up = true; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 602 edev->ops->common->set_link(edev->cdev, ¶ms); 133fac0eedc355 Sudarsana Kalluru 2015-10-26 603 133fac0eedc355 Sudarsana Kalluru 2015-10-26 604 return 0; 133fac0eedc355 Sudarsana Kalluru 2015-10-26 605 } 133fac0eedc355 Sudarsana Kalluru 2015-10-26 606
On Wed, Aug 23, 2023 at 08:06:26PM +0200, Pawel Chmielewski wrote: > From: Paul Greenwalt <paul.greenwalt@intel.com> > > 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 betwen the devices. Hi Pawel, a minor nit from my side is that checkpatch.pl --codespell suggests betwen -> between > > The qede driver was compile tested only. > > Suggested-by: Andrew Lunn <andrew@lunn.ch> > Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com> ...
diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c index 95820cf1cd6c..85fd14b0c7c6 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c +++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c @@ -201,14 +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, \ @@ -263,7 +255,7 @@ 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 = { +static struct ethtool_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), @@ -275,16 +267,8 @@ static struct qede_forced_speed_map qede_forced_speed_maps[] __ro_after_init = { 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 */ diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 62b61527bcc4..3d23a8d78c9b 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -1052,4 +1052,24 @@ 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; +}; + +/** + * 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. + */ +void ethtool_forced_speed_maps_init(struct ethtool_forced_speed_map *maps, + u32 size); #endif /* _LINUX_ETHTOOL_H */ diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 0b0ce4f81c01..1ba437eff764 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -3388,3 +3388,18 @@ void ethtool_rx_flow_rule_destroy(struct ethtool_rx_flow_rule *flow) kfree(flow); } EXPORT_SYMBOL(ethtool_rx_flow_rule_destroy); + +void ethtool_forced_speed_maps_init(struct ethtool_forced_speed_map *maps, + u32 size) +{ + u32 i; + + for (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; + } +} +EXPORT_SYMBOL(ethtool_forced_speed_maps_init); \ No newline at end of file