Commit b0e77fcc authored by David S. Miller's avatar David S. Miller

Merge branch 'octeontx2-debugfs-updates'

Rakesh Babu Saladi says:

====================
RVU Debugfs updates.

Patch 1: Few minor changes such as spelling mistakes, deleting unwanted
characters, etc.
Patch 2: Add debugfs dump for lmtst map table
Patch 3: Add channel and channel mask in debugfs.

Changes made from v2 to v3:
1. In patch 1 moved few lines and submitted those changes as a
different patch to net branch
2. Patch 2 is left unchanged.
3. Patch 3 is left unchanged.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 78805025 9716a40a
......@@ -8,6 +8,8 @@
#ifndef NPC_H
#define NPC_H
#define NPC_KEX_CHAN_MASK 0xFFFULL
enum NPC_LID_E {
NPC_LID_LA = 0,
NPC_LID_LB,
......@@ -591,6 +593,8 @@ struct rvu_npc_mcam_rule {
u8 default_rule;
bool enable;
bool vfvlan_cfg;
u16 chan;
u16 chan_mask;
};
#endif /* NPC_H */
......@@ -95,7 +95,7 @@ static char *cgx_tx_stats_fields[] = {
[CGX_STAT5] = "Total frames sent on the interface",
[CGX_STAT6] = "Packets sent with an octet count < 64",
[CGX_STAT7] = "Packets sent with an octet count == 64",
[CGX_STAT8] = "Packets sent with an octet count of 65127",
[CGX_STAT8] = "Packets sent with an octet count of 65-127",
[CGX_STAT9] = "Packets sent with an octet count of 128-255",
[CGX_STAT10] = "Packets sent with an octet count of 256-511",
[CGX_STAT11] = "Packets sent with an octet count of 512-1023",
......@@ -125,7 +125,7 @@ static char *rpm_rx_stats_fields[] = {
"Total frames received on interface",
"Packets received with an octet count < 64",
"Packets received with an octet count == 64",
"Packets received with an octet count of 65–127",
"Packets received with an octet count of 65-127",
"Packets received with an octet count of 128-255",
"Packets received with an octet count of 256-511",
"Packets received with an octet count of 512-1023",
......@@ -164,7 +164,7 @@ static char *rpm_tx_stats_fields[] = {
"Packets sent to the multicast DMAC",
"Packets sent to a broadcast DMAC",
"Packets sent with an octet count == 64",
"Packets sent with an octet count of 65–127",
"Packets sent with an octet count of 65-127",
"Packets sent with an octet count of 128-255",
"Packets sent with an octet count of 256-511",
"Packets sent with an octet count of 512-1023",
......@@ -226,6 +226,96 @@ static const struct file_operations rvu_dbg_##name##_fops = { \
static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf);
#define LMT_MAPTBL_ENTRY_SIZE 16
/* Dump LMTST map table */
static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp,
char __user *buffer,
size_t count, loff_t *ppos)
{
struct rvu *rvu = filp->private_data;
u64 lmt_addr, val, tbl_base;
int pf, vf, num_vfs, hw_vfs;
void __iomem *lmt_map_base;
int index = 0, off = 0;
int bytes_not_copied;
int buf_size = 10240;
char *buf;
/* don't allow partial reads */
if (*ppos != 0)
return 0;
buf = kzalloc(buf_size, GFP_KERNEL);
if (!buf)
return -ENOSPC;
tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE);
lmt_map_base = ioremap_wc(tbl_base, 128 * 1024);
if (!lmt_map_base) {
dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n");
kfree(buf);
return false;
}
off += scnprintf(&buf[off], buf_size - 1 - off,
"\n\t\t\t\t\tLmtst Map Table Entries");
off += scnprintf(&buf[off], buf_size - 1 - off,
"\n\t\t\t\t\t=======================");
off += scnprintf(&buf[off], buf_size - 1 - off, "\nPcifunc\t\t\t");
off += scnprintf(&buf[off], buf_size - 1 - off, "Table Index\t\t");
off += scnprintf(&buf[off], buf_size - 1 - off,
"Lmtline Base (word 0)\t\t");
off += scnprintf(&buf[off], buf_size - 1 - off,
"Lmt Map Entry (word 1)");
off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d \t\t\t",
pf);
index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE;
off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t",
(tbl_base + index));
lmt_addr = readq(lmt_map_base + index);
off += scnprintf(&buf[off], buf_size - 1 - off,
" 0x%016llx\t\t", lmt_addr);
index += 8;
val = readq(lmt_map_base + index);
off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%016llx\n",
val);
/* Reading num of VFs per PF */
rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs);
for (vf = 0; vf < num_vfs; vf++) {
index = (pf * rvu->hw->total_vfs * 16) +
((vf + 1) * LMT_MAPTBL_ENTRY_SIZE);
off += scnprintf(&buf[off], buf_size - 1 - off,
"PF%d:VF%d \t\t", pf, vf);
off += scnprintf(&buf[off], buf_size - 1 - off,
" 0x%llx\t\t", (tbl_base + index));
lmt_addr = readq(lmt_map_base + index);
off += scnprintf(&buf[off], buf_size - 1 - off,
" 0x%016llx\t\t", lmt_addr);
index += 8;
val = readq(lmt_map_base + index);
off += scnprintf(&buf[off], buf_size - 1 - off,
" 0x%016llx\n", val);
}
}
off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
bytes_not_copied = copy_to_user(buffer, buf, off);
kfree(buf);
iounmap(lmt_map_base);
if (bytes_not_copied)
return -EFAULT;
*ppos = off;
return off;
}
RVU_DEBUG_FOPS(lmtst_map_table, lmtst_map_table_display, NULL);
/* Dumps current provisioning status of all RVU block LFs */
static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
char __user *buffer,
......@@ -1878,7 +1968,7 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id)
return -ENODEV;
mac_ops = get_mac_ops(cgxd);
/* There can be no CGX devices at all */
if (!mac_ops)
return 0;
......@@ -1956,13 +2046,13 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id)
if (err)
return err;
if (is_rvu_otx2(rvu))
seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat],
tx_stat);
else
seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat],
tx_stat);
stat++;
if (is_rvu_otx2(rvu))
seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat],
tx_stat);
else
seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat],
tx_stat);
stat++;
}
return err;
......@@ -2400,6 +2490,8 @@ static int rvu_dbg_npc_mcam_show_rules(struct seq_file *s, void *unused)
seq_printf(s, "VF%d", vf);
}
seq_puts(s, "\n");
seq_printf(s, "\tchannel: 0x%x\n", iter->chan);
seq_printf(s, "\tchannel_mask: 0x%x\n", iter->chan_mask);
}
rvu_dbg_npc_mcam_show_action(s, iter);
......@@ -2672,6 +2764,10 @@ void rvu_dbg_init(struct rvu *rvu)
debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu,
&rvu_dbg_rsrc_status_fops);
if (!is_rvu_otx2(rvu))
debugfs_create_file("lmtst_map_table", 0444, rvu->rvu_dbg.root,
rvu, &rvu_dbg_lmtst_map_table_fops);
if (!cgx_get_cgxcnt_max())
goto create;
......
......@@ -1119,6 +1119,9 @@ static int npc_install_flow(struct rvu *rvu, int blkaddr, u16 target,
rule->default_rule = req->default_rule;
rule->owner = owner;
rule->enable = enable;
rule->chan_mask = write_req.entry_data.kw_mask[0] & NPC_KEX_CHAN_MASK;
rule->chan = write_req.entry_data.kw[0] & NPC_KEX_CHAN_MASK;
rule->chan &= rule->chan_mask;
if (is_npc_intf_tx(req->intf))
rule->intf = pfvf->nix_tx_intf;
else
......
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