patches for DPDK stable branches
 help / color / mirror / Atom feed
From: luca.boccassi@gmail.com
To: Xiaoyun Li <xiaoyun.li@intel.com>
Cc: Qi Zhang <qi.z.zhang@intel.com>, dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/i40e: fix link speed' has been queued to LTS release 16.11.8
Date: Fri, 27 Jul 2018 11:17:39 +0100	[thread overview]
Message-ID: <20180727101748.30228-3-luca.boccassi@gmail.com> (raw)
In-Reply-To: <20180727101748.30228-1-luca.boccassi@gmail.com>

Hi,

FYI, your patch has been queued to LTS release 16.11.8

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/29/18. So please
shout if anyone has objections.

Thanks.

Luca Boccassi

---
>From f3dbe50c474771cf688f2dac948e67bcbbd107d9 Mon Sep 17 00:00:00 2001
From: Xiaoyun Li <xiaoyun.li@intel.com>
Date: Tue, 10 Jul 2018 17:30:54 +0800
Subject: [PATCH] net/i40e: fix link speed

[ upstream commit 9214ee18eef97709eca481998cf7dca50520896c ]

When link needs to go up, I40E_AQ_PHY_AN_ENABLED is always be set in DPDK.
So all speeds are always set. This causes speed config never works.

This patch fixes this issue and only allows to set available speeds. If
link needs to go up and speed setting is not supported, it will print
warning and set default available speeds. And when link needs to go down,
link speed field should be set to non-zero to avoid link down issue when
binding back to kernel driver.

