[][openwrt][mt7988][tops][add cpu utilization fetching]
[Description]
Add cpu utilization fetching and refactor debugfs of trm and tops
Via reading debugfs file(/sys/kernel/debug/tops/trm/cpu-utilization)
to fetch each core's cpu utilization
[Release-log]
N/A
Change-Id: Iff4c965294c3054a54ba92263191856cd5c722c7
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7907085
diff --git a/package-21.02/kernel/tops/src/trm-debugfs.c b/package-21.02/kernel/tops/src/trm-debugfs.c
new file mode 100644
index 0000000..66c64f3
--- /dev/null
+++ b/package-21.02/kernel/tops/src/trm-debugfs.c
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2023 MediaTek Inc. All Rights Reserved.
+ *
+ * Author: Alvin Kuo <alvin.kuog@mediatek.com>
+ */
+
+#include <linux/debugfs.h>
+#include <linux/uaccess.h>
+
+#include "debugfs.h"
+#include "internal.h"
+#include "tops.h"
+#include "trm-debugfs.h"
+#include "trm.h"
+
+struct dentry *trm_debugfs_root;
+
+static int cpu_utilization_debug_read(struct seq_file *s, void *private)
+{
+ u32 cpu_utilization;
+ enum core_id core;
+ int ret;
+
+ seq_puts(s, "CPU Utilization:\n");
+ for (core = CORE_OFFLOAD_0; core <= CORE_MGMT; core++) {
+ ret = mtk_trm_cpu_utilization(core, &cpu_utilization);
+ if (ret) {
+ if (core <= CORE_OFFLOAD_3)
+ TOPS_ERR("fetch Core%d cpu utilization failed(%d)\n", core, ret);
+ else
+ TOPS_ERR("fetch CoreM cpu utilization failed(%d)\n", ret);
+
+ return ret;
+ }
+
+ if (core <= CORE_OFFLOAD_3)
+ seq_printf(s, "Core%d\t\t%u%%\n", core, cpu_utilization);
+ else
+ seq_printf(s, "CoreM\t\t%u%%\n", cpu_utilization);
+ }
+
+ return 0;
+}
+
+static int cpu_utilization_debug_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, cpu_utilization_debug_read, file->private_data);
+}
+
+static ssize_t cpu_utilization_debug_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *data)
+{
+ return count;
+}
+
+static const struct file_operations cpu_utilization_debug_ops = {
+ .open = cpu_utilization_debug_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .write = cpu_utilization_debug_write,
+ .release = single_release,
+};
+
+int mtk_trm_debugfs_init(void)
+{
+ if (!tops_debugfs_root)
+ return -ENOENT;
+
+ if (!trm_debugfs_root) {
+ trm_debugfs_root = debugfs_create_dir("trm", tops_debugfs_root);
+ if (IS_ERR(trm_debugfs_root)) {
+ TOPS_ERR("create trm debugfs root directory failed\n");
+ return PTR_ERR(trm_debugfs_root);
+ }
+ }
+
+ debugfs_create_file("cpu-utilization", 0644, trm_debugfs_root, NULL,
+ &cpu_utilization_debug_ops);
+
+ return 0;
+}
+
+void mtk_trm_debugfs_deinit(void)
+{
+ debugfs_remove_recursive(trm_debugfs_root);
+}