All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Intel-wired-lan] [next-queue] ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support
@ 2020-06-26 17:37 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2020-06-26 17:37 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 12956 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20200626050228.1287009-1-jeffrey.t.kirsher@intel.com>
References: <20200626050228.1287009-1-jeffrey.t.kirsher@intel.com>
TO: Jeff Kirsher <jeffrey.t.kirsher@intel.com>

Hi Jeff,

I love your patch! Perhaps something to improve:

[auto build test WARNING on jkirsher-next-queue/dev-queue]
[also build test WARNING on v5.8-rc2 next-20200626]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jeff-Kirsher/ixgbe-Add-ethtool-support-to-enable-2-5-and-5-0-Gbps-support/20200626-130545
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git dev-queue
:::::: branch date: 13 hours ago
:::::: commit date: 13 hours ago
config: x86_64-randconfig-m001-20200624 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c:475 ixgbe_set_link_ksettings() warn: if statement not indented

# https://github.com/0day-ci/linux/commit/6607c3800b28dc6f72dc1018bf23cfeabe5aefde
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 6607c3800b28dc6f72dc1018bf23cfeabe5aefde
vim +475 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c

9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  430  
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  431  static int ixgbe_set_link_ksettings(struct net_device *netdev,
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  432  				    const struct ethtool_link_ksettings *cmd)
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  433  {
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  434  	struct ixgbe_adapter *adapter = netdev_priv(netdev);
735441fb1a3b21 drivers/net/ixgbe/ixgbe_ethtool.c                Ayyappan Veeraiyan       2008-02-01  435  	struct ixgbe_hw *hw = &adapter->hw;
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  436  	u32 advertised, old;
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  437  	s32 err = 0;
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  438  	u32 supported, advertising;
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  439  
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  440  	ethtool_convert_link_mode_to_legacy_u32(&supported,
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  441  						cmd->link_modes.supported);
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  442  	ethtool_convert_link_mode_to_legacy_u32(&advertising,
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  443  						cmd->link_modes.advertising);
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  444  
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  445  	if ((hw->phy.media_type == ixgbe_media_type_copper) ||
a380137900fca5 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-30  446  	    (hw->phy.multispeed_fiber)) {
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  447  		/*
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  448  		 * this function does not support duplex forcing, but can
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  449  		 * limit the advertising of the adapter to the specified speed
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  450  		 */
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  451  		if (advertising & ~supported)
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  452  			return -EINVAL;
abcc80d26cc040 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2011-07-29  453  
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  454  		/* only allow one speed at a time if no autoneg */
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  455  		if (!cmd->base.autoneg && hw->phy.multispeed_fiber) {
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  456  			if (advertising ==
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  457  			    (ADVERTISED_10000baseT_Full |
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  458  			     ADVERTISED_1000baseT_Full))
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  459  				return -EINVAL;
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  460  		}
ed33ff66d8064e drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2013-08-30  461  
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  462  		old = hw->phy.autoneg_advertised;
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  463  		advertised = 0;
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  464  		if (advertising & ADVERTISED_10000baseT_Full)
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  465  			advertised |= IXGBE_LINK_SPEED_10GB_FULL;
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  466  
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  467  		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  468  							  5000baseT_Full))
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  469  			advertised |= IXGBE_LINK_SPEED_5GB_FULL;
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  470  
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  471  		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  472  							  2500baseT_Full))
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  473  			advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  474  
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25 @475  		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
6607c3800b28dc drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Jeff Kirsher             2020-06-25  476  							  1000baseT_Full))
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  477  		if (advertising & ADVERTISED_1000baseT_Full)
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  478  			advertised |= IXGBE_LINK_SPEED_1GB_FULL;
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  479  
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  480  		if (advertising & ADVERTISED_100baseT_Full)
2b642ca5e93fa1 drivers/net/ixgbe/ixgbe_ethtool.c                Emil Tantilov            2011-03-04  481  			advertised |= IXGBE_LINK_SPEED_100_FULL;
2b642ca5e93fa1 drivers/net/ixgbe/ixgbe_ethtool.c                Emil Tantilov            2011-03-04  482  
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  483  		if (advertising & ADVERTISED_10baseT_Full)
b3eb4e1860f359 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Mark Rustad              2016-12-14  484  			advertised |= IXGBE_LINK_SPEED_10_FULL;
b3eb4e1860f359 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Mark Rustad              2016-12-14  485  
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  486  		if (old == advertised)
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  487  			return err;
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  488  		/* this sets the link speed and restarts auto-neg */
e3215f0ac77ec2 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2014-10-28  489  		while (test_and_set_bit(__IXGBE_IN_SFP_INIT, &adapter->state))
e3215f0ac77ec2 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2014-10-28  490  			usleep_range(1000, 2000);
e3215f0ac77ec2 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2014-10-28  491  
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  492  		hw->mac.autotry_restart = true;
fd0326f2cf9e5d drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Josh Hay                 2012-12-15  493  		err = hw->mac.ops.setup_link(hw, advertised, true);
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  494  		if (err) {
396e799c3ac29f drivers/net/ixgbe/ixgbe_ethtool.c                Emil Tantilov            2010-07-01  495  			e_info(probe, "setup link failed with code %d\n", err);
fd0326f2cf9e5d drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Josh Hay                 2012-12-15  496  			hw->mac.ops.setup_link(hw, old, true);
0befdb3e0a26a8 drivers/net/ixgbe/ixgbe_ethtool.c                Jesse Brandeburg         2008-10-31  497  		}
e3215f0ac77ec2 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Emil Tantilov            2014-10-28  498  		clear_bit(__IXGBE_IN_SFP_INIT, &adapter->state);
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  499  	} else {
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  500  		/* in this case we currently only support 10Gb/FULL */
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  501  		u32 speed = cmd->base.speed;
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  502  
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  503  		if ((cmd->base.autoneg == AUTONEG_ENABLE) ||
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  504  		    (advertising != ADVERTISED_10000baseT_Full) ||
8704f21c8449d4 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c Philippe Reynes          2017-03-07  505  		    (speed + cmd->base.duplex != SPEED_10000 + DUPLEX_FULL))
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  506  			return -EINVAL;
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  507  	}
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  508  
74766013a131f1 drivers/net/ixgbe/ixgbe_ethtool.c                Mallikarjuna R Chilakala 2009-06-04  509  	return err;
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  510  }
9a799d71034c4e drivers/net/ixgbe/ixgbe_ethtool.c                Auke Kok                 2007-09-15  511  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33440 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread
* [Intel-wired-lan] [next-queue] ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support
@ 2020-06-26  5:02 Jeff Kirsher
  2020-06-26 12:22 ` Piotr Skajewski
  2020-06-30 10:54   ` Dan Carpenter
  0 siblings, 2 replies; 5+ messages in thread
