Add support of printing the dpseci frame queue statistics using debugfs. Signed-off-by: Vakul Garg <vakul.garg@xxxxxxx> --- drivers/crypto/caam/caamalg_qi2.c | 95 +++++++++++++++++++++++++++++++++++++++ drivers/crypto/caam/caamalg_qi2.h | 3 ++ 2 files changed, 98 insertions(+) diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c index 06bf32c32cbd..9414d2149b9a 100644 --- a/drivers/crypto/caam/caamalg_qi2.c +++ b/drivers/crypto/caam/caamalg_qi2.c @@ -5009,6 +5009,87 @@ static int __cold dpaa2_dpseci_disable(struct dpaa2_caam_priv *priv) return 0; } +#ifdef CONFIG_DEBUG_FS +static int dpseci_dbg_fqs_show(struct seq_file *file, void *offset) +{ + struct dpaa2_caam_priv *priv = (struct dpaa2_caam_priv *)file->private; + u32 fqid, fcnt, bcnt; + int i, err; + + seq_printf(file, "FQ stats for %s:\n", dev_name(priv->dev)); + seq_printf(file, "%s%16s%16s\n", + "Rx-VFQID", + "Pending frames", + "Pending bytes"); + + for (i = 0; i < priv->num_pairs; i++) { + fqid = priv->rx_queue_attr[i].fqid; + err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt); + if (err) + continue; + + seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt); + } + + seq_printf(file, "%s%16s%16s\n", + "Tx-VFQID", + "Pending frames", + "Pending bytes"); + + for (i = 0; i < priv->num_pairs; i++) { + fqid = priv->tx_queue_attr[i].fqid; + err = dpaa2_io_query_fq_count(NULL, fqid, &fcnt, &bcnt); + if (err) + continue; + + seq_printf(file, "%5d%16u%16u\n", fqid, fcnt, bcnt); + } + + return 0; +} + +static int dpseci_dbg_fqs_open(struct inode *inode, struct file *file) +{ + int err; + struct dpaa2_caam_priv *priv; + + priv = (struct dpaa2_caam_priv *)inode->i_private; + + err = single_open(file, dpseci_dbg_fqs_show, priv); + if (err < 0) + dev_err(priv->dev, "single_open() failed\n"); + + return err; +} + +static const struct file_operations dpseci_dbg_fq_ops = { + .open = dpseci_dbg_fqs_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int dpaa2_dpseci_debugfs_init(struct dpaa2_caam_priv *priv) +{ + struct dentry *res; + + res = debugfs_create_dir(dev_name(priv->dev), NULL); + if (IS_ERR_OR_NULL(res)) + return PTR_ERR(res); + + priv->dfs_root = res; + + res = debugfs_create_file("fq_stats", 0444, res, priv, + &dpseci_dbg_fq_ops); + if (IS_ERR_OR_NULL(res)) { + debugfs_remove_recursive(priv->dfs_root); + return PTR_ERR(res); + } + + return 0; +} +#endif + static struct list_head hash_list; static int dpaa2_caam_probe(struct fsl_mc_device *dpseci_dev) @@ -5098,6 +5179,14 @@ static int dpaa2_caam_probe(struct fsl_mc_device *dpseci_dev) goto err_bind; } +#ifdef CONFIG_DEBUG_FS + err = dpaa2_dpseci_debugfs_init(priv); + if (err) { + dev_err(dev, "dpaa2_dpseci_debugfs_init() failed\n"); + goto err_debugfs; + } +#endif + /* register crypto algorithms the device supports */ for (i = 0; i < ARRAY_SIZE(driver_algs); i++) { struct caam_skcipher_alg *t_alg = driver_algs + i; @@ -5242,6 +5331,8 @@ static int dpaa2_caam_probe(struct fsl_mc_device *dpseci_dev) return err; +err_debugfs: + dpaa2_dpseci_disable(priv); err_bind: dpaa2_dpseci_dpio_free(priv); err_dpio_setup: @@ -5265,6 +5356,10 @@ static int __cold dpaa2_caam_remove(struct fsl_mc_device *ls_dev) dev = &ls_dev->dev; priv = dev_get_drvdata(dev); +#ifdef CONFIG_DEBUG_FS + debugfs_remove_recursive(priv->dfs_root); +#endif + for (i = 0; i < ARRAY_SIZE(driver_aeads); i++) { struct caam_aead_alg *t_alg = driver_aeads + i; diff --git a/drivers/crypto/caam/caamalg_qi2.h b/drivers/crypto/caam/caamalg_qi2.h index 0f207b275578..74644d92f9d7 100644 --- a/drivers/crypto/caam/caamalg_qi2.h +++ b/drivers/crypto/caam/caamalg_qi2.h @@ -64,6 +64,9 @@ struct dpaa2_caam_priv { struct iommu_domain *domain; struct dpaa2_caam_priv_per_cpu __percpu *ppriv; +#ifdef CONFIG_DEBUG_FS + struct dentry *dfs_root; +#endif }; /** -- 2.13.6