From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <Rasesh.Mody@cavium.com>
Received: from mx0b-0016ce01.pphosted.com (mx0b-0016ce01.pphosted.com
 [67.231.156.153]) by dpdk.org (Postfix) with ESMTP id 1DF815587
 for <dev@dpdk.org>; Sat, 29 Oct 2016 08:14:57 +0200 (CEST)
Received: from pps.filterd (m0085408.ppops.net [127.0.0.1])
 by mx0b-0016ce01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id
 u9T6CKd0024451; Fri, 28 Oct 2016 23:14:55 -0700
Received: from avcashub1.qlogic.com ([198.186.0.117])
 by mx0b-0016ce01.pphosted.com with ESMTP id 26audmbswf-1
 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT);
 Fri, 28 Oct 2016 23:14:55 -0700
Received: from avluser05.qlc.com (10.1.113.115) by qlc.com (10.1.4.192) with
 Microsoft SMTP Server id 14.3.235.1; Fri, 28 Oct 2016 23:14:54 -0700
Received: (from rmody@localhost)	by avluser05.qlc.com (8.14.4/8.14.4/Submit)
 id u9T6ErCp025715;	Fri, 28 Oct 2016 23:14:53 -0700
X-Authentication-Warning: avluser05.qlc.com: rmody set sender to
 Rasesh.Mody@cavium.com using -f
From: Rasesh Mody <Rasesh.Mody@cavium.com>
To: <thomas.monjalon@6wind.com>
Date: Fri, 28 Oct 2016 23:14:37 -0700
Message-ID: <1477721677-25668-1-git-send-email-Rasesh.Mody@cavium.com>
X-Mailer: git-send-email 1.7.10.3
In-Reply-To: <9851708.0H4Kn83q5Z@xps13>
References: <9851708.0H4Kn83q5Z@xps13>
MIME-Version: 1.0
Content-Type: text/plain
disclaimer: bypass
X-Proofpoint-Virus-Version: vendor=nai engine=5800 definitions=8332
 signatures=670696
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0
 priorityscore=1501 malwarescore=0
 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011
 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0
 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1610290109
Cc: dev@dpdk.org, Dept-EngDPDKDev@qlogic.com
Subject: [dpdk-dev] [PATCH v2] net/qede: fix advertising link speed
	capability
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Sat, 29 Oct 2016 06:14:57 -0000

From: Harish Patil <harish.patil@qlogic.com>

Fix to advertise device's link speed capability based on NVM
port configuration instead of returning driver supported speeds.

Fixes: 95e67b479506 ("net/qede: add 100G link speed capability")

Signed-off-by: Harish Patil <harish.patil@qlogic.com>
---
 drivers/net/qede/qede_ethdev.c |  6 ++++--
 drivers/net/qede/qede_ethdev.h |  1 +
 drivers/net/qede/qede_if.h     |  1 +
 drivers/net/qede/qede_main.c   | 24 ++++++++++++++++++++++++
 4 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index b91b478..59129f2 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -646,6 +646,7 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev,
 {
 	struct qede_dev *qdev = eth_dev->data->dev_private;
 	struct ecore_dev *edev = &qdev->edev;
+	struct qed_link_output link;

 	PMD_INIT_FUNC_TRACE(edev);

@@ -678,8 +679,9 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev,
 				     DEV_TX_OFFLOAD_UDP_CKSUM |
 				     DEV_TX_OFFLOAD_TCP_CKSUM);

-	dev_info->speed_capa = ETH_LINK_SPEED_25G | ETH_LINK_SPEED_40G |
-			       ETH_LINK_SPEED_100G;
+	memset(&link, 0, sizeof(struct qed_link_output));
+	qdev->ops->common->get_link(edev, &link);
+	dev_info->speed_capa = rte_eth_speed_bitflag(link.adv_speed, 0);
 }

 /* return 0 means link status changed, -1 means not changed */
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index 5eb3f52..a97e3d9 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -30,6 +30,7 @@
 #include "base/ecore_dev_api.h"
 #include "base/ecore_iov_api.h"
 #include "base/ecore_cxt.h"
+#include "base/nvm_cfg.h"

 #include "qede_logs.h"
 #include "qede_if.h"
diff --git a/drivers/net/qede/qede_if.h b/drivers/net/qede/qede_if.h
index 2d38b1b..4936349 100644
--- a/drivers/net/qede/qede_if.h
+++ b/drivers/net/qede/qede_if.h
@@ -70,6 +70,7 @@ struct qed_link_output {
 	uint32_t advertised_caps;	/* In ADVERTISED defs */
 	uint32_t lp_caps;	/* In ADVERTISED defs */
 	uint32_t speed;		/* In Mb/s */
+	uint32_t adv_speed;	/* In Mb/s */
 	uint8_t duplex;		/* In DUPLEX defs */
 	uint8_t port;		/* In PORT defs */
 	bool autoneg;
diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
index 2d354e1..e6501d0 100644
--- a/drivers/net/qede/qede_main.c
+++ b/drivers/net/qede/qede_main.c
@@ -488,6 +488,7 @@ static void qed_fill_link(struct ecore_hwfn *hwfn,
 	struct ecore_mcp_link_state link;
 	struct ecore_mcp_link_capabilities link_caps;
 	uint32_t media_type;
+	uint32_t adv_speed;
 	uint8_t change = 0;

 	memset(if_link, 0, sizeof(*if_link));
@@ -514,6 +515,29 @@ static void qed_fill_link(struct ecore_hwfn *hwfn,
 		if_link->speed = link.speed;

 	if_link->duplex = QEDE_DUPLEX_FULL;
+
+	/* Fill up the native advertised speed */
+	switch (params.speed.advertised_speeds) {
+		case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_10G:
+			adv_speed = 10000;
+			break;
+		case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_25G:
+			adv_speed = 25000;
+			break;
+		case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_40G:
+			adv_speed = 40000;
+			break;
+		case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_50G:
+			adv_speed = 50000;
+			break;
+		case NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_BB_100G:
+			adv_speed = 100000;
+			break;
+		default:
+			DP_NOTICE(hwfn, false, "Unknown speed\n");
+			adv_speed = 0;
+	}
+	if_link->adv_speed = adv_speed;

 	if (params.speed.autoneg)
 		if_link->supported_caps |= QEDE_SUPPORTED_AUTONEG;
--
1.8.3.1