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