Fixes: ca7e599d4506 ("net/i40e: fix link management")
Fixes: 1bb8f661168d ("net/i40e: fix link down and negotiation")

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 67 +++++++++++++++++++++-------------
 1 file changed, 41 insertions(+), 26 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 2eeb472d0..01f473c2b 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -1708,27 +1708,40 @@ i40e_phy_conf_link(struct i40e_hw *hw,
 	struct i40e_aq_get_phy_abilities_resp phy_ab;
 	struct i40e_aq_set_phy_config phy_conf;
 	enum i40e_aq_phy_type cnt;
+	uint8_t avail_speed;
 	uint32_t phy_type_mask = 0;
 
 	const uint8_t mask = I40E_AQ_PHY_FLAG_PAUSE_TX |
 			I40E_AQ_PHY_FLAG_PAUSE_RX |
 			I40E_AQ_PHY_FLAG_PAUSE_RX |
 			I40E_AQ_PHY_FLAG_LOW_POWER;
-	const uint8_t advt = I40E_LINK_SPEED_40GB |
-			I40E_LINK_SPEED_25GB |
-			I40E_LINK_SPEED_10GB |
-			I40E_LINK_SPEED_1GB |
-			I40E_LINK_SPEED_100MB;
 	int ret = -ENOTSUP;
 
+	/* To get phy capabilities of available speeds. */
+	status = i40e_aq_get_phy_capabilities(hw, false, true, &phy_ab,
+					      NULL);
+	if (status) {
+		PMD_DRV_LOG(ERR, "Failed to get PHY capabilities: %d\n",
+				status);
+		return ret;
+	}
+	avail_speed = phy_ab.link_speed;
 
+	/* To get the current phy config. */
 	status = i40e_aq_get_phy_capabilities(hw, false, false, &phy_ab,
 					      NULL);
-	if (status)
+	if (status) {
+		PMD_DRV_LOG(ERR, "Failed to get the current PHY config: %d\n",
+				status);
 		return ret;
+	}
 
-	/* If link already up, no need to set up again */
-	if (is_up && phy_ab.phy_type != 0)
+	/* If link needs to go up and it is in autoneg mode the speed is OK,
+	 * no need to set up again.
+	 */
+	if (is_up && phy_ab.phy_type != 0 &&
+		     abilities & I40E_AQ_PHY_AN_ENABLED &&
+		     phy_ab.link_speed != 0)
 		return I40E_SUCCESS;
 
 	memset(&phy_conf, 0, sizeof(phy_conf));
@@ -1737,15 +1750,17 @@ i40e_phy_conf_link(struct i40e_hw *hw,
 	abilities &= ~mask;
 	abilities |= phy_ab.abilities & mask;
 
-	/* update ablities and speed */
-	if (abilities & I40E_AQ_PHY_AN_ENABLED)
-		phy_conf.link_speed = advt;
-	else
-		phy_conf.link_speed = is_up ? force_speed : phy_ab.link_speed;
-
 	phy_conf.abilities = abilities;
 
-
+	/* If link needs to go up, but the force speed is not supported,
+	 * Warn users and config the default available speeds.
+	 */
+	if (is_up && !(force_speed & avail_speed)) {
+		PMD_DRV_LOG(WARNING, "Invalid speed setting, set to default!\n");
+		phy_conf.link_speed = avail_speed;
+	} else {
+		phy_conf.link_speed = is_up ? force_speed : avail_speed;
+	}
 
 	/* PHY type mask needs to include each type except PHY type extension */
 	for (cnt = I40E_PHY_TYPE_SGMII; cnt < I40E_PHY_TYPE_25GBASE_KR; cnt++)
@@ -1781,11 +1796,18 @@ i40e_apply_link_speed(struct rte_eth_dev *dev)
 	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct rte_eth_conf *conf = &dev->data->dev_conf;
 
+	if (conf->link_speeds == ETH_LINK_SPEED_AUTONEG) {
+		conf->link_speeds = ETH_LINK_SPEED_40G |
+				    ETH_LINK_SPEED_25G |
+				    ETH_LINK_SPEED_20G |
+				    ETH_LINK_SPEED_10G |
+				    ETH_LINK_SPEED_1G |
+				    ETH_LINK_SPEED_100M;
+	}
 	speed = i40e_parse_link_speeds(conf->link_speeds);
-	abilities |= I40E_AQ_PHY_ENABLE_ATOMIC_LINK;
-	if (!(conf->link_speeds & ETH_LINK_SPEED_FIXED))
-		abilities |= I40E_AQ_PHY_AN_ENABLED;
-	abilities |= I40E_AQ_PHY_LINK_ENABLED;
+	abilities |= I40E_AQ_PHY_ENABLE_ATOMIC_LINK |
+		     I40E_AQ_PHY_AN_ENABLED |
+		     I40E_AQ_PHY_LINK_ENABLED;
 
 	return i40e_phy_conf_link(hw, abilities, speed, true);
 }
@@ -1876,13 +1898,6 @@ i40e_dev_start(struct rte_eth_dev *dev)
 	}
 
 	/* Apply link configure */
