From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id C6790A034F;
	Thu, 29 Jul 2021 17:26:34 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 47D2541102;
	Thu, 29 Jul 2021 17:26:27 +0200 (CEST)
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com
 [67.231.156.173])
 by mails.dpdk.org (Postfix) with ESMTP id 7A5F140DFB
 for <dev@dpdk.org>; Thu, 29 Jul 2021 17:26:23 +0200 (CEST)
Received: from pps.filterd (m0045851.ppops.net [127.0.0.1])
 by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id
 16TFB7m8028635; Thu, 29 Jul 2021 08:26:22 -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=cPo14+WrLPRjsJU2av1Xqq1jABwVESnvTFPcN8sbazM=;
 b=UwHz2bmadpkUj6GNO8mblN/av2KaTJLxuKM2pTtVBzr5f0kaaogmCnKVbyUStURn+1C0
 EgbI/aCuthtqbSW9em54txYO5OehaUNB1NwL0miHDRJEv4c7MPNFNOQgUbi7jx2cEv9i
 vcu7d25XN1ygWaxtu23/Skz20JXhaVboOsff4D+kjmgCrxMKyBW1mSAtMS4QZHsAXLyF
 ORpeGY50kZ9yfPFybKNhYLLf+7ghwSTNyCsH2aRg6rcCSmALEp1UQkbYNDw9a87RClrD
 gzOHmdPQtte2ni2HL9NWpWXNJc4NoQmTRcPjoIgwO/tPEXjV1svTKDnsh7lThMZT5KJb bw== 
Received: from dc5-exch02.marvell.com ([199.233.59.182])
 by mx0b-0016f401.pphosted.com with ESMTP id 3a35pr5gq9-4
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);
 Thu, 29 Jul 2021 08:26:22 -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.18;
 Thu, 29 Jul 2021 08:26:21 -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; Thu, 29 Jul 2021 08:26:20 -0700
Received: from localhost.localdomain (unknown [10.28.34.38])
 by maili.marvell.com (Postfix) with ESMTP id F02973F7057;
 Thu, 29 Jul 2021 08:26:18 -0700 (PDT)
From: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
To: <dev@dpdk.org>
CC: <ciara.power@intel.com>, <jerinj@marvell.com>, <kirankumark@marvell.com>, 
 <ndabilpuram@marvell.com>, <skori@marvell.com>, <skoteshwar@marvell.com>,
 Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
Date: Thu, 29 Jul 2021 20:55:37 +0530
Message-ID: <04507ec4f18245b30d6b728b99bc80346132ed39.1627572033.git.gmuthukrishn@marvell.com>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <cover.1627572033.git.gmuthukrishn@marvell.com>
References: <cover.1627572033.git.gmuthukrishn@marvell.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain
X-Proofpoint-ORIG-GUID: QOth3zxnV3Ei30M9-tg1JKy5A4RhpVQ2
X-Proofpoint-GUID: QOth3zxnV3Ei30M9-tg1JKy5A4RhpVQ2
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790
 definitions=2021-07-29_10:2021-07-29,
 2021-07-29 signatures=0
Subject: [dpdk-dev] [v1, 3/3] common/cnxk: add telemetry endpoints to npa
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

Add telemetry endpoints to npa.

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
 drivers/common/cnxk/cnxk_telemetry.h     |  23 +++
 drivers/common/cnxk/cnxk_telemetry_npa.c | 227 +++++++++++++++++++++++
 drivers/common/cnxk/meson.build          |   4 +
 drivers/common/cnxk/roc_platform.h       |   8 +
 4 files changed, 262 insertions(+)
 create mode 100644 drivers/common/cnxk/cnxk_telemetry.h
 create mode 100644 drivers/common/cnxk/cnxk_telemetry_npa.c

