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 @@ ...@@ -8,6 +8,8 @@
#ifndef NPC_H #ifndef NPC_H
#define NPC_H #define NPC_H
#define NPC_KEX_CHAN_MASK 0xFFFULL
enum NPC_LID_E { enum NPC_LID_E {
NPC_LID_LA = 0, NPC_LID_LA = 0,
NPC_LID_LB, NPC_LID_LB,
...@@ -591,6 +593,8 @@ struct rvu_npc_mcam_rule { ...@@ -591,6 +593,8 @@ struct rvu_npc_mcam_rule {
u8 default_rule; u8 default_rule;
bool enable; bool enable;
bool vfvlan_cfg; bool vfvlan_cfg;
u16 chan;
u16 chan_mask;
}; };
#endif /* NPC_H */ #endif /* NPC_H */
...@@ -95,7 +95,7 @@ static char *cgx_tx_stats_fields[] = { ...@@ -95,7 +95,7 @@ static char *cgx_tx_stats_fields[] = {
[CGX_STAT5] = "Total frames sent on the interface", [CGX_STAT5] = "Total frames sent on the interface",
[CGX_STAT6] = "Packets sent with an octet count < 64", [CGX_STAT6] = "Packets sent with an octet count < 64",
[CGX_STAT7] = "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_STAT9] = "Packets sent with an octet count of 128-255",
[CGX_STAT10] = "Packets sent with an octet count of 256-511", [CGX_STAT10] = "Packets sent with an octet count of 256-511",
[CGX_STAT11] = "Packets sent with an octet count of 512-1023", [CGX_STAT11] = "Packets sent with an octet count of 512-1023",
...@@ -125,7 +125,7 @@ static char *rpm_rx_stats_fields[] = { ...@@ -125,7 +125,7 @@ static char *rpm_rx_stats_fields[] = {
"Total frames received on interface", "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 == 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 128-255",
"Packets received with an octet count of 256-511", "Packets received with an octet count of 256-511",
"Packets received with an octet count of 512-1023", "Packets received with an octet count of 512-1023",
...@@ -164,7 +164,7 @@ static char *rpm_tx_stats_fields[] = { ...@@ -164,7 +164,7 @@ static char *rpm_tx_stats_fields[] = {
"Packets sent to the multicast DMAC", "Packets sent to the multicast DMAC",
"Packets sent to a broadcast DMAC", "Packets sent to a broadcast DMAC",
"Packets sent with an octet count == 64", "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 128-255",
"Packets sent with an octet count of 256-511", "Packets sent with an octet count of 256-511",
"Packets sent with an octet count of 512-1023", "Packets sent with an octet count of 512-1023",
...@@ -226,6 +226,96 @@ static const struct file_operations rvu_dbg_##name##_fops = { \ ...@@ -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); 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 */ /* Dumps current provisioning status of all RVU block LFs */
static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp, static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
char __user *buffer, char __user *buffer,
...@@ -1878,7 +1968,7 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id) ...@@ -1878,7 +1968,7 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id)
return -ENODEV; return -ENODEV;
mac_ops = get_mac_ops(cgxd); mac_ops = get_mac_ops(cgxd);
/* There can be no CGX devices at all */
if (!mac_ops) if (!mac_ops)
return 0; return 0;
...@@ -1956,13 +2046,13 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id) ...@@ -1956,13 +2046,13 @@ static int cgx_print_stats(struct seq_file *s, int lmac_id)
if (err) if (err)
return err; return err;
if (is_rvu_otx2(rvu)) if (is_rvu_otx2(rvu))
seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat], seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat],
tx_stat); tx_stat);
else else
seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat], seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat],
tx_stat); tx_stat);
stat++; stat++;
} }
return err; return err;
...@@ -2400,6 +2490,8 @@ static int rvu_dbg_npc_mcam_show_rules(struct seq_file *s, void *unused) ...@@ -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_printf(s, "VF%d", vf);
} }
seq_puts(s, "\n"); 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); rvu_dbg_npc_mcam_show_action(s, iter);
...@@ -2672,6 +2764,10 @@ void rvu_dbg_init(struct rvu *rvu) ...@@ -2672,6 +2764,10 @@ void rvu_dbg_init(struct rvu *rvu)
debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu, debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu,
&rvu_dbg_rsrc_status_fops); &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()) if (!cgx_get_cgxcnt_max())
goto create; goto create;
......
...@@ -1119,6 +1119,9 @@ static int npc_install_flow(struct rvu *rvu, int blkaddr, u16 target, ...@@ -1119,6 +1119,9 @@ static int npc_install_flow(struct rvu *rvu, int blkaddr, u16 target,
rule->default_rule = req->default_rule; rule->default_rule = req->default_rule;
rule->owner = owner; rule->owner = owner;
rule->enable = enable; 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)) if (is_npc_intf_tx(req->intf))
rule->intf = pfvf->nix_tx_intf; rule->intf = pfvf->nix_tx_intf;
else 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