From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f53.google.com (mail-pg0-f53.google.com [74.125.83.53]) by dpdk.org (Postfix) with ESMTP id 921717D4B for ; Fri, 18 Aug 2017 12:38:14 +0200 (CEST) Received: by mail-pg0-f53.google.com with SMTP id u185so61768586pgb.1 for ; Fri, 18 Aug 2017 03:38:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=9yCLCrYhPQCRyEp41Vo7doBXShiJpqcbbCL8gUyAcuY=; b=nM6Tda7FIYl/nOI6qJy73DV0KSiW3vgttWYy4YDcWL+eNy/5ZnVb1lZ2W3H2IqKXXk +eS4av4YlZk9GPllhGK0uaXa0VvCyLC3jL+wy95OSxbmHEXKtOUtA7yuoJIo0Pz3MjyS 6KxhusV4FBOoExCC4v9Q63pV0hoqKEVJQfcvXycBC55EMvHSxr5udm3NCYbS06gCL1Gg 3F131Fn1yj1xuz8+XE3BaBPDIBIG4ANEZ1H9GP/Cu3Sz6KEy+9jsRrl253+UeGTTokNE FU5f8E3/ZPbdvhXioUybztm8fcC+19j8wzmdlrx+EmWv5cuBtERRQFG/su572MXNds3D hj8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=9yCLCrYhPQCRyEp41Vo7doBXShiJpqcbbCL8gUyAcuY=; b=lVMdqug0+0S7YEi/KRhb+vEwXeL018WIEcyJGwBzjM4AmxKThndslHXMfQgQUIg0PV IHBp2eiYh5jctKUN3VjetTZ4V3yXJ332nJ8P5sX6o7IQOKjnzjcYLpKajhRS0gdinP+v ziovsGlfhy3lSMXHzJpYpL7DbO2cVsbQxaiLTc2SMuVl7qFHCgKnoBqFGOLpAOEmtn6k Sak0QBq3nyRIbdUrH5k4sOlkwH3rGku5rVQ8kJRcut8JhF9tEw1WpA722AAqhzqE/uLt YqsYQpGn4f469loNyaX0XFc22Fo2Cu88PEuff/mR6EQFRnAvoT3haBMz9VKkIzlRwFoR 0hWg== X-Gm-Message-State: AHYfb5hadpkNV8Lkh7hLhn9r95bp7kTrnJ1sfwubvn7OmU6EWRbzbvNW 3ss9Zr/KO1toyES0 X-Received: by 10.98.80.131 with SMTP id g3mr8583198pfj.156.1503052693662; Fri, 18 Aug 2017 03:38:13 -0700 (PDT) Received: from yliu-home ([45.63.61.64]) by smtp.gmail.com with ESMTPSA id s22sm2737270pfd.85.2017.08.18.03.38.10 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 18 Aug 2017 03:38:12 -0700 (PDT) Date: Fri, 18 Aug 2017 18:38:05 +0800 From: Yuanhan Liu To: Jeff Guo Cc: beilei.xing@intel.com, jingjing.wu@intel.com, stable@dpdk.org Message-ID: <20170818103804.GM9612@yliu-home> References: <1503052326-2576-1-git-send-email-jia.guo@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1503052326-2576-1-git-send-email-jia.guo@intel.com> User-Agent: Mutt/1.5.24 (2015-08-30) Subject: Re: [dpdk-stable] [PATCH v2] net/i40e: fix link down and negotiation X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Aug 2017 10:38:15 -0000 On Fri, Aug 18, 2017 at 06:32:06PM +0800, Jeff Guo wrote: > [ backported from upstream commit 1bb8f661168d942927cb65e355ec64d4ab195281 ] Applied to dpdk-stable/16.11. Thank you! --yliu > > Enable the functions set link down and set link up in i40e by check > phy_type, and fix the issue of auto negotiation failed in XXV710 when > bind kernel driver after unbind from DPDK driver by modify the speed > setting distinguish from set link up and down. With this fix, if unbind > DPDK to bind kernel driver, no need to set auto negotiation and ifconfig > up anymore, remove the part from doc. > > Fixes: ca7e599d4506 ("net/i40e: fix link management") > Fixes: 2f1e22817420 ("i40e: skip link control as firmware workaround") > Fixes: 6e145fcc754b ("i40e: support autoneg or force link speed") > > Signed-off-by: Jeff Guo > Acked-by: Jingjing Wu > --- > v2->v1: rebase the branch to 16.11 > --- > drivers/net/i40e/i40e_ethdev.c | 34 ++++++++++++++++++++++------------ > 1 file changed, 22 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index f65ddc7..65e10f3 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -1591,11 +1591,15 @@ i40e_parse_link_speeds(uint16_t link_speeds) > static int > i40e_phy_conf_link(struct i40e_hw *hw, > uint8_t abilities, > - uint8_t force_speed) > + uint8_t force_speed, > + bool is_up) > { > enum i40e_status_code status; > struct i40e_aq_get_phy_abilities_resp phy_ab; > struct i40e_aq_set_phy_config phy_conf; > + enum i40e_aq_phy_type cnt; > + 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 | > @@ -1613,6 +1617,10 @@ i40e_phy_conf_link(struct i40e_hw *hw, > if (status) > return ret; > > + /* If link already up, no need to set up again */ > + if (is_up && phy_ab.phy_type != 0) > + return I40E_SUCCESS; > + > memset(&phy_conf, 0, sizeof(phy_conf)); > > /* bits 0-2 use the values from get_phy_abilities_resp */ > @@ -1623,13 +1631,21 @@ i40e_phy_conf_link(struct i40e_hw *hw, > if (abilities & I40E_AQ_PHY_AN_ENABLED) > phy_conf.link_speed = advt; > else > - phy_conf.link_speed = force_speed; > + phy_conf.link_speed = is_up ? force_speed : phy_ab.link_speed; > > phy_conf.abilities = abilities; > > + > + > + /* To enable link, phy_type mask needs to include each type */ > + for (cnt = I40E_PHY_TYPE_SGMII; cnt < I40E_PHY_TYPE_MAX; cnt++) > + phy_type_mask |= 1 << cnt; > + > /* use get_phy_abilities_resp value for the rest */ > - phy_conf.phy_type = phy_ab.phy_type; > - phy_conf.phy_type_ext = phy_ab.phy_type_ext; > + phy_conf.phy_type = is_up ? cpu_to_le32(phy_type_mask) : 0; > + phy_conf.phy_type_ext = is_up ? (I40E_AQ_PHY_TYPE_EXT_25G_KR | > + I40E_AQ_PHY_TYPE_EXT_25G_CR | I40E_AQ_PHY_TYPE_EXT_25G_SR | > + I40E_AQ_PHY_TYPE_EXT_25G_LR) : 0; > phy_conf.fec_config = phy_ab.mod_type_ext; > phy_conf.eee_capability = phy_ab.eee_capability; > phy_conf.eeer = phy_ab.eeer_val; > @@ -1661,13 +1677,7 @@ i40e_apply_link_speed(struct rte_eth_dev *dev) > abilities |= I40E_AQ_PHY_AN_ENABLED; > abilities |= I40E_AQ_PHY_LINK_ENABLED; > > - /* Skip changing speed on 40G interfaces, FW does not support */ > - if (I40E_PHY_TYPE_SUPPORT_40G(hw->phy.phy_types)) { > - speed = I40E_LINK_SPEED_UNKNOWN; > - abilities |= I40E_AQ_PHY_AN_ENABLED; > - } > - > - return i40e_phy_conf_link(hw, abilities, speed); > + return i40e_phy_conf_link(hw, abilities, speed, true); > } > > static int > @@ -1992,7 +2002,7 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev) > struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > abilities = I40E_AQ_PHY_ENABLE_ATOMIC_LINK; > - return i40e_phy_conf_link(hw, abilities, speed); > + return i40e_phy_conf_link(hw, abilities, speed, false); > } > > int > -- > 2.7.4