From: Jeff Kirsher @ 2020-06-26  5:02 UTC (permalink / raw)
  To: intel-wired-lan

Update the ixgbe ethtool interface to support 2.5 and 5 GbE support by
updated the getting and setting advertised and supported speed modes.

CC: Arthur F Mclean <arthur.f.mclean@intel.com>
CC: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 .../net/ethernet/intel/ixgbe/ixgbe_ethtool.c  | 234 ++++++++++++------
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   2 +
 2 files changed, 155 insertions(+), 81 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index 8ae2c8c2f6a1..c4e4aa33c91d 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -149,28 +149,6 @@ static const char ixgbe_priv_flags_strings[][ETH_GSTRING_LEN] = {
 
 #define ixgbe_isbackplane(type) ((type) == ixgbe_media_type_backplane)
 
-static u32 ixgbe_get_supported_10gtypes(struct ixgbe_hw *hw)
-{
-	if (!ixgbe_isbackplane(hw->phy.media_type))
-		return SUPPORTED_10000baseT_Full;
-
-	switch (hw->device_id) {
-	case IXGBE_DEV_ID_82598:
-	case IXGBE_DEV_ID_82599_KX4:
-	case IXGBE_DEV_ID_82599_KX4_MEZZ:
-	case IXGBE_DEV_ID_X550EM_X_KX4:
-		return SUPPORTED_10000baseKX4_Full;
-	case IXGBE_DEV_ID_82598_BX:
-	case IXGBE_DEV_ID_82599_KR:
-	case IXGBE_DEV_ID_X550EM_X_KR:
-	case IXGBE_DEV_ID_X550EM_X_XFI:
-		return SUPPORTED_10000baseKR_Full;
-	default:
-		return SUPPORTED_10000baseKX4_Full |
-		       SUPPORTED_10000baseKR_Full;
-	}
-}
-
 static int ixgbe_get_link_ksettings(struct net_device *netdev,
 				    struct ethtool_link_ksettings *cmd)
 {
@@ -178,55 +156,131 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
 	struct ixgbe_hw *hw = &adapter->hw;
 	ixgbe_link_speed supported_link;
 	bool autoneg = false;
-	u32 supported, advertising;
 
-	ethtool_convert_link_mode_to_legacy_u32(&supported,
-						cmd->link_modes.supported);
+	ethtool_link_ksettings_zero_link_mode(cmd, supported);
+	ethtool_link_ksettings_zero_link_mode(cmd, advertising);
 
 	hw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);
-
 	/* set the supported link speeds */
-	if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
-		supported |= ixgbe_get_supported_10gtypes(hw);
-	if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
-		supported |= (ixgbe_isbackplane(hw->phy.media_type)) ?
-				   SUPPORTED_1000baseKX_Full :
-				   SUPPORTED_1000baseT_Full;
-	if (supported_link & IXGBE_LINK_SPEED_100_FULL)
-		supported |= SUPPORTED_100baseT_Full;
-	if (supported_link & IXGBE_LINK_SPEED_10_FULL)
-		supported |= SUPPORTED_10baseT_Full;
-
-	/* default advertised speed if phy.autoneg_advertised isn't set */
-	advertising = supported;
+	if (supported_link & IXGBE_LINK_SPEED_10GB_FULL) {
+		if (ixgbe_isbackplane(hw->phy.media_type)) {
+			switch (hw->device_id) {
+			case IXGBE_DEV_ID_82598:
+			case IXGBE_DEV_ID_82599_KX4:
+			case IXGBE_DEV_ID_82599_KX4_MEZZ:
+			case IXGBE_DEV_ID_X550EM_X_KX4:
+				ethtool_link_ksettings_add_link_mode
+					(cmd, supported, 10000baseKX4_Full);
+				ethtool_link_ksettings_add_link_mode
+					(cmd, advertising, 10000baseKX4_Full);
+				break;
+			case IXGBE_DEV_ID_82598_BX:
+			case IXGBE_DEV_ID_82599_KR:
+			case IXGBE_DEV_ID_X550EM_X_KR:
+			case IXGBE_DEV_ID_X550EM_X_XFI:
+				ethtool_link_ksettings_add_link_mode
+					(cmd, supported, 10000baseKR_Full);
+				ethtool_link_ksettings_add_link_mode
+					(cmd, advertising, 10000baseKR_Full);
+				break;
+			default:
+				ethtool_link_ksettings_add_link_mode
+					(cmd, supported, 10000baseKX4_Full);
+				ethtool_link_ksettings_add_link_mode
+					(cmd, advertising, 10000baseKX4_Full);
+				ethtool_link_ksettings_add_link_mode
+					(cmd, supported, 10000baseKR_Full);
+				ethtool_link_ksettings_add_link_mode
+					(cmd, advertising, 10000baseKR_Full);
+				break;
+			}
+		} else {
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     10000baseT_Full);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     10000baseT_Full);
+		}
+	}
+	if (supported_link & IXGBE_LINK_SPEED_5GB_FULL)
+		ethtool_link_ksettings_add_link_mode(cmd, supported,
+						     5000baseT_Full);
+	if (supported_link & IXGBE_LINK_SPEED_2_5GB_FULL)
+		ethtool_link_ksettings_add_link_mode(cmd, supported,
+						     2500baseT_Full);
+	if (supported_link & IXGBE_LINK_SPEED_1GB_FULL) {
+		if (ixgbe_isbackplane(hw->phy.media_type)) {
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     1000baseKX_Full);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     1000baseKX_Full);
+		} else {
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     1000baseT_Full);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     1000baseT_Full);
+		}
+	}
+	if (supported_link & IXGBE_LINK_SPEED_100_FULL) {
+		ethtool_link_ksettings_add_link_mode(cmd, supported,
+						     100baseT_Full);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising,
+						     100baseT_Full);
+	}
+	if (supported_link & IXGBE_LINK_SPEED_10_FULL) {
+		ethtool_link_ksettings_add_link_mode(cmd, supported,
+						     10baseT_Full);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising,
+						     10baseT_Full);
+	}
+
 	/* set the advertised speeds */
 	if (hw->phy.autoneg_advertised) {
-		advertising = 0;
+		ethtool_link_ksettings_zero_link_mode(cmd, advertising);
 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10_FULL)
