From patchwork Fri May 22 17:32:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kalesh A P X-Patchwork-Id: 70535 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 50514A04A2; Fri, 22 May 2020 19:17:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D79351D9F3; Fri, 22 May 2020 19:17:18 +0200 (CEST) Received: from relay.smtp.broadcom.com (relay.smtp.broadcom.com [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id E63CD1D9F0 for ; Fri, 22 May 2020 19:17:07 +0200 (CEST) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 154D01BFEE2; Fri, 22 May 2020 10:17:01 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 154D01BFEE2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1590167823; bh=1XjBMCd7TZqkSUBfJBp5MQwGoEVBF6+Udb/7xh5N3H4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QkCe7vniiq3XCjqdMBN7FcVNwPNnDWGmAA3Jg5K+d1XVx0XZFyWTjS7LZooa4vUGt Kz8+M47djhpb4CNLP+EWz13+8ErTdGQXq+N2t/v8KHqEQPwemwm/IcXEagrp03mxAn B4yuVHCWTi5NgTgOQpa6pZkWfonCcfPK+MBLfOQU= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Fri, 22 May 2020 23:02:53 +0530 Message-Id: <20200522173254.18643-2-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200522173254.18643-1-kalesh-anakkur.purayil@broadcom.com> References: <20200522173254.18643-1-kalesh-anakkur.purayil@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] =?utf-8?q?_=5BPATCH_1/2=5D_net/bnxt=3A_fix_the_check_for?= =?utf-8?q?_validating=C2=A0link_speed?= X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Kalesh AP bnxt PMD uses the macro BNXT_SUPPORTED_SPEEDS to validate the user requested speed. But this has all the speed values supported by the PMD and is not chip specific. The check against this macro returns success when the user tries set the speed to 100G on a port even if the chip does not support 100G speed. Fixed it to use bnxt_get_speed_capabilities() to check the supported speeds by the chip. Fixes: 1d0704f4d793 ("net/bnxt: add device configure operation") Cc: stable@dpdk.org Signed-off-by: Kalesh AP Reviewed-by: Somnath Kotur Reviewed-by: Ajit Kumar Khaparde --- drivers/net/bnxt/bnxt.h | 1 + drivers/net/bnxt/bnxt_ethdev.c | 2 +- drivers/net/bnxt/bnxt_hwrm.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 446764c..2c3aef6 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -780,4 +780,5 @@ void bnxt_cancel_fc_thread(struct bnxt *bp); void bnxt_flow_cnt_alarm_cb(void *arg); int bnxt_flow_stats_req(struct bnxt *bp); int bnxt_flow_stats_cnt(struct bnxt *bp); +uint32_t bnxt_get_speed_capabilities(struct bnxt *bp); #endif diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index ae495da..e635781 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -778,7 +778,7 @@ static int bnxt_shutdown_nic(struct bnxt *bp) * Device configuration and status function */ -static uint32_t bnxt_get_speed_capabilities(struct bnxt *bp) +uint32_t bnxt_get_speed_capabilities(struct bnxt *bp) { uint32_t link_speed = bp->link_info->support_speeds; uint32_t speed_capa = 0; diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index c1798b5..945bc90 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -2788,13 +2788,18 @@ static uint16_t bnxt_parse_eth_link_speed(uint32_t conf_link_speed) ETH_LINK_SPEED_40G | ETH_LINK_SPEED_50G | \ ETH_LINK_SPEED_100G | ETH_LINK_SPEED_200G) -static int bnxt_valid_link_speed(uint32_t link_speed, uint16_t port_id) +static int bnxt_validate_link_speed(struct bnxt *bp) { + uint32_t link_speed = bp->eth_dev->data->dev_conf.link_speeds; + uint16_t port_id = bp->eth_dev->data->port_id; + uint32_t link_speed_capa; uint32_t one_speed; if (link_speed == ETH_LINK_SPEED_AUTONEG) return 0; + link_speed_capa = bnxt_get_speed_capabilities(bp); + if (link_speed & ETH_LINK_SPEED_FIXED) { one_speed = link_speed & ~ETH_LINK_SPEED_FIXED; @@ -2804,14 +2809,14 @@ static int bnxt_valid_link_speed(uint32_t link_speed, uint16_t port_id) link_speed, port_id); return -EINVAL; } - if ((one_speed & BNXT_SUPPORTED_SPEEDS) != one_speed) { + if ((one_speed & link_speed_capa) != one_speed) { PMD_DRV_LOG(ERR, "Unsupported advertised speed (%u) for port %u\n", link_speed, port_id); return -EINVAL; } } else { - if (!(link_speed & BNXT_SUPPORTED_SPEEDS)) { + if (!(link_speed & link_speed_capa)) { PMD_DRV_LOG(ERR, "Unsupported advertised speeds (%u) for port %u\n", link_speed, port_id); @@ -2957,8 +2962,7 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up) if (!BNXT_SINGLE_PF(bp) || BNXT_VF(bp)) return 0; - rc = bnxt_valid_link_speed(dev_conf->link_speeds, - bp->eth_dev->data->port_id); + rc = bnxt_validate_link_speed(bp); if (rc) goto error; From patchwork Fri May 22 17:32:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kalesh A P X-Patchwork-Id: 70534 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4478CA04A2; Fri, 22 May 2020 19:17:14 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7701A1D9F4; Fri, 22 May 2020 19:17:08 +0200 (CEST) Received: from relay.smtp.broadcom.com (relay.smtp.broadcom.com [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 6A61C1D9DB for ; Fri, 22 May 2020 19:17:05 +0200 (CEST) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 92CD01BFEE8; Fri, 22 May 2020 10:17:03 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 92CD01BFEE8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1590167824; bh=8qE7vSshyp2zHAgltcZmvkhOM9tQrTQli6L0hKyJi28=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AQ1SCY5brVuz/4U/wQUGZ7rOMOkwe++oUNZG/E8CP5605bFBI1J0/I+Wt+ZT2WyBC /gNiG53CtHH32jKxYhotPb/VcjKYHmxymcSUSzp2xgd9LwqIzNvGLQ8KleWpFemK+M gJ7uK2OVOklm3lv2SmATxbmt0YWns9wRruoMf3m4= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Fri, 22 May 2020 23:02:54 +0530 Message-Id: <20200522173254.18643-3-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200522173254.18643-1-kalesh-anakkur.purayil@broadcom.com> References: <20200522173254.18643-1-kalesh-anakkur.purayil@broadcom.com> Subject: [dpdk-dev] [PATCH 2/2] net/bnxt: performance fix for ARM X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Rahul Gupta Eliminate unnecessary rte_smp_wmb() before writing to request/completion doorbells. Use rte_cio_wmb() memory barrier instead of rte_io_wmb() before writing to tx/rx request queue doorbells and use rte_compiler_barrier() before writing to tx/rx completion queue doorbells. Fixes: 4af9d0c72941 ("net/bnxt: cleanup NQ doorbell") Fixes: f8168ca0e690 ("net/bnxt: support thor controller") Cc: stable@dpdk.org Signed-off-by: Rahul Gupta Signed-off-by: Kalesh AP --- drivers/net/bnxt/bnxt_cpr.h | 6 +++--- drivers/net/bnxt/bnxt_ring.h | 24 +++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h index c288078..cccd6cd 100644 --- a/drivers/net/bnxt/bnxt_cpr.h +++ b/drivers/net/bnxt/bnxt_cpr.h @@ -64,9 +64,9 @@ struct bnxt_db_info; (cons)); \ } while (0) #define B_CP_DIS_DB(cpr, raw_cons) \ - rte_write32((DB_CP_FLAGS | \ - RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \ - ((cpr)->cp_db.doorbell)) + rte_write32_relaxed((DB_CP_FLAGS | \ + RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \ + ((cpr)->cp_db.doorbell)) #define B_CP_DB(cpr, raw_cons, ring_mask) \ rte_write32((DB_CP_FLAGS | \ diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h index 48a39d7..9913aed 100644 --- a/drivers/net/bnxt/bnxt_ring.h +++ b/drivers/net/bnxt/bnxt_ring.h @@ -82,10 +82,12 @@ void bnxt_free_rxtx_nq_ring(struct bnxt *bp); static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx) { + rte_cio_wmb(); + if (db->db_64) rte_write64_relaxed(db->db_key64 | idx, db->doorbell); else - rte_write32(db->db_key32 | idx, db->doorbell); + rte_write32_relaxed(db->db_key32 | idx, db->doorbell); } /* Ring an NQ doorbell and disable interrupts for the ring. */ @@ -94,10 +96,10 @@ static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr) if (unlikely(!cpr->cp_db.db_64)) return; - rte_smp_wmb(); - rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ | - RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), - cpr->cp_db.doorbell); + rte_cio_wmb(); + rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ | + RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), + cpr->cp_db.doorbell); } /* Ring an NQ doorbell and enable interrupts for the ring. */ @@ -106,10 +108,10 @@ static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr) if (unlikely(!cpr->cp_db.db_64)) return; - rte_smp_wmb(); - rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM | - RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), - cpr->cp_db.doorbell); + rte_cio_wmb(); + rte_write64_relaxed(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM | + RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons), + cpr->cp_db.doorbell); } static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr) @@ -117,9 +119,9 @@ static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr) struct bnxt_db_info *db = &cpr->cp_db; uint32_t idx = RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons); - rte_smp_wmb(); + rte_compiler_barrier(); if (db->db_64) - rte_write64(db->db_key64 | idx, db->doorbell); + rte_write64_relaxed(db->db_key64 | idx, db->doorbell); else B_CP_DIS_DB(cpr, cpr->cp_raw_cons); }