123205e6dSChristina Jacob // SPDX-License-Identifier: GPL-2.0
223205e6dSChristina Jacob /* Marvell OcteonTx2 RVU Admin Function driver
323205e6dSChristina Jacob  *
423205e6dSChristina Jacob  * Copyright (C) 2019 Marvell International Ltd.
523205e6dSChristina Jacob  *
623205e6dSChristina Jacob  * This program is free software; you can redistribute it and/or modify
723205e6dSChristina Jacob  * it under the terms of the GNU General Public License version 2 as
823205e6dSChristina Jacob  * published by the Free Software Foundation.
923205e6dSChristina Jacob  */
1023205e6dSChristina Jacob 
1123205e6dSChristina Jacob #ifdef CONFIG_DEBUG_FS
1223205e6dSChristina Jacob 
1323205e6dSChristina Jacob #include <linux/fs.h>
1423205e6dSChristina Jacob #include <linux/debugfs.h>
1523205e6dSChristina Jacob #include <linux/module.h>
1623205e6dSChristina Jacob #include <linux/pci.h>
1723205e6dSChristina Jacob 
1823205e6dSChristina Jacob #include "rvu_struct.h"
1923205e6dSChristina Jacob #include "rvu_reg.h"
2023205e6dSChristina Jacob #include "rvu.h"
21c57211b5SPrakash Brahmajyosyula #include "cgx.h"
2291c6945eSHariprasad Kelam #include "lmac_common.h"
23e07fb507SSunil Goutham #include "npc.h"
2423205e6dSChristina Jacob 
2523205e6dSChristina Jacob #define DEBUGFS_DIR_NAME "octeontx2"
2623205e6dSChristina Jacob 
27c57211b5SPrakash Brahmajyosyula enum {
28c57211b5SPrakash Brahmajyosyula 	CGX_STAT0,
29c57211b5SPrakash Brahmajyosyula 	CGX_STAT1,
30c57211b5SPrakash Brahmajyosyula 	CGX_STAT2,
31c57211b5SPrakash Brahmajyosyula 	CGX_STAT3,
32c57211b5SPrakash Brahmajyosyula 	CGX_STAT4,
33c57211b5SPrakash Brahmajyosyula 	CGX_STAT5,
34c57211b5SPrakash Brahmajyosyula 	CGX_STAT6,
35c57211b5SPrakash Brahmajyosyula 	CGX_STAT7,
36c57211b5SPrakash Brahmajyosyula 	CGX_STAT8,
37c57211b5SPrakash Brahmajyosyula 	CGX_STAT9,
38c57211b5SPrakash Brahmajyosyula 	CGX_STAT10,
39c57211b5SPrakash Brahmajyosyula 	CGX_STAT11,
40c57211b5SPrakash Brahmajyosyula 	CGX_STAT12,
41c57211b5SPrakash Brahmajyosyula 	CGX_STAT13,
42c57211b5SPrakash Brahmajyosyula 	CGX_STAT14,
43c57211b5SPrakash Brahmajyosyula 	CGX_STAT15,
44c57211b5SPrakash Brahmajyosyula 	CGX_STAT16,
45c57211b5SPrakash Brahmajyosyula 	CGX_STAT17,
46c57211b5SPrakash Brahmajyosyula 	CGX_STAT18,
47c57211b5SPrakash Brahmajyosyula };
48c57211b5SPrakash Brahmajyosyula 
49f967488dSLinu Cherian /* NIX TX stats */
50f967488dSLinu Cherian enum nix_stat_lf_tx {
51f967488dSLinu Cherian 	TX_UCAST	= 0x0,
52f967488dSLinu Cherian 	TX_BCAST	= 0x1,
53f967488dSLinu Cherian 	TX_MCAST	= 0x2,
54f967488dSLinu Cherian 	TX_DROP		= 0x3,
55f967488dSLinu Cherian 	TX_OCTS		= 0x4,
56f967488dSLinu Cherian 	TX_STATS_ENUM_LAST,
57f967488dSLinu Cherian };
58f967488dSLinu Cherian 
59f967488dSLinu Cherian /* NIX RX stats */
60f967488dSLinu Cherian enum nix_stat_lf_rx {
61f967488dSLinu Cherian 	RX_OCTS		= 0x0,
62f967488dSLinu Cherian 	RX_UCAST	= 0x1,
63f967488dSLinu Cherian 	RX_BCAST	= 0x2,
64f967488dSLinu Cherian 	RX_MCAST	= 0x3,
65f967488dSLinu Cherian 	RX_DROP		= 0x4,
66f967488dSLinu Cherian 	RX_DROP_OCTS	= 0x5,
67f967488dSLinu Cherian 	RX_FCS		= 0x6,
68f967488dSLinu Cherian 	RX_ERR		= 0x7,
69f967488dSLinu Cherian 	RX_DRP_BCAST	= 0x8,
70f967488dSLinu Cherian 	RX_DRP_MCAST	= 0x9,
71f967488dSLinu Cherian 	RX_DRP_L3BCAST	= 0xa,
72f967488dSLinu Cherian 	RX_DRP_L3MCAST	= 0xb,
73f967488dSLinu Cherian 	RX_STATS_ENUM_LAST,
74f967488dSLinu Cherian };
75f967488dSLinu Cherian 
76c57211b5SPrakash Brahmajyosyula static char *cgx_rx_stats_fields[] = {
77c57211b5SPrakash Brahmajyosyula 	[CGX_STAT0]	= "Received packets",
78c57211b5SPrakash Brahmajyosyula 	[CGX_STAT1]	= "Octets of received packets",
79c57211b5SPrakash Brahmajyosyula 	[CGX_STAT2]	= "Received PAUSE packets",
80c57211b5SPrakash Brahmajyosyula 	[CGX_STAT3]	= "Received PAUSE and control packets",
81c57211b5SPrakash Brahmajyosyula 	[CGX_STAT4]	= "Filtered DMAC0 (NIX-bound) packets",
82c57211b5SPrakash Brahmajyosyula 	[CGX_STAT5]	= "Filtered DMAC0 (NIX-bound) octets",
83c57211b5SPrakash Brahmajyosyula 	[CGX_STAT6]	= "Packets dropped due to RX FIFO full",
84c57211b5SPrakash Brahmajyosyula 	[CGX_STAT7]	= "Octets dropped due to RX FIFO full",
85c57211b5SPrakash Brahmajyosyula 	[CGX_STAT8]	= "Error packets",
86c57211b5SPrakash Brahmajyosyula 	[CGX_STAT9]	= "Filtered DMAC1 (NCSI-bound) packets",
87c57211b5SPrakash Brahmajyosyula 	[CGX_STAT10]	= "Filtered DMAC1 (NCSI-bound) octets",
88c57211b5SPrakash Brahmajyosyula 	[CGX_STAT11]	= "NCSI-bound packets dropped",
89c57211b5SPrakash Brahmajyosyula 	[CGX_STAT12]	= "NCSI-bound octets dropped",
90c57211b5SPrakash Brahmajyosyula };
91c57211b5SPrakash Brahmajyosyula 
92c57211b5SPrakash Brahmajyosyula static char *cgx_tx_stats_fields[] = {
93c57211b5SPrakash Brahmajyosyula 	[CGX_STAT0]	= "Packets dropped due to excessive collisions",
94c57211b5SPrakash Brahmajyosyula 	[CGX_STAT1]	= "Packets dropped due to excessive deferral",
95c57211b5SPrakash Brahmajyosyula 	[CGX_STAT2]	= "Multiple collisions before successful transmission",
96c57211b5SPrakash Brahmajyosyula 	[CGX_STAT3]	= "Single collisions before successful transmission",
97c57211b5SPrakash Brahmajyosyula 	[CGX_STAT4]	= "Total octets sent on the interface",
98c57211b5SPrakash Brahmajyosyula 	[CGX_STAT5]	= "Total frames sent on the interface",
99c57211b5SPrakash Brahmajyosyula 	[CGX_STAT6]	= "Packets sent with an octet count < 64",
100c57211b5SPrakash Brahmajyosyula 	[CGX_STAT7]	= "Packets sent with an octet count == 64",
101c57211b5SPrakash Brahmajyosyula 	[CGX_STAT8]	= "Packets sent with an octet count of 65–127",
102c57211b5SPrakash Brahmajyosyula 	[CGX_STAT9]	= "Packets sent with an octet count of 128-255",
103c57211b5SPrakash Brahmajyosyula 	[CGX_STAT10]	= "Packets sent with an octet count of 256-511",
104c57211b5SPrakash Brahmajyosyula 	[CGX_STAT11]	= "Packets sent with an octet count of 512-1023",
105c57211b5SPrakash Brahmajyosyula 	[CGX_STAT12]	= "Packets sent with an octet count of 1024-1518",
106c57211b5SPrakash Brahmajyosyula 	[CGX_STAT13]	= "Packets sent with an octet count of > 1518",
107c57211b5SPrakash Brahmajyosyula 	[CGX_STAT14]	= "Packets sent to a broadcast DMAC",
108c57211b5SPrakash Brahmajyosyula 	[CGX_STAT15]	= "Packets sent to the multicast DMAC",
109c57211b5SPrakash Brahmajyosyula 	[CGX_STAT16]	= "Transmit underflow and were truncated",
110c57211b5SPrakash Brahmajyosyula 	[CGX_STAT17]	= "Control/PAUSE packets sent",
111c57211b5SPrakash Brahmajyosyula };
112c57211b5SPrakash Brahmajyosyula 
113ce7a6c31SHariprasad Kelam static char *rpm_rx_stats_fields[] = {
114ce7a6c31SHariprasad Kelam 	"Octets of received packets",
115ce7a6c31SHariprasad Kelam 	"Octets of received packets with out error",
116ce7a6c31SHariprasad Kelam 	"Received packets with alignment errors",
117ce7a6c31SHariprasad Kelam 	"Control/PAUSE packets received",
118ce7a6c31SHariprasad Kelam 	"Packets received with Frame too long Errors",
119ce7a6c31SHariprasad Kelam 	"Packets received with a1nrange length Errors",
120ce7a6c31SHariprasad Kelam 	"Received packets",
121ce7a6c31SHariprasad Kelam 	"Packets received with FrameCheckSequenceErrors",
122ce7a6c31SHariprasad Kelam 	"Packets received with VLAN header",
123ce7a6c31SHariprasad Kelam 	"Error packets",
124a6e0ee35SColin Ian King 	"Packets received with unicast DMAC",
125ce7a6c31SHariprasad Kelam 	"Packets received with multicast DMAC",
126ce7a6c31SHariprasad Kelam 	"Packets received with broadcast DMAC",
127ce7a6c31SHariprasad Kelam 	"Dropped packets",
128ce7a6c31SHariprasad Kelam 	"Total frames received on interface",
129ce7a6c31SHariprasad Kelam 	"Packets received with an octet count < 64",
130ce7a6c31SHariprasad Kelam 	"Packets received with an octet count == 64",
131ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 65–127",
132ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 128-255",
133ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 256-511",
134ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 512-1023",
135ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 1024-1518",
136ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of > 1518",
137ce7a6c31SHariprasad Kelam 	"Oversized Packets",
138ce7a6c31SHariprasad Kelam 	"Jabber Packets",
139ce7a6c31SHariprasad Kelam 	"Fragmented Packets",
140ce7a6c31SHariprasad Kelam 	"CBFC(class based flow control) pause frames received for class 0",
141ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 1",
142ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 2",
143ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 3",
144ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 4",
145ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 5",
146ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 6",
147ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 7",
148ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 8",
149ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 9",
150ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 10",
151ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 11",
152ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 12",
153ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 13",
154ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 14",
155ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 15",
156ce7a6c31SHariprasad Kelam 	"MAC control packets received",
157ce7a6c31SHariprasad Kelam };
158ce7a6c31SHariprasad Kelam 
159ce7a6c31SHariprasad Kelam static char *rpm_tx_stats_fields[] = {
160ce7a6c31SHariprasad Kelam 	"Total octets sent on the interface",
161ce7a6c31SHariprasad Kelam 	"Total octets transmitted OK",
162ce7a6c31SHariprasad Kelam 	"Control/Pause frames sent",
163ce7a6c31SHariprasad Kelam 	"Total frames transmitted OK",
164ce7a6c31SHariprasad Kelam 	"Total frames sent with VLAN header",
165ce7a6c31SHariprasad Kelam 	"Error Packets",
166ce7a6c31SHariprasad Kelam 	"Packets sent to unicast DMAC",
167ce7a6c31SHariprasad Kelam 	"Packets sent to the multicast DMAC",
168ce7a6c31SHariprasad Kelam 	"Packets sent to a broadcast DMAC",
169ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count == 64",
170ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 65–127",
171ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 128-255",
172ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 256-511",
173ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 512-1023",
174ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 1024-1518",
175ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of > 1518",
176ce7a6c31SHariprasad Kelam 	"CBFC(class based flow control) pause frames transmitted for class 0",
177ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 1",
178ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 2",
179ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 3",
180ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 4",
181ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 5",
182ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 6",
183ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 7",
184ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 8",
185ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 9",
186ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 10",
187ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 11",
188ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 12",
189ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 13",
190ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 14",
191ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 15",
192ce7a6c31SHariprasad Kelam 	"MAC control packets sent",
193ce7a6c31SHariprasad Kelam 	"Total frames sent on the interface"
194ce7a6c31SHariprasad Kelam };
195ce7a6c31SHariprasad Kelam 
19676638a2eSSrujana Challa enum cpt_eng_type {
19776638a2eSSrujana Challa 	CPT_AE_TYPE = 1,
19876638a2eSSrujana Challa 	CPT_SE_TYPE = 2,
19976638a2eSSrujana Challa 	CPT_IE_TYPE = 3,
20076638a2eSSrujana Challa };
20176638a2eSSrujana Challa 
202c5a797e0SPrakash Brahmajyosyula #define NDC_MAX_BANK(rvu, blk_addr) (rvu_read64(rvu, \
203c5a797e0SPrakash Brahmajyosyula 						blk_addr, NDC_AF_CONST) & 0xFF)
204c5a797e0SPrakash Brahmajyosyula 
20523205e6dSChristina Jacob #define rvu_dbg_NULL NULL
2068756828aSChristina Jacob #define rvu_dbg_open_NULL NULL
2078756828aSChristina Jacob 
2088756828aSChristina Jacob #define RVU_DEBUG_SEQ_FOPS(name, read_op, write_op)	\
2098756828aSChristina Jacob static int rvu_dbg_open_##name(struct inode *inode, struct file *file) \
2108756828aSChristina Jacob { \
2118756828aSChristina Jacob 	return single_open(file, rvu_dbg_##read_op, inode->i_private); \
2128756828aSChristina Jacob } \
2138756828aSChristina Jacob static const struct file_operations rvu_dbg_##name##_fops = { \
2148756828aSChristina Jacob 	.owner		= THIS_MODULE, \
2158756828aSChristina Jacob 	.open		= rvu_dbg_open_##name, \
2168756828aSChristina Jacob 	.read		= seq_read, \
2178756828aSChristina Jacob 	.write		= rvu_dbg_##write_op, \
2188756828aSChristina Jacob 	.llseek		= seq_lseek, \
2198756828aSChristina Jacob 	.release	= single_release, \
2208756828aSChristina Jacob }
22123205e6dSChristina Jacob 
22223205e6dSChristina Jacob #define RVU_DEBUG_FOPS(name, read_op, write_op) \
22323205e6dSChristina Jacob static const struct file_operations rvu_dbg_##name##_fops = { \
22423205e6dSChristina Jacob 	.owner = THIS_MODULE, \
22523205e6dSChristina Jacob 	.open = simple_open, \
22623205e6dSChristina Jacob 	.read = rvu_dbg_##read_op, \
22723205e6dSChristina Jacob 	.write = rvu_dbg_##write_op \
22823205e6dSChristina Jacob }
22923205e6dSChristina Jacob 
23002e202c3SPrakash Brahmajyosyula static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf);
23102e202c3SPrakash Brahmajyosyula 
23223205e6dSChristina Jacob /* Dumps current provisioning status of all RVU block LFs */
23323205e6dSChristina Jacob static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
23423205e6dSChristina Jacob 					  char __user *buffer,
23523205e6dSChristina Jacob 					  size_t count, loff_t *ppos)
23623205e6dSChristina Jacob {
23723205e6dSChristina Jacob 	int index, off = 0, flag = 0, go_back = 0, off_prev;
23823205e6dSChristina Jacob 	struct rvu *rvu = filp->private_data;
23923205e6dSChristina Jacob 	int lf, pf, vf, pcifunc;
24023205e6dSChristina Jacob 	struct rvu_block block;
24123205e6dSChristina Jacob 	int bytes_not_copied;
24223205e6dSChristina Jacob 	int buf_size = 2048;
24323205e6dSChristina Jacob 	char *buf;
24423205e6dSChristina Jacob 
24523205e6dSChristina Jacob 	/* don't allow partial reads */
24623205e6dSChristina Jacob 	if (*ppos != 0)
24723205e6dSChristina Jacob 		return 0;
24823205e6dSChristina Jacob 
24923205e6dSChristina Jacob 	buf = kzalloc(buf_size, GFP_KERNEL);
25023205e6dSChristina Jacob 	if (!buf)
25123205e6dSChristina Jacob 		return -ENOSPC;
25223205e6dSChristina Jacob 	off +=	scnprintf(&buf[off], buf_size - 1 - off, "\npcifunc\t\t");
25323205e6dSChristina Jacob 	for (index = 0; index < BLK_COUNT; index++)
25423205e6dSChristina Jacob 		if (strlen(rvu->hw->block[index].name))
25523205e6dSChristina Jacob 			off +=	scnprintf(&buf[off], buf_size - 1 - off,
25623205e6dSChristina Jacob 					  "%*s\t", (index - 1) * 2,
25723205e6dSChristina Jacob 					  rvu->hw->block[index].name);
25823205e6dSChristina Jacob 	off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
25923205e6dSChristina Jacob 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
26023205e6dSChristina Jacob 		for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
26123205e6dSChristina Jacob 			pcifunc = pf << 10 | vf;
26223205e6dSChristina Jacob 			if (!pcifunc)
26323205e6dSChristina Jacob 				continue;
26423205e6dSChristina Jacob 
26523205e6dSChristina Jacob 			if (vf) {
26623205e6dSChristina Jacob 				go_back = scnprintf(&buf[off],
26723205e6dSChristina Jacob 						    buf_size - 1 - off,
26823205e6dSChristina Jacob 						    "PF%d:VF%d\t\t", pf,
26923205e6dSChristina Jacob 						    vf - 1);
27023205e6dSChristina Jacob 			} else {
27123205e6dSChristina Jacob 				go_back = scnprintf(&buf[off],
27223205e6dSChristina Jacob 						    buf_size - 1 - off,
27323205e6dSChristina Jacob 						    "PF%d\t\t", pf);
27423205e6dSChristina Jacob 			}
27523205e6dSChristina Jacob 
27623205e6dSChristina Jacob 			off += go_back;
27723205e6dSChristina Jacob 			for (index = 0; index < BLKTYPE_MAX; index++) {
27823205e6dSChristina Jacob 				block = rvu->hw->block[index];
27923205e6dSChristina Jacob 				if (!strlen(block.name))
28023205e6dSChristina Jacob 					continue;
28123205e6dSChristina Jacob 				off_prev = off;
28223205e6dSChristina Jacob 				for (lf = 0; lf < block.lf.max; lf++) {
28323205e6dSChristina Jacob 					if (block.fn_map[lf] != pcifunc)
28423205e6dSChristina Jacob 						continue;
28523205e6dSChristina Jacob 					flag = 1;
28623205e6dSChristina Jacob 					off += scnprintf(&buf[off], buf_size - 1
28723205e6dSChristina Jacob 							- off, "%3d,", lf);
28823205e6dSChristina Jacob 				}
28923205e6dSChristina Jacob 				if (flag && off_prev != off)
29023205e6dSChristina Jacob 					off--;
29123205e6dSChristina Jacob 				else
29223205e6dSChristina Jacob 					go_back++;
29323205e6dSChristina Jacob 				off += scnprintf(&buf[off], buf_size - 1 - off,
29423205e6dSChristina Jacob 						"\t");
29523205e6dSChristina Jacob 			}
29623205e6dSChristina Jacob 			if (!flag)
29723205e6dSChristina Jacob 				off -= go_back;
29823205e6dSChristina Jacob 			else
29923205e6dSChristina Jacob 				flag = 0;
30023205e6dSChristina Jacob 			off--;
30123205e6dSChristina Jacob 			off +=	scnprintf(&buf[off], buf_size - 1 - off, "\n");
30223205e6dSChristina Jacob 		}
30323205e6dSChristina Jacob 	}
30423205e6dSChristina Jacob 
30523205e6dSChristina Jacob 	bytes_not_copied = copy_to_user(buffer, buf, off);
30623205e6dSChristina Jacob 	kfree(buf);
30723205e6dSChristina Jacob 
30823205e6dSChristina Jacob 	if (bytes_not_copied)
30923205e6dSChristina Jacob 		return -EFAULT;
31023205e6dSChristina Jacob 
31123205e6dSChristina Jacob 	*ppos = off;
31223205e6dSChristina Jacob 	return off;
31323205e6dSChristina Jacob }
31423205e6dSChristina Jacob 
31523205e6dSChristina Jacob RVU_DEBUG_FOPS(rsrc_status, rsrc_attach_status, NULL);
31623205e6dSChristina Jacob 
317e2fb3730SRakesh Babu static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused)
318e2fb3730SRakesh Babu {
319e2fb3730SRakesh Babu 	struct rvu *rvu = filp->private;
320e2fb3730SRakesh Babu 	struct pci_dev *pdev = NULL;
32191c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
32291c6945eSHariprasad Kelam 	int rvu_def_cgx_id = 0;
323e2fb3730SRakesh Babu 	char cgx[10], lmac[10];
324e2fb3730SRakesh Babu 	struct rvu_pfvf *pfvf;
325e2fb3730SRakesh Babu 	int pf, domain, blkid;
326e2fb3730SRakesh Babu 	u8 cgx_id, lmac_id;
327e2fb3730SRakesh Babu 	u16 pcifunc;
328e2fb3730SRakesh Babu 
329e2fb3730SRakesh Babu 	domain = 2;
33091c6945eSHariprasad Kelam 	mac_ops = get_mac_ops(rvu_cgx_pdata(rvu_def_cgx_id, rvu));
33191c6945eSHariprasad Kelam 	seq_printf(filp, "PCI dev\t\tRVU PF Func\tNIX block\t%s\tLMAC\n",
33291c6945eSHariprasad Kelam 		   mac_ops->name);
333e2fb3730SRakesh Babu 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
334e2fb3730SRakesh Babu 		if (!is_pf_cgxmapped(rvu, pf))
335e2fb3730SRakesh Babu 			continue;
336e2fb3730SRakesh Babu 
337e2fb3730SRakesh Babu 		pdev =  pci_get_domain_bus_and_slot(domain, pf + 1, 0);
338e2fb3730SRakesh Babu 		if (!pdev)
339e2fb3730SRakesh Babu 			continue;
340e2fb3730SRakesh Babu 
341e2fb3730SRakesh Babu 		cgx[0] = 0;
342e2fb3730SRakesh Babu 		lmac[0] = 0;
343e2fb3730SRakesh Babu 		pcifunc = pf << 10;
344e2fb3730SRakesh Babu 		pfvf = rvu_get_pfvf(rvu, pcifunc);
345e2fb3730SRakesh Babu 
346e2fb3730SRakesh Babu 		if (pfvf->nix_blkaddr == BLKADDR_NIX0)
347e2fb3730SRakesh Babu 			blkid = 0;
348e2fb3730SRakesh Babu 		else
349e2fb3730SRakesh Babu 			blkid = 1;
350e2fb3730SRakesh Babu 
351e2fb3730SRakesh Babu 		rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id,
352e2fb3730SRakesh Babu 				    &lmac_id);
35391c6945eSHariprasad Kelam 		sprintf(cgx, "%s%d", mac_ops->name, cgx_id);
354e2fb3730SRakesh Babu 		sprintf(lmac, "LMAC%d", lmac_id);
355e2fb3730SRakesh Babu 		seq_printf(filp, "%s\t0x%x\t\tNIX%d\t\t%s\t%s\n",
356e2fb3730SRakesh Babu 			   dev_name(&pdev->dev), pcifunc, blkid, cgx, lmac);
357e2fb3730SRakesh Babu 	}
358e2fb3730SRakesh Babu 	return 0;
359e2fb3730SRakesh Babu }
360e2fb3730SRakesh Babu 
361e2fb3730SRakesh Babu RVU_DEBUG_SEQ_FOPS(rvu_pf_cgx_map, rvu_pf_cgx_map_display, NULL);
362e2fb3730SRakesh Babu 
3630f3ce484SRakesh Babu static bool rvu_dbg_is_valid_lf(struct rvu *rvu, int blkaddr, int lf,
3648756828aSChristina Jacob 				u16 *pcifunc)
3658756828aSChristina Jacob {
3668756828aSChristina Jacob 	struct rvu_block *block;
3678756828aSChristina Jacob 	struct rvu_hwinfo *hw;
3688756828aSChristina Jacob 
3698756828aSChristina Jacob 	hw = rvu->hw;
3708756828aSChristina Jacob 	block = &hw->block[blkaddr];
3718756828aSChristina Jacob 
3728756828aSChristina Jacob 	if (lf < 0 || lf >= block->lf.max) {
3738756828aSChristina Jacob 		dev_warn(rvu->dev, "Invalid LF: valid range: 0-%d\n",
3748756828aSChristina Jacob 			 block->lf.max - 1);
3758756828aSChristina Jacob 		return false;
3768756828aSChristina Jacob 	}
3778756828aSChristina Jacob 
3788756828aSChristina Jacob 	*pcifunc = block->fn_map[lf];
3798756828aSChristina Jacob 	if (!*pcifunc) {
3808756828aSChristina Jacob 		dev_warn(rvu->dev,
3818756828aSChristina Jacob 			 "This LF is not attached to any RVU PFFUNC\n");
3828756828aSChristina Jacob 		return false;
3838756828aSChristina Jacob 	}
3848756828aSChristina Jacob 	return true;
3858756828aSChristina Jacob }
3868756828aSChristina Jacob 
3878756828aSChristina Jacob static void print_npa_qsize(struct seq_file *m, struct rvu_pfvf *pfvf)
3888756828aSChristina Jacob {
3898756828aSChristina Jacob 	char *buf;
3908756828aSChristina Jacob 
3918756828aSChristina Jacob 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
3928756828aSChristina Jacob 	if (!buf)
3938756828aSChristina Jacob 		return;
3948756828aSChristina Jacob 
3958756828aSChristina Jacob 	if (!pfvf->aura_ctx) {
3968756828aSChristina Jacob 		seq_puts(m, "Aura context is not initialized\n");
3978756828aSChristina Jacob 	} else {
3988756828aSChristina Jacob 		bitmap_print_to_pagebuf(false, buf, pfvf->aura_bmap,
3998756828aSChristina Jacob 					pfvf->aura_ctx->qsize);
4008756828aSChristina Jacob 		seq_printf(m, "Aura count : %d\n", pfvf->aura_ctx->qsize);
4018756828aSChristina Jacob 		seq_printf(m, "Aura context ena/dis bitmap : %s\n", buf);
4028756828aSChristina Jacob 	}
4038756828aSChristina Jacob 
4048756828aSChristina Jacob 	if (!pfvf->pool_ctx) {
4058756828aSChristina Jacob 		seq_puts(m, "Pool context is not initialized\n");
4068756828aSChristina Jacob 	} else {
4078756828aSChristina Jacob 		bitmap_print_to_pagebuf(false, buf, pfvf->pool_bmap,
4088756828aSChristina Jacob 					pfvf->pool_ctx->qsize);
4098756828aSChristina Jacob 		seq_printf(m, "Pool count : %d\n", pfvf->pool_ctx->qsize);
4108756828aSChristina Jacob 		seq_printf(m, "Pool context ena/dis bitmap : %s\n", buf);
4118756828aSChristina Jacob 	}
4128756828aSChristina Jacob 	kfree(buf);
4138756828aSChristina Jacob }
4148756828aSChristina Jacob 
4158756828aSChristina Jacob /* The 'qsize' entry dumps current Aura/Pool context Qsize
4168756828aSChristina Jacob  * and each context's current enable/disable status in a bitmap.
4178756828aSChristina Jacob  */
4188756828aSChristina Jacob static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
4198756828aSChristina Jacob 				 int blktype)
4208756828aSChristina Jacob {
4218756828aSChristina Jacob 	void (*print_qsize)(struct seq_file *filp,
4228756828aSChristina Jacob 			    struct rvu_pfvf *pfvf) = NULL;
4230f3ce484SRakesh Babu 	struct dentry *current_dir;
4248756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
4258756828aSChristina Jacob 	struct rvu *rvu;
4268756828aSChristina Jacob 	int qsize_id;
4278756828aSChristina Jacob 	u16 pcifunc;
4280f3ce484SRakesh Babu 	int blkaddr;
4298756828aSChristina Jacob 
4308756828aSChristina Jacob 	rvu = filp->private;
4318756828aSChristina Jacob 	switch (blktype) {
4328756828aSChristina Jacob 	case BLKTYPE_NPA:
4338756828aSChristina Jacob 		qsize_id = rvu->rvu_dbg.npa_qsize_id;
4348756828aSChristina Jacob 		print_qsize = print_npa_qsize;
4358756828aSChristina Jacob 		break;
43602e202c3SPrakash Brahmajyosyula 
43702e202c3SPrakash Brahmajyosyula 	case BLKTYPE_NIX:
43802e202c3SPrakash Brahmajyosyula 		qsize_id = rvu->rvu_dbg.nix_qsize_id;
43902e202c3SPrakash Brahmajyosyula 		print_qsize = print_nix_qsize;
44002e202c3SPrakash Brahmajyosyula 		break;
44102e202c3SPrakash Brahmajyosyula 
4428756828aSChristina Jacob 	default:
4438756828aSChristina Jacob 		return -EINVAL;
4448756828aSChristina Jacob 	}
4458756828aSChristina Jacob 
4460f3ce484SRakesh Babu 	if (blktype == BLKTYPE_NPA) {
4470f3ce484SRakesh Babu 		blkaddr = BLKADDR_NPA;
4480f3ce484SRakesh Babu 	} else {
4490f3ce484SRakesh Babu 		current_dir = filp->file->f_path.dentry->d_parent;
4500f3ce484SRakesh Babu 		blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
4510f3ce484SRakesh Babu 				   BLKADDR_NIX1 : BLKADDR_NIX0);
4520f3ce484SRakesh Babu 	}
4530f3ce484SRakesh Babu 
4540f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, blkaddr, qsize_id, &pcifunc))
4558756828aSChristina Jacob 		return -EINVAL;
4568756828aSChristina Jacob 
4578756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
4588756828aSChristina Jacob 	print_qsize(filp, pfvf);
4598756828aSChristina Jacob 
4608756828aSChristina Jacob 	return 0;
4618756828aSChristina Jacob }
4628756828aSChristina Jacob 
4638756828aSChristina Jacob static ssize_t rvu_dbg_qsize_write(struct file *filp,
4648756828aSChristina Jacob 				   const char __user *buffer, size_t count,
4658756828aSChristina Jacob 				   loff_t *ppos, int blktype)
4668756828aSChristina Jacob {
4678756828aSChristina Jacob 	char *blk_string = (blktype == BLKTYPE_NPA) ? "npa" : "nix";
4688756828aSChristina Jacob 	struct seq_file *seqfile = filp->private_data;
4698756828aSChristina Jacob 	char *cmd_buf, *cmd_buf_tmp, *subtoken;
4708756828aSChristina Jacob 	struct rvu *rvu = seqfile->private;
4710f3ce484SRakesh Babu 	struct dentry *current_dir;
4720f3ce484SRakesh Babu 	int blkaddr;
4738756828aSChristina Jacob 	u16 pcifunc;
4748756828aSChristina Jacob 	int ret, lf;
4758756828aSChristina Jacob 
4768756828aSChristina Jacob 	cmd_buf = memdup_user(buffer, count);
4778756828aSChristina Jacob 	if (IS_ERR(cmd_buf))
4788756828aSChristina Jacob 		return -ENOMEM;
4798756828aSChristina Jacob 
4808756828aSChristina Jacob 	cmd_buf[count] = '\0';
4818756828aSChristina Jacob 
4828756828aSChristina Jacob 	cmd_buf_tmp = strchr(cmd_buf, '\n');
4838756828aSChristina Jacob 	if (cmd_buf_tmp) {
4848756828aSChristina Jacob 		*cmd_buf_tmp = '\0';
4858756828aSChristina Jacob 		count = cmd_buf_tmp - cmd_buf + 1;
4868756828aSChristina Jacob 	}
4878756828aSChristina Jacob 
4888756828aSChristina Jacob 	cmd_buf_tmp = cmd_buf;
4898756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
4908756828aSChristina Jacob 	ret = subtoken ? kstrtoint(subtoken, 10, &lf) : -EINVAL;
4918756828aSChristina Jacob 	if (cmd_buf)
4928756828aSChristina Jacob 		ret = -EINVAL;
4938756828aSChristina Jacob 
4948756828aSChristina Jacob 	if (!strncmp(subtoken, "help", 4) || ret < 0) {
4958756828aSChristina Jacob 		dev_info(rvu->dev, "Use echo <%s-lf > qsize\n", blk_string);
4968756828aSChristina Jacob 		goto qsize_write_done;
4978756828aSChristina Jacob 	}
4988756828aSChristina Jacob 
4990f3ce484SRakesh Babu 	if (blktype == BLKTYPE_NPA) {
5000f3ce484SRakesh Babu 		blkaddr = BLKADDR_NPA;
5010f3ce484SRakesh Babu 	} else {
5020f3ce484SRakesh Babu 		current_dir = filp->f_path.dentry->d_parent;
5030f3ce484SRakesh Babu 		blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
5040f3ce484SRakesh Babu 				   BLKADDR_NIX1 : BLKADDR_NIX0);
5050f3ce484SRakesh Babu 	}
5060f3ce484SRakesh Babu 
5070f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, blkaddr, lf, &pcifunc)) {
5088756828aSChristina Jacob 		ret = -EINVAL;
5098756828aSChristina Jacob 		goto qsize_write_done;
5108756828aSChristina Jacob 	}
5118756828aSChristina Jacob 	if (blktype  == BLKTYPE_NPA)
5128756828aSChristina Jacob 		rvu->rvu_dbg.npa_qsize_id = lf;
51302e202c3SPrakash Brahmajyosyula 	else
51402e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_qsize_id = lf;
5158756828aSChristina Jacob 
5168756828aSChristina Jacob qsize_write_done:
5178756828aSChristina Jacob 	kfree(cmd_buf_tmp);
5188756828aSChristina Jacob 	return ret ? ret : count;
5198756828aSChristina Jacob }
5208756828aSChristina Jacob 
5218756828aSChristina Jacob static ssize_t rvu_dbg_npa_qsize_write(struct file *filp,
5228756828aSChristina Jacob 				       const char __user *buffer,
5238756828aSChristina Jacob 				       size_t count, loff_t *ppos)
5248756828aSChristina Jacob {
5258756828aSChristina Jacob 	return rvu_dbg_qsize_write(filp, buffer, count, ppos,
5268756828aSChristina Jacob 					    BLKTYPE_NPA);
5278756828aSChristina Jacob }
5288756828aSChristina Jacob 
5298756828aSChristina Jacob static int rvu_dbg_npa_qsize_display(struct seq_file *filp, void *unused)
5308756828aSChristina Jacob {
5318756828aSChristina Jacob 	return rvu_dbg_qsize_display(filp, unused, BLKTYPE_NPA);
5328756828aSChristina Jacob }
5338756828aSChristina Jacob 
5348756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_qsize, npa_qsize_display, npa_qsize_write);
5358756828aSChristina Jacob 
5368756828aSChristina Jacob /* Dumps given NPA Aura's context */
5378756828aSChristina Jacob static void print_npa_aura_ctx(struct seq_file *m, struct npa_aq_enq_rsp *rsp)
5388756828aSChristina Jacob {
5398756828aSChristina Jacob 	struct npa_aura_s *aura = &rsp->aura;
5403feac505SGeetha sowjanya 	struct rvu *rvu = m->private;
5418756828aSChristina Jacob 
5428756828aSChristina Jacob 	seq_printf(m, "W0: Pool addr\t\t%llx\n", aura->pool_addr);
5438756828aSChristina Jacob 
5448756828aSChristina Jacob 	seq_printf(m, "W1: ena\t\t\t%d\nW1: pool caching\t%d\n",
5458756828aSChristina Jacob 		   aura->ena, aura->pool_caching);
5468756828aSChristina Jacob 	seq_printf(m, "W1: pool way mask\t%d\nW1: avg con\t\t%d\n",
5478756828aSChristina Jacob 		   aura->pool_way_mask, aura->avg_con);
5488756828aSChristina Jacob 	seq_printf(m, "W1: pool drop ena\t%d\nW1: aura drop ena\t%d\n",
5498756828aSChristina Jacob 		   aura->pool_drop_ena, aura->aura_drop_ena);
5508756828aSChristina Jacob 	seq_printf(m, "W1: bp_ena\t\t%d\nW1: aura drop\t\t%d\n",
5518756828aSChristina Jacob 		   aura->bp_ena, aura->aura_drop);
5528756828aSChristina Jacob 	seq_printf(m, "W1: aura shift\t\t%d\nW1: avg_level\t\t%d\n",
5538756828aSChristina Jacob 		   aura->shift, aura->avg_level);
5548756828aSChristina Jacob 
5558756828aSChristina Jacob 	seq_printf(m, "W2: count\t\t%llu\nW2: nix0_bpid\t\t%d\nW2: nix1_bpid\t\t%d\n",
5568756828aSChristina Jacob 		   (u64)aura->count, aura->nix0_bpid, aura->nix1_bpid);
5578756828aSChristina Jacob 
5588756828aSChristina Jacob 	seq_printf(m, "W3: limit\t\t%llu\nW3: bp\t\t\t%d\nW3: fc_ena\t\t%d\n",
5598756828aSChristina Jacob 		   (u64)aura->limit, aura->bp, aura->fc_ena);
5603feac505SGeetha sowjanya 
5613feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
5623feac505SGeetha sowjanya 		seq_printf(m, "W3: fc_be\t\t%d\n", aura->fc_be);
5638756828aSChristina Jacob 	seq_printf(m, "W3: fc_up_crossing\t%d\nW3: fc_stype\t\t%d\n",
5648756828aSChristina Jacob 		   aura->fc_up_crossing, aura->fc_stype);
5658756828aSChristina Jacob 	seq_printf(m, "W3: fc_hyst_bits\t%d\n", aura->fc_hyst_bits);
5668756828aSChristina Jacob 
5678756828aSChristina Jacob 	seq_printf(m, "W4: fc_addr\t\t%llx\n", aura->fc_addr);
5688756828aSChristina Jacob 
5698756828aSChristina Jacob 	seq_printf(m, "W5: pool_drop\t\t%d\nW5: update_time\t\t%d\n",
5708756828aSChristina Jacob 		   aura->pool_drop, aura->update_time);
5718756828aSChristina Jacob 	seq_printf(m, "W5: err_int \t\t%d\nW5: err_int_ena\t\t%d\n",
5728756828aSChristina Jacob 		   aura->err_int, aura->err_int_ena);
5738756828aSChristina Jacob 	seq_printf(m, "W5: thresh_int\t\t%d\nW5: thresh_int_ena \t%d\n",
5748756828aSChristina Jacob 		   aura->thresh_int, aura->thresh_int_ena);
5758756828aSChristina Jacob 	seq_printf(m, "W5: thresh_up\t\t%d\nW5: thresh_qint_idx\t%d\n",
5768756828aSChristina Jacob 		   aura->thresh_up, aura->thresh_qint_idx);
5778756828aSChristina Jacob 	seq_printf(m, "W5: err_qint_idx \t%d\n", aura->err_qint_idx);
5788756828aSChristina Jacob 
5798756828aSChristina Jacob 	seq_printf(m, "W6: thresh\t\t%llu\n", (u64)aura->thresh);
5803feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
5813feac505SGeetha sowjanya 		seq_printf(m, "W6: fc_msh_dst\t\t%d\n", aura->fc_msh_dst);
5828756828aSChristina Jacob }
5838756828aSChristina Jacob 
5848756828aSChristina Jacob /* Dumps given NPA Pool's context */
5858756828aSChristina Jacob static void print_npa_pool_ctx(struct seq_file *m, struct npa_aq_enq_rsp *rsp)
5868756828aSChristina Jacob {
5878756828aSChristina Jacob 	struct npa_pool_s *pool = &rsp->pool;
5883feac505SGeetha sowjanya 	struct rvu *rvu = m->private;
5898756828aSChristina Jacob 
5908756828aSChristina Jacob 	seq_printf(m, "W0: Stack base\t\t%llx\n", pool->stack_base);
5918756828aSChristina Jacob 
5928756828aSChristina Jacob 	seq_printf(m, "W1: ena \t\t%d\nW1: nat_align \t\t%d\n",
5938756828aSChristina Jacob 		   pool->ena, pool->nat_align);
5948756828aSChristina Jacob 	seq_printf(m, "W1: stack_caching\t%d\nW1: stack_way_mask\t%d\n",
5958756828aSChristina Jacob 		   pool->stack_caching, pool->stack_way_mask);
5968756828aSChristina Jacob 	seq_printf(m, "W1: buf_offset\t\t%d\nW1: buf_size\t\t%d\n",
5978756828aSChristina Jacob 		   pool->buf_offset, pool->buf_size);
5988756828aSChristina Jacob 
5998756828aSChristina Jacob 	seq_printf(m, "W2: stack_max_pages \t%d\nW2: stack_pages\t\t%d\n",
6008756828aSChristina Jacob 		   pool->stack_max_pages, pool->stack_pages);
6018756828aSChristina Jacob 
6028756828aSChristina Jacob 	seq_printf(m, "W3: op_pc \t\t%llu\n", (u64)pool->op_pc);
6038756828aSChristina Jacob 
6048756828aSChristina Jacob 	seq_printf(m, "W4: stack_offset\t%d\nW4: shift\t\t%d\nW4: avg_level\t\t%d\n",
6058756828aSChristina Jacob 		   pool->stack_offset, pool->shift, pool->avg_level);
6068756828aSChristina Jacob 	seq_printf(m, "W4: avg_con \t\t%d\nW4: fc_ena\t\t%d\nW4: fc_stype\t\t%d\n",
6078756828aSChristina Jacob 		   pool->avg_con, pool->fc_ena, pool->fc_stype);
6088756828aSChristina Jacob 	seq_printf(m, "W4: fc_hyst_bits\t%d\nW4: fc_up_crossing\t%d\n",
6098756828aSChristina Jacob 		   pool->fc_hyst_bits, pool->fc_up_crossing);
6103feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
6113feac505SGeetha sowjanya 		seq_printf(m, "W4: fc_be\t\t%d\n", pool->fc_be);
6128756828aSChristina Jacob 	seq_printf(m, "W4: update_time\t\t%d\n", pool->update_time);
6138756828aSChristina Jacob 
6148756828aSChristina Jacob 	seq_printf(m, "W5: fc_addr\t\t%llx\n", pool->fc_addr);
6158756828aSChristina Jacob 
6168756828aSChristina Jacob 	seq_printf(m, "W6: ptr_start\t\t%llx\n", pool->ptr_start);
6178756828aSChristina Jacob 
6188756828aSChristina Jacob 	seq_printf(m, "W7: ptr_end\t\t%llx\n", pool->ptr_end);
6198756828aSChristina Jacob 
6208756828aSChristina Jacob 	seq_printf(m, "W8: err_int\t\t%d\nW8: err_int_ena\t\t%d\n",
6218756828aSChristina Jacob 		   pool->err_int, pool->err_int_ena);
6228756828aSChristina Jacob 	seq_printf(m, "W8: thresh_int\t\t%d\n", pool->thresh_int);
6238756828aSChristina Jacob 	seq_printf(m, "W8: thresh_int_ena\t%d\nW8: thresh_up\t\t%d\n",
6248756828aSChristina Jacob 		   pool->thresh_int_ena, pool->thresh_up);
6253feac505SGeetha sowjanya 	seq_printf(m, "W8: thresh_qint_idx\t%d\nW8: err_qint_idx\t%d\n",
6268756828aSChristina Jacob 		   pool->thresh_qint_idx, pool->err_qint_idx);
6273feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
6283feac505SGeetha sowjanya 		seq_printf(m, "W8: fc_msh_dst\t\t%d\n", pool->fc_msh_dst);
6298756828aSChristina Jacob }
6308756828aSChristina Jacob 
6318756828aSChristina Jacob /* Reads aura/pool's ctx from admin queue */
6328756828aSChristina Jacob static int rvu_dbg_npa_ctx_display(struct seq_file *m, void *unused, int ctype)
6338756828aSChristina Jacob {
6348756828aSChristina Jacob 	void (*print_npa_ctx)(struct seq_file *m, struct npa_aq_enq_rsp *rsp);
6358756828aSChristina Jacob 	struct npa_aq_enq_req aq_req;
6368756828aSChristina Jacob 	struct npa_aq_enq_rsp rsp;
6378756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
6388756828aSChristina Jacob 	int aura, rc, max_id;
6398756828aSChristina Jacob 	int npalf, id, all;
6408756828aSChristina Jacob 	struct rvu *rvu;
6418756828aSChristina Jacob 	u16 pcifunc;
6428756828aSChristina Jacob 
6438756828aSChristina Jacob 	rvu = m->private;
6448756828aSChristina Jacob 
6458756828aSChristina Jacob 	switch (ctype) {
6468756828aSChristina Jacob 	case NPA_AQ_CTYPE_AURA:
6478756828aSChristina Jacob 		npalf = rvu->rvu_dbg.npa_aura_ctx.lf;
6488756828aSChristina Jacob 		id = rvu->rvu_dbg.npa_aura_ctx.id;
6498756828aSChristina Jacob 		all = rvu->rvu_dbg.npa_aura_ctx.all;
6508756828aSChristina Jacob 		break;
6518756828aSChristina Jacob 
6528756828aSChristina Jacob 	case NPA_AQ_CTYPE_POOL:
6538756828aSChristina Jacob 		npalf = rvu->rvu_dbg.npa_pool_ctx.lf;
6548756828aSChristina Jacob 		id = rvu->rvu_dbg.npa_pool_ctx.id;
6558756828aSChristina Jacob 		all = rvu->rvu_dbg.npa_pool_ctx.all;
6568756828aSChristina Jacob 		break;
6578756828aSChristina Jacob 	default:
6588756828aSChristina Jacob 		return -EINVAL;
6598756828aSChristina Jacob 	}
6608756828aSChristina Jacob 
6610f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
6628756828aSChristina Jacob 		return -EINVAL;
6638756828aSChristina Jacob 
6648756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
6658756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA && !pfvf->aura_ctx) {
6668756828aSChristina Jacob 		seq_puts(m, "Aura context is not initialized\n");
6678756828aSChristina Jacob 		return -EINVAL;
6688756828aSChristina Jacob 	} else if (ctype == NPA_AQ_CTYPE_POOL && !pfvf->pool_ctx) {
6698756828aSChristina Jacob 		seq_puts(m, "Pool context is not initialized\n");
6708756828aSChristina Jacob 		return -EINVAL;
6718756828aSChristina Jacob 	}
6728756828aSChristina Jacob 
6738756828aSChristina Jacob 	memset(&aq_req, 0, sizeof(struct npa_aq_enq_req));
6748756828aSChristina Jacob 	aq_req.hdr.pcifunc = pcifunc;
6758756828aSChristina Jacob 	aq_req.ctype = ctype;
6768756828aSChristina Jacob 	aq_req.op = NPA_AQ_INSTOP_READ;
6778756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA) {
6788756828aSChristina Jacob 		max_id = pfvf->aura_ctx->qsize;
6798756828aSChristina Jacob 		print_npa_ctx = print_npa_aura_ctx;
6808756828aSChristina Jacob 	} else {
6818756828aSChristina Jacob 		max_id = pfvf->pool_ctx->qsize;
6828756828aSChristina Jacob 		print_npa_ctx = print_npa_pool_ctx;
6838756828aSChristina Jacob 	}
6848756828aSChristina Jacob 
6858756828aSChristina Jacob 	if (id < 0 || id >= max_id) {
6868756828aSChristina Jacob 		seq_printf(m, "Invalid %s, valid range is 0-%d\n",
6878756828aSChristina Jacob 			   (ctype == NPA_AQ_CTYPE_AURA) ? "aura" : "pool",
6888756828aSChristina Jacob 			max_id - 1);
6898756828aSChristina Jacob 		return -EINVAL;
6908756828aSChristina Jacob 	}
6918756828aSChristina Jacob 
6928756828aSChristina Jacob 	if (all)
6938756828aSChristina Jacob 		id = 0;
6948756828aSChristina Jacob 	else
6958756828aSChristina Jacob 		max_id = id + 1;
6968756828aSChristina Jacob 
6978756828aSChristina Jacob 	for (aura = id; aura < max_id; aura++) {
6988756828aSChristina Jacob 		aq_req.aura_id = aura;
6998756828aSChristina Jacob 		seq_printf(m, "======%s : %d=======\n",
7008756828aSChristina Jacob 			   (ctype == NPA_AQ_CTYPE_AURA) ? "AURA" : "POOL",
7018756828aSChristina Jacob 			aq_req.aura_id);
7028756828aSChristina Jacob 		rc = rvu_npa_aq_enq_inst(rvu, &aq_req, &rsp);
7038756828aSChristina Jacob 		if (rc) {
7048756828aSChristina Jacob 			seq_puts(m, "Failed to read context\n");
7058756828aSChristina Jacob 			return -EINVAL;
7068756828aSChristina Jacob 		}
7078756828aSChristina Jacob 		print_npa_ctx(m, &rsp);
7088756828aSChristina Jacob 	}
7098756828aSChristina Jacob 	return 0;
7108756828aSChristina Jacob }
7118756828aSChristina Jacob 
7128756828aSChristina Jacob static int write_npa_ctx(struct rvu *rvu, bool all,
7138756828aSChristina Jacob 			 int npalf, int id, int ctype)
7148756828aSChristina Jacob {
7158756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
7168756828aSChristina Jacob 	int max_id = 0;
7178756828aSChristina Jacob 	u16 pcifunc;
7188756828aSChristina Jacob 
7190f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
7208756828aSChristina Jacob 		return -EINVAL;
7218756828aSChristina Jacob 
7228756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
7238756828aSChristina Jacob 
7248756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA) {
7258756828aSChristina Jacob 		if (!pfvf->aura_ctx) {
7268756828aSChristina Jacob 			dev_warn(rvu->dev, "Aura context is not initialized\n");
7278756828aSChristina Jacob 			return -EINVAL;
7288756828aSChristina Jacob 		}
7298756828aSChristina Jacob 		max_id = pfvf->aura_ctx->qsize;
7308756828aSChristina Jacob 	} else if (ctype == NPA_AQ_CTYPE_POOL) {
7318756828aSChristina Jacob 		if (!pfvf->pool_ctx) {
7328756828aSChristina Jacob 			dev_warn(rvu->dev, "Pool context is not initialized\n");
7338756828aSChristina Jacob 			return -EINVAL;
7348756828aSChristina Jacob 		}
7358756828aSChristina Jacob 		max_id = pfvf->pool_ctx->qsize;
7368756828aSChristina Jacob 	}
7378756828aSChristina Jacob 
7388756828aSChristina Jacob 	if (id < 0 || id >= max_id) {
7398756828aSChristina Jacob 		dev_warn(rvu->dev, "Invalid %s, valid range is 0-%d\n",
7408756828aSChristina Jacob 			 (ctype == NPA_AQ_CTYPE_AURA) ? "aura" : "pool",
7418756828aSChristina Jacob 			max_id - 1);
7428756828aSChristina Jacob 		return -EINVAL;
7438756828aSChristina Jacob 	}
7448756828aSChristina Jacob 
7458756828aSChristina Jacob 	switch (ctype) {
7468756828aSChristina Jacob 	case NPA_AQ_CTYPE_AURA:
7478756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.lf = npalf;
7488756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.id = id;
7498756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.all = all;
7508756828aSChristina Jacob 		break;
7518756828aSChristina Jacob 
7528756828aSChristina Jacob 	case NPA_AQ_CTYPE_POOL:
7538756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.lf = npalf;
7548756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.id = id;
7558756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.all = all;
7568756828aSChristina Jacob 		break;
7578756828aSChristina Jacob 	default:
7588756828aSChristina Jacob 		return -EINVAL;
7598756828aSChristina Jacob 	}
7608756828aSChristina Jacob 	return 0;
7618756828aSChristina Jacob }
7628756828aSChristina Jacob 
7638756828aSChristina Jacob static int parse_cmd_buffer_ctx(char *cmd_buf, size_t *count,
7648756828aSChristina Jacob 				const char __user *buffer, int *npalf,
7658756828aSChristina Jacob 				int *id, bool *all)
7668756828aSChristina Jacob {
7678756828aSChristina Jacob 	int bytes_not_copied;
7688756828aSChristina Jacob 	char *cmd_buf_tmp;
7698756828aSChristina Jacob 	char *subtoken;
7708756828aSChristina Jacob 	int ret;
7718756828aSChristina Jacob 
7728756828aSChristina Jacob 	bytes_not_copied = copy_from_user(cmd_buf, buffer, *count);
7738756828aSChristina Jacob 	if (bytes_not_copied)
7748756828aSChristina Jacob 		return -EFAULT;
7758756828aSChristina Jacob 
7768756828aSChristina Jacob 	cmd_buf[*count] = '\0';
7778756828aSChristina Jacob 	cmd_buf_tmp = strchr(cmd_buf, '\n');
7788756828aSChristina Jacob 
7798756828aSChristina Jacob 	if (cmd_buf_tmp) {
7808756828aSChristina Jacob 		*cmd_buf_tmp = '\0';
7818756828aSChristina Jacob 		*count = cmd_buf_tmp - cmd_buf + 1;
7828756828aSChristina Jacob 	}
7838756828aSChristina Jacob 
7848756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
7858756828aSChristina Jacob 	ret = subtoken ? kstrtoint(subtoken, 10, npalf) : -EINVAL;
7868756828aSChristina Jacob 	if (ret < 0)
7878756828aSChristina Jacob 		return ret;
7888756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
7898756828aSChristina Jacob 	if (subtoken && strcmp(subtoken, "all") == 0) {
7908756828aSChristina Jacob 		*all = true;
7918756828aSChristina Jacob 	} else {
7928756828aSChristina Jacob 		ret = subtoken ? kstrtoint(subtoken, 10, id) : -EINVAL;
7938756828aSChristina Jacob 		if (ret < 0)
7948756828aSChristina Jacob 			return ret;
7958756828aSChristina Jacob 	}
7968756828aSChristina Jacob 	if (cmd_buf)
7978756828aSChristina Jacob 		return -EINVAL;
7988756828aSChristina Jacob 	return ret;
7998756828aSChristina Jacob }
8008756828aSChristina Jacob 
8018756828aSChristina Jacob static ssize_t rvu_dbg_npa_ctx_write(struct file *filp,
8028756828aSChristina Jacob 				     const char __user *buffer,
8038756828aSChristina Jacob 				     size_t count, loff_t *ppos, int ctype)
8048756828aSChristina Jacob {
8058756828aSChristina Jacob 	char *cmd_buf, *ctype_string = (ctype == NPA_AQ_CTYPE_AURA) ?
8068756828aSChristina Jacob 					"aura" : "pool";
8078756828aSChristina Jacob 	struct seq_file *seqfp = filp->private_data;
8088756828aSChristina Jacob 	struct rvu *rvu = seqfp->private;
8098756828aSChristina Jacob 	int npalf, id = 0, ret;
8108756828aSChristina Jacob 	bool all = false;
8118756828aSChristina Jacob 
8128756828aSChristina Jacob 	if ((*ppos != 0) || !count)
8138756828aSChristina Jacob 		return -EINVAL;
8148756828aSChristina Jacob 
8158756828aSChristina Jacob 	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
8168756828aSChristina Jacob 	if (!cmd_buf)
8178756828aSChristina Jacob 		return count;
8188756828aSChristina Jacob 	ret = parse_cmd_buffer_ctx(cmd_buf, &count, buffer,
8198756828aSChristina Jacob 				   &npalf, &id, &all);
8208756828aSChristina Jacob 	if (ret < 0) {
8218756828aSChristina Jacob 		dev_info(rvu->dev,
8228756828aSChristina Jacob 			 "Usage: echo <npalf> [%s number/all] > %s_ctx\n",
8238756828aSChristina Jacob 			 ctype_string, ctype_string);
8248756828aSChristina Jacob 		goto done;
8258756828aSChristina Jacob 	} else {
8268756828aSChristina Jacob 		ret = write_npa_ctx(rvu, all, npalf, id, ctype);
8278756828aSChristina Jacob 	}
8288756828aSChristina Jacob done:
8298756828aSChristina Jacob 	kfree(cmd_buf);
8308756828aSChristina Jacob 	return ret ? ret : count;
8318756828aSChristina Jacob }
8328756828aSChristina Jacob 
8338756828aSChristina Jacob static ssize_t rvu_dbg_npa_aura_ctx_write(struct file *filp,
8348756828aSChristina Jacob 					  const char __user *buffer,
8358756828aSChristina Jacob 					  size_t count, loff_t *ppos)
8368756828aSChristina Jacob {
8378756828aSChristina Jacob 	return rvu_dbg_npa_ctx_write(filp, buffer, count, ppos,
8388756828aSChristina Jacob 				     NPA_AQ_CTYPE_AURA);
8398756828aSChristina Jacob }
8408756828aSChristina Jacob 
8418756828aSChristina Jacob static int rvu_dbg_npa_aura_ctx_display(struct seq_file *filp, void *unused)
8428756828aSChristina Jacob {
8438756828aSChristina Jacob 	return rvu_dbg_npa_ctx_display(filp, unused, NPA_AQ_CTYPE_AURA);
8448756828aSChristina Jacob }
8458756828aSChristina Jacob 
8468756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_aura_ctx, npa_aura_ctx_display, npa_aura_ctx_write);
8478756828aSChristina Jacob 
8488756828aSChristina Jacob static ssize_t rvu_dbg_npa_pool_ctx_write(struct file *filp,
8498756828aSChristina Jacob 					  const char __user *buffer,
8508756828aSChristina Jacob 					  size_t count, loff_t *ppos)
8518756828aSChristina Jacob {
8528756828aSChristina Jacob 	return rvu_dbg_npa_ctx_write(filp, buffer, count, ppos,
8538756828aSChristina Jacob 				     NPA_AQ_CTYPE_POOL);
8548756828aSChristina Jacob }
8558756828aSChristina Jacob 
8568756828aSChristina Jacob static int rvu_dbg_npa_pool_ctx_display(struct seq_file *filp, void *unused)
8578756828aSChristina Jacob {
8588756828aSChristina Jacob 	return rvu_dbg_npa_ctx_display(filp, unused, NPA_AQ_CTYPE_POOL);
8598756828aSChristina Jacob }
8608756828aSChristina Jacob 
8618756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_pool_ctx, npa_pool_ctx_display, npa_pool_ctx_write);
8628756828aSChristina Jacob 
863c5a797e0SPrakash Brahmajyosyula static void ndc_cache_stats(struct seq_file *s, int blk_addr,
864c5a797e0SPrakash Brahmajyosyula 			    int ctype, int transaction)
865c5a797e0SPrakash Brahmajyosyula {
866c5a797e0SPrakash Brahmajyosyula 	u64 req, out_req, lat, cant_alloc;
8670f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
8680f3ce484SRakesh Babu 	struct rvu *rvu;
869c5a797e0SPrakash Brahmajyosyula 	int port;
870c5a797e0SPrakash Brahmajyosyula 
8710f3ce484SRakesh Babu 	if (blk_addr == BLKADDR_NDC_NPA0) {
8720f3ce484SRakesh Babu 		rvu = s->private;
8730f3ce484SRakesh Babu 	} else {
8740f3ce484SRakesh Babu 		nix_hw = s->private;
8750f3ce484SRakesh Babu 		rvu = nix_hw->rvu;
8760f3ce484SRakesh Babu 	}
8770f3ce484SRakesh Babu 
878c5a797e0SPrakash Brahmajyosyula 	for (port = 0; port < NDC_MAX_PORT; port++) {
879c5a797e0SPrakash Brahmajyosyula 		req = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_REQ_PC
880c5a797e0SPrakash Brahmajyosyula 						(port, ctype, transaction));
881c5a797e0SPrakash Brahmajyosyula 		lat = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_LAT_PC
882c5a797e0SPrakash Brahmajyosyula 						(port, ctype, transaction));
883c5a797e0SPrakash Brahmajyosyula 		out_req = rvu_read64(rvu, blk_addr,
884c5a797e0SPrakash Brahmajyosyula 				     NDC_AF_PORTX_RTX_RWX_OSTDN_PC
885c5a797e0SPrakash Brahmajyosyula 				     (port, ctype, transaction));
886c5a797e0SPrakash Brahmajyosyula 		cant_alloc = rvu_read64(rvu, blk_addr,
887c5a797e0SPrakash Brahmajyosyula 					NDC_AF_PORTX_RTX_CANT_ALLOC_PC
888c5a797e0SPrakash Brahmajyosyula 					(port, transaction));
889c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\nPort:%d\n", port);
890c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tTotal Requests:\t\t%lld\n", req);
891c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tTotal Time Taken:\t%lld cycles\n", lat);
892c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tAvg Latency:\t\t%lld cycles\n", lat / req);
893c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tOutstanding Requests:\t%lld\n", out_req);
894c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tCant Alloc Requests:\t%lld\n", cant_alloc);
895c5a797e0SPrakash Brahmajyosyula 	}
896c5a797e0SPrakash Brahmajyosyula }
897c5a797e0SPrakash Brahmajyosyula 
898c5a797e0SPrakash Brahmajyosyula static int ndc_blk_cache_stats(struct seq_file *s, int idx, int blk_addr)
899c5a797e0SPrakash Brahmajyosyula {
900c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** CACHE mode read stats *****\n");
901c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, CACHING, NDC_READ_TRANS);
902c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** CACHE mode write stats *****\n");
903c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, CACHING, NDC_WRITE_TRANS);
904c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** BY-PASS mode read stats *****\n");
905c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, BYPASS, NDC_READ_TRANS);
906c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** BY-PASS mode write stats *****\n");
907c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, BYPASS, NDC_WRITE_TRANS);
908c5a797e0SPrakash Brahmajyosyula 	return 0;
909c5a797e0SPrakash Brahmajyosyula }
910c5a797e0SPrakash Brahmajyosyula 
911c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_npa_ndc_cache_display(struct seq_file *filp, void *unused)
912c5a797e0SPrakash Brahmajyosyula {
913c5a797e0SPrakash Brahmajyosyula 	return ndc_blk_cache_stats(filp, NPA0_U, BLKADDR_NDC_NPA0);
914c5a797e0SPrakash Brahmajyosyula }
915c5a797e0SPrakash Brahmajyosyula 
916c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(npa_ndc_cache, npa_ndc_cache_display, NULL);
917c5a797e0SPrakash Brahmajyosyula 
918c5a797e0SPrakash Brahmajyosyula static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
919c5a797e0SPrakash Brahmajyosyula {
9200f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
9210f3ce484SRakesh Babu 	struct rvu *rvu;
922c5a797e0SPrakash Brahmajyosyula 	int bank, max_bank;
923c5a797e0SPrakash Brahmajyosyula 
9240f3ce484SRakesh Babu 	if (blk_addr == BLKADDR_NDC_NPA0) {
9250f3ce484SRakesh Babu 		rvu = s->private;
9260f3ce484SRakesh Babu 	} else {
9270f3ce484SRakesh Babu 		nix_hw = s->private;
9280f3ce484SRakesh Babu 		rvu = nix_hw->rvu;
9290f3ce484SRakesh Babu 	}
9300f3ce484SRakesh Babu 
931c5a797e0SPrakash Brahmajyosyula 	max_bank = NDC_MAX_BANK(rvu, blk_addr);
932c5a797e0SPrakash Brahmajyosyula 	for (bank = 0; bank < max_bank; bank++) {
933c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "BANK:%d\n", bank);
934c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tHits:\t%lld\n",
935c5a797e0SPrakash Brahmajyosyula 			   (u64)rvu_read64(rvu, blk_addr,
936c5a797e0SPrakash Brahmajyosyula 			   NDC_AF_BANKX_HIT_PC(bank)));
937c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tMiss:\t%lld\n",
938c5a797e0SPrakash Brahmajyosyula 			   (u64)rvu_read64(rvu, blk_addr,
939c5a797e0SPrakash Brahmajyosyula 			    NDC_AF_BANKX_MISS_PC(bank)));
940c5a797e0SPrakash Brahmajyosyula 	}
941c5a797e0SPrakash Brahmajyosyula 	return 0;
942c5a797e0SPrakash Brahmajyosyula }
943c5a797e0SPrakash Brahmajyosyula 
944c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_rx_cache_display(struct seq_file *filp, void *unused)
945c5a797e0SPrakash Brahmajyosyula {
9460f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
9470f3ce484SRakesh Babu 	int blkaddr = 0;
9480f3ce484SRakesh Babu 	int ndc_idx = 0;
9490f3ce484SRakesh Babu 
9500f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
9510f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
9520f3ce484SRakesh Babu 	ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_RX : NIX0_RX);
9530f3ce484SRakesh Babu 
9540f3ce484SRakesh Babu 	return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
955c5a797e0SPrakash Brahmajyosyula }
956c5a797e0SPrakash Brahmajyosyula 
957c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_cache, nix_ndc_rx_cache_display, NULL);
958c5a797e0SPrakash Brahmajyosyula 
959c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_tx_cache_display(struct seq_file *filp, void *unused)
960c5a797e0SPrakash Brahmajyosyula {
9610f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
9620f3ce484SRakesh Babu 	int blkaddr = 0;
9630f3ce484SRakesh Babu 	int ndc_idx = 0;
9640f3ce484SRakesh Babu 
9650f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
9660f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
9670f3ce484SRakesh Babu 	ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_TX : NIX0_TX);
9680f3ce484SRakesh Babu 
9690f3ce484SRakesh Babu 	return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
970c5a797e0SPrakash Brahmajyosyula }
971c5a797e0SPrakash Brahmajyosyula 
972c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_cache, nix_ndc_tx_cache_display, NULL);
973c5a797e0SPrakash Brahmajyosyula 
974c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_npa_ndc_hits_miss_display(struct seq_file *filp,
975c5a797e0SPrakash Brahmajyosyula 					     void *unused)
976c5a797e0SPrakash Brahmajyosyula {
977c5a797e0SPrakash Brahmajyosyula 	return ndc_blk_hits_miss_stats(filp, NPA0_U, BLKADDR_NDC_NPA0);
978c5a797e0SPrakash Brahmajyosyula }
979c5a797e0SPrakash Brahmajyosyula 
980c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(npa_ndc_hits_miss, npa_ndc_hits_miss_display, NULL);
981c5a797e0SPrakash Brahmajyosyula 
982c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_rx_hits_miss_display(struct seq_file *filp,
983c5a797e0SPrakash Brahmajyosyula 						void *unused)
984c5a797e0SPrakash Brahmajyosyula {
9850f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
9860f3ce484SRakesh Babu 	int ndc_idx = NPA0_U;
9870f3ce484SRakesh Babu 	int blkaddr = 0;
9880f3ce484SRakesh Babu 
9890f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
9900f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
9910f3ce484SRakesh Babu 
9920f3ce484SRakesh Babu 	return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
993c5a797e0SPrakash Brahmajyosyula }
994c5a797e0SPrakash Brahmajyosyula 
995c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_hits_miss, nix_ndc_rx_hits_miss_display, NULL);
996c5a797e0SPrakash Brahmajyosyula 
997c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_tx_hits_miss_display(struct seq_file *filp,
998c5a797e0SPrakash Brahmajyosyula 						void *unused)
999c5a797e0SPrakash Brahmajyosyula {
10000f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
10010f3ce484SRakesh Babu 	int ndc_idx = NPA0_U;
10020f3ce484SRakesh Babu 	int blkaddr = 0;
10030f3ce484SRakesh Babu 
10040f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
10050f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
10060f3ce484SRakesh Babu 
10070f3ce484SRakesh Babu 	return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
1008c5a797e0SPrakash Brahmajyosyula }
1009c5a797e0SPrakash Brahmajyosyula 
1010c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_hits_miss, nix_ndc_tx_hits_miss_display, NULL);
1011c5a797e0SPrakash Brahmajyosyula 
10123feac505SGeetha sowjanya static void print_nix_cn10k_sq_ctx(struct seq_file *m,
10133feac505SGeetha sowjanya 				   struct nix_cn10k_sq_ctx_s *sq_ctx)
10143feac505SGeetha sowjanya {
10153feac505SGeetha sowjanya 	seq_printf(m, "W0: ena \t\t\t%d\nW0: qint_idx \t\t\t%d\n",
10163feac505SGeetha sowjanya 		   sq_ctx->ena, sq_ctx->qint_idx);
10173feac505SGeetha sowjanya 	seq_printf(m, "W0: substream \t\t\t0x%03x\nW0: sdp_mcast \t\t\t%d\n",
10183feac505SGeetha sowjanya 		   sq_ctx->substream, sq_ctx->sdp_mcast);
10193feac505SGeetha sowjanya 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: sqe_way_mask \t\t%d\n\n",
10203feac505SGeetha sowjanya 		   sq_ctx->cq, sq_ctx->sqe_way_mask);
10213feac505SGeetha sowjanya 
10223feac505SGeetha sowjanya 	seq_printf(m, "W1: smq \t\t\t%d\nW1: cq_ena \t\t\t%d\nW1: xoff\t\t\t%d\n",
10233feac505SGeetha sowjanya 		   sq_ctx->smq, sq_ctx->cq_ena, sq_ctx->xoff);
10243feac505SGeetha sowjanya 	seq_printf(m, "W1: sso_ena \t\t\t%d\nW1: smq_rr_weight\t\t%d\n",
10253feac505SGeetha sowjanya 		   sq_ctx->sso_ena, sq_ctx->smq_rr_weight);
10263feac505SGeetha sowjanya 	seq_printf(m, "W1: default_chan\t\t%d\nW1: sqb_count\t\t\t%d\n\n",
10273feac505SGeetha sowjanya 		   sq_ctx->default_chan, sq_ctx->sqb_count);
10283feac505SGeetha sowjanya 
10293feac505SGeetha sowjanya 	seq_printf(m, "W2: smq_rr_count_lb \t\t%d\n", sq_ctx->smq_rr_count_lb);
10303feac505SGeetha sowjanya 	seq_printf(m, "W2: smq_rr_count_ub \t\t%d\n", sq_ctx->smq_rr_count_ub);
10313feac505SGeetha sowjanya 	seq_printf(m, "W2: sqb_aura \t\t\t%d\nW2: sq_int \t\t\t%d\n",
10323feac505SGeetha sowjanya 		   sq_ctx->sqb_aura, sq_ctx->sq_int);
10333feac505SGeetha sowjanya 	seq_printf(m, "W2: sq_int_ena \t\t\t%d\nW2: sqe_stype \t\t\t%d\n",
10343feac505SGeetha sowjanya 		   sq_ctx->sq_int_ena, sq_ctx->sqe_stype);
10353feac505SGeetha sowjanya 
10363feac505SGeetha sowjanya 	seq_printf(m, "W3: max_sqe_size\t\t%d\nW3: cq_limit\t\t\t%d\n",
10373feac505SGeetha sowjanya 		   sq_ctx->max_sqe_size, sq_ctx->cq_limit);
10383feac505SGeetha sowjanya 	seq_printf(m, "W3: lmt_dis \t\t\t%d\nW3: mnq_dis \t\t\t%d\n",
10393feac505SGeetha sowjanya 		   sq_ctx->mnq_dis, sq_ctx->lmt_dis);
10403feac505SGeetha sowjanya 	seq_printf(m, "W3: smq_next_sq\t\t\t%d\nW3: smq_lso_segnum\t\t%d\n",
10413feac505SGeetha sowjanya 		   sq_ctx->smq_next_sq, sq_ctx->smq_lso_segnum);
10423feac505SGeetha sowjanya 	seq_printf(m, "W3: tail_offset \t\t%d\nW3: smenq_offset\t\t%d\n",
10433feac505SGeetha sowjanya 		   sq_ctx->tail_offset, sq_ctx->smenq_offset);
10443feac505SGeetha sowjanya 	seq_printf(m, "W3: head_offset\t\t\t%d\nW3: smenq_next_sqb_vld\t\t%d\n\n",
10453feac505SGeetha sowjanya 		   sq_ctx->head_offset, sq_ctx->smenq_next_sqb_vld);
10463feac505SGeetha sowjanya 
10473feac505SGeetha sowjanya 	seq_printf(m, "W4: next_sqb \t\t\t%llx\n\n", sq_ctx->next_sqb);
10483feac505SGeetha sowjanya 	seq_printf(m, "W5: tail_sqb \t\t\t%llx\n\n", sq_ctx->tail_sqb);
10493feac505SGeetha sowjanya 	seq_printf(m, "W6: smenq_sqb \t\t\t%llx\n\n", sq_ctx->smenq_sqb);
10503feac505SGeetha sowjanya 	seq_printf(m, "W7: smenq_next_sqb \t\t%llx\n\n",
10513feac505SGeetha sowjanya 		   sq_ctx->smenq_next_sqb);
10523feac505SGeetha sowjanya 
10533feac505SGeetha sowjanya 	seq_printf(m, "W8: head_sqb\t\t\t%llx\n\n", sq_ctx->head_sqb);
10543feac505SGeetha sowjanya 
10553feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_total\t\t%d\n", sq_ctx->vfi_lso_total);
10563feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_sizem1\t\t%d\nW9: vfi_lso_sb\t\t\t%d\n",
10573feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_sizem1, sq_ctx->vfi_lso_sb);
10583feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_mps\t\t\t%d\nW9: vfi_lso_vlan0_ins_ena\t%d\n",
10593feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_mps, sq_ctx->vfi_lso_vlan0_ins_ena);
10603feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_vlan1_ins_ena\t%d\nW9: vfi_lso_vld \t\t%d\n\n",
10613feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_vld, sq_ctx->vfi_lso_vlan1_ins_ena);
10623feac505SGeetha sowjanya 
10633feac505SGeetha sowjanya 	seq_printf(m, "W10: scm_lso_rem \t\t%llu\n\n",
10643feac505SGeetha sowjanya 		   (u64)sq_ctx->scm_lso_rem);
10653feac505SGeetha sowjanya 	seq_printf(m, "W11: octs \t\t\t%llu\n\n", (u64)sq_ctx->octs);
10663feac505SGeetha sowjanya 	seq_printf(m, "W12: pkts \t\t\t%llu\n\n", (u64)sq_ctx->pkts);
10673feac505SGeetha sowjanya 	seq_printf(m, "W14: dropped_octs \t\t%llu\n\n",
10683feac505SGeetha sowjanya 		   (u64)sq_ctx->dropped_octs);
10693feac505SGeetha sowjanya 	seq_printf(m, "W15: dropped_pkts \t\t%llu\n\n",
10703feac505SGeetha sowjanya 		   (u64)sq_ctx->dropped_pkts);
10713feac505SGeetha sowjanya }
10723feac505SGeetha sowjanya 
107302e202c3SPrakash Brahmajyosyula /* Dumps given nix_sq's context */
107402e202c3SPrakash Brahmajyosyula static void print_nix_sq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
107502e202c3SPrakash Brahmajyosyula {
107602e202c3SPrakash Brahmajyosyula 	struct nix_sq_ctx_s *sq_ctx = &rsp->sq;
10773feac505SGeetha sowjanya 	struct nix_hw *nix_hw = m->private;
10783feac505SGeetha sowjanya 	struct rvu *rvu = nix_hw->rvu;
107902e202c3SPrakash Brahmajyosyula 
10803feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu)) {
10813feac505SGeetha sowjanya 		print_nix_cn10k_sq_ctx(m, (struct nix_cn10k_sq_ctx_s *)sq_ctx);
10823feac505SGeetha sowjanya 		return;
10833feac505SGeetha sowjanya 	}
108402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: sqe_way_mask \t\t%d\nW0: cq \t\t\t\t%d\n",
108502e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqe_way_mask, sq_ctx->cq);
108602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: sdp_mcast \t\t\t%d\nW0: substream \t\t\t0x%03x\n",
108702e202c3SPrakash Brahmajyosyula 		   sq_ctx->sdp_mcast, sq_ctx->substream);
108802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: qint_idx \t\t\t%d\nW0: ena \t\t\t%d\n\n",
108902e202c3SPrakash Brahmajyosyula 		   sq_ctx->qint_idx, sq_ctx->ena);
109002e202c3SPrakash Brahmajyosyula 
109102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: sqb_count \t\t\t%d\nW1: default_chan \t\t%d\n",
109202e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqb_count, sq_ctx->default_chan);
109302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: smq_rr_quantum \t\t%d\nW1: sso_ena \t\t\t%d\n",
109402e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_rr_quantum, sq_ctx->sso_ena);
109502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: xoff \t\t\t%d\nW1: cq_ena \t\t\t%d\nW1: smq\t\t\t\t%d\n\n",
109602e202c3SPrakash Brahmajyosyula 		   sq_ctx->xoff, sq_ctx->cq_ena, sq_ctx->smq);
109702e202c3SPrakash Brahmajyosyula 
109802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: sqe_stype \t\t\t%d\nW2: sq_int_ena \t\t\t%d\n",
109902e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqe_stype, sq_ctx->sq_int_ena);
110002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: sq_int \t\t\t%d\nW2: sqb_aura \t\t\t%d\n",
110102e202c3SPrakash Brahmajyosyula 		   sq_ctx->sq_int, sq_ctx->sqb_aura);
110202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: smq_rr_count \t\t%d\n\n", sq_ctx->smq_rr_count);
110302e202c3SPrakash Brahmajyosyula 
110402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smq_next_sq_vld\t\t%d\nW3: smq_pend\t\t\t%d\n",
110502e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_next_sq_vld, sq_ctx->smq_pend);
110602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smenq_next_sqb_vld \t\t%d\nW3: head_offset\t\t\t%d\n",
110702e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_next_sqb_vld, sq_ctx->head_offset);
110802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smenq_offset\t\t%d\nW3: tail_offset\t\t\t%d\n",
110902e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_offset, sq_ctx->tail_offset);
111002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smq_lso_segnum \t\t%d\nW3: smq_next_sq\t\t\t%d\n",
111102e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_lso_segnum, sq_ctx->smq_next_sq);
111202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: mnq_dis \t\t\t%d\nW3: lmt_dis \t\t\t%d\n",
111302e202c3SPrakash Brahmajyosyula 		   sq_ctx->mnq_dis, sq_ctx->lmt_dis);
111402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: cq_limit\t\t\t%d\nW3: max_sqe_size\t\t%d\n\n",
111502e202c3SPrakash Brahmajyosyula 		   sq_ctx->cq_limit, sq_ctx->max_sqe_size);
111602e202c3SPrakash Brahmajyosyula 
111702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: next_sqb \t\t\t%llx\n\n", sq_ctx->next_sqb);
111802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: tail_sqb \t\t\t%llx\n\n", sq_ctx->tail_sqb);
111902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W6: smenq_sqb \t\t\t%llx\n\n", sq_ctx->smenq_sqb);
112002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W7: smenq_next_sqb \t\t%llx\n\n",
112102e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_next_sqb);
112202e202c3SPrakash Brahmajyosyula 
112302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W8: head_sqb\t\t\t%llx\n\n", sq_ctx->head_sqb);
112402e202c3SPrakash Brahmajyosyula 
112502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_vld\t\t\t%d\nW9: vfi_lso_vlan1_ins_ena\t%d\n",
112602e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_vld, sq_ctx->vfi_lso_vlan1_ins_ena);
112702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_vlan0_ins_ena\t%d\nW9: vfi_lso_mps\t\t\t%d\n",
112802e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_vlan0_ins_ena, sq_ctx->vfi_lso_mps);
112902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_sb\t\t\t%d\nW9: vfi_lso_sizem1\t\t%d\n",
113002e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_sb, sq_ctx->vfi_lso_sizem1);
113102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_total\t\t%d\n\n", sq_ctx->vfi_lso_total);
113202e202c3SPrakash Brahmajyosyula 
113302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W10: scm_lso_rem \t\t%llu\n\n",
113402e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->scm_lso_rem);
113502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W11: octs \t\t\t%llu\n\n", (u64)sq_ctx->octs);
113602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W12: pkts \t\t\t%llu\n\n", (u64)sq_ctx->pkts);
113702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W14: dropped_octs \t\t%llu\n\n",
113802e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->dropped_octs);
113902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W15: dropped_pkts \t\t%llu\n\n",
114002e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->dropped_pkts);
114102e202c3SPrakash Brahmajyosyula }
114202e202c3SPrakash Brahmajyosyula 
11433feac505SGeetha sowjanya static void print_nix_cn10k_rq_ctx(struct seq_file *m,
11443feac505SGeetha sowjanya 				   struct nix_cn10k_rq_ctx_s *rq_ctx)
11453feac505SGeetha sowjanya {
11463feac505SGeetha sowjanya 	seq_printf(m, "W0: ena \t\t\t%d\nW0: sso_ena \t\t\t%d\n",
11473feac505SGeetha sowjanya 		   rq_ctx->ena, rq_ctx->sso_ena);
11483feac505SGeetha sowjanya 	seq_printf(m, "W0: ipsech_ena \t\t\t%d\nW0: ena_wqwd \t\t\t%d\n",
11493feac505SGeetha sowjanya 		   rq_ctx->ipsech_ena, rq_ctx->ena_wqwd);
11503feac505SGeetha sowjanya 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: lenerr_dis \t\t\t%d\n",
11513feac505SGeetha sowjanya 		   rq_ctx->cq, rq_ctx->lenerr_dis);
11523feac505SGeetha sowjanya 	seq_printf(m, "W0: csum_il4_dis \t\t%d\nW0: csum_ol4_dis \t\t%d\n",
11533feac505SGeetha sowjanya 		   rq_ctx->csum_il4_dis, rq_ctx->csum_ol4_dis);
11543feac505SGeetha sowjanya 	seq_printf(m, "W0: len_il4_dis \t\t%d\nW0: len_il3_dis \t\t%d\n",
11553feac505SGeetha sowjanya 		   rq_ctx->len_il4_dis, rq_ctx->len_il3_dis);
11563feac505SGeetha sowjanya 	seq_printf(m, "W0: len_ol4_dis \t\t%d\nW0: len_ol3_dis \t\t%d\n",
11573feac505SGeetha sowjanya 		   rq_ctx->len_ol4_dis, rq_ctx->len_ol3_dis);
11583feac505SGeetha sowjanya 	seq_printf(m, "W0: wqe_aura \t\t\t%d\n\n", rq_ctx->wqe_aura);
11593feac505SGeetha sowjanya 
11603feac505SGeetha sowjanya 	seq_printf(m, "W1: spb_aura \t\t\t%d\nW1: lpb_aura \t\t\t%d\n",
11613feac505SGeetha sowjanya 		   rq_ctx->spb_aura, rq_ctx->lpb_aura);
11623feac505SGeetha sowjanya 	seq_printf(m, "W1: spb_aura \t\t\t%d\n", rq_ctx->spb_aura);
11633feac505SGeetha sowjanya 	seq_printf(m, "W1: sso_grp \t\t\t%d\nW1: sso_tt \t\t\t%d\n",
11643feac505SGeetha sowjanya 		   rq_ctx->sso_grp, rq_ctx->sso_tt);
11653feac505SGeetha sowjanya 	seq_printf(m, "W1: pb_caching \t\t\t%d\nW1: wqe_caching \t\t%d\n",
11663feac505SGeetha sowjanya 		   rq_ctx->pb_caching, rq_ctx->wqe_caching);
11673feac505SGeetha sowjanya 	seq_printf(m, "W1: xqe_drop_ena \t\t%d\nW1: spb_drop_ena \t\t%d\n",
11683feac505SGeetha sowjanya 		   rq_ctx->xqe_drop_ena, rq_ctx->spb_drop_ena);
11693feac505SGeetha sowjanya 	seq_printf(m, "W1: lpb_drop_ena \t\t%d\nW1: pb_stashing \t\t%d\n",
11703feac505SGeetha sowjanya 		   rq_ctx->lpb_drop_ena, rq_ctx->pb_stashing);
11713feac505SGeetha sowjanya 	seq_printf(m, "W1: ipsecd_drop_ena \t\t%d\nW1: chi_ena \t\t\t%d\n\n",
11723feac505SGeetha sowjanya 		   rq_ctx->ipsecd_drop_ena, rq_ctx->chi_ena);
11733feac505SGeetha sowjanya 
11743feac505SGeetha sowjanya 	seq_printf(m, "W2: band_prof_id \t\t%d\n", rq_ctx->band_prof_id);
11753feac505SGeetha sowjanya 	seq_printf(m, "W2: policer_ena \t\t%d\n", rq_ctx->policer_ena);
11763feac505SGeetha sowjanya 	seq_printf(m, "W2: spb_sizem1 \t\t\t%d\n", rq_ctx->spb_sizem1);
11773feac505SGeetha sowjanya 	seq_printf(m, "W2: wqe_skip \t\t\t%d\nW2: sqb_ena \t\t\t%d\n",
11783feac505SGeetha sowjanya 		   rq_ctx->wqe_skip, rq_ctx->spb_ena);
11793feac505SGeetha sowjanya 	seq_printf(m, "W2: lpb_size1 \t\t\t%d\nW2: first_skip \t\t\t%d\n",
11803feac505SGeetha sowjanya 		   rq_ctx->lpb_sizem1, rq_ctx->first_skip);
11813feac505SGeetha sowjanya 	seq_printf(m, "W2: later_skip\t\t\t%d\nW2: xqe_imm_size\t\t%d\n",
11823feac505SGeetha sowjanya 		   rq_ctx->later_skip, rq_ctx->xqe_imm_size);
11833feac505SGeetha sowjanya 	seq_printf(m, "W2: xqe_imm_copy \t\t%d\nW2: xqe_hdr_split \t\t%d\n\n",
11843feac505SGeetha sowjanya 		   rq_ctx->xqe_imm_copy, rq_ctx->xqe_hdr_split);
11853feac505SGeetha sowjanya 
11863feac505SGeetha sowjanya 	seq_printf(m, "W3: xqe_drop \t\t\t%d\nW3: xqe_pass \t\t\t%d\n",
11873feac505SGeetha sowjanya 		   rq_ctx->xqe_drop, rq_ctx->xqe_pass);
11883feac505SGeetha sowjanya 	seq_printf(m, "W3: wqe_pool_drop \t\t%d\nW3: wqe_pool_pass \t\t%d\n",
11893feac505SGeetha sowjanya 		   rq_ctx->wqe_pool_drop, rq_ctx->wqe_pool_pass);
11903feac505SGeetha sowjanya 	seq_printf(m, "W3: spb_pool_drop \t\t%d\nW3: spb_pool_pass \t\t%d\n",
11913feac505SGeetha sowjanya 		   rq_ctx->spb_pool_drop, rq_ctx->spb_pool_pass);
11923feac505SGeetha sowjanya 	seq_printf(m, "W3: spb_aura_drop \t\t%d\nW3: spb_aura_pass \t\t%d\n\n",
11933feac505SGeetha sowjanya 		   rq_ctx->spb_aura_pass, rq_ctx->spb_aura_drop);
11943feac505SGeetha sowjanya 
11953feac505SGeetha sowjanya 	seq_printf(m, "W4: lpb_aura_drop \t\t%d\nW3: lpb_aura_pass \t\t%d\n",
11963feac505SGeetha sowjanya 		   rq_ctx->lpb_aura_pass, rq_ctx->lpb_aura_drop);
11973feac505SGeetha sowjanya 	seq_printf(m, "W4: lpb_pool_drop \t\t%d\nW3: lpb_pool_pass \t\t%d\n",
11983feac505SGeetha sowjanya 		   rq_ctx->lpb_pool_drop, rq_ctx->lpb_pool_pass);
11993feac505SGeetha sowjanya 	seq_printf(m, "W4: rq_int \t\t\t%d\nW4: rq_int_ena\t\t\t%d\n",
12003feac505SGeetha sowjanya 		   rq_ctx->rq_int, rq_ctx->rq_int_ena);
12013feac505SGeetha sowjanya 	seq_printf(m, "W4: qint_idx \t\t\t%d\n\n", rq_ctx->qint_idx);
12023feac505SGeetha sowjanya 
12033feac505SGeetha sowjanya 	seq_printf(m, "W5: ltag \t\t\t%d\nW5: good_utag \t\t\t%d\n",
12043feac505SGeetha sowjanya 		   rq_ctx->ltag, rq_ctx->good_utag);
12053feac505SGeetha sowjanya 	seq_printf(m, "W5: bad_utag \t\t\t%d\nW5: flow_tagw \t\t\t%d\n",
12063feac505SGeetha sowjanya 		   rq_ctx->bad_utag, rq_ctx->flow_tagw);
12073feac505SGeetha sowjanya 	seq_printf(m, "W5: ipsec_vwqe \t\t\t%d\nW5: vwqe_ena \t\t\t%d\n",
12083feac505SGeetha sowjanya 		   rq_ctx->ipsec_vwqe, rq_ctx->vwqe_ena);
12093feac505SGeetha sowjanya 	seq_printf(m, "W5: vwqe_wait \t\t\t%d\nW5: max_vsize_exp\t\t%d\n",
12103feac505SGeetha sowjanya 		   rq_ctx->vwqe_wait, rq_ctx->max_vsize_exp);
12113feac505SGeetha sowjanya 	seq_printf(m, "W5: vwqe_skip \t\t\t%d\n\n", rq_ctx->vwqe_skip);
12123feac505SGeetha sowjanya 
12133feac505SGeetha sowjanya 	seq_printf(m, "W6: octs \t\t\t%llu\n\n", (u64)rq_ctx->octs);
12143feac505SGeetha sowjanya 	seq_printf(m, "W7: pkts \t\t\t%llu\n\n", (u64)rq_ctx->pkts);
12153feac505SGeetha sowjanya 	seq_printf(m, "W8: drop_octs \t\t\t%llu\n\n", (u64)rq_ctx->drop_octs);
12163feac505SGeetha sowjanya 	seq_printf(m, "W9: drop_pkts \t\t\t%llu\n\n", (u64)rq_ctx->drop_pkts);
12173feac505SGeetha sowjanya 	seq_printf(m, "W10: re_pkts \t\t\t%llu\n", (u64)rq_ctx->re_pkts);
12183feac505SGeetha sowjanya }
12193feac505SGeetha sowjanya 
122002e202c3SPrakash Brahmajyosyula /* Dumps given nix_rq's context */
122102e202c3SPrakash Brahmajyosyula static void print_nix_rq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
122202e202c3SPrakash Brahmajyosyula {
122302e202c3SPrakash Brahmajyosyula 	struct nix_rq_ctx_s *rq_ctx = &rsp->rq;
12243feac505SGeetha sowjanya 	struct nix_hw *nix_hw = m->private;
12253feac505SGeetha sowjanya 	struct rvu *rvu = nix_hw->rvu;
12263feac505SGeetha sowjanya 
12273feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu)) {
12283feac505SGeetha sowjanya 		print_nix_cn10k_rq_ctx(m, (struct nix_cn10k_rq_ctx_s *)rq_ctx);
12293feac505SGeetha sowjanya 		return;
12303feac505SGeetha sowjanya 	}
123102e202c3SPrakash Brahmajyosyula 
123202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: wqe_aura \t\t\t%d\nW0: substream \t\t\t0x%03x\n",
123302e202c3SPrakash Brahmajyosyula 		   rq_ctx->wqe_aura, rq_ctx->substream);
123402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: ena_wqwd \t\t\t%d\n",
123502e202c3SPrakash Brahmajyosyula 		   rq_ctx->cq, rq_ctx->ena_wqwd);
123602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: ipsech_ena \t\t\t%d\nW0: sso_ena \t\t\t%d\n",
123702e202c3SPrakash Brahmajyosyula 		   rq_ctx->ipsech_ena, rq_ctx->sso_ena);
123802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: ena \t\t\t%d\n\n", rq_ctx->ena);
123902e202c3SPrakash Brahmajyosyula 
124002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: lpb_drop_ena \t\t%d\nW1: spb_drop_ena \t\t%d\n",
124102e202c3SPrakash Brahmajyosyula 		   rq_ctx->lpb_drop_ena, rq_ctx->spb_drop_ena);
124202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: xqe_drop_ena \t\t%d\nW1: wqe_caching \t\t%d\n",
124302e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_drop_ena, rq_ctx->wqe_caching);
124402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: pb_caching \t\t\t%d\nW1: sso_tt \t\t\t%d\n",
124502e202c3SPrakash Brahmajyosyula 		   rq_ctx->pb_caching, rq_ctx->sso_tt);
124602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: sso_grp \t\t\t%d\nW1: lpb_aura \t\t\t%d\n",
124702e202c3SPrakash Brahmajyosyula 		   rq_ctx->sso_grp, rq_ctx->lpb_aura);
124802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: spb_aura \t\t\t%d\n\n", rq_ctx->spb_aura);
124902e202c3SPrakash Brahmajyosyula 
125002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: xqe_hdr_split \t\t%d\nW2: xqe_imm_copy \t\t%d\n",
125102e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_hdr_split, rq_ctx->xqe_imm_copy);
125202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: xqe_imm_size \t\t%d\nW2: later_skip \t\t\t%d\n",
125302e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_imm_size, rq_ctx->later_skip);
125402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: first_skip \t\t\t%d\nW2: lpb_sizem1 \t\t\t%d\n",
125502e202c3SPrakash Brahmajyosyula 		   rq_ctx->first_skip, rq_ctx->lpb_sizem1);
125602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: spb_ena \t\t\t%d\nW2: wqe_skip \t\t\t%d\n",
125702e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_ena, rq_ctx->wqe_skip);
125802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: spb_sizem1 \t\t\t%d\n\n", rq_ctx->spb_sizem1);
125902e202c3SPrakash Brahmajyosyula 
126002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: spb_pool_pass \t\t%d\nW3: spb_pool_drop \t\t%d\n",
126102e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_pool_pass, rq_ctx->spb_pool_drop);
126202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: spb_aura_pass \t\t%d\nW3: spb_aura_drop \t\t%d\n",
126302e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_aura_pass, rq_ctx->spb_aura_drop);
126402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: wqe_pool_pass \t\t%d\nW3: wqe_pool_drop \t\t%d\n",
126502e202c3SPrakash Brahmajyosyula 		   rq_ctx->wqe_pool_pass, rq_ctx->wqe_pool_drop);
126602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: xqe_pass \t\t\t%d\nW3: xqe_drop \t\t\t%d\n\n",
126702e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_pass, rq_ctx->xqe_drop);
126802e202c3SPrakash Brahmajyosyula 
126902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: qint_idx \t\t\t%d\nW4: rq_int_ena \t\t\t%d\n",
127002e202c3SPrakash Brahmajyosyula 		   rq_ctx->qint_idx, rq_ctx->rq_int_ena);
127102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: rq_int \t\t\t%d\nW4: lpb_pool_pass \t\t%d\n",
127202e202c3SPrakash Brahmajyosyula 		   rq_ctx->rq_int, rq_ctx->lpb_pool_pass);
127302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: lpb_pool_drop \t\t%d\nW4: lpb_aura_pass \t\t%d\n",
127402e202c3SPrakash Brahmajyosyula 		   rq_ctx->lpb_pool_drop, rq_ctx->lpb_aura_pass);
127502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: lpb_aura_drop \t\t%d\n\n", rq_ctx->lpb_aura_drop);
127602e202c3SPrakash Brahmajyosyula 
127702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: flow_tagw \t\t\t%d\nW5: bad_utag \t\t\t%d\n",
127802e202c3SPrakash Brahmajyosyula 		   rq_ctx->flow_tagw, rq_ctx->bad_utag);
127902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: good_utag \t\t\t%d\nW5: ltag \t\t\t%d\n\n",
128002e202c3SPrakash Brahmajyosyula 		   rq_ctx->good_utag, rq_ctx->ltag);
128102e202c3SPrakash Brahmajyosyula 
128202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W6: octs \t\t\t%llu\n\n", (u64)rq_ctx->octs);
128302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W7: pkts \t\t\t%llu\n\n", (u64)rq_ctx->pkts);
128402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W8: drop_octs \t\t\t%llu\n\n", (u64)rq_ctx->drop_octs);
128502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: drop_pkts \t\t\t%llu\n\n", (u64)rq_ctx->drop_pkts);
128602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W10: re_pkts \t\t\t%llu\n", (u64)rq_ctx->re_pkts);
128702e202c3SPrakash Brahmajyosyula }
128802e202c3SPrakash Brahmajyosyula 
128902e202c3SPrakash Brahmajyosyula /* Dumps given nix_cq's context */
129002e202c3SPrakash Brahmajyosyula static void print_nix_cq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
129102e202c3SPrakash Brahmajyosyula {
129202e202c3SPrakash Brahmajyosyula 	struct nix_cq_ctx_s *cq_ctx = &rsp->cq;
129302e202c3SPrakash Brahmajyosyula 
129402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: base \t\t\t%llx\n\n", cq_ctx->base);
129502e202c3SPrakash Brahmajyosyula 
129602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: wrptr \t\t\t%llx\n", (u64)cq_ctx->wrptr);
129702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: avg_con \t\t\t%d\nW1: cint_idx \t\t\t%d\n",
129802e202c3SPrakash Brahmajyosyula 		   cq_ctx->avg_con, cq_ctx->cint_idx);
129902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: cq_err \t\t\t%d\nW1: qint_idx \t\t\t%d\n",
130002e202c3SPrakash Brahmajyosyula 		   cq_ctx->cq_err, cq_ctx->qint_idx);
130102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: bpid \t\t\t%d\nW1: bp_ena \t\t\t%d\n\n",
130202e202c3SPrakash Brahmajyosyula 		   cq_ctx->bpid, cq_ctx->bp_ena);
130302e202c3SPrakash Brahmajyosyula 
130402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: update_time \t\t%d\nW2:avg_level \t\t\t%d\n",
130502e202c3SPrakash Brahmajyosyula 		   cq_ctx->update_time, cq_ctx->avg_level);
130602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: head \t\t\t%d\nW2:tail \t\t\t%d\n\n",
130702e202c3SPrakash Brahmajyosyula 		   cq_ctx->head, cq_ctx->tail);
130802e202c3SPrakash Brahmajyosyula 
130902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: cq_err_int_ena \t\t%d\nW3:cq_err_int \t\t\t%d\n",
131002e202c3SPrakash Brahmajyosyula 		   cq_ctx->cq_err_int_ena, cq_ctx->cq_err_int);
131102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: qsize \t\t\t%d\nW3:caching \t\t\t%d\n",
131202e202c3SPrakash Brahmajyosyula 		   cq_ctx->qsize, cq_ctx->caching);
131302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: substream \t\t\t0x%03x\nW3: ena \t\t\t%d\n",
131402e202c3SPrakash Brahmajyosyula 		   cq_ctx->substream, cq_ctx->ena);
131502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: drop_ena \t\t\t%d\nW3: drop \t\t\t%d\n",
131602e202c3SPrakash Brahmajyosyula 		   cq_ctx->drop_ena, cq_ctx->drop);
131702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: bp \t\t\t\t%d\n\n", cq_ctx->bp);
131802e202c3SPrakash Brahmajyosyula }
131902e202c3SPrakash Brahmajyosyula 
132002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
132102e202c3SPrakash Brahmajyosyula 					 void *unused, int ctype)
132202e202c3SPrakash Brahmajyosyula {
132302e202c3SPrakash Brahmajyosyula 	void (*print_nix_ctx)(struct seq_file *filp,
132402e202c3SPrakash Brahmajyosyula 			      struct nix_aq_enq_rsp *rsp) = NULL;
13250f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
13260f3ce484SRakesh Babu 	struct rvu *rvu = nix_hw->rvu;
132702e202c3SPrakash Brahmajyosyula 	struct nix_aq_enq_req aq_req;
132802e202c3SPrakash Brahmajyosyula 	struct nix_aq_enq_rsp rsp;
132902e202c3SPrakash Brahmajyosyula 	char *ctype_string = NULL;
133002e202c3SPrakash Brahmajyosyula 	int qidx, rc, max_id = 0;
133102e202c3SPrakash Brahmajyosyula 	struct rvu_pfvf *pfvf;
133202e202c3SPrakash Brahmajyosyula 	int nixlf, id, all;
133302e202c3SPrakash Brahmajyosyula 	u16 pcifunc;
133402e202c3SPrakash Brahmajyosyula 
133502e202c3SPrakash Brahmajyosyula 	switch (ctype) {
133602e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
133702e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_cq_ctx.lf;
133802e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_cq_ctx.id;
133902e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_cq_ctx.all;
134002e202c3SPrakash Brahmajyosyula 		break;
134102e202c3SPrakash Brahmajyosyula 
134202e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
134302e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_sq_ctx.lf;
134402e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_sq_ctx.id;
134502e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_sq_ctx.all;
134602e202c3SPrakash Brahmajyosyula 		break;
134702e202c3SPrakash Brahmajyosyula 
134802e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
134902e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_rq_ctx.lf;
135002e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_rq_ctx.id;
135102e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_rq_ctx.all;
135202e202c3SPrakash Brahmajyosyula 		break;
135302e202c3SPrakash Brahmajyosyula 
135402e202c3SPrakash Brahmajyosyula 	default:
135502e202c3SPrakash Brahmajyosyula 		return -EINVAL;
135602e202c3SPrakash Brahmajyosyula 	}
135702e202c3SPrakash Brahmajyosyula 
13580f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
135902e202c3SPrakash Brahmajyosyula 		return -EINVAL;
136002e202c3SPrakash Brahmajyosyula 
136102e202c3SPrakash Brahmajyosyula 	pfvf = rvu_get_pfvf(rvu, pcifunc);
136202e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ && !pfvf->sq_ctx) {
136302e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "SQ context is not initialized\n");
136402e202c3SPrakash Brahmajyosyula 		return -EINVAL;
136502e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ && !pfvf->rq_ctx) {
136602e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "RQ context is not initialized\n");
136702e202c3SPrakash Brahmajyosyula 		return -EINVAL;
136802e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ && !pfvf->cq_ctx) {
136902e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "CQ context is not initialized\n");
137002e202c3SPrakash Brahmajyosyula 		return -EINVAL;
137102e202c3SPrakash Brahmajyosyula 	}
137202e202c3SPrakash Brahmajyosyula 
137302e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ) {
137402e202c3SPrakash Brahmajyosyula 		max_id = pfvf->sq_ctx->qsize;
137502e202c3SPrakash Brahmajyosyula 		ctype_string = "sq";
137602e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_sq_ctx;
137702e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ) {
137802e202c3SPrakash Brahmajyosyula 		max_id = pfvf->rq_ctx->qsize;
137902e202c3SPrakash Brahmajyosyula 		ctype_string = "rq";
138002e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_rq_ctx;
138102e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ) {
138202e202c3SPrakash Brahmajyosyula 		max_id = pfvf->cq_ctx->qsize;
138302e202c3SPrakash Brahmajyosyula 		ctype_string = "cq";
138402e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_cq_ctx;
138502e202c3SPrakash Brahmajyosyula 	}
138602e202c3SPrakash Brahmajyosyula 
138702e202c3SPrakash Brahmajyosyula 	memset(&aq_req, 0, sizeof(struct nix_aq_enq_req));
138802e202c3SPrakash Brahmajyosyula 	aq_req.hdr.pcifunc = pcifunc;
138902e202c3SPrakash Brahmajyosyula 	aq_req.ctype = ctype;
139002e202c3SPrakash Brahmajyosyula 	aq_req.op = NIX_AQ_INSTOP_READ;
139102e202c3SPrakash Brahmajyosyula 	if (all)
139202e202c3SPrakash Brahmajyosyula 		id = 0;
139302e202c3SPrakash Brahmajyosyula 	else
139402e202c3SPrakash Brahmajyosyula 		max_id = id + 1;
139502e202c3SPrakash Brahmajyosyula 	for (qidx = id; qidx < max_id; qidx++) {
139602e202c3SPrakash Brahmajyosyula 		aq_req.qidx = qidx;
139702e202c3SPrakash Brahmajyosyula 		seq_printf(filp, "=====%s_ctx for nixlf:%d and qidx:%d is=====\n",
139802e202c3SPrakash Brahmajyosyula 			   ctype_string, nixlf, aq_req.qidx);
139902e202c3SPrakash Brahmajyosyula 		rc = rvu_mbox_handler_nix_aq_enq(rvu, &aq_req, &rsp);
140002e202c3SPrakash Brahmajyosyula 		if (rc) {
140102e202c3SPrakash Brahmajyosyula 			seq_puts(filp, "Failed to read the context\n");
140202e202c3SPrakash Brahmajyosyula 			return -EINVAL;
140302e202c3SPrakash Brahmajyosyula 		}
140402e202c3SPrakash Brahmajyosyula 		print_nix_ctx(filp, &rsp);
140502e202c3SPrakash Brahmajyosyula 	}
140602e202c3SPrakash Brahmajyosyula 	return 0;
140702e202c3SPrakash Brahmajyosyula }
140802e202c3SPrakash Brahmajyosyula 
140902e202c3SPrakash Brahmajyosyula static int write_nix_queue_ctx(struct rvu *rvu, bool all, int nixlf,
14100f3ce484SRakesh Babu 			       int id, int ctype, char *ctype_string,
14110f3ce484SRakesh Babu 			       struct seq_file *m)
141202e202c3SPrakash Brahmajyosyula {
14130f3ce484SRakesh Babu 	struct nix_hw *nix_hw = m->private;
141402e202c3SPrakash Brahmajyosyula 	struct rvu_pfvf *pfvf;
141502e202c3SPrakash Brahmajyosyula 	int max_id = 0;
141602e202c3SPrakash Brahmajyosyula 	u16 pcifunc;
141702e202c3SPrakash Brahmajyosyula 
14180f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
141902e202c3SPrakash Brahmajyosyula 		return -EINVAL;
142002e202c3SPrakash Brahmajyosyula 
142102e202c3SPrakash Brahmajyosyula 	pfvf = rvu_get_pfvf(rvu, pcifunc);
142202e202c3SPrakash Brahmajyosyula 
142302e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ) {
142402e202c3SPrakash Brahmajyosyula 		if (!pfvf->sq_ctx) {
142502e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "SQ context is not initialized\n");
142602e202c3SPrakash Brahmajyosyula 			return -EINVAL;
142702e202c3SPrakash Brahmajyosyula 		}
142802e202c3SPrakash Brahmajyosyula 		max_id = pfvf->sq_ctx->qsize;
142902e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ) {
143002e202c3SPrakash Brahmajyosyula 		if (!pfvf->rq_ctx) {
143102e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "RQ context is not initialized\n");
143202e202c3SPrakash Brahmajyosyula 			return -EINVAL;
143302e202c3SPrakash Brahmajyosyula 		}
143402e202c3SPrakash Brahmajyosyula 		max_id = pfvf->rq_ctx->qsize;
143502e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ) {
143602e202c3SPrakash Brahmajyosyula 		if (!pfvf->cq_ctx) {
143702e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "CQ context is not initialized\n");
143802e202c3SPrakash Brahmajyosyula 			return -EINVAL;
143902e202c3SPrakash Brahmajyosyula 		}
144002e202c3SPrakash Brahmajyosyula 		max_id = pfvf->cq_ctx->qsize;
144102e202c3SPrakash Brahmajyosyula 	}
144202e202c3SPrakash Brahmajyosyula 
144302e202c3SPrakash Brahmajyosyula 	if (id < 0 || id >= max_id) {
144402e202c3SPrakash Brahmajyosyula 		dev_warn(rvu->dev, "Invalid %s_ctx valid range 0-%d\n",
144502e202c3SPrakash Brahmajyosyula 			 ctype_string, max_id - 1);
144602e202c3SPrakash Brahmajyosyula 		return -EINVAL;
144702e202c3SPrakash Brahmajyosyula 	}
144802e202c3SPrakash Brahmajyosyula 	switch (ctype) {
144902e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
145002e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.lf = nixlf;
145102e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.id = id;
145202e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.all = all;
145302e202c3SPrakash Brahmajyosyula 		break;
145402e202c3SPrakash Brahmajyosyula 
145502e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
145602e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.lf = nixlf;
145702e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.id = id;
145802e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.all = all;
145902e202c3SPrakash Brahmajyosyula 		break;
146002e202c3SPrakash Brahmajyosyula 
146102e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
146202e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.lf = nixlf;
146302e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.id = id;
146402e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.all = all;
146502e202c3SPrakash Brahmajyosyula 		break;
146602e202c3SPrakash Brahmajyosyula 	default:
146702e202c3SPrakash Brahmajyosyula 		return -EINVAL;
146802e202c3SPrakash Brahmajyosyula 	}
146902e202c3SPrakash Brahmajyosyula 	return 0;
147002e202c3SPrakash Brahmajyosyula }
147102e202c3SPrakash Brahmajyosyula 
147202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
147302e202c3SPrakash Brahmajyosyula 					   const char __user *buffer,
147402e202c3SPrakash Brahmajyosyula 					   size_t count, loff_t *ppos,
147502e202c3SPrakash Brahmajyosyula 					   int ctype)
147602e202c3SPrakash Brahmajyosyula {
147702e202c3SPrakash Brahmajyosyula 	struct seq_file *m = filp->private_data;
14780f3ce484SRakesh Babu 	struct nix_hw *nix_hw = m->private;
14790f3ce484SRakesh Babu 	struct rvu *rvu = nix_hw->rvu;
148002e202c3SPrakash Brahmajyosyula 	char *cmd_buf, *ctype_string;
148102e202c3SPrakash Brahmajyosyula 	int nixlf, id = 0, ret;
148202e202c3SPrakash Brahmajyosyula 	bool all = false;
148302e202c3SPrakash Brahmajyosyula 
148402e202c3SPrakash Brahmajyosyula 	if ((*ppos != 0) || !count)
148502e202c3SPrakash Brahmajyosyula 		return -EINVAL;
148602e202c3SPrakash Brahmajyosyula 
148702e202c3SPrakash Brahmajyosyula 	switch (ctype) {
148802e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
148902e202c3SPrakash Brahmajyosyula 		ctype_string = "sq";
149002e202c3SPrakash Brahmajyosyula 		break;
149102e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
149202e202c3SPrakash Brahmajyosyula 		ctype_string = "rq";
149302e202c3SPrakash Brahmajyosyula 		break;
149402e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
149502e202c3SPrakash Brahmajyosyula 		ctype_string = "cq";
149602e202c3SPrakash Brahmajyosyula 		break;
149702e202c3SPrakash Brahmajyosyula 	default:
149802e202c3SPrakash Brahmajyosyula 		return -EINVAL;
149902e202c3SPrakash Brahmajyosyula 	}
150002e202c3SPrakash Brahmajyosyula 
150102e202c3SPrakash Brahmajyosyula 	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
150202e202c3SPrakash Brahmajyosyula 
150302e202c3SPrakash Brahmajyosyula 	if (!cmd_buf)
150402e202c3SPrakash Brahmajyosyula 		return count;
150502e202c3SPrakash Brahmajyosyula 
150602e202c3SPrakash Brahmajyosyula 	ret = parse_cmd_buffer_ctx(cmd_buf, &count, buffer,
150702e202c3SPrakash Brahmajyosyula 				   &nixlf, &id, &all);
150802e202c3SPrakash Brahmajyosyula 	if (ret < 0) {
150902e202c3SPrakash Brahmajyosyula 		dev_info(rvu->dev,
151002e202c3SPrakash Brahmajyosyula 			 "Usage: echo <nixlf> [%s number/all] > %s_ctx\n",
151102e202c3SPrakash Brahmajyosyula 			 ctype_string, ctype_string);
151202e202c3SPrakash Brahmajyosyula 		goto done;
151302e202c3SPrakash Brahmajyosyula 	} else {
151402e202c3SPrakash Brahmajyosyula 		ret = write_nix_queue_ctx(rvu, all, nixlf, id, ctype,
15150f3ce484SRakesh Babu 					  ctype_string, m);
151602e202c3SPrakash Brahmajyosyula 	}
151702e202c3SPrakash Brahmajyosyula done:
151802e202c3SPrakash Brahmajyosyula 	kfree(cmd_buf);
151902e202c3SPrakash Brahmajyosyula 	return ret ? ret : count;
152002e202c3SPrakash Brahmajyosyula }
152102e202c3SPrakash Brahmajyosyula 
152202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_sq_ctx_write(struct file *filp,
152302e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
152402e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
152502e202c3SPrakash Brahmajyosyula {
152602e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
152702e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_SQ);
152802e202c3SPrakash Brahmajyosyula }
152902e202c3SPrakash Brahmajyosyula 
153002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_sq_ctx_display(struct seq_file *filp, void *unused)
153102e202c3SPrakash Brahmajyosyula {
153202e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused, NIX_AQ_CTYPE_SQ);
153302e202c3SPrakash Brahmajyosyula }
153402e202c3SPrakash Brahmajyosyula 
153502e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_sq_ctx, nix_sq_ctx_display, nix_sq_ctx_write);
153602e202c3SPrakash Brahmajyosyula 
153702e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_rq_ctx_write(struct file *filp,
153802e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
153902e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
154002e202c3SPrakash Brahmajyosyula {
154102e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
154202e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_RQ);
154302e202c3SPrakash Brahmajyosyula }
154402e202c3SPrakash Brahmajyosyula 
154502e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_rq_ctx_display(struct seq_file *filp, void  *unused)
154602e202c3SPrakash Brahmajyosyula {
154702e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused,  NIX_AQ_CTYPE_RQ);
154802e202c3SPrakash Brahmajyosyula }
154902e202c3SPrakash Brahmajyosyula 
155002e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_rq_ctx, nix_rq_ctx_display, nix_rq_ctx_write);
155102e202c3SPrakash Brahmajyosyula 
155202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_cq_ctx_write(struct file *filp,
155302e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
155402e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
155502e202c3SPrakash Brahmajyosyula {
155602e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
155702e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_CQ);
155802e202c3SPrakash Brahmajyosyula }
155902e202c3SPrakash Brahmajyosyula 
156002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_cq_ctx_display(struct seq_file *filp, void *unused)
156102e202c3SPrakash Brahmajyosyula {
156202e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused, NIX_AQ_CTYPE_CQ);
156302e202c3SPrakash Brahmajyosyula }
156402e202c3SPrakash Brahmajyosyula 
156502e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_cq_ctx, nix_cq_ctx_display, nix_cq_ctx_write);
156602e202c3SPrakash Brahmajyosyula 
156702e202c3SPrakash Brahmajyosyula static void print_nix_qctx_qsize(struct seq_file *filp, int qsize,
156802e202c3SPrakash Brahmajyosyula 				 unsigned long *bmap, char *qtype)
156902e202c3SPrakash Brahmajyosyula {
157002e202c3SPrakash Brahmajyosyula 	char *buf;
157102e202c3SPrakash Brahmajyosyula 
157202e202c3SPrakash Brahmajyosyula 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
157302e202c3SPrakash Brahmajyosyula 	if (!buf)
157402e202c3SPrakash Brahmajyosyula 		return;
157502e202c3SPrakash Brahmajyosyula 
157602e202c3SPrakash Brahmajyosyula 	bitmap_print_to_pagebuf(false, buf, bmap, qsize);
157702e202c3SPrakash Brahmajyosyula 	seq_printf(filp, "%s context count : %d\n", qtype, qsize);
157802e202c3SPrakash Brahmajyosyula 	seq_printf(filp, "%s context ena/dis bitmap : %s\n",
157902e202c3SPrakash Brahmajyosyula 		   qtype, buf);
158002e202c3SPrakash Brahmajyosyula 	kfree(buf);
158102e202c3SPrakash Brahmajyosyula }
158202e202c3SPrakash Brahmajyosyula 
158302e202c3SPrakash Brahmajyosyula static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf)
158402e202c3SPrakash Brahmajyosyula {
158502e202c3SPrakash Brahmajyosyula 	if (!pfvf->cq_ctx)
158602e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "cq context is not initialized\n");
158702e202c3SPrakash Brahmajyosyula 	else
158802e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->cq_ctx->qsize, pfvf->cq_bmap,
158902e202c3SPrakash Brahmajyosyula 				     "cq");
159002e202c3SPrakash Brahmajyosyula 
159102e202c3SPrakash Brahmajyosyula 	if (!pfvf->rq_ctx)
159202e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "rq context is not initialized\n");
159302e202c3SPrakash Brahmajyosyula 	else
159402e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->rq_ctx->qsize, pfvf->rq_bmap,
159502e202c3SPrakash Brahmajyosyula 				     "rq");
159602e202c3SPrakash Brahmajyosyula 
159702e202c3SPrakash Brahmajyosyula 	if (!pfvf->sq_ctx)
159802e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "sq context is not initialized\n");
159902e202c3SPrakash Brahmajyosyula 	else
160002e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->sq_ctx->qsize, pfvf->sq_bmap,
160102e202c3SPrakash Brahmajyosyula 				     "sq");
160202e202c3SPrakash Brahmajyosyula }
160302e202c3SPrakash Brahmajyosyula 
160402e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_qsize_write(struct file *filp,
160502e202c3SPrakash Brahmajyosyula 				       const char __user *buffer,
160602e202c3SPrakash Brahmajyosyula 				       size_t count, loff_t *ppos)
160702e202c3SPrakash Brahmajyosyula {
160802e202c3SPrakash Brahmajyosyula 	return rvu_dbg_qsize_write(filp, buffer, count, ppos,
160902e202c3SPrakash Brahmajyosyula 				   BLKTYPE_NIX);
161002e202c3SPrakash Brahmajyosyula }
161102e202c3SPrakash Brahmajyosyula 
161202e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_qsize_display(struct seq_file *filp, void *unused)
161302e202c3SPrakash Brahmajyosyula {
161402e202c3SPrakash Brahmajyosyula 	return rvu_dbg_qsize_display(filp, unused, BLKTYPE_NIX);
161502e202c3SPrakash Brahmajyosyula }
161602e202c3SPrakash Brahmajyosyula 
161702e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_qsize, nix_qsize_display, nix_qsize_write);
161802e202c3SPrakash Brahmajyosyula 
16190f3ce484SRakesh Babu static void rvu_dbg_nix_init(struct rvu *rvu, int blkaddr)
162002e202c3SPrakash Brahmajyosyula {
16210f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
162202e202c3SPrakash Brahmajyosyula 
16230f3ce484SRakesh Babu 	if (!is_block_implemented(rvu->hw, blkaddr))
16240f3ce484SRakesh Babu 		return;
16250f3ce484SRakesh Babu 
16260f3ce484SRakesh Babu 	if (blkaddr == BLKADDR_NIX0) {
162702e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix = debugfs_create_dir("nix", rvu->rvu_dbg.root);
16280f3ce484SRakesh Babu 		nix_hw = &rvu->hw->nix[0];
16290f3ce484SRakesh Babu 	} else {
16300f3ce484SRakesh Babu 		rvu->rvu_dbg.nix = debugfs_create_dir("nix1",
16310f3ce484SRakesh Babu 						      rvu->rvu_dbg.root);
16320f3ce484SRakesh Babu 		nix_hw = &rvu->hw->nix[1];
16330f3ce484SRakesh Babu 	}
163402e202c3SPrakash Brahmajyosyula 
16352ce5a307SDan Carpenter 	debugfs_create_file("sq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
163602e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_sq_ctx_fops);
16372ce5a307SDan Carpenter 	debugfs_create_file("rq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
163802e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_rq_ctx_fops);
16392ce5a307SDan Carpenter 	debugfs_create_file("cq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
164002e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_cq_ctx_fops);
16412ce5a307SDan Carpenter 	debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix, nix_hw,
16422ce5a307SDan Carpenter 			    &rvu_dbg_nix_ndc_tx_cache_fops);
16432ce5a307SDan Carpenter 	debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix, nix_hw,
16442ce5a307SDan Carpenter 			    &rvu_dbg_nix_ndc_rx_cache_fops);
16452ce5a307SDan Carpenter 	debugfs_create_file("ndc_tx_hits_miss", 0600, rvu->rvu_dbg.nix, nix_hw,
16460f3ce484SRakesh Babu 			    &rvu_dbg_nix_ndc_tx_hits_miss_fops);
16472ce5a307SDan Carpenter 	debugfs_create_file("ndc_rx_hits_miss", 0600, rvu->rvu_dbg.nix, nix_hw,
16480f3ce484SRakesh Babu 			    &rvu_dbg_nix_ndc_rx_hits_miss_fops);
16492ce5a307SDan Carpenter 	debugfs_create_file("qsize", 0600, rvu->rvu_dbg.nix, rvu,
165002e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_qsize_fops);
165102e202c3SPrakash Brahmajyosyula }
165202e202c3SPrakash Brahmajyosyula 
16538756828aSChristina Jacob static void rvu_dbg_npa_init(struct rvu *rvu)
16548756828aSChristina Jacob {
16558756828aSChristina Jacob 	rvu->rvu_dbg.npa = debugfs_create_dir("npa", rvu->rvu_dbg.root);
16568756828aSChristina Jacob 
16572ce5a307SDan Carpenter 	debugfs_create_file("qsize", 0600, rvu->rvu_dbg.npa, rvu,
16588756828aSChristina Jacob 			    &rvu_dbg_npa_qsize_fops);
16592ce5a307SDan Carpenter 	debugfs_create_file("aura_ctx", 0600, rvu->rvu_dbg.npa, rvu,
16608756828aSChristina Jacob 			    &rvu_dbg_npa_aura_ctx_fops);
16612ce5a307SDan Carpenter 	debugfs_create_file("pool_ctx", 0600, rvu->rvu_dbg.npa, rvu,
16628756828aSChristina Jacob 			    &rvu_dbg_npa_pool_ctx_fops);
16632ce5a307SDan Carpenter 	debugfs_create_file("ndc_cache", 0600, rvu->rvu_dbg.npa, rvu,
1664c5a797e0SPrakash Brahmajyosyula 			    &rvu_dbg_npa_ndc_cache_fops);
16652ce5a307SDan Carpenter 	debugfs_create_file("ndc_hits_miss", 0600, rvu->rvu_dbg.npa, rvu,
16662ce5a307SDan Carpenter 			    &rvu_dbg_npa_ndc_hits_miss_fops);
16678756828aSChristina Jacob }
16688756828aSChristina Jacob 
1669f967488dSLinu Cherian #define PRINT_CGX_CUML_NIXRX_STATUS(idx, name)				\
1670f967488dSLinu Cherian 	({								\
1671f967488dSLinu Cherian 		u64 cnt;						\
1672f967488dSLinu Cherian 		err = rvu_cgx_nix_cuml_stats(rvu, cgxd, lmac_id, (idx),	\
1673f967488dSLinu Cherian 					     NIX_STATS_RX, &(cnt));	\
1674f967488dSLinu Cherian 		if (!err)						\
1675f967488dSLinu Cherian 			seq_printf(s, "%s: %llu\n", name, cnt);		\
1676f967488dSLinu Cherian 		cnt;							\
1677f967488dSLinu Cherian 	})
1678f967488dSLinu Cherian 
1679f967488dSLinu Cherian #define PRINT_CGX_CUML_NIXTX_STATUS(idx, name)			\
1680f967488dSLinu Cherian 	({								\
1681f967488dSLinu Cherian 		u64 cnt;						\
1682f967488dSLinu Cherian 		err = rvu_cgx_nix_cuml_stats(rvu, cgxd, lmac_id, (idx),	\
1683f967488dSLinu Cherian 					  NIX_STATS_TX, &(cnt));	\
1684f967488dSLinu Cherian 		if (!err)						\
1685f967488dSLinu Cherian 			seq_printf(s, "%s: %llu\n", name, cnt);		\
1686f967488dSLinu Cherian 		cnt;							\
1687f967488dSLinu Cherian 	})
1688f967488dSLinu Cherian 
1689c57211b5SPrakash Brahmajyosyula static int cgx_print_stats(struct seq_file *s, int lmac_id)
1690c57211b5SPrakash Brahmajyosyula {
1691c57211b5SPrakash Brahmajyosyula 	struct cgx_link_user_info linfo;
169291c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
1693c57211b5SPrakash Brahmajyosyula 	void *cgxd = s->private;
1694f967488dSLinu Cherian 	u64 ucast, mcast, bcast;
1695c57211b5SPrakash Brahmajyosyula 	int stat = 0, err = 0;
1696c57211b5SPrakash Brahmajyosyula 	u64 tx_stat, rx_stat;
1697f967488dSLinu Cherian 	struct rvu *rvu;
1698f967488dSLinu Cherian 
1699f967488dSLinu Cherian 	rvu = pci_get_drvdata(pci_get_device(PCI_VENDOR_ID_CAVIUM,
1700f967488dSLinu Cherian 					     PCI_DEVID_OCTEONTX2_RVU_AF, NULL));
1701f967488dSLinu Cherian 	if (!rvu)
1702f967488dSLinu Cherian 		return -ENODEV;
1703c57211b5SPrakash Brahmajyosyula 
170491c6945eSHariprasad Kelam 	mac_ops = get_mac_ops(cgxd);
170591c6945eSHariprasad Kelam 
170691c6945eSHariprasad Kelam 	if (!mac_ops)
170791c6945eSHariprasad Kelam 		return 0;
170891c6945eSHariprasad Kelam 
1709c57211b5SPrakash Brahmajyosyula 	/* Link status */
1710c57211b5SPrakash Brahmajyosyula 	seq_puts(s, "\n=======Link Status======\n\n");
1711c57211b5SPrakash Brahmajyosyula 	err = cgx_get_link_info(cgxd, lmac_id, &linfo);
1712c57211b5SPrakash Brahmajyosyula 	if (err)
1713c57211b5SPrakash Brahmajyosyula 		seq_puts(s, "Failed to read link status\n");
1714c57211b5SPrakash Brahmajyosyula 	seq_printf(s, "\nLink is %s %d Mbps\n\n",
1715c57211b5SPrakash Brahmajyosyula 		   linfo.link_up ? "UP" : "DOWN", linfo.speed);
1716c57211b5SPrakash Brahmajyosyula 
1717c57211b5SPrakash Brahmajyosyula 	/* Rx stats */
171891c6945eSHariprasad Kelam 	seq_printf(s, "\n=======NIX RX_STATS(%s port level)======\n\n",
171991c6945eSHariprasad Kelam 		   mac_ops->name);
1720f967488dSLinu Cherian 	ucast = PRINT_CGX_CUML_NIXRX_STATUS(RX_UCAST, "rx_ucast_frames");
1721f967488dSLinu Cherian 	if (err)
1722f967488dSLinu Cherian 		return err;
1723f967488dSLinu Cherian 	mcast = PRINT_CGX_CUML_NIXRX_STATUS(RX_MCAST, "rx_mcast_frames");
1724f967488dSLinu Cherian 	if (err)
1725f967488dSLinu Cherian 		return err;
1726f967488dSLinu Cherian 	bcast = PRINT_CGX_CUML_NIXRX_STATUS(RX_BCAST, "rx_bcast_frames");
1727f967488dSLinu Cherian 	if (err)
1728f967488dSLinu Cherian 		return err;
1729f967488dSLinu Cherian 	seq_printf(s, "rx_frames: %llu\n", ucast + mcast + bcast);
1730f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_OCTS, "rx_bytes");
1731f967488dSLinu Cherian 	if (err)
1732f967488dSLinu Cherian 		return err;
1733f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_DROP, "rx_drops");
1734f967488dSLinu Cherian 	if (err)
1735f967488dSLinu Cherian 		return err;
1736f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_ERR, "rx_errors");
1737f967488dSLinu Cherian 	if (err)
1738f967488dSLinu Cherian 		return err;
1739f967488dSLinu Cherian 
1740f967488dSLinu Cherian 	/* Tx stats */
174191c6945eSHariprasad Kelam 	seq_printf(s, "\n=======NIX TX_STATS(%s port level)======\n\n",
174291c6945eSHariprasad Kelam 		   mac_ops->name);
1743f967488dSLinu Cherian 	ucast = PRINT_CGX_CUML_NIXTX_STATUS(TX_UCAST, "tx_ucast_frames");
1744f967488dSLinu Cherian 	if (err)
1745f967488dSLinu Cherian 		return err;
1746f967488dSLinu Cherian 	mcast = PRINT_CGX_CUML_NIXTX_STATUS(TX_MCAST, "tx_mcast_frames");
1747f967488dSLinu Cherian 	if (err)
1748f967488dSLinu Cherian 		return err;
1749f967488dSLinu Cherian 	bcast = PRINT_CGX_CUML_NIXTX_STATUS(TX_BCAST, "tx_bcast_frames");
1750f967488dSLinu Cherian 	if (err)
1751f967488dSLinu Cherian 		return err;
1752f967488dSLinu Cherian 	seq_printf(s, "tx_frames: %llu\n", ucast + mcast + bcast);
1753f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXTX_STATUS(TX_OCTS, "tx_bytes");
1754f967488dSLinu Cherian 	if (err)
1755f967488dSLinu Cherian 		return err;
1756f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXTX_STATUS(TX_DROP, "tx_drops");
1757f967488dSLinu Cherian 	if (err)
1758f967488dSLinu Cherian 		return err;
1759f967488dSLinu Cherian 
1760f967488dSLinu Cherian 	/* Rx stats */
176191c6945eSHariprasad Kelam 	seq_printf(s, "\n=======%s RX_STATS======\n\n", mac_ops->name);
1762ce7a6c31SHariprasad Kelam 	while (stat < mac_ops->rx_stats_cnt) {
1763ce7a6c31SHariprasad Kelam 		err = mac_ops->mac_get_rx_stats(cgxd, lmac_id, stat, &rx_stat);
1764c57211b5SPrakash Brahmajyosyula 		if (err)
1765c57211b5SPrakash Brahmajyosyula 			return err;
1766ce7a6c31SHariprasad Kelam 		if (is_rvu_otx2(rvu))
1767ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", cgx_rx_stats_fields[stat],
1768ce7a6c31SHariprasad Kelam 				   rx_stat);
1769ce7a6c31SHariprasad Kelam 		else
1770ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", rpm_rx_stats_fields[stat],
1771ce7a6c31SHariprasad Kelam 				   rx_stat);
1772c57211b5SPrakash Brahmajyosyula 		stat++;
1773c57211b5SPrakash Brahmajyosyula 	}
1774c57211b5SPrakash Brahmajyosyula 
1775c57211b5SPrakash Brahmajyosyula 	/* Tx stats */
1776c57211b5SPrakash Brahmajyosyula 	stat = 0;
177791c6945eSHariprasad Kelam 	seq_printf(s, "\n=======%s TX_STATS======\n\n", mac_ops->name);
1778ce7a6c31SHariprasad Kelam 	while (stat < mac_ops->tx_stats_cnt) {
1779ce7a6c31SHariprasad Kelam 		err = mac_ops->mac_get_tx_stats(cgxd, lmac_id, stat, &tx_stat);
1780c57211b5SPrakash Brahmajyosyula 		if (err)
1781c57211b5SPrakash Brahmajyosyula 			return err;
1782ce7a6c31SHariprasad Kelam 
1783ce7a6c31SHariprasad Kelam 	if (is_rvu_otx2(rvu))
1784ce7a6c31SHariprasad Kelam 		seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat],
1785ce7a6c31SHariprasad Kelam 			   tx_stat);
1786ce7a6c31SHariprasad Kelam 	else
1787ce7a6c31SHariprasad Kelam 		seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat],
1788ce7a6c31SHariprasad Kelam 			   tx_stat);
1789c57211b5SPrakash Brahmajyosyula 	stat++;
1790c57211b5SPrakash Brahmajyosyula 	}
1791c57211b5SPrakash Brahmajyosyula 
1792c57211b5SPrakash Brahmajyosyula 	return err;
1793c57211b5SPrakash Brahmajyosyula }
1794c57211b5SPrakash Brahmajyosyula 
1795c57211b5SPrakash Brahmajyosyula static int rvu_dbg_cgx_stat_display(struct seq_file *filp, void *unused)
1796c57211b5SPrakash Brahmajyosyula {
1797c57211b5SPrakash Brahmajyosyula 	struct dentry *current_dir;
1798c57211b5SPrakash Brahmajyosyula 	int err, lmac_id;
1799c57211b5SPrakash Brahmajyosyula 	char *buf;
1800c57211b5SPrakash Brahmajyosyula 
1801c57211b5SPrakash Brahmajyosyula 	current_dir = filp->file->f_path.dentry->d_parent;
1802c57211b5SPrakash Brahmajyosyula 	buf = strrchr(current_dir->d_name.name, 'c');
1803c57211b5SPrakash Brahmajyosyula 	if (!buf)
1804c57211b5SPrakash Brahmajyosyula 		return -EINVAL;
1805c57211b5SPrakash Brahmajyosyula 
1806c57211b5SPrakash Brahmajyosyula 	err = kstrtoint(buf + 1, 10, &lmac_id);
1807c57211b5SPrakash Brahmajyosyula 	if (!err) {
1808c57211b5SPrakash Brahmajyosyula 		err = cgx_print_stats(filp, lmac_id);
1809c57211b5SPrakash Brahmajyosyula 		if (err)
1810c57211b5SPrakash Brahmajyosyula 			return err;
1811c57211b5SPrakash Brahmajyosyula 	}
1812c57211b5SPrakash Brahmajyosyula 	return err;
1813c57211b5SPrakash Brahmajyosyula }
1814c57211b5SPrakash Brahmajyosyula 
1815c57211b5SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(cgx_stat, cgx_stat_display, NULL);
1816c57211b5SPrakash Brahmajyosyula 
1817c57211b5SPrakash Brahmajyosyula static void rvu_dbg_cgx_init(struct rvu *rvu)
1818c57211b5SPrakash Brahmajyosyula {
181991c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
182091c6945eSHariprasad Kelam 	unsigned long lmac_bmap;
182191c6945eSHariprasad Kelam 	int rvu_def_cgx_id = 0;
1822c57211b5SPrakash Brahmajyosyula 	int i, lmac_id;
1823c57211b5SPrakash Brahmajyosyula 	char dname[20];
1824c57211b5SPrakash Brahmajyosyula 	void *cgx;
1825c57211b5SPrakash Brahmajyosyula 
18263feac505SGeetha sowjanya 	if (!cgx_get_cgxcnt_max())
18273feac505SGeetha sowjanya 		return;
18283feac505SGeetha sowjanya 
182991c6945eSHariprasad Kelam 	mac_ops = get_mac_ops(rvu_cgx_pdata(rvu_def_cgx_id, rvu));
183091c6945eSHariprasad Kelam 	if (!mac_ops)
183191c6945eSHariprasad Kelam 		return;
183291c6945eSHariprasad Kelam 
183391c6945eSHariprasad Kelam 	rvu->rvu_dbg.cgx_root = debugfs_create_dir(mac_ops->name,
183491c6945eSHariprasad Kelam 						   rvu->rvu_dbg.root);
1835c57211b5SPrakash Brahmajyosyula 
1836c57211b5SPrakash Brahmajyosyula 	for (i = 0; i < cgx_get_cgxcnt_max(); i++) {
1837c57211b5SPrakash Brahmajyosyula 		cgx = rvu_cgx_pdata(i, rvu);
1838c57211b5SPrakash Brahmajyosyula 		if (!cgx)
1839c57211b5SPrakash Brahmajyosyula 			continue;
184091c6945eSHariprasad Kelam 		lmac_bmap = cgx_get_lmac_bmap(cgx);
1841c57211b5SPrakash Brahmajyosyula 		/* cgx debugfs dir */
184291c6945eSHariprasad Kelam 		sprintf(dname, "%s%d", mac_ops->name, i);
1843c57211b5SPrakash Brahmajyosyula 		rvu->rvu_dbg.cgx = debugfs_create_dir(dname,
1844c57211b5SPrakash Brahmajyosyula 						      rvu->rvu_dbg.cgx_root);
184591c6945eSHariprasad Kelam 
184691c6945eSHariprasad Kelam 		for_each_set_bit(lmac_id, &lmac_bmap, MAX_LMAC_PER_CGX) {
1847c57211b5SPrakash Brahmajyosyula 			/* lmac debugfs dir */
1848c57211b5SPrakash Brahmajyosyula 			sprintf(dname, "lmac%d", lmac_id);
1849c57211b5SPrakash Brahmajyosyula 			rvu->rvu_dbg.lmac =
1850c57211b5SPrakash Brahmajyosyula 				debugfs_create_dir(dname, rvu->rvu_dbg.cgx);
1851c57211b5SPrakash Brahmajyosyula 
18522ce5a307SDan Carpenter 			debugfs_create_file("stats", 0600, rvu->rvu_dbg.lmac,
18532ce5a307SDan Carpenter 					    cgx, &rvu_dbg_cgx_stat_fops);
1854c57211b5SPrakash Brahmajyosyula 		}
1855c57211b5SPrakash Brahmajyosyula 	}
1856c57211b5SPrakash Brahmajyosyula }
1857c57211b5SPrakash Brahmajyosyula 
1858e07fb507SSunil Goutham /* NPC debugfs APIs */
1859e07fb507SSunil Goutham static void rvu_print_npc_mcam_info(struct seq_file *s,
1860e07fb507SSunil Goutham 				    u16 pcifunc, int blkaddr)
1861e07fb507SSunil Goutham {
1862e07fb507SSunil Goutham 	struct rvu *rvu = s->private;
1863e07fb507SSunil Goutham 	int entry_acnt, entry_ecnt;
1864e07fb507SSunil Goutham 	int cntr_acnt, cntr_ecnt;
1865e07fb507SSunil Goutham 
1866e07fb507SSunil Goutham 	/* Skip PF0 */
1867e07fb507SSunil Goutham 	if (!pcifunc)
1868e07fb507SSunil Goutham 		return;
1869e07fb507SSunil Goutham 	rvu_npc_get_mcam_entry_alloc_info(rvu, pcifunc, blkaddr,
1870e07fb507SSunil Goutham 					  &entry_acnt, &entry_ecnt);
1871e07fb507SSunil Goutham 	rvu_npc_get_mcam_counter_alloc_info(rvu, pcifunc, blkaddr,
1872e07fb507SSunil Goutham 					    &cntr_acnt, &cntr_ecnt);
1873e07fb507SSunil Goutham 	if (!entry_acnt && !cntr_acnt)
1874e07fb507SSunil Goutham 		return;
1875e07fb507SSunil Goutham 
1876e07fb507SSunil Goutham 	if (!(pcifunc & RVU_PFVF_FUNC_MASK))
1877e07fb507SSunil Goutham 		seq_printf(s, "\n\t\t Device \t\t: PF%d\n",
1878e07fb507SSunil Goutham 			   rvu_get_pf(pcifunc));
1879e07fb507SSunil Goutham 	else
1880e07fb507SSunil Goutham 		seq_printf(s, "\n\t\t Device \t\t: PF%d VF%d\n",
1881e07fb507SSunil Goutham 			   rvu_get_pf(pcifunc),
1882e07fb507SSunil Goutham 			   (pcifunc & RVU_PFVF_FUNC_MASK) - 1);
1883e07fb507SSunil Goutham 
1884e07fb507SSunil Goutham 	if (entry_acnt) {
1885e07fb507SSunil Goutham 		seq_printf(s, "\t\t Entries allocated \t: %d\n", entry_acnt);
1886e07fb507SSunil Goutham 		seq_printf(s, "\t\t Entries enabled \t: %d\n", entry_ecnt);
1887e07fb507SSunil Goutham 	}
1888e07fb507SSunil Goutham 	if (cntr_acnt) {
1889e07fb507SSunil Goutham 		seq_printf(s, "\t\t Counters allocated \t: %d\n", cntr_acnt);
1890e07fb507SSunil Goutham 		seq_printf(s, "\t\t Counters enabled \t: %d\n", cntr_ecnt);
1891e07fb507SSunil Goutham 	}
1892e07fb507SSunil Goutham }
1893e07fb507SSunil Goutham 
1894e07fb507SSunil Goutham static int rvu_dbg_npc_mcam_info_display(struct seq_file *filp, void *unsued)
1895e07fb507SSunil Goutham {
1896e07fb507SSunil Goutham 	struct rvu *rvu = filp->private;
1897e07fb507SSunil Goutham 	int pf, vf, numvfs, blkaddr;
1898e07fb507SSunil Goutham 	struct npc_mcam *mcam;
18991c1935c9SSubbaraya Sundeep 	u16 pcifunc, counters;
1900e07fb507SSunil Goutham 	u64 cfg;
1901e07fb507SSunil Goutham 
1902e07fb507SSunil Goutham 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
1903e07fb507SSunil Goutham 	if (blkaddr < 0)
1904e07fb507SSunil Goutham 		return -ENODEV;
1905e07fb507SSunil Goutham 
1906e07fb507SSunil Goutham 	mcam = &rvu->hw->mcam;
19071c1935c9SSubbaraya Sundeep 	counters = rvu->hw->npc_counters;
1908e07fb507SSunil Goutham 
1909e07fb507SSunil Goutham 	seq_puts(filp, "\nNPC MCAM info:\n");
1910e07fb507SSunil Goutham 	/* MCAM keywidth on receive and transmit sides */
1911e07fb507SSunil Goutham 	cfg = rvu_read64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(NIX_INTF_RX));
1912e07fb507SSunil Goutham 	cfg = (cfg >> 32) & 0x07;
1913e07fb507SSunil Goutham 	seq_printf(filp, "\t\t RX keywidth \t: %s\n", (cfg == NPC_MCAM_KEY_X1) ?
1914e07fb507SSunil Goutham 		   "112bits" : ((cfg == NPC_MCAM_KEY_X2) ?
1915e07fb507SSunil Goutham 		   "224bits" : "448bits"));
1916e07fb507SSunil Goutham 	cfg = rvu_read64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(NIX_INTF_TX));
1917e07fb507SSunil Goutham 	cfg = (cfg >> 32) & 0x07;
1918e07fb507SSunil Goutham 	seq_printf(filp, "\t\t TX keywidth \t: %s\n", (cfg == NPC_MCAM_KEY_X1) ?
1919e07fb507SSunil Goutham 		   "112bits" : ((cfg == NPC_MCAM_KEY_X2) ?
1920e07fb507SSunil Goutham 		   "224bits" : "448bits"));
1921e07fb507SSunil Goutham 
1922e07fb507SSunil Goutham 	mutex_lock(&mcam->lock);
1923e07fb507SSunil Goutham 	/* MCAM entries */
1924e07fb507SSunil Goutham 	seq_printf(filp, "\n\t\t MCAM entries \t: %d\n", mcam->total_entries);
1925e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Reserved \t: %d\n",
1926e07fb507SSunil Goutham 		   mcam->total_entries - mcam->bmap_entries);
1927e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Available \t: %d\n", mcam->bmap_fcnt);
1928e07fb507SSunil Goutham 
1929e07fb507SSunil Goutham 	/* MCAM counters */
19301c1935c9SSubbaraya Sundeep 	seq_printf(filp, "\n\t\t MCAM counters \t: %d\n", counters);
19311c1935c9SSubbaraya Sundeep 	seq_printf(filp, "\t\t Reserved \t: %d\n",
19321c1935c9SSubbaraya Sundeep 		   counters - mcam->counters.max);
1933e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Available \t: %d\n",
1934e07fb507SSunil Goutham 		   rvu_rsrc_free_count(&mcam->counters));
1935e07fb507SSunil Goutham 
1936e07fb507SSunil Goutham 	if (mcam->bmap_entries == mcam->bmap_fcnt) {
1937e07fb507SSunil Goutham 		mutex_unlock(&mcam->lock);
1938e07fb507SSunil Goutham 		return 0;
1939e07fb507SSunil Goutham 	}
1940e07fb507SSunil Goutham 
1941e07fb507SSunil Goutham 	seq_puts(filp, "\n\t\t Current allocation\n");
1942e07fb507SSunil Goutham 	seq_puts(filp, "\t\t====================\n");
1943e07fb507SSunil Goutham 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
1944e07fb507SSunil Goutham 		pcifunc = (pf << RVU_PFVF_PF_SHIFT);
1945e07fb507SSunil Goutham 		rvu_print_npc_mcam_info(filp, pcifunc, blkaddr);
1946e07fb507SSunil Goutham 
1947e07fb507SSunil Goutham 		cfg = rvu_read64(rvu, BLKADDR_RVUM, RVU_PRIV_PFX_CFG(pf));
1948e07fb507SSunil Goutham 		numvfs = (cfg >> 12) & 0xFF;
1949e07fb507SSunil Goutham 		for (vf = 0; vf < numvfs; vf++) {
1950e07fb507SSunil Goutham 			pcifunc = (pf << RVU_PFVF_PF_SHIFT) | (vf + 1);
1951e07fb507SSunil Goutham 			rvu_print_npc_mcam_info(filp, pcifunc, blkaddr);
1952e07fb507SSunil Goutham 		}
1953e07fb507SSunil Goutham 	}
1954e07fb507SSunil Goutham 
1955e07fb507SSunil Goutham 	mutex_unlock(&mcam->lock);
1956e07fb507SSunil Goutham 	return 0;
1957e07fb507SSunil Goutham }
1958e07fb507SSunil Goutham 
1959e07fb507SSunil Goutham RVU_DEBUG_SEQ_FOPS(npc_mcam_info, npc_mcam_info_display, NULL);
1960e07fb507SSunil Goutham 
1961e07fb507SSunil Goutham static int rvu_dbg_npc_rx_miss_stats_display(struct seq_file *filp,
1962e07fb507SSunil Goutham 					     void *unused)
1963e07fb507SSunil Goutham {
1964e07fb507SSunil Goutham 	struct rvu *rvu = filp->private;
1965e07fb507SSunil Goutham 	struct npc_mcam *mcam;
1966e07fb507SSunil Goutham 	int blkaddr;
1967e07fb507SSunil Goutham 
1968e07fb507SSunil Goutham 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
1969e07fb507SSunil Goutham 	if (blkaddr < 0)
1970e07fb507SSunil Goutham 		return -ENODEV;
1971e07fb507SSunil Goutham 
1972e07fb507SSunil Goutham 	mcam = &rvu->hw->mcam;
1973e07fb507SSunil Goutham 
1974e07fb507SSunil Goutham 	seq_puts(filp, "\nNPC MCAM RX miss action stats\n");
1975e07fb507SSunil Goutham 	seq_printf(filp, "\t\tStat %d: \t%lld\n", mcam->rx_miss_act_cntr,
1976e07fb507SSunil Goutham 		   rvu_read64(rvu, blkaddr,
1977e07fb507SSunil Goutham 			      NPC_AF_MATCH_STATX(mcam->rx_miss_act_cntr)));
1978e07fb507SSunil Goutham 
1979e07fb507SSunil Goutham 	return 0;
1980e07fb507SSunil Goutham }
1981e07fb507SSunil Goutham 
1982e07fb507SSunil Goutham RVU_DEBUG_SEQ_FOPS(npc_rx_miss_act, npc_rx_miss_stats_display, NULL);
1983e07fb507SSunil Goutham 
19844d6beb9cSSubbaraya Sundeep static void rvu_dbg_npc_mcam_show_flows(struct seq_file *s,
19854d6beb9cSSubbaraya Sundeep 					struct rvu_npc_mcam_rule *rule)
19864d6beb9cSSubbaraya Sundeep {
19874d6beb9cSSubbaraya Sundeep 	u8 bit;
19884d6beb9cSSubbaraya Sundeep 
19894d6beb9cSSubbaraya Sundeep 	for_each_set_bit(bit, (unsigned long *)&rule->features, 64) {
19904d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\t%s  ", npc_get_field_name(bit));
19914d6beb9cSSubbaraya Sundeep 		switch (bit) {
19924d6beb9cSSubbaraya Sundeep 		case NPC_DMAC:
19934d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pM ", rule->packet.dmac);
19944d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pM\n", rule->mask.dmac);
19954d6beb9cSSubbaraya Sundeep 			break;
19964d6beb9cSSubbaraya Sundeep 		case NPC_SMAC:
19974d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pM ", rule->packet.smac);
19984d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pM\n", rule->mask.smac);
19994d6beb9cSSubbaraya Sundeep 			break;
20004d6beb9cSSubbaraya Sundeep 		case NPC_ETYPE:
20014d6beb9cSSubbaraya Sundeep 			seq_printf(s, "0x%x ", ntohs(rule->packet.etype));
20024d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.etype));
20034d6beb9cSSubbaraya Sundeep 			break;
20044d6beb9cSSubbaraya Sundeep 		case NPC_OUTER_VID:
20054d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", ntohs(rule->packet.vlan_tci));
20064d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n",
20074d6beb9cSSubbaraya Sundeep 				   ntohs(rule->mask.vlan_tci));
20084d6beb9cSSubbaraya Sundeep 			break;
20094d6beb9cSSubbaraya Sundeep 		case NPC_TOS:
20104d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", rule->packet.tos);
20114d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", rule->mask.tos);
20124d6beb9cSSubbaraya Sundeep 			break;
20134d6beb9cSSubbaraya Sundeep 		case NPC_SIP_IPV4:
20144d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI4 ", &rule->packet.ip4src);
20154d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI4\n", &rule->mask.ip4src);
20164d6beb9cSSubbaraya Sundeep 			break;
20174d6beb9cSSubbaraya Sundeep 		case NPC_DIP_IPV4:
20184d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI4 ", &rule->packet.ip4dst);
20194d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI4\n", &rule->mask.ip4dst);
20204d6beb9cSSubbaraya Sundeep 			break;
20214d6beb9cSSubbaraya Sundeep 		case NPC_SIP_IPV6:
20224d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI6 ", rule->packet.ip6src);
20234d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI6\n", rule->mask.ip6src);
20244d6beb9cSSubbaraya Sundeep 			break;
20254d6beb9cSSubbaraya Sundeep 		case NPC_DIP_IPV6:
20264d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI6 ", rule->packet.ip6dst);
20274d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI6\n", rule->mask.ip6dst);
20284d6beb9cSSubbaraya Sundeep 			break;
20294d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_TCP:
20304d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_UDP:
20314d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_SCTP:
20324d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", ntohs(rule->packet.sport));
20334d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.sport));
20344d6beb9cSSubbaraya Sundeep 			break;
20354d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_TCP:
20364d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_UDP:
20374d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_SCTP:
20384d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", ntohs(rule->packet.dport));
20394d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.dport));
20404d6beb9cSSubbaraya Sundeep 			break;
20414d6beb9cSSubbaraya Sundeep 		default:
2042b7cf9661SNaveen Mamindlapalli 			seq_puts(s, "\n");
20434d6beb9cSSubbaraya Sundeep 			break;
20444d6beb9cSSubbaraya Sundeep 		}
20454d6beb9cSSubbaraya Sundeep 	}
20464d6beb9cSSubbaraya Sundeep }
20474d6beb9cSSubbaraya Sundeep 
20484d6beb9cSSubbaraya Sundeep static void rvu_dbg_npc_mcam_show_action(struct seq_file *s,
20494d6beb9cSSubbaraya Sundeep 					 struct rvu_npc_mcam_rule *rule)
20504d6beb9cSSubbaraya Sundeep {
20514d6beb9cSSubbaraya Sundeep 	if (rule->intf == NIX_INTF_TX) {
20524d6beb9cSSubbaraya Sundeep 		switch (rule->tx_action.op) {
20534d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_DROP:
20544d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Drop\n");
20554d6beb9cSSubbaraya Sundeep 			break;
20564d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_UCAST_DEFAULT:
20574d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Unicast to default channel\n");
20584d6beb9cSSubbaraya Sundeep 			break;
20594d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_UCAST_CHAN:
20604d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\taction: Unicast to channel %d\n",
20614d6beb9cSSubbaraya Sundeep 				   rule->tx_action.index);
20624d6beb9cSSubbaraya Sundeep 			break;
20634d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_MCAST:
20644d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Multicast\n");
20654d6beb9cSSubbaraya Sundeep 			break;
20664d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_DROP_VIOL:
20674d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Lockdown Violation Drop\n");
20684d6beb9cSSubbaraya Sundeep 			break;
20694d6beb9cSSubbaraya Sundeep 		default:
20704d6beb9cSSubbaraya Sundeep 			break;
2071fc6f89ddSXu Wang 		}
20724d6beb9cSSubbaraya Sundeep 	} else {
20734d6beb9cSSubbaraya Sundeep 		switch (rule->rx_action.op) {
20744d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_DROP:
20754d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Drop\n");
20764d6beb9cSSubbaraya Sundeep 			break;
20774d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_UCAST:
20784d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\taction: Direct to queue %d\n",
20794d6beb9cSSubbaraya Sundeep 				   rule->rx_action.index);
20804d6beb9cSSubbaraya Sundeep 			break;
20814d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_RSS:
20824d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: RSS\n");
20834d6beb9cSSubbaraya Sundeep 			break;
20844d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_UCAST_IPSEC:
20854d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Unicast ipsec\n");
20864d6beb9cSSubbaraya Sundeep 			break;
20874d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_MCAST:
20884d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Multicast\n");
20894d6beb9cSSubbaraya Sundeep 			break;
20904d6beb9cSSubbaraya Sundeep 		default:
20914d6beb9cSSubbaraya Sundeep 			break;
2092fc6f89ddSXu Wang 		}
20934d6beb9cSSubbaraya Sundeep 	}
20944d6beb9cSSubbaraya Sundeep }
20954d6beb9cSSubbaraya Sundeep 
20964d6beb9cSSubbaraya Sundeep static const char *rvu_dbg_get_intf_name(int intf)
20974d6beb9cSSubbaraya Sundeep {
20984d6beb9cSSubbaraya Sundeep 	switch (intf) {
20994d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_RX(0):
21004d6beb9cSSubbaraya Sundeep 		return "NIX0_RX";
21014d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_RX(1):
21024d6beb9cSSubbaraya Sundeep 		return "NIX1_RX";
21034d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_TX(0):
21044d6beb9cSSubbaraya Sundeep 		return "NIX0_TX";
21054d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_TX(1):
21064d6beb9cSSubbaraya Sundeep 		return "NIX1_TX";
21074d6beb9cSSubbaraya Sundeep 	default:
21084d6beb9cSSubbaraya Sundeep 		break;
21094d6beb9cSSubbaraya Sundeep 	}
21104d6beb9cSSubbaraya Sundeep 
21114d6beb9cSSubbaraya Sundeep 	return "unknown";
21124d6beb9cSSubbaraya Sundeep }
21134d6beb9cSSubbaraya Sundeep 
21144d6beb9cSSubbaraya Sundeep static int rvu_dbg_npc_mcam_show_rules(struct seq_file *s, void *unused)
21154d6beb9cSSubbaraya Sundeep {
21164d6beb9cSSubbaraya Sundeep 	struct rvu_npc_mcam_rule *iter;
21174d6beb9cSSubbaraya Sundeep 	struct rvu *rvu = s->private;
21184d6beb9cSSubbaraya Sundeep 	struct npc_mcam *mcam;
21194d6beb9cSSubbaraya Sundeep 	int pf, vf = -1;
21204d6beb9cSSubbaraya Sundeep 	int blkaddr;
21214d6beb9cSSubbaraya Sundeep 	u16 target;
21224d6beb9cSSubbaraya Sundeep 	u64 hits;
21234d6beb9cSSubbaraya Sundeep 
21244d6beb9cSSubbaraya Sundeep 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
21254d6beb9cSSubbaraya Sundeep 	if (blkaddr < 0)
21264d6beb9cSSubbaraya Sundeep 		return 0;
21274d6beb9cSSubbaraya Sundeep 
21284d6beb9cSSubbaraya Sundeep 	mcam = &rvu->hw->mcam;
21294d6beb9cSSubbaraya Sundeep 
21304d6beb9cSSubbaraya Sundeep 	mutex_lock(&mcam->lock);
21314d6beb9cSSubbaraya Sundeep 	list_for_each_entry(iter, &mcam->mcam_rules, list) {
21324d6beb9cSSubbaraya Sundeep 		pf = (iter->owner >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
21334d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\n\tInstalled by: PF%d ", pf);
21344d6beb9cSSubbaraya Sundeep 
21354d6beb9cSSubbaraya Sundeep 		if (iter->owner & RVU_PFVF_FUNC_MASK) {
21364d6beb9cSSubbaraya Sundeep 			vf = (iter->owner & RVU_PFVF_FUNC_MASK) - 1;
21374d6beb9cSSubbaraya Sundeep 			seq_printf(s, "VF%d", vf);
21384d6beb9cSSubbaraya Sundeep 		}
21394d6beb9cSSubbaraya Sundeep 		seq_puts(s, "\n");
21404d6beb9cSSubbaraya Sundeep 
21414d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tdirection: %s\n", is_npc_intf_rx(iter->intf) ?
21424d6beb9cSSubbaraya Sundeep 						    "RX" : "TX");
21434d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tinterface: %s\n",
21444d6beb9cSSubbaraya Sundeep 			   rvu_dbg_get_intf_name(iter->intf));
21454d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tmcam entry: %d\n", iter->entry);
21464d6beb9cSSubbaraya Sundeep 
21474d6beb9cSSubbaraya Sundeep 		rvu_dbg_npc_mcam_show_flows(s, iter);
21484d6beb9cSSubbaraya Sundeep 		if (iter->intf == NIX_INTF_RX) {
21494d6beb9cSSubbaraya Sundeep 			target = iter->rx_action.pf_func;
21504d6beb9cSSubbaraya Sundeep 			pf = (target >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
21514d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\tForward to: PF%d ", pf);
21524d6beb9cSSubbaraya Sundeep 
21534d6beb9cSSubbaraya Sundeep 			if (target & RVU_PFVF_FUNC_MASK) {
21544d6beb9cSSubbaraya Sundeep 				vf = (target & RVU_PFVF_FUNC_MASK) - 1;
21554d6beb9cSSubbaraya Sundeep 				seq_printf(s, "VF%d", vf);
21564d6beb9cSSubbaraya Sundeep 			}
21574d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\n");
21584d6beb9cSSubbaraya Sundeep 		}
21594d6beb9cSSubbaraya Sundeep 
21604d6beb9cSSubbaraya Sundeep 		rvu_dbg_npc_mcam_show_action(s, iter);
21614d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tenabled: %s\n", iter->enable ? "yes" : "no");
21624d6beb9cSSubbaraya Sundeep 
21634d6beb9cSSubbaraya Sundeep 		if (!iter->has_cntr)
21644d6beb9cSSubbaraya Sundeep 			continue;
21654d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tcounter: %d\n", iter->cntr);
21664d6beb9cSSubbaraya Sundeep 
21674d6beb9cSSubbaraya Sundeep 		hits = rvu_read64(rvu, blkaddr, NPC_AF_MATCH_STATX(iter->cntr));
21684d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\thits: %lld\n", hits);
21694d6beb9cSSubbaraya Sundeep 	}
21704d6beb9cSSubbaraya Sundeep 	mutex_unlock(&mcam->lock);
21714d6beb9cSSubbaraya Sundeep 
21724d6beb9cSSubbaraya Sundeep 	return 0;
21734d6beb9cSSubbaraya Sundeep }
21744d6beb9cSSubbaraya Sundeep 
21754d6beb9cSSubbaraya Sundeep RVU_DEBUG_SEQ_FOPS(npc_mcam_rules, npc_mcam_show_rules, NULL);
21764d6beb9cSSubbaraya Sundeep 
2177e07fb507SSunil Goutham static void rvu_dbg_npc_init(struct rvu *rvu)
2178e07fb507SSunil Goutham {
2179e07fb507SSunil Goutham 	rvu->rvu_dbg.npc = debugfs_create_dir("npc", rvu->rvu_dbg.root);
2180e07fb507SSunil Goutham 
21812ce5a307SDan Carpenter 	debugfs_create_file("mcam_info", 0444, rvu->rvu_dbg.npc, rvu,
21822ce5a307SDan Carpenter 			    &rvu_dbg_npc_mcam_info_fops);
21832ce5a307SDan Carpenter 	debugfs_create_file("mcam_rules", 0444, rvu->rvu_dbg.npc, rvu,
21842ce5a307SDan Carpenter 			    &rvu_dbg_npc_mcam_rules_fops);
21852ce5a307SDan Carpenter 	debugfs_create_file("rx_miss_act_stats", 0444, rvu->rvu_dbg.npc, rvu,
21862ce5a307SDan Carpenter 			    &rvu_dbg_npc_rx_miss_act_fops);
2187e07fb507SSunil Goutham }
2188e07fb507SSunil Goutham 
218976638a2eSSrujana Challa static int cpt_eng_sts_display(struct seq_file *filp, u8 eng_type)
219076638a2eSSrujana Challa {
2191b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
219276638a2eSSrujana Challa 	u64 busy_sts = 0, free_sts = 0;
219376638a2eSSrujana Challa 	u32 e_min = 0, e_max = 0, e, i;
219476638a2eSSrujana Challa 	u16 max_ses, max_ies, max_aes;
2195b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
2196b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
219776638a2eSSrujana Challa 	u64 reg;
219876638a2eSSrujana Challa 
219976638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1);
220076638a2eSSrujana Challa 	max_ses = reg & 0xffff;
220176638a2eSSrujana Challa 	max_ies = (reg >> 16) & 0xffff;
220276638a2eSSrujana Challa 	max_aes = (reg >> 32) & 0xffff;
220376638a2eSSrujana Challa 
220476638a2eSSrujana Challa 	switch (eng_type) {
220576638a2eSSrujana Challa 	case CPT_AE_TYPE:
220676638a2eSSrujana Challa 		e_min = max_ses + max_ies;
220776638a2eSSrujana Challa 		e_max = max_ses + max_ies + max_aes;
220876638a2eSSrujana Challa 		break;
220976638a2eSSrujana Challa 	case CPT_SE_TYPE:
221076638a2eSSrujana Challa 		e_min = 0;
221176638a2eSSrujana Challa 		e_max = max_ses;
221276638a2eSSrujana Challa 		break;
221376638a2eSSrujana Challa 	case CPT_IE_TYPE:
221476638a2eSSrujana Challa 		e_min = max_ses;
221576638a2eSSrujana Challa 		e_max = max_ses + max_ies;
221676638a2eSSrujana Challa 		break;
221776638a2eSSrujana Challa 	default:
221876638a2eSSrujana Challa 		return -EINVAL;
221976638a2eSSrujana Challa 	}
222076638a2eSSrujana Challa 
222176638a2eSSrujana Challa 	for (e = e_min, i = 0; e < e_max; e++, i++) {
222276638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(e));
222376638a2eSSrujana Challa 		if (reg & 0x1)
222476638a2eSSrujana Challa 			busy_sts |= 1ULL << i;
222576638a2eSSrujana Challa 
222676638a2eSSrujana Challa 		if (reg & 0x2)
222776638a2eSSrujana Challa 			free_sts |= 1ULL << i;
222876638a2eSSrujana Challa 	}
222976638a2eSSrujana Challa 	seq_printf(filp, "FREE STS : 0x%016llx\n", free_sts);
223076638a2eSSrujana Challa 	seq_printf(filp, "BUSY STS : 0x%016llx\n", busy_sts);
223176638a2eSSrujana Challa 
223276638a2eSSrujana Challa 	return 0;
223376638a2eSSrujana Challa }
223476638a2eSSrujana Challa 
223576638a2eSSrujana Challa static int rvu_dbg_cpt_ae_sts_display(struct seq_file *filp, void *unused)
223676638a2eSSrujana Challa {
223776638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_AE_TYPE);
223876638a2eSSrujana Challa }
223976638a2eSSrujana Challa 
224076638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_ae_sts, cpt_ae_sts_display, NULL);
224176638a2eSSrujana Challa 
224276638a2eSSrujana Challa static int rvu_dbg_cpt_se_sts_display(struct seq_file *filp, void *unused)
224376638a2eSSrujana Challa {
224476638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_SE_TYPE);
224576638a2eSSrujana Challa }
224676638a2eSSrujana Challa 
224776638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_se_sts, cpt_se_sts_display, NULL);
224876638a2eSSrujana Challa 
224976638a2eSSrujana Challa static int rvu_dbg_cpt_ie_sts_display(struct seq_file *filp, void *unused)
225076638a2eSSrujana Challa {
225176638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_IE_TYPE);
225276638a2eSSrujana Challa }
225376638a2eSSrujana Challa 
225476638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_ie_sts, cpt_ie_sts_display, NULL);
225576638a2eSSrujana Challa 
225676638a2eSSrujana Challa static int rvu_dbg_cpt_engines_info_display(struct seq_file *filp, void *unused)
225776638a2eSSrujana Challa {
2258b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
225976638a2eSSrujana Challa 	u16 max_ses, max_ies, max_aes;
2260b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
2261b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
226276638a2eSSrujana Challa 	u32 e_max, e;
226376638a2eSSrujana Challa 	u64 reg;
226476638a2eSSrujana Challa 
226576638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1);
226676638a2eSSrujana Challa 	max_ses = reg & 0xffff;
226776638a2eSSrujana Challa 	max_ies = (reg >> 16) & 0xffff;
226876638a2eSSrujana Challa 	max_aes = (reg >> 32) & 0xffff;
226976638a2eSSrujana Challa 
227076638a2eSSrujana Challa 	e_max = max_ses + max_ies + max_aes;
227176638a2eSSrujana Challa 
227276638a2eSSrujana Challa 	seq_puts(filp, "===========================================\n");
227376638a2eSSrujana Challa 	for (e = 0; e < e_max; e++) {
227476638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL2(e));
227576638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Group Enable   0x%02llx\n", e,
227676638a2eSSrujana Challa 			   reg & 0xff);
227776638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_ACTIVE(e));
227876638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Active Info    0x%llx\n", e,
227976638a2eSSrujana Challa 			   reg);
228076638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL(e));
228176638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Control        0x%llx\n", e,
228276638a2eSSrujana Challa 			   reg);
228376638a2eSSrujana Challa 		seq_puts(filp, "===========================================\n");
228476638a2eSSrujana Challa 	}
228576638a2eSSrujana Challa 	return 0;
228676638a2eSSrujana Challa }
228776638a2eSSrujana Challa 
228876638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_engines_info, cpt_engines_info_display, NULL);
228976638a2eSSrujana Challa 
229076638a2eSSrujana Challa static int rvu_dbg_cpt_lfs_info_display(struct seq_file *filp, void *unused)
229176638a2eSSrujana Challa {
2292b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
2293b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
2294b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
229576638a2eSSrujana Challa 	struct rvu_block *block;
2296b0f60fabSSrujana Challa 	struct rvu_hwinfo *hw;
229776638a2eSSrujana Challa 	u64 reg;
229876638a2eSSrujana Challa 	u32 lf;
229976638a2eSSrujana Challa 
2300b0f60fabSSrujana Challa 	hw = rvu->hw;
230176638a2eSSrujana Challa 	block = &hw->block[blkaddr];
230276638a2eSSrujana Challa 	if (!block->lf.bmap)
230376638a2eSSrujana Challa 		return -ENODEV;
230476638a2eSSrujana Challa 
230576638a2eSSrujana Challa 	seq_puts(filp, "===========================================\n");
230676638a2eSSrujana Challa 	for (lf = 0; lf < block->lf.max; lf++) {
230776638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_CTL(lf));
230876638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CTL          0x%llx\n", lf, reg);
230976638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_CTL2(lf));
231076638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CTL2         0x%llx\n", lf, reg);
231176638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_PTR_CTL(lf));
231276638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] PTR_CTL      0x%llx\n", lf, reg);
231376638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, block->lfcfg_reg |
231476638a2eSSrujana Challa 				(lf << block->lfshift));
231576638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CFG          0x%llx\n", lf, reg);
231676638a2eSSrujana Challa 		seq_puts(filp, "===========================================\n");
231776638a2eSSrujana Challa 	}
231876638a2eSSrujana Challa 	return 0;
231976638a2eSSrujana Challa }
232076638a2eSSrujana Challa 
232176638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_lfs_info, cpt_lfs_info_display, NULL);
232276638a2eSSrujana Challa 
232376638a2eSSrujana Challa static int rvu_dbg_cpt_err_info_display(struct seq_file *filp, void *unused)
232476638a2eSSrujana Challa {
2325b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
2326b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
2327b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
232876638a2eSSrujana Challa 	u64 reg0, reg1;
232976638a2eSSrujana Challa 
233076638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_FLTX_INT(0));
233176638a2eSSrujana Challa 	reg1 = rvu_read64(rvu, blkaddr, CPT_AF_FLTX_INT(1));
233276638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_FLTX_INT:       0x%llx 0x%llx\n", reg0, reg1);
233376638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_EXE(0));
233476638a2eSSrujana Challa 	reg1 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_EXE(1));
233576638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_PSNX_EXE:       0x%llx 0x%llx\n", reg0, reg1);
233676638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_LF(0));
233776638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_PSNX_LF:        0x%llx\n", reg0);
233876638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_RVU_INT);
233976638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_RVU_INT:        0x%llx\n", reg0);
234076638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_RAS_INT);
234176638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_RAS_INT:        0x%llx\n", reg0);
234276638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_EXE_ERR_INFO);
234376638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_EXE_ERR_INFO:   0x%llx\n", reg0);
234476638a2eSSrujana Challa 
234576638a2eSSrujana Challa 	return 0;
234676638a2eSSrujana Challa }
234776638a2eSSrujana Challa 
234876638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_err_info, cpt_err_info_display, NULL);
234976638a2eSSrujana Challa 
235076638a2eSSrujana Challa static int rvu_dbg_cpt_pc_display(struct seq_file *filp, void *unused)
235176638a2eSSrujana Challa {
2352b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
2353b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
2354b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
235576638a2eSSrujana Challa 	u64 reg;
235676638a2eSSrujana Challa 
235776638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_INST_REQ_PC);
235876638a2eSSrujana Challa 	seq_printf(filp, "CPT instruction requests   %llu\n", reg);
235976638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_INST_LATENCY_PC);
236076638a2eSSrujana Challa 	seq_printf(filp, "CPT instruction latency    %llu\n", reg);
236176638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_REQ_PC);
236276638a2eSSrujana Challa 	seq_printf(filp, "CPT NCB read requests      %llu\n", reg);
236376638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_LATENCY_PC);
236476638a2eSSrujana Challa 	seq_printf(filp, "CPT NCB read latency       %llu\n", reg);
236576638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_UC_PC);
236676638a2eSSrujana Challa 	seq_printf(filp, "CPT read requests caused by UC fills   %llu\n", reg);
236776638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_ACTIVE_CYCLES_PC);
236876638a2eSSrujana Challa 	seq_printf(filp, "CPT active cycles pc       %llu\n", reg);
236976638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CPTCLK_CNT);
237076638a2eSSrujana Challa 	seq_printf(filp, "CPT clock count pc         %llu\n", reg);
237176638a2eSSrujana Challa 
237276638a2eSSrujana Challa 	return 0;
237376638a2eSSrujana Challa }
237476638a2eSSrujana Challa 
237576638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_pc, cpt_pc_display, NULL);
237676638a2eSSrujana Challa 
2377b0f60fabSSrujana Challa static void rvu_dbg_cpt_init(struct rvu *rvu, int blkaddr)
237876638a2eSSrujana Challa {
2379b0f60fabSSrujana Challa 	struct cpt_ctx *ctx;
2380b0f60fabSSrujana Challa 
2381b0f60fabSSrujana Challa 	if (!is_block_implemented(rvu->hw, blkaddr))
238276638a2eSSrujana Challa 		return;
238376638a2eSSrujana Challa 
2384b0f60fabSSrujana Challa 	if (blkaddr == BLKADDR_CPT0) {
238576638a2eSSrujana Challa 		rvu->rvu_dbg.cpt = debugfs_create_dir("cpt", rvu->rvu_dbg.root);
2386b0f60fabSSrujana Challa 		ctx = &rvu->rvu_dbg.cpt_ctx[0];
2387b0f60fabSSrujana Challa 		ctx->blkaddr = BLKADDR_CPT0;
2388b0f60fabSSrujana Challa 		ctx->rvu = rvu;
2389b0f60fabSSrujana Challa 	} else {
2390b0f60fabSSrujana Challa 		rvu->rvu_dbg.cpt = debugfs_create_dir("cpt1",
2391b0f60fabSSrujana Challa 						      rvu->rvu_dbg.root);
2392b0f60fabSSrujana Challa 		ctx = &rvu->rvu_dbg.cpt_ctx[1];
2393b0f60fabSSrujana Challa 		ctx->blkaddr = BLKADDR_CPT1;
2394b0f60fabSSrujana Challa 		ctx->rvu = rvu;
2395b0f60fabSSrujana Challa 	}
239676638a2eSSrujana Challa 
2397b0f60fabSSrujana Challa 	debugfs_create_file("cpt_pc", 0600, rvu->rvu_dbg.cpt, ctx,
239876638a2eSSrujana Challa 			    &rvu_dbg_cpt_pc_fops);
2399b0f60fabSSrujana Challa 	debugfs_create_file("cpt_ae_sts", 0600, rvu->rvu_dbg.cpt, ctx,
240076638a2eSSrujana Challa 			    &rvu_dbg_cpt_ae_sts_fops);
2401b0f60fabSSrujana Challa 	debugfs_create_file("cpt_se_sts", 0600, rvu->rvu_dbg.cpt, ctx,
240276638a2eSSrujana Challa 			    &rvu_dbg_cpt_se_sts_fops);
2403b0f60fabSSrujana Challa 	debugfs_create_file("cpt_ie_sts", 0600, rvu->rvu_dbg.cpt, ctx,
240476638a2eSSrujana Challa 			    &rvu_dbg_cpt_ie_sts_fops);
2405b0f60fabSSrujana Challa 	debugfs_create_file("cpt_engines_info", 0600, rvu->rvu_dbg.cpt, ctx,
240676638a2eSSrujana Challa 			    &rvu_dbg_cpt_engines_info_fops);
2407b0f60fabSSrujana Challa 	debugfs_create_file("cpt_lfs_info", 0600, rvu->rvu_dbg.cpt, ctx,
240876638a2eSSrujana Challa 			    &rvu_dbg_cpt_lfs_info_fops);
2409b0f60fabSSrujana Challa 	debugfs_create_file("cpt_err_info", 0600, rvu->rvu_dbg.cpt, ctx,
241076638a2eSSrujana Challa 			    &rvu_dbg_cpt_err_info_fops);
241176638a2eSSrujana Challa }
241276638a2eSSrujana Challa 
24133feac505SGeetha sowjanya static const char *rvu_get_dbg_dir_name(struct rvu *rvu)
24143feac505SGeetha sowjanya {
24153feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
24163feac505SGeetha sowjanya 		return "cn10k";
24173feac505SGeetha sowjanya 	else
24183feac505SGeetha sowjanya 		return "octeontx2";
24193feac505SGeetha sowjanya }
24203feac505SGeetha sowjanya 
242123205e6dSChristina Jacob void rvu_dbg_init(struct rvu *rvu)
242223205e6dSChristina Jacob {
24233feac505SGeetha sowjanya 	rvu->rvu_dbg.root = debugfs_create_dir(rvu_get_dbg_dir_name(rvu), NULL);
242423205e6dSChristina Jacob 
24252ce5a307SDan Carpenter 	debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu,
24262ce5a307SDan Carpenter 			    &rvu_dbg_rsrc_status_fops);
2427e2fb3730SRakesh Babu 
242891c6945eSHariprasad Kelam 	if (!cgx_get_cgxcnt_max())
242991c6945eSHariprasad Kelam 		goto create;
243091c6945eSHariprasad Kelam 
243191c6945eSHariprasad Kelam 	if (is_rvu_otx2(rvu))
243291c6945eSHariprasad Kelam 		debugfs_create_file("rvu_pf_cgx_map", 0444, rvu->rvu_dbg.root,
243391c6945eSHariprasad Kelam 				    rvu, &rvu_dbg_rvu_pf_cgx_map_fops);
243491c6945eSHariprasad Kelam 	else
2435*786621d2SGeetha sowjanya 		debugfs_create_file("rvu_pf_rpm_map", 0444, rvu->rvu_dbg.root,
243691c6945eSHariprasad Kelam 				    rvu, &rvu_dbg_rvu_pf_cgx_map_fops);
243791c6945eSHariprasad Kelam 
243891c6945eSHariprasad Kelam create:
24398756828aSChristina Jacob 	rvu_dbg_npa_init(rvu);
24400f3ce484SRakesh Babu 	rvu_dbg_nix_init(rvu, BLKADDR_NIX0);
24410f3ce484SRakesh Babu 
24420f3ce484SRakesh Babu 	rvu_dbg_nix_init(rvu, BLKADDR_NIX1);
2443c57211b5SPrakash Brahmajyosyula 	rvu_dbg_cgx_init(rvu);
2444e07fb507SSunil Goutham 	rvu_dbg_npc_init(rvu);
2445b0f60fabSSrujana Challa 	rvu_dbg_cpt_init(rvu, BLKADDR_CPT0);
2446b0f60fabSSrujana Challa 	rvu_dbg_cpt_init(rvu, BLKADDR_CPT1);
244723205e6dSChristina Jacob }
244823205e6dSChristina Jacob 
244923205e6dSChristina Jacob void rvu_dbg_exit(struct rvu *rvu)
245023205e6dSChristina Jacob {
245123205e6dSChristina Jacob 	debugfs_remove_recursive(rvu->rvu_dbg.root);
245223205e6dSChristina Jacob }
245323205e6dSChristina Jacob 
245423205e6dSChristina Jacob #endif /* CONFIG_DEBUG_FS */
2455