18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
28c2ecf20Sopenharmony_ci/* Copyright 2019 NXP */
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include <linux/module.h>
58c2ecf20Sopenharmony_ci#include <linux/device.h>
68c2ecf20Sopenharmony_ci#include <linux/debugfs.h>
78c2ecf20Sopenharmony_ci#include "dpseci-debugfs.h"
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cistatic int dpseci_dbg_fqs_show(struct seq_file *file, void *offset)
108c2ecf20Sopenharmony_ci{
118c2ecf20Sopenharmony_ci	struct dpaa2_caam_priv *priv = (struct dpaa2_caam_priv *)file->private;
128c2ecf20Sopenharmony_ci	u32 fqid, fcnt, bcnt;
138c2ecf20Sopenharmony_ci	int i, err;
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci	seq_printf(file, "FQ stats for %s:\n", dev_name(priv->dev));
168c2ecf20Sopenharmony_ci	seq_printf(file, "%s%16s%16s\n",
178c2ecf20Sopenharmony_ci		   "Rx-VFQID",
188c2ecf20Sopenharmony_ci		   "Pending frames",
198c2ecf20Sopenharmony_ci		   "Pending bytes");
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci	for (i = 0; i <  priv->num_pairs; i++) {
228c2ecf20Sopenharmony_ci		fqid = priv->rx_queue_attr[i].fqid;
238c2ecf20Sopenharmony_ci		err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
248c2ecf20Sopenharmony_ci		if (err)
258c2ecf20Sopenharmony_ci			continue;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci		seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
288c2ecf20Sopenharmony_ci	}
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	seq_printf(file, "%s%16s%16s\n",
318c2ecf20Sopenharmony_ci		   "Tx-VFQID",
328c2ecf20Sopenharmony_ci		   "Pending frames",
338c2ecf20Sopenharmony_ci		   "Pending bytes");
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	for (i = 0; i <  priv->num_pairs; i++) {
368c2ecf20Sopenharmony_ci		fqid = priv->tx_queue_attr[i].fqid;
378c2ecf20Sopenharmony_ci		err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
388c2ecf20Sopenharmony_ci		if (err)
398c2ecf20Sopenharmony_ci			continue;
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci		seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
428c2ecf20Sopenharmony_ci	}
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	return 0;
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(dpseci_dbg_fqs);
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_civoid dpaa2_dpseci_debugfs_init(struct dpaa2_caam_priv *priv)
508c2ecf20Sopenharmony_ci{
518c2ecf20Sopenharmony_ci	priv->dfs_root = debugfs_create_dir(dev_name(priv->dev), NULL);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	debugfs_create_file("fq_stats", 0444, priv->dfs_root, priv,
548c2ecf20Sopenharmony_ci			    &dpseci_dbg_fqs_fops);
558c2ecf20Sopenharmony_ci}
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_civoid dpaa2_dpseci_debugfs_exit(struct dpaa2_caam_priv *priv)
588c2ecf20Sopenharmony_ci{
598c2ecf20Sopenharmony_ci	debugfs_remove_recursive(priv->dfs_root);
608c2ecf20Sopenharmony_ci}
61