-			advertising |= ADVERTISED_10baseT_Full;
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     10baseT_Full);
 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
-			advertising |= ADVERTISED_100baseT_Full;
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     100baseT_Full);
 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
-			advertising |= supported & ADVRTSD_MSK_10G;
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     10000baseT_Full);
 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) {
-			if (supported & SUPPORTED_1000baseKX_Full)
-				advertising |= ADVERTISED_1000baseKX_Full;
+			if (ethtool_link_ksettings_test_link_mode(cmd,
+							       supported,
+							       1000baseKX_Full))
+				ethtool_link_ksettings_add_link_mode(cmd,
+							       advertising,
+							       1000baseKX_Full);
 			else
-				advertising |= ADVERTISED_1000baseT_Full;
+				ethtool_link_ksettings_add_link_mode(cmd,
+							       advertising,
+							       1000baseT_Full);
+		}
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL) {
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     5000baseT_Full);
+		}
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_2_5GB_FULL) {
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     2500baseT_Full);
 		}
 	} else {
 		if (hw->phy.multispeed_fiber && !autoneg) {
 			if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
-				advertising = ADVERTISED_10000baseT_Full;
+				ethtool_link_ksettings_add_link_mode(cmd,
+							       advertising,
+							       10000baseT_Full);
 		}
 	}
 
 	if (autoneg) {
-		supported |= SUPPORTED_Autoneg;
-		advertising |= ADVERTISED_Autoneg;
+		ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);
 		cmd->base.autoneg = AUTONEG_ENABLE;
