From patchwork Fri Feb 11 11:39:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Miller X-Patchwork-Id: 107370 X-Patchwork-Delegate: ferruh.yigit@amd.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 A61F0A00C5; Fri, 11 Feb 2022 12:39:49 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 931E441144; Fri, 11 Feb 2022 12:39:49 +0100 (CET) Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by mails.dpdk.org (Postfix) with ESMTP id A0B1E40150 for ; Fri, 11 Feb 2022 12:39:48 +0100 (CET) Received: by mail-pf1-f178.google.com with SMTP id 9so12879900pfx.12 for ; Fri, 11 Feb 2022 03:39:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tcTC6qHN2GYZb5ez45cd/RK+Ycm437KhjbDqxwWM7UQ=; b=SQ6/UnyxCkPcQFqtuSzBF4e3PLRam8hYom/nf6jeZ03pon4uIy7zxatey2PX4NNzkL UUVBKgMsh+cB0bpPRU+4SgVSDoyL3Tm6PGjWLe+k8JPUTZB0EifGxrRH3RRkTZSZA3X3 e2RtAfqPr/XWJk78IY4exx0nzmXjpIpVyPxy9i149Piqqlt/Ip1vsqG6PckqHiUUc5Iq FdMxvo5LTNa1k56yqdbZKT+2X9QozWkRZeGt/6HaJK3QCHzaG//qd8JG/zMTz6AQj1bs dhq3NOr8crtZIytvH4Zt0aXl6APNXsKgZ5bfviN2Vw0UA/DiC0UCo1lM8B+PIbD3vgAP +gPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tcTC6qHN2GYZb5ez45cd/RK+Ycm437KhjbDqxwWM7UQ=; b=tFRut52Yw7h1zBxSeGr1fC2NnLGdK3L6CdBm4z0AYUca5jYiDUHCvTYAU+z+Vt2mE6 cnhZkQOP21mNfAxpKmuCj789/sJT0A3GiafBv0HIY+jIg7GQwCt8D7N2ccHfP/KCxrSq ht/HwfwY0ig7/C3ZSJ3W4tHcs+Yus1LIoLjxWSZfQhWzSTIr+kZTf6OfL1Ka0/SKCZZ8 71Lsy8+hyRm1/GEC0AvmCuQ5IsSRlNJC1C0zGQkQxZldvq1wBcHB5GiX4U1qJ3mU1CjW TYIeRI2XY8Ybcq+w7AjvSc5wN34vZ2j/oCz3VGeZqe8cDjMKJgpzj5IaIt7cg6u82Cib b9iQ== X-Gm-Message-State: AOAM5318QMfDaFaXi3Sx+ZcFMwlel27gGvVCuN0Txlh7n0V+PD3NsHh5 X3d4GDtZSmbyRiz4qcoUlxB39hjvYa98DQ== X-Google-Smtp-Source: ABdhPJw9VEAlaSNkcU8iXHEd0xvNwrjLPdwVK9H+LfLfXWyR++m7KAAiiZPyonOepXUm/E3KXUYz4g== X-Received: by 2002:a63:f34e:: with SMTP id t14mr993936pgj.622.1644579587701; Fri, 11 Feb 2022 03:39:47 -0800 (PST) Received: from john-All-Series.tds (h75-100-85-216.cntcnh.broadband.dynamic.tds.net. [75.100.85.216]) by smtp.gmail.com with ESMTPSA id s14sm27750838pfk.174.2022.02.11.03.39.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Feb 2022 03:39:47 -0800 (PST) From: John Miller To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, John Miller Subject: [PATCH v2 1/3] net/ark: add device capabilities record Date: Fri, 11 Feb 2022 05:39:33 -0600 Message-Id: <20220211113935.303366-1-john.miller@atomicrules.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220119191255.273988-ed.czeck@atomicrules.com> References: <20220119191255.273988-ed.czeck@atomicrules.com> 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 Add a device capabilities record for supported features. Certain variants require that PCIe read-requests be correctly throttled. This is called "rqpacing" in Arkville, and has to do with credit and flow control on certain Arkville implementations. Signed-off-by: John Miller --- v2: - Improved code readability and comments. --- drivers/net/ark/ark_ethdev.c | 88 +++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 17 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index b618cba3f0..9f5f375174 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -85,17 +85,53 @@ static const char * const valid_arguments[] = { NULL }; +#define AR_VENDOR_ID 0x1d6c static const struct rte_pci_id pci_id_ark_map[] = { - {RTE_PCI_DEVICE(0x1d6c, 0x100d)}, - {RTE_PCI_DEVICE(0x1d6c, 0x100e)}, - {RTE_PCI_DEVICE(0x1d6c, 0x100f)}, - {RTE_PCI_DEVICE(0x1d6c, 0x1010)}, - {RTE_PCI_DEVICE(0x1d6c, 0x1017)}, - {RTE_PCI_DEVICE(0x1d6c, 0x1018)}, - {RTE_PCI_DEVICE(0x1d6c, 0x1019)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x100d)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x100e)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x100f)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1010)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1017)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1018)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x1019)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x101e)}, + {RTE_PCI_DEVICE(AR_VENDOR_ID, 0x101f)}, {.vendor_id = 0, /* sentinel */ }, }; +/* + * This structure is used to statically define the capabilities + * of supported devices. + * Capabilities: + * rqpacing - + * Some HW variants require that PCIe read-requests be correctly throttled. + * This is called "rqpacing" and has to do with credit and flow control + * on certain Arkville implementations. + */ +struct ark_caps { + bool rqpacing; +}; +struct ark_dev_caps { + uint32_t device_id; + struct ark_caps caps; +}; +#define SET_DEV_CAPS(id, rqp) \ + {id, {.rqpacing = rqp} } + +static const struct ark_dev_caps +ark_device_caps[] = { + SET_DEV_CAPS(0x100d, true), + SET_DEV_CAPS(0x100e, true), + SET_DEV_CAPS(0x100f, true), + SET_DEV_CAPS(0x1010, false), + SET_DEV_CAPS(0x1017, true), + SET_DEV_CAPS(0x1018, true), + SET_DEV_CAPS(0x1019, true), + SET_DEV_CAPS(0x101e, false), + SET_DEV_CAPS(0x101f, false), + {.device_id = 0,} +}; + static int eth_ark_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) @@ -256,6 +292,7 @@ eth_ark_dev_init(struct rte_eth_dev *dev) int ret; int port_count = 1; int p; + bool rqpacing = false; ark->eth_dev = dev; @@ -270,6 +307,15 @@ eth_ark_dev_init(struct rte_eth_dev *dev) rte_eth_copy_pci_info(dev, pci_dev); dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; + p = 0; + while (ark_device_caps[p].device_id != 0) { + if (pci_dev->id.device_id == ark_device_caps[p].device_id) { + rqpacing = ark_device_caps[p].caps.rqpacing; + break; + } + p++; + } + /* Use dummy function until setup */ dev->rx_pkt_burst = ð_ark_recv_pkts_noop; dev->tx_pkt_burst = ð_ark_xmit_pkts_noop; @@ -288,8 +334,12 @@ eth_ark_dev_init(struct rte_eth_dev *dev) ark->pktgen.v = (void *)&ark->bar0[ARK_PKTGEN_BASE]; ark->pktchkr.v = (void *)&ark->bar0[ARK_PKTCHKR_BASE]; - ark->rqpacing = - (struct ark_rqpace_t *)(ark->bar0 + ARK_RCPACING_BASE); + if (rqpacing) { + ark->rqpacing = + (struct ark_rqpace_t *)(ark->bar0 + ARK_RCPACING_BASE); + } else { + ark->rqpacing = NULL; + } ark->started = 0; ark->pkt_dir_v = ARK_PKT_DIR_INIT_VAL; @@ -309,13 +359,15 @@ eth_ark_dev_init(struct rte_eth_dev *dev) return -1; } if (ark->sysctrl.t32[3] != 0) { - if (ark_rqp_lasped(ark->rqpacing)) { - ARK_PMD_LOG(ERR, "Arkville Evaluation System - " - "Timer has Expired\n"); - return -1; + if (ark->rqpacing) { + if (ark_rqp_lasped(ark->rqpacing)) { + ARK_PMD_LOG(ERR, "Arkville Evaluation System - " + "Timer has Expired\n"); + return -1; + } + ARK_PMD_LOG(WARNING, "Arkville Evaluation System - " + "Timer is Running\n"); } - ARK_PMD_LOG(WARNING, "Arkville Evaluation System - " - "Timer is Running\n"); } ARK_PMD_LOG(DEBUG, @@ -499,7 +551,8 @@ ark_config_device(struct rte_eth_dev *dev) ark_ddm_stats_reset(ark->ddm.v); ark_ddm_stop(ark->ddm.v, 0); - ark_rqp_stats_reset(ark->rqpacing); + if (ark->rqpacing) + ark_rqp_stats_reset(ark->rqpacing); return 0; } @@ -695,7 +748,8 @@ eth_ark_dev_close(struct rte_eth_dev *dev) /* * TODO This should only be called once for the device during shutdown */ - ark_rqp_dump(ark->rqpacing); + if (ark->rqpacing) + ark_rqp_dump(ark->rqpacing); for (i = 0; i < dev->data->nb_tx_queues; i++) { eth_ark_tx_queue_release(dev->data->tx_queues[i]); From patchwork Fri Feb 11 11:39:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Miller X-Patchwork-Id: 107371 X-Patchwork-Delegate: ferruh.yigit@amd.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 2B7F4A00C5; Fri, 11 Feb 2022 12:39:56 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EE1164275A; Fri, 11 Feb 2022 12:39:52 +0100 (CET) Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by mails.dpdk.org (Postfix) with ESMTP id D935C4275E for ; Fri, 11 Feb 2022 12:39:50 +0100 (CET) Received: by mail-pf1-f171.google.com with SMTP id i6so13869257pfc.9 for ; Fri, 11 Feb 2022 03:39:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=arlvEqN4+xe+w1mchMTDsjmMxginWMp3vo4LFxtpfgw=; b=x1dK8+0VuPGee5p/fYNjru7F+b5/8YSkK15IzEmSN4eBmbSHNJD/+Xe778saxE1Xs7 x9FTSklhFSzYzf28oxIXQyNCqffGiyArx/ykf0YSBFgdAGnhR/z7wbMPpKh5BxPedBtS JF/RnoTvjnRJxO+8I9jEDzHebzazVqmkBCfrY4doMyPTv0KLSqma9OHRzNzCD7idQ+/d WsqwLL21n3oSD8Bp2jg5uicMGKj5eJ4yhYtFSSDce165/vJx3QEgL5sJjFBdH761kcyL 4G1fTwwCbh8asEMK8q41vht6gziLnK+dQm+bEyDVdS0/qMr9CH+3op4zmiLl78/dAnTm X4pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=arlvEqN4+xe+w1mchMTDsjmMxginWMp3vo4LFxtpfgw=; b=K4rtnHHUBKq/zV/kCZAJK6WhwJfJs+LATcDSdmHifJa1aEawJSguJnl6KMqtdx0PYM rtQfMehpIDaxdFRjrFUC8MQ9j96BHdzG+YoQ3yKMkXoJbThbzFuCSkvFy2XiNbTnKfEL 5s0S1dya25mJ9fe23o6R9vPr2zAsCYd7WbfWzJ9MCk48MXpGMtXDsBsROuT/1FeWNg5j EqADlv5bBhZy0I0r//+Ozsr4FOk3KRBJ2fL5G9uCvLLrNPWoQ77xeOoZHJLWXsdzva1U xjK5Qprg6LtM18X3hr+O+P6+LyUQDevGHLuecaCi3dimng7QwWISZjnR5F0sW/LrBqQj J0FQ== X-Gm-Message-State: AOAM5323SPhSiUkNEWUp9CQLjy9pM8B2Qmt70Mlmu4a837epNBFH9V7v zrmKzF3nPKVHoOF+2fyL2nz/O0tevfIqiw== X-Google-Smtp-Source: ABdhPJygFCLSgKL5u/7exIenDfLm0C5Y+UDdLPzNykvek9VjTWcmIgZvC6Y8qD9Xtm28vUr+l76x9A== X-Received: by 2002:a63:89c1:: with SMTP id v184mr967066pgd.529.1644579589106; Fri, 11 Feb 2022 03:39:49 -0800 (PST) Received: from john-All-Series.tds (h75-100-85-216.cntcnh.broadband.dynamic.tds.net. [75.100.85.216]) by smtp.gmail.com with ESMTPSA id s14sm27750838pfk.174.2022.02.11.03.39.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Feb 2022 03:39:48 -0800 (PST) From: John Miller To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, John Miller Subject: [PATCH v2 2/3] net/ark: support arbitrary mbuf size Date: Fri, 11 Feb 2022 05:39:34 -0600 Message-Id: <20220211113935.303366-2-john.miller@atomicrules.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220211113935.303366-1-john.miller@atomicrules.com> References: <20220119191255.273988-ed.czeck@atomicrules.com> <20220211113935.303366-1-john.miller@atomicrules.com> 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 Added arbitrary mbuf size per queue capability. Updated ARK_UDM_CONST3 value to reflect the version number read from the HW that is required to support this change. Signed-off-by: John Miller --- v2: - Added more details to the git log. --- drivers/net/ark/ark_ethdev.c | 8 -------- drivers/net/ark/ark_ethdev_rx.c | 23 +++++++++++++++++++---- drivers/net/ark/ark_udm.h | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 9f5f375174..e2c0adf8cb 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -527,14 +527,6 @@ ark_config_device(struct rte_eth_dev *dev) mpu = RTE_PTR_ADD(mpu, ARK_MPU_QOFFSET); } - ark_udm_stop(ark->udm.v, 0); - ark_udm_configure(ark->udm.v, - RTE_PKTMBUF_HEADROOM, - RTE_MBUF_DEFAULT_DATAROOM, - ARK_RX_WRITE_TIME_NS); - ark_udm_stats_reset(ark->udm.v); - ark_udm_stop(ark->udm.v, 0); - /* TX -- DDM */ if (ark_ddm_stop(ark->ddm.v, 1)) ARK_PMD_LOG(ERR, "Unable to stop DDM\n"); diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 98658ce621..1000f50be0 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -12,7 +12,6 @@ #define ARK_RX_META_SIZE 32 #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE) -#define ARK_RX_MAX_NOCHAIN (RTE_MBUF_DEFAULT_DATAROOM) /* Forward declarations */ struct ark_rx_queue; @@ -41,6 +40,9 @@ struct ark_rx_queue { rx_user_meta_hook_fn rx_user_meta_hook; void *ext_user_data; + uint32_t dataroom; + uint32_t headroom; + uint32_t queue_size; uint32_t queue_mask; @@ -164,6 +166,9 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, /* NOTE zmalloc is used, no need to 0 indexes, etc. */ queue->mb_pool = mb_pool; + queue->dataroom = rte_pktmbuf_data_room_size(mb_pool) - + RTE_PKTMBUF_HEADROOM; + queue->headroom = RTE_PKTMBUF_HEADROOM; queue->phys_qid = qidx; queue->queue_index = queue_idx; queue->queue_size = nb_desc; @@ -196,6 +201,15 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, queue->udm = RTE_PTR_ADD(ark->udm.v, qidx * ARK_UDM_QOFFSET); queue->mpu = RTE_PTR_ADD(ark->mpurx.v, qidx * ARK_MPU_QOFFSET); + /* Configure UDM per queue */ + ark_udm_stop(queue->udm, 0); + ark_udm_configure(queue->udm, + RTE_PKTMBUF_HEADROOM, + queue->dataroom, + ARK_RX_WRITE_TIME_NS); + ark_udm_stats_reset(queue->udm); + ark_udm_stop(queue->udm, 0); + /* populate mbuf reserve */ status = eth_ark_rx_seed_mbufs(queue); @@ -276,6 +290,7 @@ eth_ark_recv_pkts(void *rx_queue, mbuf->data_len = meta->pkt_len; if (ARK_DEBUG_CORE) { /* debug sanity checks */ + if ((meta->pkt_len > (1024 * 16)) || (meta->pkt_len == 0)) { ARK_PMD_LOG(DEBUG, "RX: Bad Meta Q: %u" @@ -304,7 +319,7 @@ eth_ark_recv_pkts(void *rx_queue, } } - if (unlikely(meta->pkt_len > ARK_RX_MAX_NOCHAIN)) + if (unlikely(meta->pkt_len > queue->dataroom)) cons_index = eth_ark_rx_jumbo (queue, meta, mbuf, cons_index + 1); else @@ -345,14 +360,14 @@ eth_ark_rx_jumbo(struct ark_rx_queue *queue, /* first buf populated by called */ mbuf_prev = mbuf0; segments = 1; - data_len = RTE_MIN(meta->pkt_len, RTE_MBUF_DEFAULT_DATAROOM); + data_len = RTE_MIN(meta->pkt_len, queue->dataroom); remaining = meta->pkt_len - data_len; mbuf0->data_len = data_len; /* HW guarantees that the data does not exceed prod_index! */ while (remaining != 0) { data_len = RTE_MIN(remaining, - RTE_MBUF_DEFAULT_DATAROOM); + queue->dataroom); remaining -= data_len; segments += 1; diff --git a/drivers/net/ark/ark_udm.h b/drivers/net/ark/ark_udm.h index 4e51a5e82c..1cbcd94a98 100644 --- a/drivers/net/ark/ark_udm.h +++ b/drivers/net/ark/ark_udm.h @@ -33,7 +33,7 @@ struct ark_rx_meta { #define ARK_RX_WRITE_TIME_NS 2500 #define ARK_UDM_SETUP 0 #define ARK_UDM_CONST2 0xbACECACE -#define ARK_UDM_CONST3 0x334d4455 +#define ARK_UDM_CONST3 0x344d4455 #define ARK_UDM_CONST ARK_UDM_CONST3 struct ark_udm_setup_t { uint32_t r0; From patchwork Fri Feb 11 11:39:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Miller X-Patchwork-Id: 107372 X-Patchwork-Delegate: ferruh.yigit@amd.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 9546AA00C5; Fri, 11 Feb 2022 12:40:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D428B42764; Fri, 11 Feb 2022 12:39:53 +0100 (CET) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by mails.dpdk.org (Postfix) with ESMTP id 382C342760 for ; Fri, 11 Feb 2022 12:39:51 +0100 (CET) Received: by mail-pj1-f48.google.com with SMTP id t4-20020a17090a510400b001b8c4a6cd5dso8568462pjh.5 for ; Fri, 11 Feb 2022 03:39:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jQLOl3cry2X3jdXezJAgGRHM1EHtLWA4ilf8Yxoqvts=; b=C0W+BMWbiI5olcO487afq13EDZMBNVumatTVdfyrnSV+Q4JKx8aShYsX2c3yUKQZ8Z ngSzZ1eRZfkSC+P9D1I8ktPru1DzL6r8J51dOMWKeM1n591JECoyd5PKR48BshQnOZfm GhTTzzQRmFhF9UTU2qf12KT2+qFYh98b4GI8iv3Bbnl0JPY+MuZarxYcQMUyGDFh3PDY qXV2eX92KCPadEjetGNqzTnBL8rAXbitC9nw/5Eqhs8TPqwQzRVAqR8UaFTF9vk5fNoL aELPco6YXtXyrOFgaKqrjLC3PX9QXyvYl+bFpqhttjccnznPPBmBQTm2g7DPE8S9+/+J ZeWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jQLOl3cry2X3jdXezJAgGRHM1EHtLWA4ilf8Yxoqvts=; b=W6Ec75Sya3yEwO68L6DOfTR9mRa0GVtuVRexl3aW3ZlMZL2npNohbC9m4sz8anexii qIFj5J4OY84ltY6JJI7HJhsRyM3oUXNDXP2WXCI9CI1qdXT3Hsy7IZJv3+C7HTLYqSqX pgtD041gNjblaqGI3nNVX3OxClZv1Y/cBkmkukC2WxLmOmVIaN62aHfMsjJOS7J7/b9z JqHUy9ciViHQcJadRxXmq6NL1pl2o71Pi9pjtpTTxaQJskkUG0hcrx5r9vstEzsYjJ/R JkudqYh1wbvOLSHKd7doTMlG14lkgpIa+j3d0eHMmF+ejVbWJ4WQP81mZ8BU0EWTlyv0 zUGQ== X-Gm-Message-State: AOAM532EpLDHWmA4MdI5arS1K8OD4C4kDP2AqB20Enp5PafdDirwJiaz qpunPO1yvZNlGnOl1ezYd36c/MMi7xkWKg== X-Google-Smtp-Source: ABdhPJyYuXCPJwB5rPFs/ZWVzChSNjw9N4D9ILxzogSK9nNGUMLHST3tabls/3tsWaX/vlkZ/7/75w== X-Received: by 2002:a17:902:da81:: with SMTP id j1mr1092063plx.3.1644579590318; Fri, 11 Feb 2022 03:39:50 -0800 (PST) Received: from john-All-Series.tds (h75-100-85-216.cntcnh.broadband.dynamic.tds.net. [75.100.85.216]) by smtp.gmail.com with ESMTPSA id s14sm27750838pfk.174.2022.02.11.03.39.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Feb 2022 03:39:50 -0800 (PST) From: John Miller To: dev@dpdk.org, ferruh.yigit@intel.com Cc: shepard.siegel@atomicrules.com, John Miller Subject: [PATCH v2 3/3] net/ark: support chunk DMA transfers Date: Fri, 11 Feb 2022 05:39:35 -0600 Message-Id: <20220211113935.303366-3-john.miller@atomicrules.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220211113935.303366-1-john.miller@atomicrules.com> References: <20220119191255.273988-ed.czeck@atomicrules.com> <20220211113935.303366-1-john.miller@atomicrules.com> 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 Add support for chunk DMA transfers. Various performance optimizations and behavior fixes. Chunk mpu transfer use 64 objects (512 byte) to maintain memory read alignment. Align mpu memory allocation to be at 512 byte boundaries. Reduce force-close allocation from 10000 objects to 64 objects. Add memory write barriers for read and wait status functions in ddm, udm and mpu. Configuration status updates for internal packet checker and generator. Signed-off-by: John Miller --- v2: - Added more details to the git log. --- drivers/net/ark/ark_ddm.c | 1 + drivers/net/ark/ark_ethdev_rx.c | 16 +++++++++------- drivers/net/ark/ark_mpu.c | 1 + drivers/net/ark/ark_pktchkr.c | 2 +- drivers/net/ark/ark_pktgen.c | 2 +- drivers/net/ark/ark_udm.c | 3 +++ 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/net/ark/ark_ddm.c b/drivers/net/ark/ark_ddm.c index 2321371572..b16c739d50 100644 --- a/drivers/net/ark/ark_ddm.c +++ b/drivers/net/ark/ark_ddm.c @@ -55,6 +55,7 @@ ark_ddm_stop(struct ark_ddm_t *ddm, const int wait) int cnt = 0; ddm->cfg.command = 2; + rte_wmb(); while (wait && (ddm->cfg.stop_flushed & 0x01) == 0) { if (cnt++ > 1000) return 1; diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c index 1000f50be0..49134ea08f 100644 --- a/drivers/net/ark/ark_ethdev_rx.c +++ b/drivers/net/ark/ark_ethdev_rx.c @@ -12,6 +12,7 @@ #define ARK_RX_META_SIZE 32 #define ARK_RX_META_OFFSET (RTE_PKTMBUF_HEADROOM - ARK_RX_META_SIZE) +#define ARK_RX_MPU_CHUNK (64U) /* Forward declarations */ struct ark_rx_queue; @@ -104,7 +105,7 @@ static inline void eth_ark_rx_update_cons_index(struct ark_rx_queue *queue, uint32_t cons_index) { queue->cons_index = cons_index; - if ((cons_index + queue->queue_size - queue->seed_index) >= 64U) { + if ((cons_index + queue->queue_size - queue->seed_index) >= ARK_RX_MPU_CHUNK) { eth_ark_rx_seed_mbufs(queue); ark_mpu_set_producer(queue->mpu, queue->seed_index); } @@ -179,12 +180,12 @@ eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev, queue->reserve_q = rte_zmalloc_socket("Ark_rx_queue mbuf", nb_desc * sizeof(struct rte_mbuf *), - 64, + 512, socket_id); queue->paddress_q = rte_zmalloc_socket("Ark_rx_queue paddr", nb_desc * sizeof(rte_iova_t), - 64, + 512, socket_id); if (queue->reserve_q == 0 || queue->paddress_q == 0) { @@ -455,7 +456,8 @@ eth_ark_rx_stop_queue(struct rte_eth_dev *dev, uint16_t queue_id) static inline int eth_ark_rx_seed_mbufs(struct ark_rx_queue *queue) { - uint32_t limit = queue->cons_index + queue->queue_size; + uint32_t limit = (queue->cons_index & ~(ARK_RX_MPU_CHUNK - 1)) + + queue->queue_size; uint32_t seed_index = queue->seed_index; uint32_t count = 0; @@ -618,14 +620,14 @@ eth_ark_udm_force_close(struct rte_eth_dev *dev) ark_mpu_start(queue->mpu); /* Add some buffers */ - index = 100000 + queue->seed_index; + index = ARK_RX_MPU_CHUNK + queue->seed_index; ark_mpu_set_producer(queue->mpu, index); } /* Wait to allow data to pass */ usleep(100); - ARK_PMD_LOG(DEBUG, "UDM forced flush attempt, stopped = %d\n", - ark_udm_is_flushed(ark->udm.v)); + ARK_PMD_LOG(NOTICE, "UDM forced flush attempt, stopped = %d\n", + ark_udm_is_flushed(ark->udm.v)); } ark_udm_reset(ark->udm.v); } diff --git a/drivers/net/ark/ark_mpu.c b/drivers/net/ark/ark_mpu.c index 8160c1de7b..b8e94b6ed3 100644 --- a/drivers/net/ark/ark_mpu.c +++ b/drivers/net/ark/ark_mpu.c @@ -68,6 +68,7 @@ ark_mpu_reset(struct ark_mpu_t *mpu) int cnt = 0; mpu->cfg.command = MPU_CMD_RESET; + rte_wmb(); while (mpu->cfg.command != MPU_CMD_IDLE) { if (cnt++ > 1000) diff --git a/drivers/net/ark/ark_pktchkr.c b/drivers/net/ark/ark_pktchkr.c index 84bb567a41..12a5abb2f7 100644 --- a/drivers/net/ark/ark_pktchkr.c +++ b/drivers/net/ark/ark_pktchkr.c @@ -113,7 +113,7 @@ ark_pktchkr_stopped(ark_pkt_chkr_t handle) struct ark_pkt_chkr_inst *inst = (struct ark_pkt_chkr_inst *)handle; uint32_t r = inst->sregs->pkt_start_stop; - return (((r >> 16) & 1) == 1); + return (((r >> 16) & 1) == 1) || (r == 0); } void diff --git a/drivers/net/ark/ark_pktgen.c b/drivers/net/ark/ark_pktgen.c index 515bfe461c..6195ef997f 100644 --- a/drivers/net/ark/ark_pktgen.c +++ b/drivers/net/ark/ark_pktgen.c @@ -107,7 +107,7 @@ ark_pktgen_paused(ark_pkt_gen_t handle) struct ark_pkt_gen_inst *inst = (struct ark_pkt_gen_inst *)handle; uint32_t r = inst->regs->pkt_start_stop; - return (((r >> 16) & 1) == 1); + return (((r >> 24) & 1) == 1) || (((r >> 16) & 1) == 1) || (r == 0); } void diff --git a/drivers/net/ark/ark_udm.c b/drivers/net/ark/ark_udm.c index 28c4500a2c..9ebed89627 100644 --- a/drivers/net/ark/ark_udm.c +++ b/drivers/net/ark/ark_udm.c @@ -33,7 +33,9 @@ ark_udm_stop(struct ark_udm_t *udm, const int wait) { int cnt = 0; + udm->setup.r0 = 0; udm->cfg.command = 2; + rte_wmb(); while (wait && (udm->cfg.stop_flushed & 0x01) == 0) { if (cnt++ > 1000) @@ -70,6 +72,7 @@ ark_udm_reset(struct ark_udm_t *udm) void ark_udm_start(struct ark_udm_t *udm) { + udm->setup.r0 = 0x100; udm->cfg.command = 1; }