18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <linux/seq_file.h>
38c2ecf20Sopenharmony_ci#include <linux/debugfs.h>
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include "nitrox_csr.h"
68c2ecf20Sopenharmony_ci#include "nitrox_dev.h"
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cistatic int firmware_show(struct seq_file *s, void *v)
98c2ecf20Sopenharmony_ci{
108c2ecf20Sopenharmony_ci	struct nitrox_device *ndev = s->private;
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci	seq_printf(s, "Version: %s\n", ndev->hw.fw_name[0]);
138c2ecf20Sopenharmony_ci	seq_printf(s, "Version: %s\n", ndev->hw.fw_name[1]);
148c2ecf20Sopenharmony_ci	return 0;
158c2ecf20Sopenharmony_ci}
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(firmware);
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_cistatic int device_show(struct seq_file *s, void *v)
208c2ecf20Sopenharmony_ci{
218c2ecf20Sopenharmony_ci	struct nitrox_device *ndev = s->private;
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci	seq_printf(s, "NITROX [%d]\n", ndev->idx);
248c2ecf20Sopenharmony_ci	seq_printf(s, "  Part Name: %s\n", ndev->hw.partname);
258c2ecf20Sopenharmony_ci	seq_printf(s, "  Frequency: %d MHz\n", ndev->hw.freq);
268c2ecf20Sopenharmony_ci	seq_printf(s, "  Device ID: 0x%0x\n", ndev->hw.device_id);
278c2ecf20Sopenharmony_ci	seq_printf(s, "  Revision ID: 0x%0x\n", ndev->hw.revision_id);
288c2ecf20Sopenharmony_ci	seq_printf(s, "  Cores: [AE=%u  SE=%u  ZIP=%u]\n",
298c2ecf20Sopenharmony_ci		   ndev->hw.ae_cores, ndev->hw.se_cores, ndev->hw.zip_cores);
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	return 0;
328c2ecf20Sopenharmony_ci}
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(device);
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_cistatic int stats_show(struct seq_file *s, void *v)
378c2ecf20Sopenharmony_ci{
388c2ecf20Sopenharmony_ci	struct nitrox_device *ndev = s->private;
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci	seq_printf(s, "NITROX [%d] Request Statistics\n", ndev->idx);
418c2ecf20Sopenharmony_ci	seq_printf(s, "  Posted: %llu\n",
428c2ecf20Sopenharmony_ci		   (u64)atomic64_read(&ndev->stats.posted));
438c2ecf20Sopenharmony_ci	seq_printf(s, "  Completed: %llu\n",
448c2ecf20Sopenharmony_ci		   (u64)atomic64_read(&ndev->stats.completed));
458c2ecf20Sopenharmony_ci	seq_printf(s, "  Dropped: %llu\n",
468c2ecf20Sopenharmony_ci		   (u64)atomic64_read(&ndev->stats.dropped));
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	return 0;
498c2ecf20Sopenharmony_ci}
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(stats);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_civoid nitrox_debugfs_exit(struct nitrox_device *ndev)
548c2ecf20Sopenharmony_ci{
558c2ecf20Sopenharmony_ci	debugfs_remove_recursive(ndev->debugfs_dir);
568c2ecf20Sopenharmony_ci	ndev->debugfs_dir = NULL;
578c2ecf20Sopenharmony_ci}
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_civoid nitrox_debugfs_init(struct nitrox_device *ndev)
608c2ecf20Sopenharmony_ci{
618c2ecf20Sopenharmony_ci	struct dentry *dir;
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci	dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci	ndev->debugfs_dir = dir;
668c2ecf20Sopenharmony_ci	debugfs_create_file("firmware", 0400, dir, ndev, &firmware_fops);
678c2ecf20Sopenharmony_ci	debugfs_create_file("device", 0400, dir, ndev, &device_fops);
688c2ecf20Sopenharmony_ci	debugfs_create_file("stats", 0400, dir, ndev, &stats_fops);
698c2ecf20Sopenharmony_ci}
70