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