From patchwork Wed Feb 22 03:04:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 124336 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A660A41D36; Wed, 22 Feb 2023 04:04:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5425540697; Wed, 22 Feb 2023 04:04:09 +0100 (CET) Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by mails.dpdk.org (Postfix) with ESMTP id F1BC140693 for ; Wed, 22 Feb 2023 04:04:07 +0100 (CET) Received: by mail-pj1-f54.google.com with SMTP id oe18-20020a17090b395200b00236a0d55d3aso7305960pjb.3 for ; Tue, 21 Feb 2023 19:04:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:message-id:date:subject:to:from:from:to:cc:subject :date:message-id:reply-to; bh=z+haSdDsvH7vt4/YDL04K07Wt3IlIM/ftCsWB+4oLxE=; b=d/m5y0Lk3NrjR5v3PQfPs8YLHXbid9ydSGMLX1S7hheT+cxVRvDWEquF8zUdxmKP7s RSM1jlkJs/dREFNXCC4+cnfONIw1FlwkgdM8JExRiaokg8nlbUBD1WETRTC+xqtP1ohg 5YSeWghBX+OXcquWJqCCpnFLd48kjOczrBWuk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:subject:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=z+haSdDsvH7vt4/YDL04K07Wt3IlIM/ftCsWB+4oLxE=; b=AWovcsHW5gCyz8DAKN0CJjsezMkXqSnTasVerGQ4nyW9i0GFXC3I5kzgWu3TxauvFc AOee1F77f/cyg4ZJkVzP0BjTnwXZdQKuP3Ay1PBPy1kRzZf7gt0FlC7Ny8C66QTSwSvD 7OE6Q7PH4/9RZylV2JtfekvillONkLRREF+5uWxBprijYG8SUAYvev7y4mgpfop1eykR T310SN6Z3S1EODJdZDwLdPHRhLGp0YTdjBtDbmocYJ41Vkksrvf9YtSdB/2iredFMM/e DNWMn06OqFw5td8n549HvqB91hBdCPQnZjiEgY7CdRJun0gvDH1RaWfu43g90N6Ag4ob X02Q== X-Gm-Message-State: AO0yUKWMc1ZRWm+45qRxWdbJ7IxC3g+gzsfPx+iSjX9qN2suZQIhA5BJ I9ZRFhbnpVc8yQbkhGjmDi6yDXoipYzGNC5OwpPIPXas+U9S6MyvUcbu3+igbAxjBr3esi63vAf 5BeEQ39u7ejGQrWimKXPbDBxI9gbMeZ4fVjI50LGJJbfVfT0xULEzem9CK4q7C7k3rQ== X-Google-Smtp-Source: AK7set9tZXQ/sbF+DxxJOozBP+3I8vM/M5bYxVOKVHMHKb77H22v7xHTRT0En8ysr0IQNEe6jvX8qQ== X-Received: by 2002:a17:902:f9cc:b0:19a:f556:e3b6 with SMTP id kz12-20020a170902f9cc00b0019af556e3b6mr5900449plb.32.1677035045449; Tue, 21 Feb 2023 19:04:05 -0800 (PST) Received: from C02GC2QQMD6T.lan ([2605:a601:a780:1400:2c9b:e998:e844:1e77]) by smtp.gmail.com with ESMTPSA id ik21-20020a170902ab1500b0019a8e559345sm4380809plb.167.2023.02.21.19.04.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Feb 2023 19:04:04 -0800 (PST) From: Ajit Khaparde To: dev@dpdk.org Subject: [PATCH] net/bnxt: remove compile-time option for IEEE 1588 Date: Tue, 21 Feb 2023 19:04:01 -0800 Message-Id: <20230222030401.75575-1-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.37.1 (Apple Git-137.1) MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Typically drivers are supposed to enable/disable features dynamically instead of compile time options. Remove the compile time option RTE_LIBRTE_IEEE1588 from bnxt PMD. This patch is an improved and bnxt specific version of the previous submission which tried to remove the option tree wide, but was completely disabling for bnxt PMD. http://patchwork.dpdk.org/project/dpdk/patch/20230203132810.14187-1-thomas@monjalon.net/ Also add a devarg to enable/disable the setting, invoked as for ex: "-a 000:0b:0d.0,ieee-1588=1". Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt.h | 1 + drivers/net/bnxt/bnxt_ethdev.c | 63 +++++++++++++++++++++++++++++++--- drivers/net/bnxt/bnxt_rxr.c | 6 ---- 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index c9aa45ed3b..f6eaaeb470 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -832,6 +832,7 @@ struct bnxt { uint32_t hwrm_spec_code; struct bnxt_led_info *leds; + uint8_t ieee_1588; struct bnxt_ptp_cfg *ptp_cfg; uint16_t vf_resv_strategy; struct bnxt_ctx_mem_info *ctx; diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 753e86b4b2..f40a7f7f6a 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -97,6 +97,7 @@ static const struct rte_pci_id bnxt_pci_id_map[] = { #define BNXT_DEVARG_REP_FC_R2F "rep-fc-r2f" #define BNXT_DEVARG_REP_FC_F2R "rep-fc-f2r" #define BNXT_DEVARG_APP_ID "app-id" +#define BNXT_DEVARG_IEEE_1588 "ieee-1588" static const char *const bnxt_dev_args[] = { BNXT_DEVARG_REPRESENTOR, @@ -109,6 +110,7 @@ static const char *const bnxt_dev_args[] = { BNXT_DEVARG_REP_FC_R2F, BNXT_DEVARG_REP_FC_F2R, BNXT_DEVARG_APP_ID, + BNXT_DEVARG_IEEE_1588, NULL }; @@ -117,6 +119,11 @@ static const char *const bnxt_dev_args[] = { */ #define BNXT_DEVARG_APP_ID_INVALID(val) ((val) > 255) +/* + * ieee-1588 = an non-negative 8-bit number + */ +#define BNXT_DEVARG_IEEE_1588_INVALID(val) ((val) > 255) + /* * flow_xstat == false to disable the feature * flow_xstat == true to enable the feature @@ -1229,9 +1236,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev) return bnxt_recv_pkts; } -#if (defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)) && \ - !defined(RTE_LIBRTE_IEEE1588) - +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) /* Vector mode receive cannot be enabled if scattered rx is in use. */ if (eth_dev->data->scattered_rx) goto use_scalar_rx; @@ -1260,6 +1265,9 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev) RTE_ETH_RX_OFFLOAD_VLAN_FILTER)) goto use_scalar_rx; + if (bp->ieee_1588) + goto use_scalar_rx; + #if defined(RTE_ARCH_X86) && defined(CC_AVX2_SUPPORT) if (rte_vect_get_max_simd_bitwidth() >= RTE_VECT_SIMD_256 && rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX2) == 1) { @@ -1300,8 +1308,10 @@ bnxt_transmit_function(struct rte_eth_dev *eth_dev) if (BNXT_CHIP_SR2(bp)) return bnxt_xmit_pkts; -#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) && \ - !defined(RTE_LIBRTE_IEEE1588) + if (bp->ieee_1588) + goto use_scalar_tx; + +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64) uint64_t offloads = eth_dev->data->dev_conf.txmode.offloads; /* @@ -5486,6 +5496,42 @@ bnxt_parse_devarg_app_id(__rte_unused const char *key, return 0; } +static int +bnxt_parse_devarg_ieee_1588(__rte_unused const char *key, + const char *value, void *opaque_arg) +{ + struct bnxt *bp = opaque_arg; + unsigned long ieee_1588; + char *end = NULL; + + if (!value || !opaque_arg) { + PMD_DRV_LOG(ERR, + "Invalid parameter passed to ieee-1588 " + "devargs.\n"); + return -EINVAL; + } + + ieee_1588 = strtoul(value, &end, 10); + if (end == NULL || *end != '\0' || + (ieee_1588 == ULONG_MAX && errno == ERANGE)) { + PMD_DRV_LOG(ERR, + "Invalid parameter passed to ieee_1588 " + "devargs.\n"); + return -EINVAL; + } + + if (BNXT_DEVARG_IEEE_1588_INVALID(ieee_1588)) { + PMD_DRV_LOG(ERR, "Invalid ieee-1588(%d) devargs.\n", + (uint16_t)ieee_1588); + return -EINVAL; + } + + bp->ieee_1588 = ieee_1588; + PMD_DRV_LOG(INFO, "ieee-1588=%d feature enabled.\n", (uint16_t)ieee_1588); + + return 0; +} + static int bnxt_parse_devarg_rep_is_pf(__rte_unused const char *key, const char *value, void *opaque_arg) @@ -5748,6 +5794,13 @@ bnxt_parse_dev_args(struct bnxt *bp, struct rte_devargs *devargs) rte_kvargs_process(kvlist, BNXT_DEVARG_APP_ID, bnxt_parse_devarg_app_id, bp); + /* + * Handler for "ieee-1588" devarg. + * Invoked as for ex: "-a 000:00:0d.0,ieee-1588=1" + */ + rte_kvargs_process(kvlist, BNXT_DEVARG_IEEE_1588, + bnxt_parse_devarg_ieee_1588, bp); + rte_kvargs_free(kvlist); return ret; } diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index 0eebddb05d..a067278dca 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -680,16 +680,13 @@ bnxt_set_ol_flags(struct bnxt_rx_ring_info *rxr, struct rx_pkt_cmpl *rxcmp, ol_flags |= RTE_MBUF_F_RX_RSS_HASH; } -#ifdef RTE_LIBRTE_IEEE1588 if (unlikely((flags_type & RX_PKT_CMPL_FLAGS_MASK) == RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP)) ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP | RTE_MBUF_F_RX_IEEE1588_TMST; -#endif mbuf->ol_flags = ol_flags; } -#ifdef RTE_LIBRTE_IEEE1588 static void bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl) { @@ -716,7 +713,6 @@ bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl) } ptp->rx_timestamp = pkt_time; } -#endif static uint32_t bnxt_ulp_set_mark_in_mbuf(struct bnxt *bp, struct rx_pkt_cmpl_hi *rxcmp1, @@ -925,12 +921,10 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt, mbuf->data_len = mbuf->pkt_len; mbuf->port = rxq->port_id; -#ifdef RTE_LIBRTE_IEEE1588 if (unlikely((rte_le_to_cpu_16(rxcmp->flags_type) & RX_PKT_CMPL_FLAGS_MASK) == RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP)) bnxt_get_rx_ts_p5(rxq->bp, rxcmp1->reorder); -#endif if (cmp_type == CMPL_BASE_TYPE_RX_L2_V2) { bnxt_parse_csum_v2(mbuf, rxcmp1);