octeontx2-af: Display NIX1 also in debugfs
If NIX1 block is also implemented then add a new directory for NIX1 in debugfs root. Stats of NIX1 block can be read/writen from/to the files in directory "/sys/kernel/debug/octeontx2/nix1/". Signed-off-by: Rakesh Babu <rsaladi2@marvell.com> Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> Signed-off-by: Sunil Goutham <sgoutham@marvell.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
8bcf5ced65
commit
0f3ce484af
@ -210,6 +210,8 @@ enum ndc_idx_e {
|
||||
NIX0_RX = 0x0,
|
||||
NIX0_TX = 0x1,
|
||||
NPA0_U = 0x2,
|
||||
NIX1_RX = 0x4,
|
||||
NIX1_TX = 0x5,
|
||||
};
|
||||
|
||||
enum ndc_ctype_e {
|
||||
|
@ -224,18 +224,11 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
|
||||
|
||||
RVU_DEBUG_FOPS(rsrc_status, rsrc_attach_status, NULL);
|
||||
|
||||
static bool rvu_dbg_is_valid_lf(struct rvu *rvu, int blktype, int lf,
|
||||
static bool rvu_dbg_is_valid_lf(struct rvu *rvu, int blkaddr, int lf,
|
||||
u16 *pcifunc)
|
||||
{
|
||||
struct rvu_block *block;
|
||||
struct rvu_hwinfo *hw;
|
||||
int blkaddr;
|
||||
|
||||
blkaddr = rvu_get_blkaddr(rvu, blktype, 0);
|
||||
if (blkaddr < 0) {
|
||||
dev_warn(rvu->dev, "Invalid blktype\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
hw = rvu->hw;
|
||||
block = &hw->block[blkaddr];
|
||||
@ -291,10 +284,12 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
|
||||
{
|
||||
void (*print_qsize)(struct seq_file *filp,
|
||||
struct rvu_pfvf *pfvf) = NULL;
|
||||
struct dentry *current_dir;
|
||||
struct rvu_pfvf *pfvf;
|
||||
struct rvu *rvu;
|
||||
int qsize_id;
|
||||
u16 pcifunc;
|
||||
int blkaddr;
|
||||
|
||||
rvu = filp->private;
|
||||
switch (blktype) {
|
||||
@ -312,7 +307,15 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, blktype, qsize_id, &pcifunc))
|
||||
if (blktype == BLKTYPE_NPA) {
|
||||
blkaddr = BLKADDR_NPA;
|
||||
} else {
|
||||
current_dir = filp->file->f_path.dentry->d_parent;
|
||||
blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
|
||||
BLKADDR_NIX1 : BLKADDR_NIX0);
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, blkaddr, qsize_id, &pcifunc))
|
||||
return -EINVAL;
|
||||
|
||||
pfvf = rvu_get_pfvf(rvu, pcifunc);
|
||||
@ -329,6 +332,8 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
|
||||
struct seq_file *seqfile = filp->private_data;
|
||||
char *cmd_buf, *cmd_buf_tmp, *subtoken;
|
||||
struct rvu *rvu = seqfile->private;
|
||||
struct dentry *current_dir;
|
||||
int blkaddr;
|
||||
u16 pcifunc;
|
||||
int ret, lf;
|
||||
|
||||
@ -355,7 +360,15 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
|
||||
goto qsize_write_done;
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, blktype, lf, &pcifunc)) {
|
||||
if (blktype == BLKTYPE_NPA) {
|
||||
blkaddr = BLKADDR_NPA;
|
||||
} else {
|
||||
current_dir = filp->f_path.dentry->d_parent;
|
||||
blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
|
||||
BLKADDR_NIX1 : BLKADDR_NIX0);
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, blkaddr, lf, &pcifunc)) {
|
||||
ret = -EINVAL;
|
||||
goto qsize_write_done;
|
||||
}
|
||||
@ -498,7 +511,7 @@ static int rvu_dbg_npa_ctx_display(struct seq_file *m, void *unused, int ctype)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKTYPE_NPA, npalf, &pcifunc))
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
|
||||
return -EINVAL;
|
||||
|
||||
pfvf = rvu_get_pfvf(rvu, pcifunc);
|
||||
@ -556,7 +569,7 @@ static int write_npa_ctx(struct rvu *rvu, bool all,
|
||||
int max_id = 0;
|
||||
u16 pcifunc;
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKTYPE_NPA, npalf, &pcifunc))
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
|
||||
return -EINVAL;
|
||||
|
||||
pfvf = rvu_get_pfvf(rvu, pcifunc);
|
||||
@ -704,9 +717,17 @@ static void ndc_cache_stats(struct seq_file *s, int blk_addr,
|
||||
int ctype, int transaction)
|
||||
{
|
||||
u64 req, out_req, lat, cant_alloc;
|
||||
struct rvu *rvu = s->private;
|
||||
struct nix_hw *nix_hw;
|
||||
struct rvu *rvu;
|
||||
int port;
|
||||
|
||||
if (blk_addr == BLKADDR_NDC_NPA0) {
|
||||
rvu = s->private;
|
||||
} else {
|
||||
nix_hw = s->private;
|
||||
rvu = nix_hw->rvu;
|
||||
}
|
||||
|
||||
for (port = 0; port < NDC_MAX_PORT; port++) {
|
||||
req = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_REQ_PC
|
||||
(port, ctype, transaction));
|
||||
@ -749,9 +770,17 @@ RVU_DEBUG_SEQ_FOPS(npa_ndc_cache, npa_ndc_cache_display, NULL);
|
||||
|
||||
static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
|
||||
{
|
||||
struct rvu *rvu = s->private;
|
||||
struct nix_hw *nix_hw;
|
||||
struct rvu *rvu;
|
||||
int bank, max_bank;
|
||||
|
||||
if (blk_addr == BLKADDR_NDC_NPA0) {
|
||||
rvu = s->private;
|
||||
} else {
|
||||
nix_hw = s->private;
|
||||
rvu = nix_hw->rvu;
|
||||
}
|
||||
|
||||
max_bank = NDC_MAX_BANK(rvu, blk_addr);
|
||||
for (bank = 0; bank < max_bank; bank++) {
|
||||
seq_printf(s, "BANK:%d\n", bank);
|
||||
@ -767,16 +796,30 @@ static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
|
||||
|
||||
static int rvu_dbg_nix_ndc_rx_cache_display(struct seq_file *filp, void *unused)
|
||||
{
|
||||
return ndc_blk_cache_stats(filp, NIX0_RX,
|
||||
BLKADDR_NDC_NIX0_RX);
|
||||
struct nix_hw *nix_hw = filp->private;
|
||||
int blkaddr = 0;
|
||||
int ndc_idx = 0;
|
||||
|
||||
blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
|
||||
BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
|
||||
ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_RX : NIX0_RX);
|
||||
|
||||
return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
|
||||
}
|
||||
|
||||
RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_cache, nix_ndc_rx_cache_display, NULL);
|
||||
|
||||
static int rvu_dbg_nix_ndc_tx_cache_display(struct seq_file *filp, void *unused)
|
||||
{
|
||||
return ndc_blk_cache_stats(filp, NIX0_TX,
|
||||
BLKADDR_NDC_NIX0_TX);
|
||||
struct nix_hw *nix_hw = filp->private;
|
||||
int blkaddr = 0;
|
||||
int ndc_idx = 0;
|
||||
|
||||
blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
|
||||
BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
|
||||
ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_TX : NIX0_TX);
|
||||
|
||||
return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
|
||||
}
|
||||
|
||||
RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_cache, nix_ndc_tx_cache_display, NULL);
|
||||
@ -792,8 +835,14 @@ RVU_DEBUG_SEQ_FOPS(npa_ndc_hits_miss, npa_ndc_hits_miss_display, NULL);
|
||||
static int rvu_dbg_nix_ndc_rx_hits_miss_display(struct seq_file *filp,
|
||||
void *unused)
|
||||
{
|
||||
return ndc_blk_hits_miss_stats(filp,
|
||||
NPA0_U, BLKADDR_NDC_NIX0_RX);
|
||||
struct nix_hw *nix_hw = filp->private;
|
||||
int ndc_idx = NPA0_U;
|
||||
int blkaddr = 0;
|
||||
|
||||
blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
|
||||
BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
|
||||
|
||||
return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
|
||||
}
|
||||
|
||||
RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_hits_miss, nix_ndc_rx_hits_miss_display, NULL);
|
||||
@ -801,8 +850,14 @@ RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_hits_miss, nix_ndc_rx_hits_miss_display, NULL);
|
||||
static int rvu_dbg_nix_ndc_tx_hits_miss_display(struct seq_file *filp,
|
||||
void *unused)
|
||||
{
|
||||
return ndc_blk_hits_miss_stats(filp,
|
||||
NPA0_U, BLKADDR_NDC_NIX0_TX);
|
||||
struct nix_hw *nix_hw = filp->private;
|
||||
int ndc_idx = NPA0_U;
|
||||
int blkaddr = 0;
|
||||
|
||||
blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
|
||||
BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
|
||||
|
||||
return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
|
||||
}
|
||||
|
||||
RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_hits_miss, nix_ndc_tx_hits_miss_display, NULL);
|
||||
@ -969,7 +1024,8 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
|
||||
{
|
||||
void (*print_nix_ctx)(struct seq_file *filp,
|
||||
struct nix_aq_enq_rsp *rsp) = NULL;
|
||||
struct rvu *rvu = filp->private;
|
||||
struct nix_hw *nix_hw = filp->private;
|
||||
struct rvu *rvu = nix_hw->rvu;
|
||||
struct nix_aq_enq_req aq_req;
|
||||
struct nix_aq_enq_rsp rsp;
|
||||
char *ctype_string = NULL;
|
||||
@ -1001,7 +1057,7 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKTYPE_NIX, nixlf, &pcifunc))
|
||||
if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
|
||||
return -EINVAL;
|
||||
|
||||
pfvf = rvu_get_pfvf(rvu, pcifunc);
|
||||
@ -1053,13 +1109,15 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
|
||||
}
|
||||
|
||||
static int write_nix_queue_ctx(struct rvu *rvu, bool all, int nixlf,
|
||||
int id, int ctype, char *ctype_string)
|
||||
int id, int ctype, char *ctype_string,
|
||||
struct seq_file *m)
|
||||
{
|
||||
struct nix_hw *nix_hw = m->private;
|
||||
struct rvu_pfvf *pfvf;
|
||||
int max_id = 0;
|
||||
u16 pcifunc;
|
||||
|
||||
if (!rvu_dbg_is_valid_lf(rvu, BLKTYPE_NIX, nixlf, &pcifunc))
|
||||
if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
|
||||
return -EINVAL;
|
||||
|
||||
pfvf = rvu_get_pfvf(rvu, pcifunc);
|
||||
@ -1119,7 +1177,8 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
|
||||
int ctype)
|
||||
{
|
||||
struct seq_file *m = filp->private_data;
|
||||
struct rvu *rvu = m->private;
|
||||
struct nix_hw *nix_hw = m->private;
|
||||
struct rvu *rvu = nix_hw->rvu;
|
||||
char *cmd_buf, *ctype_string;
|
||||
int nixlf, id = 0, ret;
|
||||
bool all = false;
|
||||
@ -1155,7 +1214,7 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
|
||||
goto done;
|
||||
} else {
|
||||
ret = write_nix_queue_ctx(rvu, all, nixlf, id, ctype,
|
||||
ctype_string);
|
||||
ctype_string, m);
|
||||
}
|
||||
done:
|
||||
kfree(cmd_buf);
|
||||
@ -1259,49 +1318,67 @@ static int rvu_dbg_nix_qsize_display(struct seq_file *filp, void *unused)
|
||||
|
||||
RVU_DEBUG_SEQ_FOPS(nix_qsize, nix_qsize_display, nix_qsize_write);
|
||||
|
||||
static void rvu_dbg_nix_init(struct rvu *rvu)
|
||||
static void rvu_dbg_nix_init(struct rvu *rvu, int blkaddr)
|
||||
{
|
||||
const struct device *dev = &rvu->pdev->dev;
|
||||
struct nix_hw *nix_hw;
|
||||
struct dentry *pfile;
|
||||
|
||||
rvu->rvu_dbg.nix = debugfs_create_dir("nix", rvu->rvu_dbg.root);
|
||||
if (!rvu->rvu_dbg.nix) {
|
||||
dev_err(rvu->dev, "create debugfs dir failed for nix\n");
|
||||
if (!is_block_implemented(rvu->hw, blkaddr))
|
||||
return;
|
||||
|
||||
if (blkaddr == BLKADDR_NIX0) {
|
||||
rvu->rvu_dbg.nix = debugfs_create_dir("nix", rvu->rvu_dbg.root);
|
||||
if (!rvu->rvu_dbg.nix) {
|
||||
dev_err(rvu->dev, "create debugfs dir failed for nix\n");
|
||||
return;
|
||||
}
|
||||
nix_hw = &rvu->hw->nix[0];
|
||||
} else {
|
||||
rvu->rvu_dbg.nix = debugfs_create_dir("nix1",
|
||||
rvu->rvu_dbg.root);
|
||||
if (!rvu->rvu_dbg.nix) {
|
||||
dev_err(rvu->dev,
|
||||
"create debugfs dir failed for nix1\n");
|
||||
return;
|
||||
}
|
||||
nix_hw = &rvu->hw->nix[1];
|
||||
}
|
||||
|
||||
pfile = debugfs_create_file("sq_ctx", 0600, rvu->rvu_dbg.nix, rvu,
|
||||
pfile = debugfs_create_file("sq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
|
||||
&rvu_dbg_nix_sq_ctx_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("rq_ctx", 0600, rvu->rvu_dbg.nix, rvu,
|
||||
pfile = debugfs_create_file("rq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
|
||||
&rvu_dbg_nix_rq_ctx_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("cq_ctx", 0600, rvu->rvu_dbg.nix, rvu,
|
||||
pfile = debugfs_create_file("cq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
|
||||
&rvu_dbg_nix_cq_ctx_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix, rvu,
|
||||
&rvu_dbg_nix_ndc_tx_cache_fops);
|
||||
pfile = debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix,
|
||||
nix_hw, &rvu_dbg_nix_ndc_tx_cache_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix, rvu,
|
||||
&rvu_dbg_nix_ndc_rx_cache_fops);
|
||||
pfile = debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix,
|
||||
nix_hw, &rvu_dbg_nix_ndc_rx_cache_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("ndc_tx_hits_miss", 0600, rvu->rvu_dbg.nix,
|
||||
rvu, &rvu_dbg_nix_ndc_tx_hits_miss_fops);
|
||||
nix_hw,
|
||||
&rvu_dbg_nix_ndc_tx_hits_miss_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
pfile = debugfs_create_file("ndc_rx_hits_miss", 0600, rvu->rvu_dbg.nix,
|
||||
rvu, &rvu_dbg_nix_ndc_rx_hits_miss_fops);
|
||||
nix_hw,
|
||||
&rvu_dbg_nix_ndc_rx_hits_miss_fops);
|
||||
if (!pfile)
|
||||
goto create_failed;
|
||||
|
||||
@ -1312,7 +1389,8 @@ static void rvu_dbg_nix_init(struct rvu *rvu)
|
||||
|
||||
return;
|
||||
create_failed:
|
||||
dev_err(dev, "Failed to create debugfs dir/file for NIX\n");
|
||||
dev_err(dev,
|
||||
"Failed to create debugfs dir/file for NIX blk\n");
|
||||
debugfs_remove_recursive(rvu->rvu_dbg.nix);
|
||||
}
|
||||
|
||||
@ -1692,7 +1770,9 @@ void rvu_dbg_init(struct rvu *rvu)
|
||||
goto create_failed;
|
||||
|
||||
rvu_dbg_npa_init(rvu);
|
||||
rvu_dbg_nix_init(rvu);
|
||||
rvu_dbg_nix_init(rvu, BLKADDR_NIX0);
|
||||
|
||||
rvu_dbg_nix_init(rvu, BLKADDR_NIX1);
|
||||
rvu_dbg_cgx_init(rvu);
|
||||
rvu_dbg_npc_init(rvu);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user