On Wed, Oct 28, 2020 at 10:22 PM Srujana Challa <schalla@xxxxxxxxxxx> wrote: > > Add entries to debugfs at /sys/kernel/debug/octeontx2/cpt. > > cpt_pc: dump cpt performance HW registers. > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_pc > > cpt_ae_sts: show cpt asymmetric engines current state > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_ae_sts > > cpt_se_sts: show cpt symmetric engines current state > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_se_sts > > cpt_engines_info: dump cpt engine control registers. > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_engines_info > > cpt_lfs_info: dump cpt lfs control registers. > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_lfs_info > > cpt_err_info: dump cpt error registers. > Usage: > cat /sys/kernel/debug/octeontx2/cpt/cpt_err_info > > Signed-off-by: Suheil Chandran <schandran@xxxxxxxxxxx> > Signed-off-by: Srujana Challa <schalla@xxxxxxxxxxx> > --- > .../net/ethernet/marvell/octeontx2/af/rvu.h | 1 + > .../marvell/octeontx2/af/rvu_debugfs.c | 304 ++++++++++++++++++ > 2 files changed, 305 insertions(+) > > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h > index c37e106d7006..ba18171c87d6 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h > @@ -50,6 +50,7 @@ struct rvu_debugfs { > struct dentry *npa; > struct dentry *nix; > struct dentry *npc; > + struct dentry *cpt; > struct dump_ctx npa_aura_ctx; > struct dump_ctx npa_pool_ctx; > struct dump_ctx nix_cq_ctx; > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > index 77adad4adb1b..24354bfb4e94 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > @@ -1676,6 +1676,309 @@ static void rvu_dbg_npc_init(struct rvu *rvu) > debugfs_remove_recursive(rvu->rvu_dbg.npc); > } > > +/* CPT debugfs APIs */ > +static int rvu_dbg_cpt_ae_sts_display(struct seq_file *filp, void *unused) > +{ > + struct rvu *rvu = filp->private; > + u64 busy_sts = 0, free_sts = 0; > + u32 e_min = 0, e_max = 0, e, i; > + u16 max_ses, max_ies, max_aes; > + int blkaddr; > + u64 reg; > + > + blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0); > + if (blkaddr < 0) > + return -ENODEV; > + > + reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1); > + max_ses = reg & 0xffff; > + max_ies = (reg >> 16) & 0xffff; > + max_aes = (reg >> 32) & 0xffff; > + > + e_min = max_ses + max_ies; > + e_max = max_ses + max_ies + max_aes; > + > + for (e = e_min, i = 0; e < e_max; e++, i++) { > + reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(e)); > + if (reg & 0x1) > + busy_sts |= 1ULL << i; > + > + if (reg & 0x2) > + free_sts |= 1ULL << i; > + } > + seq_printf(filp, "FREE STS : 0x%016llx\n", free_sts); > + seq_printf(filp, "BUSY STS : 0x%016llx\n", busy_sts); > + > + return 0; > +} > + > +RVU_DEBUG_SEQ_FOPS(cpt_ae_sts, cpt_ae_sts_display, NULL); > + > +static int rvu_dbg_cpt_se_sts_display(struct seq_file *filp, void *unused) > +{ > + struct rvu *rvu = filp->private; > + u64 busy_sts = 0, free_sts = 0; > + u32 e_min = 0, e_max = 0, e; > + u16 max_ses; > + int blkaddr; > + u64 reg; > + > + blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0); > + if (blkaddr < 0) > + return -ENODEV; > + > + reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1); > + max_ses = reg & 0xffff; > + > + e_min = 0; > + e_max = max_ses; > + > + for (e = e_min; e < e_max; e++) { > + reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(e)); > + if (reg & 0x1) > + busy_sts |= 1ULL << e; > + > + if (reg & 0x2) > + free_sts |= 1ULL << e; > + } > + seq_printf(filp, "FREE STS : 0x%016llx\n", free_sts); > + seq_printf(filp, "BUSY STS : 0x%016llx\n", busy_sts); > + > + return 0; > +} > + > +RVU_DEBUG_SEQ_FOPS(cpt_se_sts, cpt_se_sts_display, NULL); > + > +static int rvu_dbg_cpt_ie_sts_display(struct seq_file *filp, void *unused) > +{ > + struct rvu *rvu = filp->private; > + u64 busy_sts = 0, free_sts = 0; > + u32 e_min = 0, e_max = 0, e, i; > + u16 max_ses, max_ies; > + int blkaddr; > + u64 reg; > + > + blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0); > + if (blkaddr < 0) > + return -ENODEV; > + > + reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1); > + max_ses = reg & 0xffff; > + max_ies = (reg >> 16) & 0xffff; > + > + e_min = max_ses; > + e_max = max_ses + max_ies; > + > + for (e = e_min, i = 0; e < e_max; e++, i++) { > + reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(e)); > + if (reg & 0x1) > + busy_sts |= 1ULL << i; > + > + if (reg & 0x2) > + free_sts |= 1ULL << i; > + } > + seq_printf(filp, "FREE STS : 0x%016llx\n", free_sts); > + seq_printf(filp, "BUSY STS : 0x%016llx\n", busy_sts); > + > + return 0; > +} The above three are very similar. Could they use a single helper?