All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ethdev: add dump regs for telemetry
@ 2023-12-14  1:56 Jie Hai
  2023-12-14 12:49 ` Ferruh Yigit
                   ` (10 more replies)
  0 siblings, 11 replies; 134+ messages in thread
From: Jie Hai @ 2023-12-14  1:56 UTC (permalink / raw)
  To: dev, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko
  Cc: lihuisong, fengchengwen, liudongdong3, haijie1

The ethdev library now registers a telemetry command for
dump regs.

An example usage is shown below:
--> /ethdev/regs,test
{
  "/ethdev/regs": {
    "regs_offset": 0,
    "regs_length": 3192,
    "regs_width": 4,
    "device_version": "0x1080f00",
    "regs_file": "port_0_regs_test"
  }
}

Signed-off-by: Jie Hai <haijie1@huawei.com>
---
 lib/ethdev/rte_ethdev_telemetry.c | 93 +++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/lib/ethdev/rte_ethdev_telemetry.c b/lib/ethdev/rte_ethdev_telemetry.c
index b01028ce9b60..33ec4739aa9b 100644
--- a/lib/ethdev/rte_ethdev_telemetry.c
+++ b/lib/ethdev/rte_ethdev_telemetry.c
@@ -5,6 +5,7 @@
 #include <ctype.h>
 #include <stdlib.h>
 
+#include <rte_malloc.h>
 #include <rte_kvargs.h>
 #include <rte_telemetry.h>
 
@@ -1395,6 +1396,96 @@ eth_dev_handle_port_tm_node_caps(const char *cmd __rte_unused,
 	return ret;
 }
 
+static int
+eth_dev_get_port_regs(uint16_t port_id, struct rte_dev_reg_info *reg_info,
+		      const char *file_name)
+{
+	uint64_t buf_size;
+	size_t nr_written;
+	void *data;
+	FILE *fp;
+	int ret;
+
+	ret = rte_eth_dev_get_reg_info(port_id, reg_info);
+	if (ret != 0) {
+		RTE_ETHDEV_LOG(ERR,
+			"Error getting device reg info: %d\n", ret);
+		return ret;
+	}
+
+	buf_size = reg_info->length * reg_info->width;
+	data = rte_zmalloc(NULL, buf_size, 0);
+	if (!data) {
+		RTE_ETHDEV_LOG(ERR,
+			"Error allocating %zu bytes buffer\n", buf_size);
+		return -ENOMEM;
+	}
+
+	reg_info->data = data;
+	ret = rte_eth_dev_get_reg_info(port_id, reg_info);
+	if (ret != 0) {
+		RTE_ETHDEV_LOG(ERR,
+			"Error getting regs from device: %d\n", ret);
+		goto out;
+	}
+
+	fp = fopen(file_name, "wb");
+	if (fp == NULL) {
+		printf("Error during opening '%s' for writing: %s\n",
+			file_name, strerror(errno));
+		ret = -EINVAL;
+	} else {
+		nr_written = fwrite(reg_info->data, 1, buf_size, fp);
+		if (nr_written != buf_size)
+			printf("Error during writing %s: %s\n",
+				file_name, strerror(errno));
+		fclose(fp);
+	}
+
+out:
+	rte_free(data);
+	reg_info->data = NULL;
+	return ret;
+}
+
+static int
+eth_dev_handle_port_regs(const char *cmd __rte_unused,
+		const char *params,
+		struct rte_tel_data *d)
+{
+	struct rte_dev_reg_info reg_info = {0};
+	char file_name[RTE_TEL_MAX_STRING_LEN];
+	const char *suffix;
+	uint16_t port_id;
+	char *end_param;
+	int ret;
+
+	ret = eth_dev_parse_port_params(params, &port_id, &end_param, true);
+	if (ret != 0)
+		return ret;
+
+	suffix = strtok_r(end_param, ",", &end_param);
+	if (!suffix || strlen(suffix) == 0) {
+		RTE_ETHDEV_LOG(ERR,
+			"Please pass suffix parameters ethdev telemetry command\n");
+		return -EINVAL;
+	}
+	snprintf(file_name, RTE_TEL_MAX_STRING_LEN, "port_%u_regs_%s",
+		 port_id, suffix);
+	ret = eth_dev_get_port_regs(port_id, &reg_info, file_name);
+	if (ret != 0)
+		return ret;
+
+	rte_tel_data_start_dict(d);
+	rte_tel_data_add_dict_uint(d, "regs_offset", reg_info.offset);
+	rte_tel_data_add_dict_uint(d, "regs_length", reg_info.length);
+	rte_tel_data_add_dict_uint(d, "regs_width", reg_info.width);
+	rte_tel_data_add_dict_uint_hex(d, "device_version", reg_info.version, 0);
+	rte_tel_data_add_dict_string(d, "regs_file", file_name);
+
+	return 0;
+}
+
 RTE_INIT(ethdev_init_telemetry)
 {
 	rte_telemetry_register_cmd("/ethdev/list", eth_dev_handle_port_list,
@@ -1436,4 +1527,6 @@ RTE_INIT(ethdev_init_telemetry)
 			"Returns TM Level Capabilities info for a port. Parameters: int port_id, int level_id (see tm_capability for the max)");
 	rte_telemetry_register_cmd("/ethdev/tm_node_capability", eth_dev_handle_port_tm_node_caps,
 			"Returns TM Node Capabilities info for a port. Parameters: int port_id, int node_id (see tm_capability for the max)");
+	rte_telemetry_register_cmd("/ethdev/regs", eth_dev_handle_port_regs,
+			"Returns regs for a port. Parameters: int port_id, char *suffix");
 }
