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