From patchwork Mon Oct 31 18:35:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 16876 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 5FD516CB9; Mon, 31 Oct 2016 19:35:17 +0100 (CET) Received: from mx0b-0016ce01.pphosted.com (mx0b-0016ce01.pphosted.com [67.231.156.153]) by dpdk.org (Postfix) with ESMTP id D8C126CA4 for ; Mon, 31 Oct 2016 19:35:13 +0100 (CET) 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 u9VIWF8u024477; Mon, 31 Oct 2016 11:35:12 -0700 Received: from avcashub1.qlogic.com ([198.186.0.117]) by mx0b-0016ce01.pphosted.com with ESMTP id 26ctrpwmpt-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Mon, 31 Oct 2016 11:35:12 -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; Mon, 31 Oct 2016 11:35:11 -0700 Received: (from rmody@localhost) by avluser05.qlc.com (8.14.4/8.14.4/Submit) id u9VIZBqA025040; Mon, 31 Oct 2016 11:35:11 -0700 X-Authentication-Warning: avluser05.qlc.com: rmody set sender to Rasesh.Mody@cavium.com using -f From: Rasesh Mody To: , Date: Mon, 31 Oct 2016 11:35:01 -0700 Message-ID: <1477938901-24999-2-git-send-email-Rasesh.Mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1477938901-24999-1-git-send-email-Rasesh.Mody@cavium.com> References: <1477721677-25668-1-git-send-email-Rasesh.Mody@cavium.com> <1477938901-24999-1-git-send-email-Rasesh.Mody@cavium.com> MIME-Version: 1.0 disclaimer: bypass X-Proofpoint-Virus-Version: vendor=nai engine=5800 definitions=8335 signatures=670698 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1610310327 Cc: dev@dpdk.org, Dept-EngDPDKDev@qlogic.com Subject: [dpdk-dev] [PATCH v3] 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Harish Patil 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 --- 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..d2e476c 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)); @@ -515,6 +516,29 @@ static void qed_fill_link(struct ecore_hwfn *hwfn, 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;