patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Yuanhan Liu <yliu@fridaylinux.org>
To: Ajit Khaparde <ajit.khaparde@broadcom.com>
Cc: stable@dpdk.org
Subject: Re: [dpdk-stable] [PATCH] net/bnxt: fix link speed setting with autoneg off
Date: Mon, 26 Feb 2018 10:25:10 +0800	[thread overview]
Message-ID: <20180226022510.GD11744@yliu-mob> (raw)
In-Reply-To: <20180225050216.76633-1-ajit.khaparde@broadcom.com>

On Sat, Feb 24, 2018 at 09:02:16PM -0800, Ajit Khaparde wrote:
> When Autoneg is turned off especially on remote side,
> link does not come up. This patch fixes that.
> 
> backported from upstream commit 90cc14d77359bb3f8e48f4ef966ee77a52703949
> ("net/bnxt: fix link speed setting with autoneg off")
> 
> Fixes: 7bc8e9a227cc ("net/bnxt: support async link notification")
> Cc: stable@dpdk.org

Applied to dpdk-stable/17.11.

Thanks for the backporting!

	--yliu
> 
> Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
> ---
>  drivers/net/bnxt/bnxt.h      |  1 +
>  drivers/net/bnxt/bnxt_hwrm.c | 25 ++++++++++++++++++++++---
>  2 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
> index 8ab1c7f85..3bc2b9379 100644
> --- a/drivers/net/bnxt/bnxt.h
> +++ b/drivers/net/bnxt/bnxt.h
> @@ -162,6 +162,7 @@ struct bnxt_link_info {
>  	uint16_t		link_speed;
>  	uint16_t		support_speeds;
>  	uint16_t		auto_link_speed;
> +	uint16_t		force_link_speed;
>  	uint16_t		auto_link_speed_mask;
>  	uint32_t		preemphasis;
>  	uint8_t			phy_type;
> diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
> index 51b0056cd..ce214d7cb 100644
> --- a/drivers/net/bnxt/bnxt_hwrm.c
> +++ b/drivers/net/bnxt/bnxt_hwrm.c
> @@ -738,7 +738,8 @@ static int bnxt_hwrm_port_phy_cfg(struct bnxt *bp, struct bnxt_link_info *conf)
>  				HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS;
>  		}
>  		/* AutoNeg - Advertise speeds specified. */
> -		if (conf->auto_link_speed_mask) {
> +		if (conf->auto_link_speed_mask &&
> +		    !(conf->phy_flags & HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE)) {
>  			req.auto_mode =
>  				HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK;
>  			req.auto_link_speed_mask =
> @@ -801,12 +802,22 @@ static int bnxt_hwrm_port_phy_qcfg(struct bnxt *bp,
>  	link_info->support_speeds = rte_le_to_cpu_16(resp->support_speeds);
>  	link_info->auto_link_speed = rte_le_to_cpu_16(resp->auto_link_speed);
>  	link_info->preemphasis = rte_le_to_cpu_32(resp->preemphasis);
> +	link_info->force_link_speed = rte_le_to_cpu_16(resp->force_link_speed);
>  	link_info->phy_ver[0] = resp->phy_maj;
>  	link_info->phy_ver[1] = resp->phy_min;
>  	link_info->phy_ver[2] = resp->phy_bld;
>  
>  	HWRM_UNLOCK();
>  
> +	RTE_LOG(DEBUG, PMD, "Link Speed %d\n", link_info->link_speed);
> +	RTE_LOG(DEBUG, PMD, "Auto Mode %d\n", link_info->auto_mode);
> +	RTE_LOG(DEBUG, PMD, "Support Speeds %x\n", link_info->support_speeds);
> +	RTE_LOG(DEBUG, PMD, "Auto Link Speed %x\n", link_info->auto_link_speed);
> +	RTE_LOG(DEBUG, PMD, "Auto Link Speed Mask %x\n",
> +		    link_info->auto_link_speed_mask);
> +	RTE_LOG(DEBUG, PMD, "Forced Link Speed %x\n",
> +		    link_info->force_link_speed);
> +
>  	return rc;
>  }
>  
> @@ -2124,7 +2135,9 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
>  	autoneg = bnxt_check_eth_link_autoneg(dev_conf->link_speeds);
>  	speed = bnxt_parse_eth_link_speed(dev_conf->link_speeds);
>  	link_req.phy_flags = HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY;
> -	if (autoneg == 1) {
> +	/* Autoneg can be done only when the FW allows */
> +	if (autoneg == 1 && !(bp->link_info.auto_link_speed ||
> +				bp->link_info.force_link_speed)) {
>  		link_req.phy_flags |=
>  				HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG;
>  		link_req.auto_link_speed_mask =
> @@ -2142,7 +2155,13 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
>  		}
>  
>  		link_req.phy_flags |= HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE;
> -		link_req.link_speed = speed;
> +		/* If user wants a particular speed try that first. */
> +		if (speed)
> +			link_req.link_speed = speed;
> +		else if (bp->link_info.force_link_speed)
> +			link_req.link_speed = bp->link_info.force_link_speed;
> +		else
> +			link_req.link_speed = bp->link_info.auto_link_speed;
>  	}
>  	link_req.duplex = bnxt_parse_eth_link_duplex(dev_conf->link_speeds);
>  	link_req.auto_pause = bp->link_info.auto_pause;
> -- 
> 2.14.3 (Apple Git-98)

      reply	other threads:[~2018-02-26  2:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-25  5:02 Ajit Khaparde
2018-02-26  2:25 ` Yuanhan Liu [this message]

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=20180226022510.GD11744@yliu-mob \
    --to=yliu@fridaylinux.org \
    --cc=ajit.khaparde@broadcom.com \
    --cc=stable@dpdk.org \
    /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).