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

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
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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 */
+107 −11
Original line number Diff line number Diff line
@@ -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;

@@ -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;

+3 −0
Original line number Diff line number Diff line
@@ -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