-	} else
+	} else {
 		cmd->base.autoneg = AUTONEG_DISABLE;
+	}
 
 	/* Determine the remaining settings based on the PHY type. */
 	switch (adapter->hw.phy.type) {
@@ -235,13 +289,13 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
 	case ixgbe_phy_x550em_ext_t:
 	case ixgbe_phy_fw:
 	case ixgbe_phy_cu_unknown:
-		supported |= SUPPORTED_TP;
-		advertising |= ADVERTISED_TP;
+		ethtool_link_ksettings_add_link_mode(cmd, supported, TP);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
 		cmd->base.port = PORT_TP;
 		break;
 	case ixgbe_phy_qt:
-		supported |= SUPPORTED_FIBRE;
-		advertising |= ADVERTISED_FIBRE;
+		ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
 		cmd->base.port = PORT_FIBRE;
 		break;
 	case ixgbe_phy_nl:
@@ -255,13 +309,15 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
 	case ixgbe_phy_qsfp_active_unknown:
 	case ixgbe_phy_qsfp_intel:
 	case ixgbe_phy_qsfp_unknown:
-		/* SFP+ devices, further checking needed */
 		switch (adapter->hw.phy.sfp_type) {
+		/* SFP+ devices, further checking needed */
 		case ixgbe_sfp_type_da_cu:
 		case ixgbe_sfp_type_da_cu_core0:
 		case ixgbe_sfp_type_da_cu_core1:
-			supported |= SUPPORTED_FIBRE;
-			advertising |= ADVERTISED_FIBRE;
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     FIBRE);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     FIBRE);
 			cmd->base.port = PORT_DA;
 			break;
 		case ixgbe_sfp_type_sr:
@@ -272,61 +328,72 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
 		case ixgbe_sfp_type_1g_sx_core1:
 		case ixgbe_sfp_type_1g_lx_core0:
 		case ixgbe_sfp_type_1g_lx_core1:
-			supported |= SUPPORTED_FIBRE;
-			advertising |= ADVERTISED_FIBRE;
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     FIBRE);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     FIBRE);
 			cmd->base.port = PORT_FIBRE;
 			break;
 		case ixgbe_sfp_type_not_present:
