From patchwork Fri May 22 17:42:08 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: 70536 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 987B7A04A2; Fri, 22 May 2020 19:26:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BD7A21D9F4; Fri, 22 May 2020 19:26:21 +0200 (CEST) Received: from relay.smtp.broadcom.com (relay.smtp.broadcom.com [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 7B5661D9F3 for ; Fri, 22 May 2020 19:26:20 +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 643611BFEDA; Fri, 22 May 2020 10:26:17 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 643611BFEDA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1590168378; bh=1XjBMCd7TZqkSUBfJBp5MQwGoEVBF6+Udb/7xh5N3H4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s66jcr3P/pFSqsY1ra/++Jhv3C4vM0xpJp9gg/gbzoTMquEiSKombQ3sOxFMcM1Ej bYoZNw9ojYZtA/SiGgTO2lpmrOam4Ntnd+kGnmy7NQYDaGSI2DZvvYBPb0eJGRCKP2 M7jTs3uGV5w9OUp916Qe235Zaqm2CGNZAqNVUg8c= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Fri, 22 May 2020 23:12:08 +0530 Message-Id: <20200522174209.19402-2-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> References: <20200522173254.18643-2-kalesh-anakkur.purayil@broadcom.com> <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] =?utf-8?q?_=5BPATCH_v2_1/2=5D_net/bnxt=3A_fix_the_check_?= =?utf-8?q?for_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:42:09 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: 70538 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 9455AA04A2; Fri, 22 May 2020 19:26:36 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B34231DA0C; Fri, 22 May 2020 19:26:27 +0200 (CEST) Received: from relay.smtp.broadcom.com (unknown [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id B80121D9FF for ; Fri, 22 May 2020 19:26:24 +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 E25B01BFEFD; Fri, 22 May 2020 10:26:18 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com E25B01BFEFD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1590168379; bh=gN1BUQ3xkB/XBSNCpt54sXhoSgE1rpD0Ut34yP0K6QU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YEWJFOnqgtyeKxPs4adqoGkEuEY5/TdR6xgcftcMurYzURRO1vw7Nfb2NNA6WvrAA 89AX9sYfsjPu34rHy2GhdIKL9tajrCHQoaCVXSnRd+IU0mDQoVuqczPhLEI1rWxSTm 0ZQoczc7qHlgtsxAyPvKzPlauN7owVMT2odwT7YM= From: Kalesh A P To: dev@dpdk.org Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com Date: Fri, 22 May 2020 23:12:09 +0530 Message-Id: <20200522174209.19402-3-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> References: <20200522173254.18643-2-kalesh-anakkur.purayil@broadcom.com> <20200522174209.19402-1-kalesh-anakkur.purayil@broadcom.com> Subject: [dpdk-dev] [PATCH v2 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 Reviewed-by: Ajit Kumar Khaparde Reviewed-by: Lance Richardson --- 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); }