162306a36Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
262306a36Sopenharmony_ci/* Copyright 2019 NXP */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <linux/module.h>
562306a36Sopenharmony_ci#include <linux/device.h>
662306a36Sopenharmony_ci#include <linux/debugfs.h>
762306a36Sopenharmony_ci#include "dpseci-debugfs.h"
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistatic int dpseci_dbg_fqs_show(struct seq_file *file, void *offset)
1062306a36Sopenharmony_ci{
1162306a36Sopenharmony_ci	struct dpaa2_caam_priv *priv = file->private;
1262306a36Sopenharmony_ci	u32 fqid, fcnt, bcnt;
1362306a36Sopenharmony_ci	int i, err;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	seq_printf(file, "FQ stats for %s:\n", dev_name(priv->dev));
1662306a36Sopenharmony_ci	seq_printf(file, "%s%16s%16s\n",
1762306a36Sopenharmony_ci		   "Rx-VFQID",
1862306a36Sopenharmony_ci		   "Pending frames",
1962306a36Sopenharmony_ci		   "Pending bytes");
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	for (i = 0; i <  priv->num_pairs; i++) {
2262306a36Sopenharmony_ci		fqid = priv->rx_queue_attr[i].fqid;
2362306a36Sopenharmony_ci		err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
2462306a36Sopenharmony_ci		if (err)
2562306a36Sopenharmony_ci			continue;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci		seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
2862306a36Sopenharmony_ci	}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	seq_printf(file, "%s%16s%16s\n",
3162306a36Sopenharmony_ci		   "Tx-VFQID",
3262306a36Sopenharmony_ci		   "Pending frames",
3362306a36Sopenharmony_ci		   "Pending bytes");
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	for (i = 0; i <  priv->num_pairs; i++) {
3662306a36Sopenharmony_ci		fqid = priv->tx_queue_attr[i].fqid;
3762306a36Sopenharmony_ci		err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt);
3862306a36Sopenharmony_ci		if (err)
3962306a36Sopenharmony_ci			continue;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci		seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt);
4262306a36Sopenharmony_ci	}
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	return 0;
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(dpseci_dbg_fqs);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_civoid dpaa2_dpseci_debugfs_init(struct dpaa2_caam_priv *priv)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci	priv->dfs_root = debugfs_create_dir(dev_name(priv->dev), NULL);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	debugfs_create_file("fq_stats", 0444, priv->dfs_root, priv,
5462306a36Sopenharmony_ci			    &dpseci_dbg_fqs_fops);
5562306a36Sopenharmony_ci}
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_civoid dpaa2_dpseci_debugfs_exit(struct dpaa2_caam_priv *priv)
5862306a36Sopenharmony_ci{
5962306a36Sopenharmony_ci	debugfs_remove_recursive(priv->dfs_root);
6062306a36Sopenharmony_ci}
61