-			supported |= SUPPORTED_FIBRE;
-			advertising |= ADVERTISED_FIBRE;
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     FIBRE);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     FIBRE);
 			cmd->base.port = PORT_NONE;
 			break;
 		case ixgbe_sfp_type_1g_cu_core0:
 		case ixgbe_sfp_type_1g_cu_core1:
-			supported |= SUPPORTED_TP;
-			advertising |= ADVERTISED_TP;
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     TP);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     TP);
 			cmd->base.port = PORT_TP;
 			break;
 		case ixgbe_sfp_type_unknown:
 		default:
-			supported |= SUPPORTED_FIBRE;
-			advertising |= ADVERTISED_FIBRE;
+			ethtool_link_ksettings_add_link_mode(cmd, supported,
+							     FIBRE);
+			ethtool_link_ksettings_add_link_mode(cmd, advertising,
+							     FIBRE);
 			cmd->base.port = PORT_OTHER;
 			break;
 		}
 		break;
 	case ixgbe_phy_xaui:
-		supported |= SUPPORTED_FIBRE;
-		advertising |= ADVERTISED_FIBRE;
+		ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
 		cmd->base.port = PORT_NONE;
 		break;
 	case ixgbe_phy_unknown:
 	case ixgbe_phy_generic:
 	case ixgbe_phy_sfp_unsupported:
 	default:
-		supported |= SUPPORTED_FIBRE;
-		advertising |= ADVERTISED_FIBRE;
+		ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
 		cmd->base.port = PORT_OTHER;
 		break;
 	}
 
 	/* Indicate pause support */
-	supported |= SUPPORTED_Pause;
+	ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
 
 	switch (hw->fc.requested_mode) {
 	case ixgbe_fc_full:
-		advertising |= ADVERTISED_Pause;
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
 		break;
 	case ixgbe_fc_rx_pause:
-		advertising |= ADVERTISED_Pause |
-				     ADVERTISED_Asym_Pause;
+		ethtool_link_ksettings_add_link_mode(cmd, advertising, Pause);
+		ethtool_link_ksettings_add_link_mode(cmd, advertising,
+						     Asym_Pause);
 		break;
 	case ixgbe_fc_tx_pause:
-		advertising |= ADVERTISED_Asym_Pause;
+		ethtool_link_ksettings_add_link_mode(cmd, advertising,
+						     Asym_Pause);
 		break;
 	default:
-		advertising &= ~(ADVERTISED_Pause |
-				       ADVERTISED_Asym_Pause);
+		ethtool_link_ksettings_del_link_mode(cmd, advertising, Pause);
+		ethtool_link_ksettings_del_link_mode(cmd, advertising,
+						     Asym_Pause);
 	}
 
 	if (netif_carrier_ok(netdev)) {
@@ -358,11 +425,6 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
 		cmd->base.duplex = DUPLEX_UNKNOWN;
 	}
 
-	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
-						supported);
-	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
-						advertising);
-
 	return 0;
 }
 
@@ -402,6 +464,16 @@ static int ixgbe_set_link_ksettings(struct net_device *netdev,
 		if (advertising & ADVERTISED_10000baseT_Full)
 			advertised |= IXGBE_LINK_SPEED_10GB_FULL;
 
+		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+							  5000baseT_Full))
+			advertised |= IXGBE_LINK_SPEED_5GB_FULL;
+
+		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+							  2500baseT_Full))
+			advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
+
+		if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
+							  1000baseT_Full))
 		if (advertising & ADVERTISED_1000baseT_Full)
 			advertised |= IXGBE_LINK_SPEED_1GB_FULL;
 
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 7515ed825fe2..0c7d208d9ab0 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -5512,6 +5512,8 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
 	if (ret)
 		return ret;
 
+	speed &= ~(IXGBE_LINK_SPEED_5GB_FULL | IXGBE_LINK_SPEED_2_5GB_FULL);
+
 	if (hw->mac.ops.setup_link)
 		ret = hw->mac.ops.setup_link(hw, speed, link_up);
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-06-30 10:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-26 17:37 [Intel-wired-lan] [next-queue] ixgbe: Add ethtool support to enable 2.5 and 5.0 Gbps support kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2020-06-26  5:02 Jeff Kirsher
2020-06-26 12:22 ` Piotr Skajewski
2020-06-30 10:54 ` Dan Carpenter
2020-06-30 10:54   ` Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.