-- 
2.30.0


^ permalink raw reply related	[flat|nested] 134+ messages in thread

end of thread, other threads:[~2024-10-07  3:01 UTC | newest]

Thread overview: 134+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-14  1:56 [PATCH] ethdev: add dump regs for telemetry Jie Hai
2023-12-14 12:49 ` Ferruh Yigit
2024-01-09  2:19   ` Jie Hai
2024-01-09  2:41     ` Jie Hai
2024-01-09 18:06     ` Ferruh Yigit
2024-01-10  1:38       ` fengchengwen
2024-01-10 12:15         ` Ferruh Yigit
2024-01-10 14:09           ` Thomas Monjalon
2024-01-10 15:48             ` Ferruh Yigit
2024-01-11  1:55           ` fengchengwen
2024-01-11 11:11             ` Ferruh Yigit
2024-01-11 12:43               ` fengchengwen
2024-02-05 10:51 ` [PATCH v2 0/7] support dump reigser names and filter them Jie Hai
2024-02-05 10:51   ` [PATCH v2 1/7] ethdev: support report register names and filter Jie Hai
2024-02-07 17:00     ` Ferruh Yigit
2024-02-20  8:43       ` Jie Hai
2024-02-05 10:51   ` [PATCH v2 2/7] ethdev: add telemetry cmd for registers Jie Hai
2024-02-07 17:03     ` Ferruh Yigit
2024-02-22  9:01       ` Jie Hai
2024-02-05 10:51   ` [PATCH v2 3/7] net/hns3: fix dump counter of registers Jie Hai
2024-02-05 10:51   ` [PATCH v2 4/7] net/hns3: remove dump format " Jie Hai
2024-02-05 10:51   ` [PATCH v2 5/7] net/hns3: add names for registers Jie Hai
2024-02-05 10:51   ` [PATCH v2 6/7] net/hns3: support filter directly accessed registers Jie Hai
2024-02-05 10:51   ` [PATCH v2 7/7] net/hns3: support filter dump of registers Jie Hai
2024-02-20 10:58 ` [PATCH v3 0/7] support dump reigser names and filter them Jie Hai
2024-02-20 10:58   ` [PATCH v3 1/7] ethdev: support report register names and filter Jie Hai
2024-02-20 15:09     ` Stephen Hemminger
2024-02-26  2:33       ` Jie Hai
2024-02-20 15:13     ` Stephen Hemminger
2024-02-26  2:41       ` Jie Hai
2024-02-20 15:14     ` Stephen Hemminger
2024-02-26  2:57       ` Jie Hai
2024-02-20 15:14     ` Stephen Hemminger
2024-02-26  2:33       ` Jie Hai
2024-02-20 10:58   ` [PATCH v3 2/7] ethdev: add telemetry cmd for registers Jie Hai
2024-02-20 10:58   ` [PATCH v3 3/7] net/hns3: fix dump counter of registers Jie Hai
2024-02-20 10:58   ` [PATCH v3 4/7] net/hns3: remove dump format " Jie Hai
2024-02-20 10:58   ` [PATCH v3 5/7] net/hns3: add names for registers Jie Hai
2024-02-20 10:58   ` [PATCH v3 6/7] net/hns3: support filter directly accessed registers Jie Hai
2024-02-20 10:58   ` [PATCH v3 7/7] net/hns3: support filter dump of registers Jie Hai
2024-02-26  3:07 ` [PATCH v4 0/7] support dump reigser names and filter them Jie Hai
2024-02-26  3:07   ` [PATCH v4 1/7] ethdev: support report register names and filter Jie Hai
2024-02-26  8:01     ` fengchengwen
2024-03-06  7:22       ` Jie Hai
2024-02-29  9:52     ` Thomas Monjalon
2024-03-05  7:45       ` Jie Hai
2024-02-26  3:07   ` [PATCH v4 2/7] ethdev: add telemetry cmd for registers Jie Hai
2024-02-26  9:09     ` fengchengwen
2024-03-06  7:18       ` Jie Hai
2024-02-26  3:07   ` [PATCH v4 3/7] net/hns3: fix dump counter of registers Jie Hai
2024-02-26  3:07   ` [PATCH v4 4/7] net/hns3: remove dump format " Jie Hai
2024-02-26  3:07   ` [PATCH v4 5/7] net/hns3: add names for registers Jie Hai
2024-02-26  3:07   ` [PATCH v4 6/7] net/hns3: support filter directly accessed registers Jie Hai
2024-02-26  3:07   ` [PATCH v4 7/7] net/hns3: support filter dump of registers Jie Hai
2024-03-07  3:02 ` [PATCH v5 0/7] support dump reigser names and filter them Jie Hai
2024-03-07  3:02   ` [PATCH v5 1/7] ethdev: support report register names and filter Jie Hai
2024-03-08  8:09     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 2/7] ethdev: add telemetry cmd for registers Jie Hai
2024-03-08  8:48     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 3/7] net/hns3: fix dump counter of registers Jie Hai
2024-03-08  8:49     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 4/7] net/hns3: remove dump format " Jie Hai
2024-03-08  9:17     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 5/7] net/hns3: add names for registers Jie Hai
2024-03-08  9:41     ` lihuisong (C)
2024-03-08 10:24     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 6/7] net/hns3: support filter directly accessed registers Jie Hai
2024-03-08  9:41     ` lihuisong (C)
2024-03-07  3:02   ` [PATCH v5 7/7] net/hns3: support filter dump of registers Jie Hai
2024-07-22  6:58 ` [PATCH v6 0/8] support dump reigser names and filter Jie Hai
2024-07-22  6:58   ` [PATCH v6 1/8] ethdev: support report register " Jie Hai
2024-07-22  6:58   ` [PATCH v6 2/8] ethdev: add telemetry cmd for registers Jie Hai
2024-07-22  6:58   ` [PATCH v6 3/8] net/hns3: remove some basic address dump Jie Hai
2024-07-22  6:58   ` [PATCH v6 4/8] net/hns3: fix dump counter of registers Jie Hai
2024-07-22  6:58   ` [PATCH v6 5/8] net/hns3: remove separators between register module Jie Hai
2024-07-22  6:58   ` [PATCH v6 6/8] net/hns3: refactor register dump Jie Hai
2024-07-22  6:58   ` [PATCH v6 7/8] net/hns3: support report names of registers Jie Hai
2024-07-22  6:58   ` [PATCH v6 8/8] net/hns3: support filter registers by module names Jie Hai
2024-08-09  9:22   ` [PATCH v6 0/8] support dump reigser names and filter Jie Hai
2024-09-05  6:26 ` [RESEND " Jie Hai
2024-09-05  6:26   ` [RESEND v6 1/8] ethdev: support report register " Jie Hai
2024-09-05  6:26   ` [RESEND v6 2/8] ethdev: add telemetry cmd for registers Jie Hai
2024-09-05  6:26   ` [RESEND v6 3/8] net/hns3: remove some basic address dump Jie Hai
2024-09-05  6:26   ` [RESEND v6 4/8] net/hns3: fix dump counter of registers Jie Hai
2024-09-05  6:26   ` [RESEND v6 5/8] net/hns3: remove separators between register module Jie Hai
2024-09-05  6:26   ` [RESEND v6 6/8] net/hns3: refactor register dump Jie Hai
2024-09-05  6:26   ` [RESEND v6 7/8] net/hns3: support report names of registers Jie Hai
2024-09-05  6:26   ` [RESEND v6 8/8] net/hns3: support filter registers by module names Jie Hai
2024-09-14  6:53 ` [PATCH v7 0/8] support dump reigser names and filter Jie Hai
2024-09-14  7:13 ` Jie Hai
2024-09-14  7:13   ` [PATCH v7 1/8] ethdev: support report register " Jie Hai
2024-09-22 21:26     ` Ferruh Yigit
2024-09-14  7:13   ` [PATCH v7 2/8] ethdev: add telemetry cmd for registers Jie Hai
2024-09-14  8:20     ` fengchengwen
2024-09-23  2:41       ` Jie Hai
2024-09-22 21:28     ` Ferruh Yigit
2024-09-14  7:13   ` [PATCH v7 3/8] net/hns3: remove some basic address dump Jie Hai
2024-09-14  8:21     ` fengchengwen
2024-09-14  7:13   ` [PATCH v7 4/8] net/hns3: fix dump counter of registers Jie Hai
2024-09-14  7:13   ` [PATCH v7 5/8] net/hns3: remove separators between register module Jie Hai
2024-09-14  7:13   ` [PATCH v7 6/8] net/hns3: refactor register dump Jie Hai
2024-09-14  8:26     ` fengchengwen
2024-09-14  7:13   ` [PATCH v7 7/8] net/hns3: support report names of registers Jie Hai
2024-09-14  8:27     ` fengchengwen
2024-09-14  7:13   ` [PATCH v7 8/8] net/hns3: support filter registers by module names Jie Hai
2024-09-14  8:46     ` fengchengwen
2024-09-14 15:00   ` [PATCH v7 0/8] support dump reigser names and filter Stephen Hemminger
2024-09-23  2:41     ` Jie Hai
2024-09-22 21:31   ` Ferruh Yigit
2024-09-25  6:40 ` [PATCH v8 0/8] support dump register " Jie Hai
2024-09-25  6:40   ` [PATCH v8 1/8] ethdev: support report " Jie Hai
2024-09-25  6:40   ` [PATCH v8 2/8] ethdev: add telemetry cmd for registers Jie Hai
2024-09-26  1:22     ` fengchengwen
2024-09-25  6:40   ` [PATCH v8 3/8] net/hns3: remove some basic address dump Jie Hai
2024-09-25  6:40   ` [PATCH v8 4/8] net/hns3: fix dump counter of registers Jie Hai
2024-09-25  6:40   ` [PATCH v8 5/8] net/hns3: remove separators between register module Jie Hai
2024-09-25  6:40   ` [PATCH v8 6/8] net/hns3: refactor register dump Jie Hai
2024-09-25  6:40   ` [PATCH v8 7/8] net/hns3: support report names of registers Jie Hai
2024-09-25  6:40   ` [PATCH v8 8/8] net/hns3: support filter registers by module names Jie Hai
2024-09-26  1:46     ` fengchengwen
2024-09-26 12:37       ` Jie Hai
2024-09-26 12:42 ` [PATCH v9 0/8] support dump reigster names and filter Jie Hai
2024-09-26 12:42   ` [PATCH v9 1/8] ethdev: support report register " Jie Hai
2024-09-26 12:42   ` [PATCH v9 2/8] ethdev: add telemetry cmd for registers Jie Hai
2024-09-26 12:42   ` [PATCH v9 3/8] net/hns3: remove some basic address dump Jie Hai
2024-09-26 12:42   ` [PATCH v9 4/8] net/hns3: fix dump counter of registers Jie Hai
2024-09-26 12:42   ` [PATCH v9 5/8] net/hns3: remove separators between register module Jie Hai
2024-09-26 12:42   ` [PATCH v9 6/8] net/hns3: refactor register dump Jie Hai
2024-09-26 12:42   ` [PATCH v9 7/8] net/hns3: support report names of registers Jie Hai
2024-09-26 12:42   ` [PATCH v9 8/8] net/hns3: support filter registers by module names Jie Hai
2024-09-27  1:37     ` fengchengwen
2024-10-04 13:59     ` David Marchand
2024-10-07  3:01       ` Ferruh Yigit
2024-09-27 21:38   ` [PATCH v9 0/8] support dump reigster names and filter Ferruh Yigit

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.