From patchwork Tue Aug 29 18:19:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavan Nikhilesh Bhagavatula X-Patchwork-Id: 130837 X-Patchwork-Delegate: jerinj@marvell.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 96EF841F61; Tue, 29 Aug 2023 20:19:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2CDB440270; Tue, 29 Aug 2023 20:19:44 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id D4BBF4026A for ; Tue, 29 Aug 2023 20:19:42 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 37T9sekO010727 for ; Tue, 29 Aug 2023 11:19:41 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=mRk72d498m8eGLqb+/drPu5aSf3TNd0vY5sEi5xEPEg=; b=cfwny7RNCIohDFxVUqo7EUwd3fbQOcdd5eY4N69rLrAObz6x97LE4y2+/NaDLoEBJaXw RmfLl5jL4yjA2afyav9+g8xGBkkWVOrPEBxCbuoTk8jZtvEQlOWqYkWRq95i3eHV6aMD XQp7ZGfJ63SlryC1yfMGQnK8DCaS13VEbr73M1otPntJxeWKIyYawu3aENWAdu++ppl9 dxgSLKixhCdPKH+7s6zIdUUGykMg0n/VpoGirB3kLBpPN1vtFOytSUZIewaSywLMptPn 9loo9cjheT7tRLHiBYMZaDkxDtBDmwHvOh/gphddau5q+9UTtKfvjFw4nbhHGIvNS8Z6 /Q== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3sqgwkje2b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Tue, 29 Aug 2023 11:19:41 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Tue, 29 Aug 2023 11:19:39 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Tue, 29 Aug 2023 11:19:39 -0700 Received: from MININT-80QBFE8.corp.innovium.com (MININT-80QBFE8.marvell.com [10.28.164.106]) by maili.marvell.com (Postfix) with ESMTP id B4A293F704D; Tue, 29 Aug 2023 11:19:36 -0700 (PDT) From: To: , Nithin Dabilpuram , "Kiran Kumar K" , Sunil Kumar Kori , Satha Rao , Pavan Nikhilesh , Shijith Thotton CC: Subject: [PATCH] event/cnxk: add event port flow context APIs Date: Tue, 29 Aug 2023 23:49:33 +0530 Message-ID: <20230829181933.5358-1-pbhagavatula@marvell.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Proofpoint-GUID: _HahCu_XXIF8byNhZk2_c88fhoaLO-dx X-Proofpoint-ORIG-GUID: _HahCu_XXIF8byNhZk2_c88fhoaLO-dx X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-08-29_13,2023-08-29_01,2023-05-22_02 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 From: Pavan Nikhilesh Add event port flow context status APIs. - rte_pmd_cnxk_eventdev_wait_head() - Allows application to wait for the flow context currently held by the event port to become the HEAD of the flow chain. - rte_pmd_cnxk_eventdev_is_head() - Allows application to test if the flow context currently held by the event port is the HEAD of the flow chain. Signed-off-by: Pavan Nikhilesh Acked-by: Jerin Jacob --- doc/api/doxy-api-index.md | 1 + doc/api/doxy-api.conf.in | 1 + drivers/common/cnxk/roc_sso_dp.h | 8 ++++ drivers/event/cnxk/cn10k_eventdev.h | 4 +- drivers/event/cnxk/cnxk_worker.c | 49 +++++++++++++++++++++ drivers/event/cnxk/meson.build | 2 + drivers/event/cnxk/rte_pmd_cnxk_eventdev.h | 50 ++++++++++++++++++++++ drivers/event/cnxk/version.map | 9 ++++ 8 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 drivers/event/cnxk/cnxk_worker.c create mode 100644 drivers/event/cnxk/rte_pmd_cnxk_eventdev.h create mode 100644 drivers/event/cnxk/version.map diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md index fdeda13932..3891b6134d 100644 --- a/doc/api/doxy-api-index.md +++ b/doc/api/doxy-api-index.md @@ -48,6 +48,7 @@ The public API headers are grouped by topics: [iavf](@ref rte_pmd_iavf.h), [bnxt](@ref rte_pmd_bnxt.h), [cnxk](@ref rte_pmd_cnxk.h), + [cnxk_eventdev](@ref rte_pmd_cnxk_eventdev.h), [cnxk_mempool](@ref rte_pmd_cnxk_mempool.h), [dpaa](@ref rte_pmd_dpaa.h), [dpaa2](@ref rte_pmd_dpaa2.h), diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in index a88accd907..2a25fac6bf 100644 --- a/doc/api/doxy-api.conf.in +++ b/doc/api/doxy-api.conf.in @@ -9,6 +9,7 @@ INPUT = @TOPDIR@/doc/api/doxy-api-index.md \ @TOPDIR@/drivers/crypto/scheduler \ @TOPDIR@/drivers/dma/dpaa2 \ @TOPDIR@/drivers/event/dlb2 \ + @TOPDIR@/drivers/event/cnxk \ @TOPDIR@/drivers/mempool/cnxk \ @TOPDIR@/drivers/mempool/dpaa2 \ @TOPDIR@/drivers/net/ark \ diff --git a/drivers/common/cnxk/roc_sso_dp.h b/drivers/common/cnxk/roc_sso_dp.h index 9d30286d2f..158532d472 100644 --- a/drivers/common/cnxk/roc_sso_dp.h +++ b/drivers/common/cnxk/roc_sso_dp.h @@ -30,4 +30,12 @@ roc_sso_hws_head_wait(uintptr_t base) return tag; } +static __plt_always_inline uint8_t +roc_sso_hws_is_head(uintptr_t base) +{ + uintptr_t tag_op = base + SSOW_LF_GWS_TAG; + + return !!(plt_read64(tag_op) & BIT_ULL(35)); +} + #endif /* _ROC_SSO_DP_H_ */ diff --git a/drivers/event/cnxk/cn10k_eventdev.h b/drivers/event/cnxk/cn10k_eventdev.h index 29567728cd..e79b68e0ac 100644 --- a/drivers/event/cnxk/cn10k_eventdev.h +++ b/drivers/event/cnxk/cn10k_eventdev.h @@ -10,9 +10,9 @@ struct cn10k_sso_hws { uint64_t base; - uint64_t gw_rdata; - void *lookup_mem; uint32_t gw_wdata; + void *lookup_mem; + uint64_t gw_rdata; uint8_t swtag_req; uint8_t hws_id; /* PTP timestamp */ diff --git a/drivers/event/cnxk/cnxk_worker.c b/drivers/event/cnxk/cnxk_worker.c new file mode 100644 index 0000000000..60876abcff --- /dev/null +++ b/drivers/event/cnxk/cnxk_worker.c @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2023 Marvell. + */ + +#include +#include +#include + +#include "roc_platform.h" +#include "roc_sso.h" +#include "roc_sso_dp.h" + +struct pwords { + uint64_t u[5]; +}; + +void +rte_pmd_cnxk_eventdev_wait_head(uint8_t dev, uint8_t port) +{ + struct pwords *w = rte_event_fp_ops[dev].data[port]; + uint8_t vws; + + if (w->u[1] & 0x3) { + roc_sso_hws_head_wait(w->u[0]); + } else { + /* Dual WS case */ + vws = (w->u[4] >> 8) & 0x1; + roc_sso_hws_head_wait(w->u[vws]); + } +} + + +uint8_t +rte_pmd_cnxk_eventdev_is_head(uint8_t dev, uint8_t port) +{ + struct pwords *w = rte_event_fp_ops[dev].data[port]; + uintptr_t base; + uint8_t vws; + + if (w->u[1] & 0x3) { + base = w->u[0]; + } else { + /* Dual WS case */ + vws = (w->u[4] >> 8) & 0x1; + base = w->u[vws]; + } + + return roc_sso_hws_is_head(base); +} diff --git a/drivers/event/cnxk/meson.build b/drivers/event/cnxk/meson.build index 51f1be8848..13281d687f 100644 --- a/drivers/event/cnxk/meson.build +++ b/drivers/event/cnxk/meson.build @@ -20,6 +20,7 @@ endif sources = files( 'cnxk_eventdev.c', + 'cnxk_worker.c', 'cnxk_eventdev_adptr.c', 'cnxk_eventdev_selftest.c', 'cnxk_eventdev_stats.c', @@ -314,6 +315,7 @@ foreach flag: extra_flags endif endforeach +headers = files('rte_pmd_cnxk_eventdev.h') deps += ['bus_pci', 'common_cnxk', 'net_cnxk', 'crypto_cnxk'] require_iova_in_mbuf = false diff --git a/drivers/event/cnxk/rte_pmd_cnxk_eventdev.h b/drivers/event/cnxk/rte_pmd_cnxk_eventdev.h new file mode 100644 index 0000000000..b7b56f5fa1 --- /dev/null +++ b/drivers/event/cnxk/rte_pmd_cnxk_eventdev.h @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2023 Marvell Inc. + */ + +/** + * @file rte_pmd_cnxk_eventdev.h + * Marvell CNXK eventdev PMD specific functions. + * + **/ + +#ifndef _PMD_CNXK_EVENTDEV_H_ +#define _PMD_CNXK_EVENTDEV_H_ + +#include +#include + +/** + * Wait for the currently active flow context on the event port to become HEAD + * of the flow-chain. + * + * @param dev + * Event device identifier. + * + * @param port + * Event port identifier. + */ +__rte_experimental +void +rte_pmd_cnxk_eventdev_wait_head(uint8_t dev, uint8_t port); + + +/** + * Check if the currently active flow context on the event port is the HEAD + * of the flow-chain. + * + * @param dev + * Event device identifier. + * + * @param port + * Event port identifier. + * + * @return Status of the currently held flow context + * 0 not the head of the flow-chain + * 1 head of the flow-chain + */ +__rte_experimental +uint8_t +rte_pmd_cnxk_eventdev_is_head(uint8_t dev, uint8_t port); + +#endif diff --git a/drivers/event/cnxk/version.map b/drivers/event/cnxk/version.map new file mode 100644 index 0000000000..9dbf8eb59d --- /dev/null +++ b/drivers/event/cnxk/version.map @@ -0,0 +1,9 @@ + DPDK_23 { + local: *; + }; + + EXPERIMENTAL { + global: + rte_pmd_cnxk_eventdev_wait_head; + rte_pmd_cnxk_eventdev_is_head; + };