From patchwork Tue Nov 2 06:41:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakesh Kudurumalla X-Patchwork-Id: 103431 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 1E9C6A0C4E; Tue, 2 Nov 2021 07:42:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 09DE9410E5; Tue, 2 Nov 2021 07:42:50 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 962AA4069F for ; Tue, 2 Nov 2021 07:42:48 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 1A25eJhL012452 for ; Mon, 1 Nov 2021 23:42:48 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=PY4vMwq38k+/5zLxxIAEDZWafc/Mu3sSP44rVTkXWjA=; b=aR2Ilw1pTfPxQgf7JGROoLtGoW09/Tgb/E+mDDVT1pDAb0ENEGvgi+pivuIYp2eAdzaT ByZ2RbcwjCUZrscfy78Li7w9ol9C0YSvEn+WkEVf3ovmnAiTjU5eOzkPaUIRCObolE+d Tpm06YbNAQB8BbxGJYkWa75zMu0uByJZKtWLKvldecV50czSJwWFsytQSmBjwNgUIHB7 YAGiR5NRYTrg71CSKeSS95Dtl2HTv62kRGJfv/AzgjFJoYdZlS440zAaPJTp3BNCOlWr G0DdejH57k4tZKY3D19Q6mDlNCIMS4XzL4Yf6YVz0jM8WTobNI7ANpl1gmIXxjg6qMp1 IA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3c2ycv87fp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Mon, 01 Nov 2021 23:42:47 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 1 Nov 2021 23:42:45 -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.18 via Frontend Transport; Mon, 1 Nov 2021 23:42:45 -0700 Received: from localhost.localdomain (unknown [10.28.48.103]) by maili.marvell.com (Postfix) with ESMTP id 087195B6932; Mon, 1 Nov 2021 23:42:40 -0700 (PDT) From: Rakesh Kudurumalla To: , Nithin Dabilpuram , "Kiran Kumar K" , Sunil Kumar Kori , Satha Rao CC: , Rakesh Kudurumalla Date: Tue, 2 Nov 2021 12:11:36 +0530 Message-ID: <20211102064137.1802537-2-rkudurumalla@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211102064137.1802537-1-rkudurumalla@marvell.com> References: <20211102055802.1801583-1-rkudurumalla@marvell.com> <20211102064137.1802537-1-rkudurumalla@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: aDBzlCAuyQvJFCL509u2UJmGR87cl9fa X-Proofpoint-ORIG-GUID: aDBzlCAuyQvJFCL509u2UJmGR87cl9fa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-02_01,2021-11-01_01,2020-04-07_01 Subject: [dpdk-dev] [PATCH v2 2/2] net/cnxk: integrate bpfcount get MBOX interface 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 Sender: "dev" Bpf count is updated in meter capabilities during device initialization using mbox interface Signed-off-by: Rakesh Kudurumalla --- v2: - resolve nix configure error in cn9k drivers/net/cnxk/cn10k_rte_flow.c | 2 +- drivers/net/cnxk/cn9k_ethdev.c | 1 + drivers/net/cnxk/cnxk_ethdev.c | 8 +++++- drivers/net/cnxk/cnxk_ethdev.h | 1 + drivers/net/cnxk/cnxk_ethdev_mtr.c | 39 ++++++++++++++++++++++++------ 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/drivers/net/cnxk/cn10k_rte_flow.c b/drivers/net/cnxk/cn10k_rte_flow.c index dff4c7746c..b830abe63e 100644 --- a/drivers/net/cnxk/cn10k_rte_flow.c +++ b/drivers/net/cnxk/cn10k_rte_flow.c @@ -249,7 +249,7 @@ cn10k_flow_destroy(struct rte_eth_dev *eth_dev, struct rte_flow *rte_flow, mtr_id = flow->mtr_id; rc = cnxk_flow_destroy(eth_dev, flow, error); - if (!rc) { + if (!rc && mtr_id != ROC_NIX_MTR_ID_INVALID) { rc = cn10k_mtr_destroy(eth_dev, mtr_id); if (rc) { rte_flow_error_set(error, ENXIO, diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethdev.c index 2fdc10a2c9..f8f3d3895e 100644 --- a/drivers/net/cnxk/cn9k_ethdev.c +++ b/drivers/net/cnxk/cn9k_ethdev.c @@ -486,6 +486,7 @@ nix_eth_dev_ops_override(void) cnxk_eth_dev_ops.dev_ptypes_set = cn9k_nix_ptypes_set; cnxk_eth_dev_ops.timesync_enable = cn9k_nix_timesync_enable; cnxk_eth_dev_ops.timesync_disable = cn9k_nix_timesync_disable; + cnxk_eth_dev_ops.mtr_ops_get = NULL; } static void diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c index db54468dbc..942177f2c5 100644 --- a/drivers/net/cnxk/cnxk_ethdev.c +++ b/drivers/net/cnxk/cnxk_ethdev.c @@ -730,11 +730,17 @@ nix_free_queue_mem(struct cnxk_eth_dev *dev) static int nix_ingress_policer_setup(struct cnxk_eth_dev *dev) { + struct rte_eth_dev *eth_dev = dev->eth_dev; + int rc = 0; + TAILQ_INIT(&dev->mtr_profiles); TAILQ_INIT(&dev->mtr_policy); TAILQ_INIT(&dev->mtr); - return 0; + if (eth_dev->dev_ops->mtr_ops_get == NULL) + return rc; + + return nix_mtr_capabilities_init(eth_dev); } static int diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index 7e4939f0b9..d7c4b3e319 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -590,6 +590,7 @@ struct cnxk_meter_node *nix_get_mtr(struct rte_eth_dev *eth_dev, uint32_t cur_id); int nix_mtr_level_update(struct rte_eth_dev *eth_dev, uint32_t id, uint32_t level); +int nix_mtr_capabilities_init(struct rte_eth_dev *eth_dev); int nix_mtr_configure(struct rte_eth_dev *eth_dev, uint32_t id); int nix_mtr_connect(struct rte_eth_dev *eth_dev, uint32_t id); int nix_mtr_destroy(struct rte_eth_dev *eth_dev, uint32_t id, diff --git a/drivers/net/cnxk/cnxk_ethdev_mtr.c b/drivers/net/cnxk/cnxk_ethdev_mtr.c index 22c85336d9..39d8563826 100644 --- a/drivers/net/cnxk/cnxk_ethdev_mtr.c +++ b/drivers/net/cnxk/cnxk_ethdev_mtr.c @@ -28,7 +28,6 @@ static const enum roc_nix_bpf_level_flag lvl_map[] = {ROC_NIX_BPF_LEVEL_F_LEAF, ROC_NIX_BPF_LEVEL_F_TOP}; static struct rte_mtr_capabilities mtr_capa = { - .n_max = NIX_MTR_COUNT_MAX, .n_shared_max = NIX_MTR_COUNT_PER_FLOW, /* .identical = , */ .shared_identical = true, @@ -36,11 +35,7 @@ static struct rte_mtr_capabilities mtr_capa = { .chaining_n_mtrs_per_flow_max = NIX_MTR_COUNT_PER_FLOW, .chaining_use_prev_mtr_color_supported = true, .chaining_use_prev_mtr_color_enforced = true, - .meter_srtcm_rfc2697_n_max = NIX_MTR_COUNT_MAX, - .meter_trtcm_rfc2698_n_max = NIX_MTR_COUNT_MAX, - .meter_trtcm_rfc4115_n_max = NIX_MTR_COUNT_MAX, .meter_rate_max = NIX_BPF_RATE_MAX / 8, /* Bytes per second */ - .meter_policy_n_max = NIX_MTR_COUNT_MAX, .color_aware_srtcm_rfc2697_supported = true, .color_aware_trtcm_rfc2698_supported = true, .color_aware_trtcm_rfc4115_supported = true, @@ -185,12 +180,33 @@ cnxk_nix_mtr_capabilities_get(struct rte_eth_dev *dev, struct rte_mtr_capabilities *capa, struct rte_mtr_error *error) { + struct cnxk_eth_dev *eth_dev = cnxk_eth_pmd_priv(dev); + uint16_t count[ROC_NIX_BPF_LEVEL_MAX] = {0}; + uint8_t lvl_mask = ROC_NIX_BPF_LEVEL_F_LEAF | ROC_NIX_BPF_LEVEL_F_MID | + ROC_NIX_BPF_LEVEL_F_TOP; + struct roc_nix *nix = ð_dev->nix; + int rc; + int i; + RTE_SET_USED(dev); if (!capa) return -rte_mtr_error_set(error, EINVAL, - RTE_MTR_ERROR_TYPE_MTR_PARAMS, NULL, - "NULL input parameter"); + RTE_MTR_ERROR_TYPE_MTR_PARAMS, NULL, + "NULL input parameter"); + + rc = roc_nix_bpf_count_get(nix, lvl_mask, count); + if (rc) + return rc; + + for (i = 0; i < ROC_NIX_BPF_LEVEL_MAX; i++) + mtr_capa.n_max += count[i]; + + mtr_capa.meter_srtcm_rfc2697_n_max = mtr_capa.n_max; + mtr_capa.meter_trtcm_rfc2698_n_max = mtr_capa.n_max; + mtr_capa.meter_trtcm_rfc4115_n_max = mtr_capa.n_max; + mtr_capa.meter_policy_n_max = mtr_capa.n_max; + *capa = mtr_capa; return 0; } @@ -1339,3 +1355,12 @@ nix_mtr_color_action_validate(struct rte_eth_dev *eth_dev, uint32_t id, return 0; } + +int +nix_mtr_capabilities_init(struct rte_eth_dev *eth_dev) +{ + struct rte_mtr_capabilities capa; + struct rte_mtr_error error; + + return cnxk_nix_mtr_capabilities_get(eth_dev, &capa, &error); +}