diff --git a/drivers/common/cnxk/cnxk_telemetry.h b/drivers/common/cnxk/cnxk_telemetry.h
new file mode 100644
index 0000000000..9ac1487020
--- /dev/null
+++ b/drivers/common/cnxk/cnxk_telemetry.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2021 Marvell.
+ */
+
+#ifndef __CNXK_TELEMETRY_H_
+#define __CNXK_TELEMETRY_H_
+
+#define CNXK_TEL_STR(s)		  #s
+#define CNXK_TEL_STR_PREFIX(s, p) CNXK_TEL_STR(p##s)
+#define CNXK_TEL_DICT_INT(d, p, s, ...)                                        \
+	plt_tel_data_add_dict_int(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__),      \
+				  (p)->s)
+#define CNXK_TEL_DICT_PTR(d, p, s, ...)                                        \
+	plt_tel_data_add_dict_ptr(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__),      \
+				  (void *)(p)->s)
+#define CNXK_TEL_DICT_BF_PTR(d, p, s, ...)                                     \
+	plt_tel_data_add_dict_ptr(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__),      \
+				  (void *)(uint64_t)(p)->s)
+#define CNXK_TEL_DICT_U64(d, p, s, ...)                                        \
+	plt_tel_data_add_dict_u64(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__),      \
+				  (p)->s)
+
+#endif /* __CNXK_TELEMETRY_H_ */
diff --git a/drivers/common/cnxk/cnxk_telemetry_npa.c b/drivers/common/cnxk/cnxk_telemetry_npa.c
new file mode 100644
index 0000000000..1c2c2cd106
--- /dev/null
+++ b/drivers/common/cnxk/cnxk_telemetry_npa.c
@@ -0,0 +1,227 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell.
+ */
+
+#include "cnxk_telemetry.h"
+#include "roc_api.h"
+#include "roc_priv.h"
+
+#include <rte_telemetry.h>
+
+static int
+cnxk_tel_npa(struct plt_tel_data *d)
+{
+	struct npa_lf *lf;
+	int aura_cnt = 0;
+	uint32_t i;
+
+	lf = idev_npa_obj_get();
+	if (lf == NULL)
+		return NPA_ERR_DEVICE_NOT_BOUNDED;
+
+	for (i = 0; i < lf->nr_pools; i++) {
+		if (plt_bitmap_get(lf->npa_bmp, i))
+			continue;
+		aura_cnt++;
+	}
+
+	plt_tel_data_add_dict_ptr(d, "npa", lf);
+	plt_tel_data_add_dict_int(d, "pf", dev_get_pf(lf->pf_func));
+	plt_tel_data_add_dict_int(d, "vf", dev_get_vf(lf->pf_func));
+	plt_tel_data_add_dict_int(d, "aura_cnt", aura_cnt);
+
+	CNXK_TEL_DICT_PTR(d, lf, pci_dev);
+	CNXK_TEL_DICT_PTR(d, lf, npa_bmp);
+	CNXK_TEL_DICT_PTR(d, lf, npa_bmp_mem);
+	CNXK_TEL_DICT_PTR(d, lf, npa_qint_mem);
+	CNXK_TEL_DICT_PTR(d, lf, intr_handle);
+	CNXK_TEL_DICT_PTR(d, lf, mbox);
+	CNXK_TEL_DICT_PTR(d, lf, base);
+	CNXK_TEL_DICT_INT(d, lf, stack_pg_ptrs);
+	CNXK_TEL_DICT_INT(d, lf, stack_pg_bytes);
+	CNXK_TEL_DICT_INT(d, lf, npa_msixoff);
+	CNXK_TEL_DICT_INT(d, lf, nr_pools);
+	CNXK_TEL_DICT_INT(d, lf, pf_func);
+	CNXK_TEL_DICT_INT(d, lf, aura_sz);
+	CNXK_TEL_DICT_INT(d, lf, qints);
+
+	return 0;
+}
+
+static int
+cnxk_tel_npa_aura(int aura_id, struct plt_tel_data *d)
+{
+	__io struct npa_aura_s *aura;
+	struct npa_aq_enq_req *req;
+	struct npa_aq_enq_rsp *rsp;
+	struct npa_lf *lf;
+	int rc;
+
+	lf = idev_npa_obj_get();
+	if (lf == NULL)
+		return NPA_ERR_DEVICE_NOT_BOUNDED;
+
+	if (rte_bitmap_get(lf->npa_bmp, aura_id))
+		return -1;
+
+	req = mbox_alloc_msg_npa_aq_enq(lf->mbox);
+	if (!req) {
+		plt_err("Failed to alloc aq enq for npa");
+		return -1;
+	}
+
+	req->aura_id = aura_id;
+	req->ctype = NPA_AQ_CTYPE_AURA;
+	req->op = NPA_AQ_INSTOP_READ;
+
+	rc = mbox_process_msg(lf->mbox, (void *)&rsp);
+	if (rc) {
+		plt_err("Failed to get pool(%d) context", aura_id);
+		return rc;
+	}
+
+	aura = &rsp->aura;
+	CNXK_TEL_DICT_PTR(d, aura, pool_addr, w0_);
+	CNXK_TEL_DICT_INT(d, aura, ena, w1_);
+	CNXK_TEL_DICT_INT(d, aura, pool_caching, w1_);
+	CNXK_TEL_DICT_INT(d, aura, pool_way_mask, w1_);
+	CNXK_TEL_DICT_INT(d, aura, avg_con, w1_);
+	CNXK_TEL_DICT_INT(d, aura, pool_drop_ena, w1_);
+	CNXK_TEL_DICT_INT(d, aura, aura_drop_ena, w1_);
+	CNXK_TEL_DICT_INT(d, aura, bp_ena, w1_);
+	CNXK_TEL_DICT_INT(d, aura, aura_drop, w1_);
+	CNXK_TEL_DICT_INT(d, aura, avg_level, w1_);
+	CNXK_TEL_DICT_U64(d, aura, count, w2_);
+	CNXK_TEL_DICT_INT(d, aura, nix0_bpid, w2_);
+	CNXK_TEL_DICT_INT(d, aura, nix1_bpid, w2_);
+	CNXK_TEL_DICT_U64(d, aura, limit, w3_);
+	CNXK_TEL_DICT_INT(d, aura, bp, w3_);
+	CNXK_TEL_DICT_INT(d, aura, fc_ena, w3_);
+	CNXK_TEL_DICT_INT(d, aura, fc_up_crossing, w3_);
+	CNXK_TEL_DICT_INT(d, aura, fc_stype, w3_);
+	CNXK_TEL_DICT_INT(d, aura, fc_hyst_bits, w3_);
+	CNXK_TEL_DICT_INT(d, aura, fc_addr, w4_);
+	CNXK_TEL_DICT_INT(d, aura, pool_drop, w5_);
+	CNXK_TEL_DICT_INT(d, aura, update_time, w5_);
+	CNXK_TEL_DICT_INT(d, aura, err_int, w5_);
+	CNXK_TEL_DICT_INT(d, aura, err_int_ena, w5_);
+	CNXK_TEL_DICT_INT(d, aura, thresh_int, w5_);
+	CNXK_TEL_DICT_INT(d, aura, thresh_int_ena, w5_);
+	CNXK_TEL_DICT_INT(d, aura, thresh_up, w5_);
+	CNXK_TEL_DICT_INT(d, aura, thresh_qint_idx, w5_);
+	CNXK_TEL_DICT_INT(d, aura, err_qint_idx, w5_);
+	CNXK_TEL_DICT_U64(d, aura, thresh, w6_);
+
+	return 0;
+}
+
+static int
+cnxk_tel_npa_pool(int pool_id, struct plt_tel_data *d)
+{
+	__io struct npa_pool_s *pool;
+	struct npa_aq_enq_req *req;
+	struct npa_aq_enq_rsp *rsp;
+	struct npa_lf *lf;
+	int rc;
+
+	lf = idev_npa_obj_get();
+	if (lf == NULL)
+		return NPA_ERR_DEVICE_NOT_BOUNDED;
+
+	if (rte_bitmap_get(lf->npa_bmp, pool_id))
+		return -1;
+
+	req = mbox_alloc_msg_npa_aq_enq(lf->mbox);
+	if (!req) {
+		plt_err("Failed to alloc aq enq for npa");
+		return -1;
+	}
+
+	req->aura_id = pool_id;
+	req->ctype = NPA_AQ_CTYPE_POOL;
+	req->op = NPA_AQ_INSTOP_READ;
+
+	rc = mbox_process_msg(lf->mbox, (void *)&rsp);
+	if (rc) {
+		plt_err("Failed to get pool(%d) context", pool_id);
+		return rc;
+	}
+
+	pool = &rsp->pool;
+	CNXK_TEL_DICT_PTR(d, pool, stack_base, w0_);
+	CNXK_TEL_DICT_INT(d, pool, ena, w1_);
+	CNXK_TEL_DICT_INT(d, pool, nat_align, w1_);
+	CNXK_TEL_DICT_INT(d, pool, stack_caching, w1_);
+	CNXK_TEL_DICT_INT(d, pool, stack_way_mask, w1_);
+	CNXK_TEL_DICT_INT(d, pool, buf_offset, w1_);
+	CNXK_TEL_DICT_INT(d, pool, buf_size, w1_);
+	CNXK_TEL_DICT_INT(d, pool, stack_max_pages, w2_);
+	CNXK_TEL_DICT_INT(d, pool, stack_pages, w2_);
+	CNXK_TEL_DICT_INT(d, pool, op_pc, w3_);
+	CNXK_TEL_DICT_INT(d, pool, stack_offset, w4_);
+	CNXK_TEL_DICT_INT(d, pool, shift, w4_);
+	CNXK_TEL_DICT_INT(d, pool, avg_level, w4_);
+	CNXK_TEL_DICT_INT(d, pool, avg_con, w4_);
+	CNXK_TEL_DICT_INT(d, pool, fc_ena, w4_);
+	CNXK_TEL_DICT_INT(d, pool, fc_stype, w4_);
+	CNXK_TEL_DICT_INT(d, pool, fc_hyst_bits, w4_);
+	CNXK_TEL_DICT_INT(d, pool, fc_up_crossing, w4_);
+	CNXK_TEL_DICT_INT(d, pool, update_time, w4_);
+	CNXK_TEL_DICT_PTR(d, pool, fc_addr, w5_);
+	CNXK_TEL_DICT_PTR(d, pool, ptr_start, w6_);
+	CNXK_TEL_DICT_PTR(d, pool, ptr_end, w7_);
+	CNXK_TEL_DICT_INT(d, pool, err_int, w8_);
+	CNXK_TEL_DICT_INT(d, pool, err_int_ena, w8_);
+	CNXK_TEL_DICT_INT(d, pool, thresh_int, w8_);
+	CNXK_TEL_DICT_INT(d, pool, thresh_int_ena, w8_);
+	CNXK_TEL_DICT_INT(d, pool, thresh_up, w8_);
+	CNXK_TEL_DICT_INT(d, pool, thresh_qint_idx, w8_);
+	CNXK_TEL_DICT_INT(d, pool, err_qint_idx, w8_);
+
+	return 0;
+}
+
+static int
+cnxk_npa_tel_handle_info(const char *cmd __rte_unused,
+			 const char *params __rte_unused,
+			 struct rte_tel_data *d)
+{
+	plt_tel_data_start_dict(d);
+	cnxk_tel_npa(d);
+	return 0;
+}
+
+static int
+cnxk_npa_tel_handle_info_x(const char *cmd, const char *params,
+			   struct rte_tel_data *d)
+{
+	int id, rc;
+
+	if (params == NULL || strlen(params) == 0 || !isdigit(*params))
+		return -1;
+
+	id = atoi(params);
+	plt_tel_data_start_dict(d);
+
+	if (strstr(cmd, "aura/info"))
+		rc = cnxk_tel_npa_aura(id, d);
+	else
+		rc = cnxk_tel_npa_pool(id, d);
+
+	return rc;
+}
+
+RTE_INIT(cnxk_telemetry_npa_init)
+{
+	rte_telemetry_register_cmd(
+		"/cnxk/npa/info", cnxk_npa_tel_handle_info,
+		"Returns npa information. Takes no parameters");
+
+	rte_telemetry_register_cmd(
+		"/cnxk/npa/aura/info", cnxk_npa_tel_handle_info_x,
+		"Returns npa aura information. Parameters: aura_id");
+
+	rte_telemetry_register_cmd(
+		"/cnxk/npa/pool/info", cnxk_npa_tel_handle_info_x,
+		"Returns npa pool information. Parameters: pool_id");
+}
diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build
index 6a7849f31c..3cc9a2ff37 100644
--- a/drivers/common/cnxk/meson.build
+++ b/drivers/common/cnxk/meson.build
@@ -60,5 +60,9 @@ sources = files(
 # Security common code
 sources += files('cnxk_security.c')
 
+# Telemetry common code
+sources += files('cnxk_telemetry_npa.c')
+
 includes += include_directories('../../bus/pci')
 includes += include_directories('../../../lib/net')
+includes += include_directories('../../../lib/telemetry')
diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h
index 285b24b82d..9fcaee8254 100644
--- a/drivers/common/cnxk/roc_platform.h
+++ b/drivers/common/cnxk/roc_platform.h
@@ -19,6 +19,7 @@
 #include <rte_pci.h>
 #include <rte_spinlock.h>
 #include <rte_string_fns.h>
+#include <rte_telemetry.h>
 
 #include "roc_bits.h"
 
@@ -139,6 +140,13 @@
 
 #define plt_strlcpy rte_strlcpy
 
+#define plt_tel_data                 rte_tel_data
+#define plt_tel_data_start_dict      rte_tel_data_start_dict
+#define plt_tel_data_add_dict_int    rte_tel_data_add_dict_int
+#define plt_tel_data_add_dict_ptr    rte_tel_data_add_dict_ptr
+#define plt_tel_data_add_dict_string rte_tel_data_add_dict_string
+#define plt_tel_data_add_dict_u64    rte_tel_data_add_dict_u64
+
 /* Log */
 extern int cnxk_logtype_base;
 extern int cnxk_logtype_mbox;
-- 
2.25.1