-	if (dev->data->dev_conf.link_speeds & ~(ETH_LINK_SPEED_100M |
-				ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G |
-				ETH_LINK_SPEED_20G | ETH_LINK_SPEED_25G |
-				ETH_LINK_SPEED_40G)) {
-		PMD_DRV_LOG(ERR, "Invalid link setting");
-		goto err_up;
-	}
 	ret = i40e_apply_link_speed(dev);
 	if (I40E_SUCCESS != ret) {
 		PMD_DRV_LOG(ERR, "Fail to apply link setting");
-- 
2.18.0

  parent reply	other threads:[~2018-07-27 10:17 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-24 16:07 [dpdk-stable] patch 'net/ena: check pointer before memset' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ena: change memory type' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ena: fix GENMASK_ULL macro' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ena: set link speed as none' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/nfp: fix field initialization in Tx descriptor' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bonding: fix MAC address reset' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'mbuf: fix typo in IPv6 macro comment' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'kni: fix build with gcc 8.1' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net: rename u16 to fix shadowed declaration' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ixgbe: fix tunnel id format error for FDIR' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ixgbe: fix tunnel type set " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ixgbe: fix mask bits register " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/i40e: fix shifts of 32-bit value' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'app/testpmd: fix VLAN TCI mask set error for FDIR' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/i40e: workaround performance degradation' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/i40e: do not reset device info data' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/pcap: fix multiple queues' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/thunderx: fix build with gcc optimization on' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/ena: fix SIGFPE with 0 Rx queue' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/qede: fix default extended VLAN offload config' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bnxt: fix HW Tx checksum offload check' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bnxt: fix Tx with multiple mbuf' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bnxt: fix incorrect IO address handling in Tx' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bnxt: fix Rx ring count limitation' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'net/bonding: do not clear active slave count' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'test/crypto: fix device id when stopping port' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'maintainers: update for Mellanox PMDs' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'examples/multi_process: build l2fwd_fork app' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'hash: fix multiwriter lock memory allocation' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'hash: fix a multi-writer race condition' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'hash: fix key slot size accuracy' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'eal: fix return codes on thread naming failure' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'eal/linux: fix invalid syntax in interrupts' " luca.boccassi
2018-07-24 16:07 ` [dpdk-stable] patch 'ethdev: check queue stats mapping input arguments' " luca.boccassi
2018-07-27 10:17   ` [dpdk-stable] patch 'examples/ipsec-secgw: fix IPv4 checksum at Tx' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'examples/ipsec-secgw: fix bypass rule processing' " luca.boccassi
2018-07-27 10:17     ` luca.boccassi [this message]
2018-07-27 10:17     ` [dpdk-stable] patch 'net/i40e: fix check of flow director programming status' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'ethdev: fix queue statistics mapping documentation' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'net/thunderx: avoid sq door bell write on zero packet' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'examples/exception_path: fix out-of-bounds read' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'examples/l3fwd: remove useless include' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'test: fix EAL flags autotest on FreeBSD' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'test/hash: fix multiwriter with non consecutive cores' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'test/hash: fix potential memory leak' " luca.boccassi
2018-07-27 10:17     ` [dpdk-stable] patch 'doc: fix bonding command in testpmd' " luca.boccassi
2018-08-06 10:56     ` [dpdk-stable] patch 'test: fix uninitialized port configuration' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'app/testpmd: fix DCB config' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/bnxt: check access denied for HWRM commands' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/bnxt: fix RETA size' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/qede/base: fix GRC attention callback' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/qede: fix MAC address removal failure message' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/bnx2x: fix FW command timeout during stop' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/i40e: revert fix of flow director check' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'net/bonding: fix race condition' " luca.boccassi
2018-08-06 10:56       ` [dpdk-stable] patch 'eal: fix bitmap documentation' " luca.boccassi
2018-08-10  9:06       ` [dpdk-stable] patch 'hash: fix doxygen of return values' " luca.boccassi
2018-08-10  9:06         ` [dpdk-stable] patch 'kni: fix crash with null name' " luca.boccassi
2018-08-10  9:06         ` [dpdk-stable] patch 'kni: fix build on RHEL 7.5' " luca.boccassi
2018-08-10  9:06         ` [dpdk-stable] patch 'ethdev: fix a doxygen comment for port allocation' " luca.boccassi
2018-08-10  9:06         ` [dpdk-stable] patch 'mk: fix permissions when using make install' " luca.boccassi
2018-08-10  9:06         ` [dpdk-stable] patch 'maintainers: claim maintainership for ARM v7 and v8' " luca.boccassi
2018-08-28 10:25         ` [dpdk-stable] patch 'net/null: add MAC address setting fake operation' " Luca Boccassi
2018-08-28 10:25           ` [dpdk-stable] patch 'test/virtual_pmd: add MAC address setting fake op' " Luca Boccassi
2018-08-28 10:25           ` [dpdk-stable] patch 'test/bonding: assign non-zero MAC to null devices' " Luca Boccassi
2018-08-28 10:25           ` [dpdk-stable] patch 'Revert "net/i40e: fix packet count for PF"' " Luca Boccassi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180727101748.30228-3-luca.boccassi@gmail.com \
    --to=luca.boccassi@gmail.com \
    --cc=qi.z.zhang@intel.com \
    --cc=stable@dpdk.org \
    --cc=xiaoyun.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).