1*4882a593Smuzhiyun // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2*4882a593Smuzhiyun /* Copyright 2019 NXP */
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun #include <linux/module.h>
5*4882a593Smuzhiyun #include <linux/device.h>
6*4882a593Smuzhiyun #include <linux/debugfs.h>
7*4882a593Smuzhiyun #include "dpseci-debugfs.h"
8*4882a593Smuzhiyun
dpseci_dbg_fqs_show(struct seq_file * file,void * offset)9*4882a593Smuzhiyun static int dpseci_dbg_fqs_show(struct seq_file *file, void *offset)
10*4882a593Smuzhiyun {
11*4882a593Smuzhiyun struct dpaa2_caam_priv *priv = (struct dpaa2_caam_priv *)file->private;
12*4882a593Smuzhiyun u32 fqid, fcnt, bcnt;
13*4882a593Smuzhiyun int i, err;
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun seq_printf(file, "FQ stats for %s:\n", dev_name(priv->dev));
16*4882a593Smuzhiyun seq_printf(file, "%s%16s%16s\n",
17*4882a593Smuzhiyun "Rx-VFQID",
18*4882a593Smuzhiyun "Pending frames",
19*4882a593Smuzhiyun "Pending bytes");
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun for (i = 0; i < priv->num_pairs; i++) {
22*4882a593Smuzhiyun fqid = priv->rx_queue_attr[i].fqid;
23*4882a593Smuzhiyun err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
24*4882a593Smuzhiyun if (err)
25*4882a593Smuzhiyun continue;
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
28*4882a593Smuzhiyun }
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun seq_printf(file, "%s%16s%16s\n",
31*4882a593Smuzhiyun "Tx-VFQID",
32*4882a593Smuzhiyun "Pending frames",
33*4882a593Smuzhiyun "Pending bytes");
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun for (i = 0; i < priv->num_pairs; i++) {
36*4882a593Smuzhiyun fqid = priv->tx_queue_attr[i].fqid;
37*4882a593Smuzhiyun err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
38*4882a593Smuzhiyun if (err)
39*4882a593Smuzhiyun continue;
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
42*4882a593Smuzhiyun }
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun return 0;
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun DEFINE_SHOW_ATTRIBUTE(dpseci_dbg_fqs);
48*4882a593Smuzhiyun
dpaa2_dpseci_debugfs_init(struct dpaa2_caam_priv * priv)49*4882a593Smuzhiyun void dpaa2_dpseci_debugfs_init(struct dpaa2_caam_priv *priv)
50*4882a593Smuzhiyun {
51*4882a593Smuzhiyun priv->dfs_root = debugfs_create_dir(dev_name(priv->dev), NULL);
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun debugfs_create_file("fq_stats", 0444, priv->dfs_root, priv,
54*4882a593Smuzhiyun &dpseci_dbg_fqs_fops);
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun
dpaa2_dpseci_debugfs_exit(struct dpaa2_caam_priv * priv)57*4882a593Smuzhiyun void dpaa2_dpseci_debugfs_exit(struct dpaa2_caam_priv *priv)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun debugfs_remove_recursive(priv->dfs_root);
60*4882a593Smuzhiyun }
61