Commit 0f3ce484 authored by Rakesh Babu's avatar Rakesh Babu Committed by Jakub Kicinski

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: default avatarRakesh Babu <rsaladi2@marvell.com>
Signed-off-by: default avatarSubbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: default avatarSunil Goutham <sgoutham@marvell.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8bcf5ced
...@@ -210,6 +210,8 @@ enum ndc_idx_e { ...@@ -210,6 +210,8 @@ enum ndc_idx_e {
NIX0_RX = 0x0, NIX0_RX = 0x0,
NIX0_TX = 0x1, NIX0_TX = 0x1,
NPA0_U = 0x2, NPA0_U = 0x2,
NIX1_RX = 0x4,
NIX1_TX = 0x5,
}; };
enum ndc_ctype_e { enum ndc_ctype_e {
......
...@@ -224,18 +224,11 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, ...@@ -224,18 +224,11 @@ static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
RVU_DEBUG_FOPS(rsrc_status, rsrc_attach_status, NULL); 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) u16 *pcifunc)
{ {
struct rvu_block *block; struct rvu_block *block;
struct rvu_hwinfo *hw; 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; hw = rvu->hw;
block = &hw->block[blkaddr]; block = &hw->block[blkaddr];
...@@ -291,10 +284,12 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused, ...@@ -291,10 +284,12 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
{ {
void (*print_qsize)(struct seq_file *filp, void (*print_qsize)(struct seq_file *filp,
struct rvu_pfvf *pfvf) = NULL; struct rvu_pfvf *pfvf) = NULL;
struct dentry *current_dir;
struct rvu_pfvf *pfvf; struct rvu_pfvf *pfvf;
struct rvu *rvu; struct rvu *rvu;
int qsize_id; int qsize_id;
u16 pcifunc; u16 pcifunc;
int blkaddr;
rvu = filp->private; rvu = filp->private;
switch (blktype) { switch (blktype) {
...@@ -312,7 +307,15 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused, ...@@ -312,7 +307,15 @@ static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
return -EINVAL; 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; return -EINVAL;
pfvf = rvu_get_pfvf(rvu, pcifunc); pfvf = rvu_get_pfvf(rvu, pcifunc);
...@@ -329,6 +332,8 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp, ...@@ -329,6 +332,8 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
struct seq_file *seqfile = filp->private_data; struct seq_file *seqfile = filp->private_data;
char *cmd_buf, *cmd_buf_tmp, *subtoken; char *cmd_buf, *cmd_buf_tmp, *subtoken;
struct rvu *rvu = seqfile->private; struct rvu *rvu = seqfile->private;
struct dentry *current_dir;
int blkaddr;
u16 pcifunc; u16 pcifunc;
int ret, lf; int ret, lf;
...@@ -355,7 +360,15 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp, ...@@ -355,7 +360,15 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
goto qsize_write_done; 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; ret = -EINVAL;
goto qsize_write_done; goto qsize_write_done;
} }
...@@ -498,7 +511,7 @@ static int rvu_dbg_npa_ctx_display(struct seq_file *m, void *unused, int ctype) ...@@ -498,7 +511,7 @@ static int rvu_dbg_npa_ctx_display(struct seq_file *m, void *unused, int ctype)
return -EINVAL; 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; return -EINVAL;
pfvf = rvu_get_pfvf(rvu, pcifunc); pfvf = rvu_get_pfvf(rvu, pcifunc);
...@@ -556,7 +569,7 @@ static int write_npa_ctx(struct rvu *rvu, bool all, ...@@ -556,7 +569,7 @@ static int write_npa_ctx(struct rvu *rvu, bool all,
int max_id = 0; int max_id = 0;
u16 pcifunc; 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; return -EINVAL;
pfvf = rvu_get_pfvf(rvu, pcifunc); pfvf = rvu_get_pfvf(rvu, pcifunc);
...@@ -704,9 +717,17 @@ static void ndc_cache_stats(struct seq_file *s, int blk_addr, ...@@ -704,9 +717,17 @@ static void ndc_cache_stats(struct seq_file *s, int blk_addr,
int ctype, int transaction) int ctype, int transaction)
{ {
u64 req, out_req, lat, cant_alloc; u64 req, out_req, lat, cant_alloc;
struct rvu *rvu = s->private; struct nix_hw *nix_hw;
struct rvu *rvu;
int port; 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++) { for (port = 0; port < NDC_MAX_PORT; port++) {
req = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_REQ_PC req = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_REQ_PC
(port, ctype, transaction)); (port, ctype, transaction));
...@@ -749,9 +770,17 @@ RVU_DEBUG_SEQ_FOPS(npa_ndc_cache, npa_ndc_cache_display, NULL); ...@@ -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) 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; 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); max_bank = NDC_MAX_BANK(rvu, blk_addr);
for (bank = 0; bank < max_bank; bank++) { for (bank = 0; bank < max_bank; bank++) {
seq_printf(s, "BANK:%d\n", 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) ...@@ -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) static int rvu_dbg_nix_ndc_rx_cache_display(struct seq_file *filp, void *unused)
{ {
return ndc_blk_cache_stats(filp, NIX0_RX, struct nix_hw *nix_hw = filp->private;
BLKADDR_NDC_NIX0_RX); 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); 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) static int rvu_dbg_nix_ndc_tx_cache_display(struct seq_file *filp, void *unused)
{ {
return ndc_blk_cache_stats(filp, NIX0_TX, struct nix_hw *nix_hw = filp->private;
BLKADDR_NDC_NIX0_TX); 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); 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); ...@@ -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, static int rvu_dbg_nix_ndc_rx_hits_miss_display(struct seq_file *filp,
void *unused) void *unused)
{ {
return ndc_blk_hits_miss_stats(filp, struct nix_hw *nix_hw = filp->private;
NPA0_U, BLKADDR_NDC_NIX0_RX); 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); 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); ...@@ -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, static int rvu_dbg_nix_ndc_tx_hits_miss_display(struct seq_file *filp,
void *unused) void *unused)
{ {
return ndc_blk_hits_miss_stats(filp, struct nix_hw *nix_hw = filp->private;
NPA0_U, BLKADDR_NDC_NIX0_TX); 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); 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, ...@@ -969,7 +1024,8 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
{ {
void (*print_nix_ctx)(struct seq_file *filp, void (*print_nix_ctx)(struct seq_file *filp,
struct nix_aq_enq_rsp *rsp) = NULL; 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_req aq_req;
struct nix_aq_enq_rsp rsp; struct nix_aq_enq_rsp rsp;
char *ctype_string = NULL; char *ctype_string = NULL;
...@@ -1001,7 +1057,7 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp, ...@@ -1001,7 +1057,7 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
return -EINVAL; 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; return -EINVAL;
pfvf = rvu_get_pfvf(rvu, pcifunc); pfvf = rvu_get_pfvf(rvu, pcifunc);
...@@ -1053,13 +1109,15 @@ static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp, ...@@ -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, 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; struct rvu_pfvf *pfvf;
int max_id = 0; int max_id = 0;
u16 pcifunc; 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; return -EINVAL;
pfvf = rvu_get_pfvf(rvu, pcifunc); pfvf = rvu_get_pfvf(rvu, pcifunc);
...@@ -1119,7 +1177,8 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp, ...@@ -1119,7 +1177,8 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
int ctype) int ctype)
{ {
struct seq_file *m = filp->private_data; 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; char *cmd_buf, *ctype_string;
int nixlf, id = 0, ret; int nixlf, id = 0, ret;
bool all = false; bool all = false;
...@@ -1155,7 +1214,7 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp, ...@@ -1155,7 +1214,7 @@ static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
goto done; goto done;
} else { } else {
ret = write_nix_queue_ctx(rvu, all, nixlf, id, ctype, ret = write_nix_queue_ctx(rvu, all, nixlf, id, ctype,
ctype_string); ctype_string, m);
} }
done: done:
kfree(cmd_buf); kfree(cmd_buf);
...@@ -1259,49 +1318,67 @@ static int rvu_dbg_nix_qsize_display(struct seq_file *filp, void *unused) ...@@ -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); 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; const struct device *dev = &rvu->pdev->dev;
struct nix_hw *nix_hw;
struct dentry *pfile; struct dentry *pfile;
rvu->rvu_dbg.nix = debugfs_create_dir("nix", rvu->rvu_dbg.root); if (!is_block_implemented(rvu->hw, blkaddr))
if (!rvu->rvu_dbg.nix) {
dev_err(rvu->dev, "create debugfs dir failed for nix\n");
return; 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); &rvu_dbg_nix_sq_ctx_fops);
if (!pfile) if (!pfile)
goto create_failed; 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); &rvu_dbg_nix_rq_ctx_fops);
if (!pfile) if (!pfile)
goto create_failed; 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); &rvu_dbg_nix_cq_ctx_fops);
if (!pfile) if (!pfile)
goto create_failed; goto create_failed;
pfile = debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix, rvu, pfile = debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix,
&rvu_dbg_nix_ndc_tx_cache_fops); nix_hw, &rvu_dbg_nix_ndc_tx_cache_fops);
if (!pfile) if (!pfile)
goto create_failed; goto create_failed;
pfile = debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix, rvu, pfile = debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix,
&rvu_dbg_nix_ndc_rx_cache_fops); nix_hw, &rvu_dbg_nix_ndc_rx_cache_fops);
if (!pfile) if (!pfile)
goto create_failed; goto create_failed;
pfile = debugfs_create_file("ndc_tx_hits_miss", 0600, rvu->rvu_dbg.nix, 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) if (!pfile)
goto create_failed; goto create_failed;
pfile = debugfs_create_file("ndc_rx_hits_miss", 0600, rvu->rvu_dbg.nix, 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) if (!pfile)
goto create_failed; goto create_failed;
...@@ -1312,7 +1389,8 @@ static void rvu_dbg_nix_init(struct rvu *rvu) ...@@ -1312,7 +1389,8 @@ static void rvu_dbg_nix_init(struct rvu *rvu)
return; return;
create_failed: 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); debugfs_remove_recursive(rvu->rvu_dbg.nix);
} }
...@@ -1692,7 +1770,9 @@ void rvu_dbg_init(struct rvu *rvu) ...@@ -1692,7 +1770,9 @@ void rvu_dbg_init(struct rvu *rvu)
goto create_failed; goto create_failed;
rvu_dbg_npa_init(rvu); 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_cgx_init(rvu);
rvu_dbg_npc_init(rvu); rvu_dbg_npc_init(rvu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment