123205e6dSChristina Jacob // SPDX-License-Identifier: GPL-2.0
2c7cd6c5aSSunil Goutham /* Marvell RVU Admin Function driver
323205e6dSChristina Jacob  *
4c7cd6c5aSSunil Goutham  * Copyright (C) 2019 Marvell.
523205e6dSChristina Jacob  *
623205e6dSChristina Jacob  */
723205e6dSChristina Jacob 
823205e6dSChristina Jacob #ifdef CONFIG_DEBUG_FS
923205e6dSChristina Jacob 
1023205e6dSChristina Jacob #include <linux/fs.h>
1123205e6dSChristina Jacob #include <linux/debugfs.h>
1223205e6dSChristina Jacob #include <linux/module.h>
1323205e6dSChristina Jacob #include <linux/pci.h>
1423205e6dSChristina Jacob 
1523205e6dSChristina Jacob #include "rvu_struct.h"
1623205e6dSChristina Jacob #include "rvu_reg.h"
1723205e6dSChristina Jacob #include "rvu.h"
18c57211b5SPrakash Brahmajyosyula #include "cgx.h"
1991c6945eSHariprasad Kelam #include "lmac_common.h"
20e07fb507SSunil Goutham #include "npc.h"
2187e4ea29SRatheesh Kannoth #include "rvu_npc_hash.h"
22d06c2abaSGeetha sowjanya #include "mcs.h"
2323205e6dSChristina Jacob 
2423205e6dSChristina Jacob #define DEBUGFS_DIR_NAME "octeontx2"
2523205e6dSChristina Jacob 
26c57211b5SPrakash Brahmajyosyula enum {
27c57211b5SPrakash Brahmajyosyula 	CGX_STAT0,
28c57211b5SPrakash Brahmajyosyula 	CGX_STAT1,
29c57211b5SPrakash Brahmajyosyula 	CGX_STAT2,
30c57211b5SPrakash Brahmajyosyula 	CGX_STAT3,
31c57211b5SPrakash Brahmajyosyula 	CGX_STAT4,
32c57211b5SPrakash Brahmajyosyula 	CGX_STAT5,
33c57211b5SPrakash Brahmajyosyula 	CGX_STAT6,
34c57211b5SPrakash Brahmajyosyula 	CGX_STAT7,
35c57211b5SPrakash Brahmajyosyula 	CGX_STAT8,
36c57211b5SPrakash Brahmajyosyula 	CGX_STAT9,
37c57211b5SPrakash Brahmajyosyula 	CGX_STAT10,
38c57211b5SPrakash Brahmajyosyula 	CGX_STAT11,
39c57211b5SPrakash Brahmajyosyula 	CGX_STAT12,
40c57211b5SPrakash Brahmajyosyula 	CGX_STAT13,
41c57211b5SPrakash Brahmajyosyula 	CGX_STAT14,
42c57211b5SPrakash Brahmajyosyula 	CGX_STAT15,
43c57211b5SPrakash Brahmajyosyula 	CGX_STAT16,
44c57211b5SPrakash Brahmajyosyula 	CGX_STAT17,
45c57211b5SPrakash Brahmajyosyula 	CGX_STAT18,
46c57211b5SPrakash Brahmajyosyula };
47c57211b5SPrakash Brahmajyosyula 
48f967488dSLinu Cherian /* NIX TX stats */
49f967488dSLinu Cherian enum nix_stat_lf_tx {
50f967488dSLinu Cherian 	TX_UCAST	= 0x0,
51f967488dSLinu Cherian 	TX_BCAST	= 0x1,
52f967488dSLinu Cherian 	TX_MCAST	= 0x2,
53f967488dSLinu Cherian 	TX_DROP		= 0x3,
54f967488dSLinu Cherian 	TX_OCTS		= 0x4,
55f967488dSLinu Cherian 	TX_STATS_ENUM_LAST,
56f967488dSLinu Cherian };
57f967488dSLinu Cherian 
58f967488dSLinu Cherian /* NIX RX stats */
59f967488dSLinu Cherian enum nix_stat_lf_rx {
60f967488dSLinu Cherian 	RX_OCTS		= 0x0,
61f967488dSLinu Cherian 	RX_UCAST	= 0x1,
62f967488dSLinu Cherian 	RX_BCAST	= 0x2,
63f967488dSLinu Cherian 	RX_MCAST	= 0x3,
64f967488dSLinu Cherian 	RX_DROP		= 0x4,
65f967488dSLinu Cherian 	RX_DROP_OCTS	= 0x5,
66f967488dSLinu Cherian 	RX_FCS		= 0x6,
67f967488dSLinu Cherian 	RX_ERR		= 0x7,
68f967488dSLinu Cherian 	RX_DRP_BCAST	= 0x8,
69f967488dSLinu Cherian 	RX_DRP_MCAST	= 0x9,
70f967488dSLinu Cherian 	RX_DRP_L3BCAST	= 0xa,
71f967488dSLinu Cherian 	RX_DRP_L3MCAST	= 0xb,
72f967488dSLinu Cherian 	RX_STATS_ENUM_LAST,
73f967488dSLinu Cherian };
74f967488dSLinu Cherian 
75c57211b5SPrakash Brahmajyosyula static char *cgx_rx_stats_fields[] = {
76c57211b5SPrakash Brahmajyosyula 	[CGX_STAT0]	= "Received packets",
77c57211b5SPrakash Brahmajyosyula 	[CGX_STAT1]	= "Octets of received packets",
78c57211b5SPrakash Brahmajyosyula 	[CGX_STAT2]	= "Received PAUSE packets",
79c57211b5SPrakash Brahmajyosyula 	[CGX_STAT3]	= "Received PAUSE and control packets",
80c57211b5SPrakash Brahmajyosyula 	[CGX_STAT4]	= "Filtered DMAC0 (NIX-bound) packets",
81c57211b5SPrakash Brahmajyosyula 	[CGX_STAT5]	= "Filtered DMAC0 (NIX-bound) octets",
82c57211b5SPrakash Brahmajyosyula 	[CGX_STAT6]	= "Packets dropped due to RX FIFO full",
83c57211b5SPrakash Brahmajyosyula 	[CGX_STAT7]	= "Octets dropped due to RX FIFO full",
84c57211b5SPrakash Brahmajyosyula 	[CGX_STAT8]	= "Error packets",
85c57211b5SPrakash Brahmajyosyula 	[CGX_STAT9]	= "Filtered DMAC1 (NCSI-bound) packets",
86c57211b5SPrakash Brahmajyosyula 	[CGX_STAT10]	= "Filtered DMAC1 (NCSI-bound) octets",
87c57211b5SPrakash Brahmajyosyula 	[CGX_STAT11]	= "NCSI-bound packets dropped",
88c57211b5SPrakash Brahmajyosyula 	[CGX_STAT12]	= "NCSI-bound octets dropped",
89c57211b5SPrakash Brahmajyosyula };
90c57211b5SPrakash Brahmajyosyula 
91c57211b5SPrakash Brahmajyosyula static char *cgx_tx_stats_fields[] = {
92c57211b5SPrakash Brahmajyosyula 	[CGX_STAT0]	= "Packets dropped due to excessive collisions",
93c57211b5SPrakash Brahmajyosyula 	[CGX_STAT1]	= "Packets dropped due to excessive deferral",
94c57211b5SPrakash Brahmajyosyula 	[CGX_STAT2]	= "Multiple collisions before successful transmission",
95c57211b5SPrakash Brahmajyosyula 	[CGX_STAT3]	= "Single collisions before successful transmission",
96c57211b5SPrakash Brahmajyosyula 	[CGX_STAT4]	= "Total octets sent on the interface",
97c57211b5SPrakash Brahmajyosyula 	[CGX_STAT5]	= "Total frames sent on the interface",
98c57211b5SPrakash Brahmajyosyula 	[CGX_STAT6]	= "Packets sent with an octet count < 64",
99c57211b5SPrakash Brahmajyosyula 	[CGX_STAT7]	= "Packets sent with an octet count == 64",
1001910ccf0SRakesh Babu Saladi 	[CGX_STAT8]	= "Packets sent with an octet count of 65-127",
101c57211b5SPrakash Brahmajyosyula 	[CGX_STAT9]	= "Packets sent with an octet count of 128-255",
102c57211b5SPrakash Brahmajyosyula 	[CGX_STAT10]	= "Packets sent with an octet count of 256-511",
103c57211b5SPrakash Brahmajyosyula 	[CGX_STAT11]	= "Packets sent with an octet count of 512-1023",
104c57211b5SPrakash Brahmajyosyula 	[CGX_STAT12]	= "Packets sent with an octet count of 1024-1518",
105c57211b5SPrakash Brahmajyosyula 	[CGX_STAT13]	= "Packets sent with an octet count of > 1518",
106c57211b5SPrakash Brahmajyosyula 	[CGX_STAT14]	= "Packets sent to a broadcast DMAC",
107c57211b5SPrakash Brahmajyosyula 	[CGX_STAT15]	= "Packets sent to the multicast DMAC",
108c57211b5SPrakash Brahmajyosyula 	[CGX_STAT16]	= "Transmit underflow and were truncated",
109c57211b5SPrakash Brahmajyosyula 	[CGX_STAT17]	= "Control/PAUSE packets sent",
110c57211b5SPrakash Brahmajyosyula };
111c57211b5SPrakash Brahmajyosyula 
112ce7a6c31SHariprasad Kelam static char *rpm_rx_stats_fields[] = {
113ce7a6c31SHariprasad Kelam 	"Octets of received packets",
114ce7a6c31SHariprasad Kelam 	"Octets of received packets with out error",
115ce7a6c31SHariprasad Kelam 	"Received packets with alignment errors",
116ce7a6c31SHariprasad Kelam 	"Control/PAUSE packets received",
117ce7a6c31SHariprasad Kelam 	"Packets received with Frame too long Errors",
118ce7a6c31SHariprasad Kelam 	"Packets received with a1nrange length Errors",
119ce7a6c31SHariprasad Kelam 	"Received packets",
120ce7a6c31SHariprasad Kelam 	"Packets received with FrameCheckSequenceErrors",
121ce7a6c31SHariprasad Kelam 	"Packets received with VLAN header",
122ce7a6c31SHariprasad Kelam 	"Error packets",
123a6e0ee35SColin Ian King 	"Packets received with unicast DMAC",
124ce7a6c31SHariprasad Kelam 	"Packets received with multicast DMAC",
125ce7a6c31SHariprasad Kelam 	"Packets received with broadcast DMAC",
126ce7a6c31SHariprasad Kelam 	"Dropped packets",
127ce7a6c31SHariprasad Kelam 	"Total frames received on interface",
128ce7a6c31SHariprasad Kelam 	"Packets received with an octet count < 64",
129ce7a6c31SHariprasad Kelam 	"Packets received with an octet count == 64",
1301910ccf0SRakesh Babu Saladi 	"Packets received with an octet count of 65-127",
131ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 128-255",
132ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 256-511",
133ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 512-1023",
134ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of 1024-1518",
135ce7a6c31SHariprasad Kelam 	"Packets received with an octet count of > 1518",
136ce7a6c31SHariprasad Kelam 	"Oversized Packets",
137ce7a6c31SHariprasad Kelam 	"Jabber Packets",
138ce7a6c31SHariprasad Kelam 	"Fragmented Packets",
139ce7a6c31SHariprasad Kelam 	"CBFC(class based flow control) pause frames received for class 0",
140ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 1",
141ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 2",
142ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 3",
143ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 4",
144ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 5",
145ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 6",
146ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 7",
147ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 8",
148ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 9",
149ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 10",
150ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 11",
151ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 12",
152ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 13",
153ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 14",
154ce7a6c31SHariprasad Kelam 	"CBFC pause frames received for class 15",
155ce7a6c31SHariprasad Kelam 	"MAC control packets received",
156ce7a6c31SHariprasad Kelam };
157ce7a6c31SHariprasad Kelam 
158ce7a6c31SHariprasad Kelam static char *rpm_tx_stats_fields[] = {
159ce7a6c31SHariprasad Kelam 	"Total octets sent on the interface",
160ce7a6c31SHariprasad Kelam 	"Total octets transmitted OK",
161ce7a6c31SHariprasad Kelam 	"Control/Pause frames sent",
162ce7a6c31SHariprasad Kelam 	"Total frames transmitted OK",
163ce7a6c31SHariprasad Kelam 	"Total frames sent with VLAN header",
164ce7a6c31SHariprasad Kelam 	"Error Packets",
165ce7a6c31SHariprasad Kelam 	"Packets sent to unicast DMAC",
166ce7a6c31SHariprasad Kelam 	"Packets sent to the multicast DMAC",
167ce7a6c31SHariprasad Kelam 	"Packets sent to a broadcast DMAC",
168ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count == 64",
1691910ccf0SRakesh Babu Saladi 	"Packets sent with an octet count of 65-127",
170ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 128-255",
171ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 256-511",
172ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 512-1023",
173ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of 1024-1518",
174ce7a6c31SHariprasad Kelam 	"Packets sent with an octet count of > 1518",
175ce7a6c31SHariprasad Kelam 	"CBFC(class based flow control) pause frames transmitted for class 0",
176ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 1",
177ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 2",
178ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 3",
179ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 4",
180ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 5",
181ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 6",
182ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 7",
183ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 8",
184ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 9",
185ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 10",
186ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 11",
187ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 12",
188ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 13",
189ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 14",
190ce7a6c31SHariprasad Kelam 	"CBFC pause frames transmitted for class 15",
191ce7a6c31SHariprasad Kelam 	"MAC control packets sent",
192ce7a6c31SHariprasad Kelam 	"Total frames sent on the interface"
193ce7a6c31SHariprasad Kelam };
194ce7a6c31SHariprasad Kelam 
19576638a2eSSrujana Challa enum cpt_eng_type {
19676638a2eSSrujana Challa 	CPT_AE_TYPE = 1,
19776638a2eSSrujana Challa 	CPT_SE_TYPE = 2,
19876638a2eSSrujana Challa 	CPT_IE_TYPE = 3,
19976638a2eSSrujana Challa };
20076638a2eSSrujana Challa 
20123205e6dSChristina Jacob #define rvu_dbg_NULL NULL
2028756828aSChristina Jacob #define rvu_dbg_open_NULL NULL
2038756828aSChristina Jacob 
2048756828aSChristina Jacob #define RVU_DEBUG_SEQ_FOPS(name, read_op, write_op)	\
2058756828aSChristina Jacob static int rvu_dbg_open_##name(struct inode *inode, struct file *file) \
2068756828aSChristina Jacob { \
2078756828aSChristina Jacob 	return single_open(file, rvu_dbg_##read_op, inode->i_private); \
2088756828aSChristina Jacob } \
2098756828aSChristina Jacob static const struct file_operations rvu_dbg_##name##_fops = { \
2108756828aSChristina Jacob 	.owner		= THIS_MODULE, \
2118756828aSChristina Jacob 	.open		= rvu_dbg_open_##name, \
2128756828aSChristina Jacob 	.read		= seq_read, \
2138756828aSChristina Jacob 	.write		= rvu_dbg_##write_op, \
2148756828aSChristina Jacob 	.llseek		= seq_lseek, \
2158756828aSChristina Jacob 	.release	= single_release, \
2168756828aSChristina Jacob }
21723205e6dSChristina Jacob 
21823205e6dSChristina Jacob #define RVU_DEBUG_FOPS(name, read_op, write_op) \
21923205e6dSChristina Jacob static const struct file_operations rvu_dbg_##name##_fops = { \
22023205e6dSChristina Jacob 	.owner = THIS_MODULE, \
22123205e6dSChristina Jacob 	.open = simple_open, \
22223205e6dSChristina Jacob 	.read = rvu_dbg_##read_op, \
22323205e6dSChristina Jacob 	.write = rvu_dbg_##write_op \
22423205e6dSChristina Jacob }
22523205e6dSChristina Jacob 
22602e202c3SPrakash Brahmajyosyula static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf);
22702e202c3SPrakash Brahmajyosyula 
rvu_dbg_mcs_port_stats_display(struct seq_file * filp,void * unused,int dir)228d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_port_stats_display(struct seq_file *filp, void *unused, int dir)
229d06c2abaSGeetha sowjanya {
230d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
231d06c2abaSGeetha sowjanya 	struct mcs_port_stats stats;
232d06c2abaSGeetha sowjanya 	int lmac;
233d06c2abaSGeetha sowjanya 
234d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n port stats\n");
235d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
236d06c2abaSGeetha sowjanya 	for_each_set_bit(lmac, &mcs->hw->lmac_bmap, mcs->hw->lmac_cnt) {
237d06c2abaSGeetha sowjanya 		mcs_get_port_stats(mcs, &stats, lmac, dir);
238d06c2abaSGeetha sowjanya 		seq_printf(filp, "port%d: Tcam Miss: %lld\n", lmac, stats.tcam_miss_cnt);
239d06c2abaSGeetha sowjanya 		seq_printf(filp, "port%d: Parser errors: %lld\n", lmac, stats.parser_err_cnt);
240d06c2abaSGeetha sowjanya 
241d06c2abaSGeetha sowjanya 		if (dir == MCS_RX && mcs->hw->mcs_blks > 1)
242d06c2abaSGeetha sowjanya 			seq_printf(filp, "port%d: Preempt error: %lld\n", lmac,
243d06c2abaSGeetha sowjanya 				   stats.preempt_err_cnt);
244d06c2abaSGeetha sowjanya 		if (dir == MCS_TX)
245d06c2abaSGeetha sowjanya 			seq_printf(filp, "port%d: Sectag insert error: %lld\n", lmac,
246d06c2abaSGeetha sowjanya 				   stats.sectag_insert_err_cnt);
247d06c2abaSGeetha sowjanya 	}
248d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
249d06c2abaSGeetha sowjanya 	return 0;
250d06c2abaSGeetha sowjanya }
251d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_rx_port_stats_display(struct seq_file * filp,void * unused)252d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_rx_port_stats_display(struct seq_file *filp, void *unused)
253d06c2abaSGeetha sowjanya {
254d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_port_stats_display(filp, unused, MCS_RX);
255d06c2abaSGeetha sowjanya }
256d06c2abaSGeetha sowjanya 
257d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_rx_port_stats, mcs_rx_port_stats_display, NULL);
258d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_tx_port_stats_display(struct seq_file * filp,void * unused)259d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_tx_port_stats_display(struct seq_file *filp, void *unused)
260d06c2abaSGeetha sowjanya {
261d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_port_stats_display(filp, unused, MCS_TX);
262d06c2abaSGeetha sowjanya }
263d06c2abaSGeetha sowjanya 
264d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_tx_port_stats, mcs_tx_port_stats_display, NULL);
265d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_sa_stats_display(struct seq_file * filp,void * unused,int dir)266d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_sa_stats_display(struct seq_file *filp, void *unused, int dir)
267d06c2abaSGeetha sowjanya {
268d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
269d06c2abaSGeetha sowjanya 	struct mcs_sa_stats stats;
270d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
271d06c2abaSGeetha sowjanya 	int sa_id;
272d06c2abaSGeetha sowjanya 
273d06c2abaSGeetha sowjanya 	if (dir == MCS_TX) {
274d06c2abaSGeetha sowjanya 		map = &mcs->tx.sa;
275d06c2abaSGeetha sowjanya 		mutex_lock(&mcs->stats_lock);
276d06c2abaSGeetha sowjanya 		for_each_set_bit(sa_id, map->bmap, mcs->hw->sa_entries) {
277d06c2abaSGeetha sowjanya 			seq_puts(filp, "\n TX SA stats\n");
278d06c2abaSGeetha sowjanya 			mcs_get_sa_stats(mcs, &stats, sa_id, MCS_TX);
279d06c2abaSGeetha sowjanya 			seq_printf(filp, "sa%d: Pkts encrypted: %lld\n", sa_id,
280d06c2abaSGeetha sowjanya 				   stats.pkt_encrypt_cnt);
281d06c2abaSGeetha sowjanya 
282d06c2abaSGeetha sowjanya 			seq_printf(filp, "sa%d: Pkts protected: %lld\n", sa_id,
283d06c2abaSGeetha sowjanya 				   stats.pkt_protected_cnt);
284d06c2abaSGeetha sowjanya 		}
285d06c2abaSGeetha sowjanya 		mutex_unlock(&mcs->stats_lock);
286d06c2abaSGeetha sowjanya 		return 0;
287d06c2abaSGeetha sowjanya 	}
288d06c2abaSGeetha sowjanya 
289d06c2abaSGeetha sowjanya 	/* RX stats */
290d06c2abaSGeetha sowjanya 	map = &mcs->rx.sa;
291d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
292d06c2abaSGeetha sowjanya 	for_each_set_bit(sa_id, map->bmap, mcs->hw->sa_entries) {
293d06c2abaSGeetha sowjanya 		seq_puts(filp, "\n RX SA stats\n");
294d06c2abaSGeetha sowjanya 		mcs_get_sa_stats(mcs, &stats, sa_id, MCS_RX);
295d06c2abaSGeetha sowjanya 		seq_printf(filp, "sa%d: Invalid pkts: %lld\n", sa_id, stats.pkt_invalid_cnt);
296d06c2abaSGeetha sowjanya 		seq_printf(filp, "sa%d: Pkts no sa error: %lld\n", sa_id, stats.pkt_nosaerror_cnt);
297d06c2abaSGeetha sowjanya 		seq_printf(filp, "sa%d: Pkts not valid: %lld\n", sa_id, stats.pkt_notvalid_cnt);
298d06c2abaSGeetha sowjanya 		seq_printf(filp, "sa%d: Pkts ok: %lld\n", sa_id, stats.pkt_ok_cnt);
299d06c2abaSGeetha sowjanya 		seq_printf(filp, "sa%d: Pkts no sa: %lld\n", sa_id, stats.pkt_nosa_cnt);
300d06c2abaSGeetha sowjanya 	}
301d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
302d06c2abaSGeetha sowjanya 	return 0;
303d06c2abaSGeetha sowjanya }
304d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_rx_sa_stats_display(struct seq_file * filp,void * unused)305d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_rx_sa_stats_display(struct seq_file *filp, void *unused)
306d06c2abaSGeetha sowjanya {
307d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_sa_stats_display(filp, unused, MCS_RX);
308d06c2abaSGeetha sowjanya }
309d06c2abaSGeetha sowjanya 
310d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_rx_sa_stats, mcs_rx_sa_stats_display, NULL);
311d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_tx_sa_stats_display(struct seq_file * filp,void * unused)312d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_tx_sa_stats_display(struct seq_file *filp, void *unused)
313d06c2abaSGeetha sowjanya {
314d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_sa_stats_display(filp, unused, MCS_TX);
315d06c2abaSGeetha sowjanya }
316d06c2abaSGeetha sowjanya 
317d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_tx_sa_stats, mcs_tx_sa_stats_display, NULL);
318d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_tx_sc_stats_display(struct seq_file * filp,void * unused)319d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_tx_sc_stats_display(struct seq_file *filp, void *unused)
320d06c2abaSGeetha sowjanya {
321d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
322d06c2abaSGeetha sowjanya 	struct mcs_sc_stats stats;
323d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
324d06c2abaSGeetha sowjanya 	int sc_id;
325d06c2abaSGeetha sowjanya 
326d06c2abaSGeetha sowjanya 	map = &mcs->tx.sc;
327d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n SC stats\n");
328d06c2abaSGeetha sowjanya 
329d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
330d06c2abaSGeetha sowjanya 	for_each_set_bit(sc_id, map->bmap, mcs->hw->sc_entries) {
331d06c2abaSGeetha sowjanya 		mcs_get_sc_stats(mcs, &stats, sc_id, MCS_TX);
332d06c2abaSGeetha sowjanya 		seq_printf(filp, "\n=======sc%d======\n\n", sc_id);
333d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Pkts encrypted: %lld\n", sc_id, stats.pkt_encrypt_cnt);
334d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Pkts protected: %lld\n", sc_id, stats.pkt_protected_cnt);
335d06c2abaSGeetha sowjanya 
336d06c2abaSGeetha sowjanya 		if (mcs->hw->mcs_blks == 1) {
337d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Octets encrypted: %lld\n", sc_id,
338d06c2abaSGeetha sowjanya 				   stats.octet_encrypt_cnt);
339d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Octets protected: %lld\n", sc_id,
340d06c2abaSGeetha sowjanya 				   stats.octet_protected_cnt);
341d06c2abaSGeetha sowjanya 		}
342d06c2abaSGeetha sowjanya 	}
343d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
344d06c2abaSGeetha sowjanya 	return 0;
345d06c2abaSGeetha sowjanya }
346d06c2abaSGeetha sowjanya 
347d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_tx_sc_stats, mcs_tx_sc_stats_display, NULL);
348d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_rx_sc_stats_display(struct seq_file * filp,void * unused)349d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_rx_sc_stats_display(struct seq_file *filp, void *unused)
350d06c2abaSGeetha sowjanya {
351d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
352d06c2abaSGeetha sowjanya 	struct mcs_sc_stats stats;
353d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
354d06c2abaSGeetha sowjanya 	int sc_id;
355d06c2abaSGeetha sowjanya 
356d06c2abaSGeetha sowjanya 	map = &mcs->rx.sc;
357d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n SC stats\n");
358d06c2abaSGeetha sowjanya 
359d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
360d06c2abaSGeetha sowjanya 	for_each_set_bit(sc_id, map->bmap, mcs->hw->sc_entries) {
361d06c2abaSGeetha sowjanya 		mcs_get_sc_stats(mcs, &stats, sc_id, MCS_RX);
362d06c2abaSGeetha sowjanya 		seq_printf(filp, "\n=======sc%d======\n\n", sc_id);
363d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Cam hits: %lld\n", sc_id, stats.hit_cnt);
364d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Invalid pkts: %lld\n", sc_id, stats.pkt_invalid_cnt);
365d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Late pkts: %lld\n", sc_id, stats.pkt_late_cnt);
366d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Notvalid pkts: %lld\n", sc_id, stats.pkt_notvalid_cnt);
367d06c2abaSGeetha sowjanya 		seq_printf(filp, "sc%d: Unchecked pkts: %lld\n", sc_id, stats.pkt_unchecked_cnt);
368d06c2abaSGeetha sowjanya 
369d06c2abaSGeetha sowjanya 		if (mcs->hw->mcs_blks > 1) {
370d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Delay pkts: %lld\n", sc_id, stats.pkt_delay_cnt);
371d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Pkts ok: %lld\n", sc_id, stats.pkt_ok_cnt);
372d06c2abaSGeetha sowjanya 		}
373d06c2abaSGeetha sowjanya 		if (mcs->hw->mcs_blks == 1) {
374d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Octets decrypted: %lld\n", sc_id,
375d06c2abaSGeetha sowjanya 				   stats.octet_decrypt_cnt);
376d06c2abaSGeetha sowjanya 			seq_printf(filp, "sc%d: Octets validated: %lld\n", sc_id,
377d06c2abaSGeetha sowjanya 				   stats.octet_validate_cnt);
378d06c2abaSGeetha sowjanya 		}
379d06c2abaSGeetha sowjanya 	}
380d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
381d06c2abaSGeetha sowjanya 	return 0;
382d06c2abaSGeetha sowjanya }
383d06c2abaSGeetha sowjanya 
384d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_rx_sc_stats, mcs_rx_sc_stats_display, NULL);
385d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_flowid_stats_display(struct seq_file * filp,void * unused,int dir)386d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_flowid_stats_display(struct seq_file *filp, void *unused, int dir)
387d06c2abaSGeetha sowjanya {
388d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
389d06c2abaSGeetha sowjanya 	struct mcs_flowid_stats stats;
390d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
391d06c2abaSGeetha sowjanya 	int flow_id;
392d06c2abaSGeetha sowjanya 
393d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n Flowid stats\n");
394d06c2abaSGeetha sowjanya 
395d06c2abaSGeetha sowjanya 	if (dir == MCS_RX)
396d06c2abaSGeetha sowjanya 		map = &mcs->rx.flow_ids;
397d06c2abaSGeetha sowjanya 	else
398d06c2abaSGeetha sowjanya 		map = &mcs->tx.flow_ids;
399d06c2abaSGeetha sowjanya 
400d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
401d06c2abaSGeetha sowjanya 	for_each_set_bit(flow_id, map->bmap, mcs->hw->tcam_entries) {
402d06c2abaSGeetha sowjanya 		mcs_get_flowid_stats(mcs, &stats, flow_id, dir);
403d06c2abaSGeetha sowjanya 		seq_printf(filp, "Flowid%d: Hit:%lld\n", flow_id, stats.tcam_hit_cnt);
404d06c2abaSGeetha sowjanya 	}
405d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
406d06c2abaSGeetha sowjanya 	return 0;
407d06c2abaSGeetha sowjanya }
408d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_tx_flowid_stats_display(struct seq_file * filp,void * unused)409d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_tx_flowid_stats_display(struct seq_file *filp, void *unused)
410d06c2abaSGeetha sowjanya {
411d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_flowid_stats_display(filp, unused, MCS_TX);
412d06c2abaSGeetha sowjanya }
413d06c2abaSGeetha sowjanya 
414d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_tx_flowid_stats, mcs_tx_flowid_stats_display, NULL);
415d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_rx_flowid_stats_display(struct seq_file * filp,void * unused)416d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_rx_flowid_stats_display(struct seq_file *filp, void *unused)
417d06c2abaSGeetha sowjanya {
418d06c2abaSGeetha sowjanya 	return rvu_dbg_mcs_flowid_stats_display(filp, unused, MCS_RX);
419d06c2abaSGeetha sowjanya }
420d06c2abaSGeetha sowjanya 
421d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_rx_flowid_stats, mcs_rx_flowid_stats_display, NULL);
422d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_tx_secy_stats_display(struct seq_file * filp,void * unused)423d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_tx_secy_stats_display(struct seq_file *filp, void *unused)
424d06c2abaSGeetha sowjanya {
425d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
426d06c2abaSGeetha sowjanya 	struct mcs_secy_stats stats;
427d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
428d06c2abaSGeetha sowjanya 	int secy_id;
429d06c2abaSGeetha sowjanya 
430d06c2abaSGeetha sowjanya 	map = &mcs->tx.secy;
431d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n MCS TX secy stats\n");
432d06c2abaSGeetha sowjanya 
433d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
434d06c2abaSGeetha sowjanya 	for_each_set_bit(secy_id, map->bmap, mcs->hw->secy_entries) {
435d06c2abaSGeetha sowjanya 		mcs_get_tx_secy_stats(mcs, &stats, secy_id);
436d06c2abaSGeetha sowjanya 		seq_printf(filp, "\n=======Secy%d======\n\n", secy_id);
437d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl bcast pkts: %lld\n", secy_id,
438d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_bcast_cnt);
439d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl Mcast pkts: %lld\n", secy_id,
440d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_mcast_cnt);
441d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl ucast pkts: %lld\n", secy_id,
442d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_ucast_cnt);
443d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl octets: %lld\n", secy_id, stats.ctl_octet_cnt);
444d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl bcast cnt: %lld\n", secy_id,
445d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_bcast_cnt);
446d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl mcast pkts: %lld\n", secy_id,
447d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_mcast_cnt);
448d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl ucast pkts: %lld\n", secy_id,
449d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_ucast_cnt);
450d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl octets: %lld\n", secy_id, stats.unctl_octet_cnt);
451d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Octet encrypted: %lld\n", secy_id,
452d06c2abaSGeetha sowjanya 			   stats.octet_encrypted_cnt);
453d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: octet protected: %lld\n", secy_id,
454d06c2abaSGeetha sowjanya 			   stats.octet_protected_cnt);
455d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts on active sa: %lld\n", secy_id,
456d06c2abaSGeetha sowjanya 			   stats.pkt_noactivesa_cnt);
457d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts too long: %lld\n", secy_id, stats.pkt_toolong_cnt);
458d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts untagged: %lld\n", secy_id, stats.pkt_untagged_cnt);
459d06c2abaSGeetha sowjanya 	}
460d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
461d06c2abaSGeetha sowjanya 	return 0;
462d06c2abaSGeetha sowjanya }
463d06c2abaSGeetha sowjanya 
464d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_tx_secy_stats, mcs_tx_secy_stats_display, NULL);
465d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_rx_secy_stats_display(struct seq_file * filp,void * unused)466d06c2abaSGeetha sowjanya static int rvu_dbg_mcs_rx_secy_stats_display(struct seq_file *filp, void *unused)
467d06c2abaSGeetha sowjanya {
468d06c2abaSGeetha sowjanya 	struct mcs *mcs = filp->private;
469d06c2abaSGeetha sowjanya 	struct mcs_secy_stats stats;
470d06c2abaSGeetha sowjanya 	struct rsrc_bmap *map;
471d06c2abaSGeetha sowjanya 	int secy_id;
472d06c2abaSGeetha sowjanya 
473d06c2abaSGeetha sowjanya 	map = &mcs->rx.secy;
474d06c2abaSGeetha sowjanya 	seq_puts(filp, "\n MCS secy stats\n");
475d06c2abaSGeetha sowjanya 
476d06c2abaSGeetha sowjanya 	mutex_lock(&mcs->stats_lock);
477d06c2abaSGeetha sowjanya 	for_each_set_bit(secy_id, map->bmap, mcs->hw->secy_entries) {
478d06c2abaSGeetha sowjanya 		mcs_get_rx_secy_stats(mcs, &stats, secy_id);
479d06c2abaSGeetha sowjanya 		seq_printf(filp, "\n=======Secy%d======\n\n", secy_id);
480d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl bcast pkts: %lld\n", secy_id,
481d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_bcast_cnt);
482d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl Mcast pkts: %lld\n", secy_id,
483d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_mcast_cnt);
484d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl ucast pkts: %lld\n", secy_id,
485d06c2abaSGeetha sowjanya 			   stats.ctl_pkt_ucast_cnt);
486d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl octets: %lld\n", secy_id, stats.ctl_octet_cnt);
487d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl bcast cnt: %lld\n", secy_id,
488d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_bcast_cnt);
489d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl mcast pkts: %lld\n", secy_id,
490d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_mcast_cnt);
491d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl ucast pkts: %lld\n", secy_id,
492d06c2abaSGeetha sowjanya 			   stats.unctl_pkt_ucast_cnt);
493d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Unctrl octets: %lld\n", secy_id, stats.unctl_octet_cnt);
494d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Octet decrypted: %lld\n", secy_id,
495d06c2abaSGeetha sowjanya 			   stats.octet_decrypted_cnt);
496d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: octet validated: %lld\n", secy_id,
497d06c2abaSGeetha sowjanya 			   stats.octet_validated_cnt);
498d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts on disable port: %lld\n", secy_id,
499d06c2abaSGeetha sowjanya 			   stats.pkt_port_disabled_cnt);
500c222b292SGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts with badtag: %lld\n", secy_id, stats.pkt_badtag_cnt);
501c222b292SGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts with no SA(sectag.tci.c=0): %lld\n", secy_id,
502c222b292SGeetha sowjanya 			   stats.pkt_nosa_cnt);
503d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Pkts with nosaerror: %lld\n", secy_id,
504d06c2abaSGeetha sowjanya 			   stats.pkt_nosaerror_cnt);
505d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Tagged ctrl pkts: %lld\n", secy_id,
506d06c2abaSGeetha sowjanya 			   stats.pkt_tagged_ctl_cnt);
507d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Untaged pkts: %lld\n", secy_id, stats.pkt_untaged_cnt);
508d06c2abaSGeetha sowjanya 		seq_printf(filp, "secy%d: Ctrl pkts: %lld\n", secy_id, stats.pkt_ctl_cnt);
509d06c2abaSGeetha sowjanya 		if (mcs->hw->mcs_blks > 1)
510d06c2abaSGeetha sowjanya 			seq_printf(filp, "secy%d: pkts notag: %lld\n", secy_id,
511d06c2abaSGeetha sowjanya 				   stats.pkt_notag_cnt);
512d06c2abaSGeetha sowjanya 	}
513d06c2abaSGeetha sowjanya 	mutex_unlock(&mcs->stats_lock);
514d06c2abaSGeetha sowjanya 	return 0;
515d06c2abaSGeetha sowjanya }
516d06c2abaSGeetha sowjanya 
517d06c2abaSGeetha sowjanya RVU_DEBUG_SEQ_FOPS(mcs_rx_secy_stats, mcs_rx_secy_stats_display, NULL);
518d06c2abaSGeetha sowjanya 
rvu_dbg_mcs_init(struct rvu * rvu)519d06c2abaSGeetha sowjanya static void rvu_dbg_mcs_init(struct rvu *rvu)
520d06c2abaSGeetha sowjanya {
521d06c2abaSGeetha sowjanya 	struct mcs *mcs;
522d06c2abaSGeetha sowjanya 	char dname[10];
523d06c2abaSGeetha sowjanya 	int i;
524d06c2abaSGeetha sowjanya 
525d06c2abaSGeetha sowjanya 	if (!rvu->mcs_blk_cnt)
526d06c2abaSGeetha sowjanya 		return;
527d06c2abaSGeetha sowjanya 
528d06c2abaSGeetha sowjanya 	rvu->rvu_dbg.mcs_root = debugfs_create_dir("mcs", rvu->rvu_dbg.root);
529d06c2abaSGeetha sowjanya 
530d06c2abaSGeetha sowjanya 	for (i = 0; i < rvu->mcs_blk_cnt; i++) {
531d06c2abaSGeetha sowjanya 		mcs = mcs_get_pdata(i);
532d06c2abaSGeetha sowjanya 
533d06c2abaSGeetha sowjanya 		sprintf(dname, "mcs%d", i);
534d06c2abaSGeetha sowjanya 		rvu->rvu_dbg.mcs = debugfs_create_dir(dname,
535d06c2abaSGeetha sowjanya 						      rvu->rvu_dbg.mcs_root);
536d06c2abaSGeetha sowjanya 
537d06c2abaSGeetha sowjanya 		rvu->rvu_dbg.mcs_rx = debugfs_create_dir("rx_stats", rvu->rvu_dbg.mcs);
538d06c2abaSGeetha sowjanya 
539d06c2abaSGeetha sowjanya 		debugfs_create_file("flowid", 0600, rvu->rvu_dbg.mcs_rx, mcs,
540d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_rx_flowid_stats_fops);
541d06c2abaSGeetha sowjanya 
542d06c2abaSGeetha sowjanya 		debugfs_create_file("secy", 0600, rvu->rvu_dbg.mcs_rx, mcs,
543d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_rx_secy_stats_fops);
544d06c2abaSGeetha sowjanya 
545d06c2abaSGeetha sowjanya 		debugfs_create_file("sc", 0600, rvu->rvu_dbg.mcs_rx, mcs,
546d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_rx_sc_stats_fops);
547d06c2abaSGeetha sowjanya 
548d06c2abaSGeetha sowjanya 		debugfs_create_file("sa", 0600, rvu->rvu_dbg.mcs_rx, mcs,
549d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_rx_sa_stats_fops);
550d06c2abaSGeetha sowjanya 
551d06c2abaSGeetha sowjanya 		debugfs_create_file("port", 0600, rvu->rvu_dbg.mcs_rx, mcs,
552d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_rx_port_stats_fops);
553d06c2abaSGeetha sowjanya 
554d06c2abaSGeetha sowjanya 		rvu->rvu_dbg.mcs_tx = debugfs_create_dir("tx_stats", rvu->rvu_dbg.mcs);
555d06c2abaSGeetha sowjanya 
556d06c2abaSGeetha sowjanya 		debugfs_create_file("flowid", 0600, rvu->rvu_dbg.mcs_tx, mcs,
557d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_tx_flowid_stats_fops);
558d06c2abaSGeetha sowjanya 
559d06c2abaSGeetha sowjanya 		debugfs_create_file("secy", 0600, rvu->rvu_dbg.mcs_tx, mcs,
560d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_tx_secy_stats_fops);
561d06c2abaSGeetha sowjanya 
562d06c2abaSGeetha sowjanya 		debugfs_create_file("sc", 0600, rvu->rvu_dbg.mcs_tx, mcs,
563d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_tx_sc_stats_fops);
564d06c2abaSGeetha sowjanya 
565d06c2abaSGeetha sowjanya 		debugfs_create_file("sa", 0600, rvu->rvu_dbg.mcs_tx, mcs,
566d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_tx_sa_stats_fops);
567d06c2abaSGeetha sowjanya 
568d06c2abaSGeetha sowjanya 		debugfs_create_file("port", 0600, rvu->rvu_dbg.mcs_tx, mcs,
569d06c2abaSGeetha sowjanya 				    &rvu_dbg_mcs_tx_port_stats_fops);
570d06c2abaSGeetha sowjanya 	}
571d06c2abaSGeetha sowjanya }
572d06c2abaSGeetha sowjanya 
5730daa55d0SHarman Kalra #define LMT_MAPTBL_ENTRY_SIZE 16
5740daa55d0SHarman Kalra /* Dump LMTST map table */
rvu_dbg_lmtst_map_table_display(struct file * filp,char __user * buffer,size_t count,loff_t * ppos)5750daa55d0SHarman Kalra static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp,
5760daa55d0SHarman Kalra 					       char __user *buffer,
5770daa55d0SHarman Kalra 					       size_t count, loff_t *ppos)
5780daa55d0SHarman Kalra {
5790daa55d0SHarman Kalra 	struct rvu *rvu = filp->private_data;
5800daa55d0SHarman Kalra 	u64 lmt_addr, val, tbl_base;
5810daa55d0SHarman Kalra 	int pf, vf, num_vfs, hw_vfs;
5820daa55d0SHarman Kalra 	void __iomem *lmt_map_base;
5830daa55d0SHarman Kalra 	int buf_size = 10240;
584a280ef90SDan Carpenter 	size_t off = 0;
585a280ef90SDan Carpenter 	int index = 0;
5860daa55d0SHarman Kalra 	char *buf;
587a280ef90SDan Carpenter 	int ret;
5880daa55d0SHarman Kalra 
5890daa55d0SHarman Kalra 	/* don't allow partial reads */
5900daa55d0SHarman Kalra 	if (*ppos != 0)
5910daa55d0SHarman Kalra 		return 0;
5920daa55d0SHarman Kalra 
5930daa55d0SHarman Kalra 	buf = kzalloc(buf_size, GFP_KERNEL);
5940daa55d0SHarman Kalra 	if (!buf)
5950b9f1b26SNiels Dossche 		return -ENOMEM;
5960daa55d0SHarman Kalra 
5970daa55d0SHarman Kalra 	tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE);
5980daa55d0SHarman Kalra 
5990daa55d0SHarman Kalra 	lmt_map_base = ioremap_wc(tbl_base, 128 * 1024);
6000daa55d0SHarman Kalra 	if (!lmt_map_base) {
6010daa55d0SHarman Kalra 		dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n");
6020daa55d0SHarman Kalra 		kfree(buf);
6030daa55d0SHarman Kalra 		return false;
6040daa55d0SHarman Kalra 	}
6050daa55d0SHarman Kalra 
6060daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off,
6070daa55d0SHarman Kalra 			  "\n\t\t\t\t\tLmtst Map Table Entries");
6080daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off,
6090daa55d0SHarman Kalra 			  "\n\t\t\t\t\t=======================");
6100daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off, "\nPcifunc\t\t\t");
6110daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off, "Table Index\t\t");
6120daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off,
6130daa55d0SHarman Kalra 			  "Lmtline Base (word 0)\t\t");
6140daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off,
6150daa55d0SHarman Kalra 			  "Lmt Map Entry (word 1)");
6160daa55d0SHarman Kalra 	off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
6170daa55d0SHarman Kalra 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
6180daa55d0SHarman Kalra 		off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d  \t\t\t",
6190daa55d0SHarman Kalra 				    pf);
6200daa55d0SHarman Kalra 
6210daa55d0SHarman Kalra 		index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE;
6220daa55d0SHarman Kalra 		off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t",
6230daa55d0SHarman Kalra 				 (tbl_base + index));
6240daa55d0SHarman Kalra 		lmt_addr = readq(lmt_map_base + index);
6250daa55d0SHarman Kalra 		off += scnprintf(&buf[off], buf_size - 1 - off,
6260daa55d0SHarman Kalra 				 " 0x%016llx\t\t", lmt_addr);
6270daa55d0SHarman Kalra 		index += 8;
6280daa55d0SHarman Kalra 		val = readq(lmt_map_base + index);
6290daa55d0SHarman Kalra 		off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%016llx\n",
6300daa55d0SHarman Kalra 				 val);
6310daa55d0SHarman Kalra 		/* Reading num of VFs per PF */
6320daa55d0SHarman Kalra 		rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs);
6330daa55d0SHarman Kalra 		for (vf = 0; vf < num_vfs; vf++) {
6340daa55d0SHarman Kalra 			index = (pf * rvu->hw->total_vfs * 16) +
6350daa55d0SHarman Kalra 				((vf + 1)  * LMT_MAPTBL_ENTRY_SIZE);
6360daa55d0SHarman Kalra 			off += scnprintf(&buf[off], buf_size - 1 - off,
6370daa55d0SHarman Kalra 					    "PF%d:VF%d  \t\t", pf, vf);
6380daa55d0SHarman Kalra 			off += scnprintf(&buf[off], buf_size - 1 - off,
6390daa55d0SHarman Kalra 					 " 0x%llx\t\t", (tbl_base + index));
6400daa55d0SHarman Kalra 			lmt_addr = readq(lmt_map_base + index);
6410daa55d0SHarman Kalra 			off += scnprintf(&buf[off], buf_size - 1 - off,
6420daa55d0SHarman Kalra 					 " 0x%016llx\t\t", lmt_addr);
6430daa55d0SHarman Kalra 			index += 8;
6440daa55d0SHarman Kalra 			val = readq(lmt_map_base + index);
6450daa55d0SHarman Kalra 			off += scnprintf(&buf[off], buf_size - 1 - off,
6460daa55d0SHarman Kalra 					 " 0x%016llx\n", val);
6470daa55d0SHarman Kalra 		}
6480daa55d0SHarman Kalra 	}
6490daa55d0SHarman Kalra 	off +=	scnprintf(&buf[off], buf_size - 1 - off, "\n");
6500daa55d0SHarman Kalra 
651a280ef90SDan Carpenter 	ret = min(off, count);
652a280ef90SDan Carpenter 	if (copy_to_user(buffer, buf, ret))
653a280ef90SDan Carpenter 		ret = -EFAULT;
6540daa55d0SHarman Kalra 	kfree(buf);
6550daa55d0SHarman Kalra 
6560daa55d0SHarman Kalra 	iounmap(lmt_map_base);
657a280ef90SDan Carpenter 	if (ret < 0)
658a280ef90SDan Carpenter 		return ret;
6590daa55d0SHarman Kalra 
660a280ef90SDan Carpenter 	*ppos = ret;
661a280ef90SDan Carpenter 	return ret;
6620daa55d0SHarman Kalra }
6630daa55d0SHarman Kalra 
6640daa55d0SHarman Kalra RVU_DEBUG_FOPS(lmtst_map_table, lmtst_map_table_display, NULL);
6650daa55d0SHarman Kalra 
get_lf_str_list(struct rvu_block block,int pcifunc,char * lfs)666e77bcdd1SRakesh Babu static void get_lf_str_list(struct rvu_block block, int pcifunc,
667e77bcdd1SRakesh Babu 			    char *lfs)
668e77bcdd1SRakesh Babu {
669e77bcdd1SRakesh Babu 	int lf = 0, seq = 0, len = 0, prev_lf = block.lf.max;
670e77bcdd1SRakesh Babu 
671e77bcdd1SRakesh Babu 	for_each_set_bit(lf, block.lf.bmap, block.lf.max) {
672e77bcdd1SRakesh Babu 		if (lf >= block.lf.max)
673e77bcdd1SRakesh Babu 			break;
674e77bcdd1SRakesh Babu 
675e77bcdd1SRakesh Babu 		if (block.fn_map[lf] != pcifunc)
676e77bcdd1SRakesh Babu 			continue;
677e77bcdd1SRakesh Babu 
678e77bcdd1SRakesh Babu 		if (lf == prev_lf + 1) {
679e77bcdd1SRakesh Babu 			prev_lf = lf;
680e77bcdd1SRakesh Babu 			seq = 1;
681e77bcdd1SRakesh Babu 			continue;
682e77bcdd1SRakesh Babu 		}
683e77bcdd1SRakesh Babu 
684e77bcdd1SRakesh Babu 		if (seq)
685e77bcdd1SRakesh Babu 			len += sprintf(lfs + len, "-%d,%d", prev_lf, lf);
686e77bcdd1SRakesh Babu 		else
687e77bcdd1SRakesh Babu 			len += (len ? sprintf(lfs + len, ",%d", lf) :
688e77bcdd1SRakesh Babu 				      sprintf(lfs + len, "%d", lf));
689e77bcdd1SRakesh Babu 
690e77bcdd1SRakesh Babu 		prev_lf = lf;
691e77bcdd1SRakesh Babu 		seq = 0;
692e77bcdd1SRakesh Babu 	}
693e77bcdd1SRakesh Babu 
694e77bcdd1SRakesh Babu 	if (seq)
695e77bcdd1SRakesh Babu 		len += sprintf(lfs + len, "-%d", prev_lf);
696e77bcdd1SRakesh Babu 
697e77bcdd1SRakesh Babu 	lfs[len] = '\0';
698e77bcdd1SRakesh Babu }
699e77bcdd1SRakesh Babu 
get_max_column_width(struct rvu * rvu)700e77bcdd1SRakesh Babu static int get_max_column_width(struct rvu *rvu)
701e77bcdd1SRakesh Babu {
702e77bcdd1SRakesh Babu 	int index, pf, vf, lf_str_size = 12, buf_size = 256;
703e77bcdd1SRakesh Babu 	struct rvu_block block;
704e77bcdd1SRakesh Babu 	u16 pcifunc;
705e77bcdd1SRakesh Babu 	char *buf;
706e77bcdd1SRakesh Babu 
707e77bcdd1SRakesh Babu 	buf = kzalloc(buf_size, GFP_KERNEL);
708e77bcdd1SRakesh Babu 	if (!buf)
709e77bcdd1SRakesh Babu 		return -ENOMEM;
710e77bcdd1SRakesh Babu 
711e77bcdd1SRakesh Babu 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
712e77bcdd1SRakesh Babu 		for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
713e77bcdd1SRakesh Babu 			pcifunc = pf << 10 | vf;
714e77bcdd1SRakesh Babu 			if (!pcifunc)
715e77bcdd1SRakesh Babu 				continue;
716e77bcdd1SRakesh Babu 
717e77bcdd1SRakesh Babu 			for (index = 0; index < BLK_COUNT; index++) {
718e77bcdd1SRakesh Babu 				block = rvu->hw->block[index];
719e77bcdd1SRakesh Babu 				if (!strlen(block.name))
720e77bcdd1SRakesh Babu 					continue;
721e77bcdd1SRakesh Babu 
722e77bcdd1SRakesh Babu 				get_lf_str_list(block, pcifunc, buf);
723e77bcdd1SRakesh Babu 				if (lf_str_size <= strlen(buf))
724e77bcdd1SRakesh Babu 					lf_str_size = strlen(buf) + 1;
725e77bcdd1SRakesh Babu 			}
726e77bcdd1SRakesh Babu 		}
727e77bcdd1SRakesh Babu 	}
728e77bcdd1SRakesh Babu 
729e77bcdd1SRakesh Babu 	kfree(buf);
730e77bcdd1SRakesh Babu 	return lf_str_size;
731e77bcdd1SRakesh Babu }
732e77bcdd1SRakesh Babu 
73323205e6dSChristina Jacob /* Dumps current provisioning status of all RVU block LFs */
rvu_dbg_rsrc_attach_status(struct file * filp,char __user * buffer,size_t count,loff_t * ppos)73423205e6dSChristina Jacob static ssize_t rvu_dbg_rsrc_attach_status(struct file *filp,
73523205e6dSChristina Jacob 					  char __user *buffer,
73623205e6dSChristina Jacob 					  size_t count, loff_t *ppos)
73723205e6dSChristina Jacob {
738e77bcdd1SRakesh Babu 	int index, off = 0, flag = 0, len = 0, i = 0;
73923205e6dSChristina Jacob 	struct rvu *rvu = filp->private_data;
740e77bcdd1SRakesh Babu 	int bytes_not_copied = 0;
74123205e6dSChristina Jacob 	struct rvu_block block;
742e77bcdd1SRakesh Babu 	int pf, vf, pcifunc;
74323205e6dSChristina Jacob 	int buf_size = 2048;
744e77bcdd1SRakesh Babu 	int lf_str_size;
745f7884097SRakesh Babu 	char *lfs;
74623205e6dSChristina Jacob 	char *buf;
74723205e6dSChristina Jacob 
74823205e6dSChristina Jacob 	/* don't allow partial reads */
74923205e6dSChristina Jacob 	if (*ppos != 0)
75023205e6dSChristina Jacob 		return 0;
75123205e6dSChristina Jacob 
75223205e6dSChristina Jacob 	buf = kzalloc(buf_size, GFP_KERNEL);
75323205e6dSChristina Jacob 	if (!buf)
7540b9f1b26SNiels Dossche 		return -ENOMEM;
755f7884097SRakesh Babu 
756e77bcdd1SRakesh Babu 	/* Get the maximum width of a column */
757e77bcdd1SRakesh Babu 	lf_str_size = get_max_column_width(rvu);
758e77bcdd1SRakesh Babu 
759f7884097SRakesh Babu 	lfs = kzalloc(lf_str_size, GFP_KERNEL);
7609e0a537dSColin Ian King 	if (!lfs) {
7619e0a537dSColin Ian King 		kfree(buf);
762f7884097SRakesh Babu 		return -ENOMEM;
7639e0a537dSColin Ian King 	}
764f7884097SRakesh Babu 	off +=	scnprintf(&buf[off], buf_size - 1 - off, "%-*s", lf_str_size,
765f7884097SRakesh Babu 			  "pcifunc");
76623205e6dSChristina Jacob 	for (index = 0; index < BLK_COUNT; index++)
767f7884097SRakesh Babu 		if (strlen(rvu->hw->block[index].name)) {
76823205e6dSChristina Jacob 			off += scnprintf(&buf[off], buf_size - 1 - off,
769f7884097SRakesh Babu 					 "%-*s", lf_str_size,
77023205e6dSChristina Jacob 					 rvu->hw->block[index].name);
771f7884097SRakesh Babu 		}
772e77bcdd1SRakesh Babu 
77323205e6dSChristina Jacob 	off += scnprintf(&buf[off], buf_size - 1 - off, "\n");
774e77bcdd1SRakesh Babu 	bytes_not_copied = copy_to_user(buffer + (i * off), buf, off);
775e77bcdd1SRakesh Babu 	if (bytes_not_copied)
776e77bcdd1SRakesh Babu 		goto out;
777e77bcdd1SRakesh Babu 
778e77bcdd1SRakesh Babu 	i++;
779e77bcdd1SRakesh Babu 	*ppos += off;
78023205e6dSChristina Jacob 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
78123205e6dSChristina Jacob 		for (vf = 0; vf <= rvu->hw->total_vfs; vf++) {
782e77bcdd1SRakesh Babu 			off = 0;
783e77bcdd1SRakesh Babu 			flag = 0;
78423205e6dSChristina Jacob 			pcifunc = pf << 10 | vf;
78523205e6dSChristina Jacob 			if (!pcifunc)
78623205e6dSChristina Jacob 				continue;
78723205e6dSChristina Jacob 
78823205e6dSChristina Jacob 			if (vf) {
789f7884097SRakesh Babu 				sprintf(lfs, "PF%d:VF%d", pf, vf - 1);
790e77bcdd1SRakesh Babu 				off = scnprintf(&buf[off],
79123205e6dSChristina Jacob 						buf_size - 1 - off,
792f7884097SRakesh Babu 						"%-*s", lf_str_size, lfs);
79323205e6dSChristina Jacob 			} else {
794f7884097SRakesh Babu 				sprintf(lfs, "PF%d", pf);
795e77bcdd1SRakesh Babu 				off = scnprintf(&buf[off],
79623205e6dSChristina Jacob 						buf_size - 1 - off,
797f7884097SRakesh Babu 						"%-*s", lf_str_size, lfs);
79823205e6dSChristina Jacob 			}
79923205e6dSChristina Jacob 
800e77bcdd1SRakesh Babu 			for (index = 0; index < BLK_COUNT; index++) {
80123205e6dSChristina Jacob 				block = rvu->hw->block[index];
80223205e6dSChristina Jacob 				if (!strlen(block.name))
80323205e6dSChristina Jacob 					continue;
804f7884097SRakesh Babu 				len = 0;
805f7884097SRakesh Babu 				lfs[len] = '\0';
806e77bcdd1SRakesh Babu 				get_lf_str_list(block, pcifunc, lfs);
807e77bcdd1SRakesh Babu 				if (strlen(lfs))
80823205e6dSChristina Jacob 					flag = 1;
809f7884097SRakesh Babu 
81023205e6dSChristina Jacob 				off += scnprintf(&buf[off], buf_size - 1 - off,
811f7884097SRakesh Babu 						 "%-*s", lf_str_size, lfs);
81223205e6dSChristina Jacob 			}
813e77bcdd1SRakesh Babu 			if (flag) {
814e77bcdd1SRakesh Babu 				off +=	scnprintf(&buf[off],
815e77bcdd1SRakesh Babu 						  buf_size - 1 - off, "\n");
816e77bcdd1SRakesh Babu 				bytes_not_copied = copy_to_user(buffer +
817e77bcdd1SRakesh Babu 								(i * off),
818e77bcdd1SRakesh Babu 								buf, off);
819e77bcdd1SRakesh Babu 				if (bytes_not_copied)
820e77bcdd1SRakesh Babu 					goto out;
821e77bcdd1SRakesh Babu 
822e77bcdd1SRakesh Babu 				i++;
823e77bcdd1SRakesh Babu 				*ppos += off;
824e77bcdd1SRakesh Babu 			}
82523205e6dSChristina Jacob 		}
82623205e6dSChristina Jacob 	}
82723205e6dSChristina Jacob 
828e77bcdd1SRakesh Babu out:
829f7884097SRakesh Babu 	kfree(lfs);
83023205e6dSChristina Jacob 	kfree(buf);
83123205e6dSChristina Jacob 	if (bytes_not_copied)
83223205e6dSChristina Jacob 		return -EFAULT;
83323205e6dSChristina Jacob 
834e77bcdd1SRakesh Babu 	return *ppos;
83523205e6dSChristina Jacob }
83623205e6dSChristina Jacob 
83723205e6dSChristina Jacob RVU_DEBUG_FOPS(rsrc_status, rsrc_attach_status, NULL);
83823205e6dSChristina Jacob 
rvu_dbg_rvu_pf_cgx_map_display(struct seq_file * filp,void * unused)839e2fb3730SRakesh Babu static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused)
840e2fb3730SRakesh Babu {
841e2fb3730SRakesh Babu 	struct rvu *rvu = filp->private;
842e2fb3730SRakesh Babu 	struct pci_dev *pdev = NULL;
84391c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
844e2fb3730SRakesh Babu 	char cgx[10], lmac[10];
845e2fb3730SRakesh Babu 	struct rvu_pfvf *pfvf;
846e2fb3730SRakesh Babu 	int pf, domain, blkid;
847e2fb3730SRakesh Babu 	u8 cgx_id, lmac_id;
848e2fb3730SRakesh Babu 	u16 pcifunc;
849e2fb3730SRakesh Babu 
850e2fb3730SRakesh Babu 	domain = 2;
85129788787SSubbaraya Sundeep 	mac_ops = get_mac_ops(rvu_first_cgx_pdata(rvu));
85229788787SSubbaraya Sundeep 	/* There can be no CGX devices at all */
85329788787SSubbaraya Sundeep 	if (!mac_ops)
85429788787SSubbaraya Sundeep 		return 0;
85591c6945eSHariprasad Kelam 	seq_printf(filp, "PCI dev\t\tRVU PF Func\tNIX block\t%s\tLMAC\n",
85691c6945eSHariprasad Kelam 		   mac_ops->name);
857e2fb3730SRakesh Babu 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
858e2fb3730SRakesh Babu 		if (!is_pf_cgxmapped(rvu, pf))
859e2fb3730SRakesh Babu 			continue;
860e2fb3730SRakesh Babu 
861e2fb3730SRakesh Babu 		pdev =  pci_get_domain_bus_and_slot(domain, pf + 1, 0);
862e2fb3730SRakesh Babu 		if (!pdev)
863e2fb3730SRakesh Babu 			continue;
864e2fb3730SRakesh Babu 
865e2fb3730SRakesh Babu 		cgx[0] = 0;
866e2fb3730SRakesh Babu 		lmac[0] = 0;
867e2fb3730SRakesh Babu 		pcifunc = pf << 10;
868e2fb3730SRakesh Babu 		pfvf = rvu_get_pfvf(rvu, pcifunc);
869e2fb3730SRakesh Babu 
870e2fb3730SRakesh Babu 		if (pfvf->nix_blkaddr == BLKADDR_NIX0)
871e2fb3730SRakesh Babu 			blkid = 0;
872e2fb3730SRakesh Babu 		else
873e2fb3730SRakesh Babu 			blkid = 1;
874e2fb3730SRakesh Babu 
875e2fb3730SRakesh Babu 		rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id,
876e2fb3730SRakesh Babu 				    &lmac_id);
87791c6945eSHariprasad Kelam 		sprintf(cgx, "%s%d", mac_ops->name, cgx_id);
878e2fb3730SRakesh Babu 		sprintf(lmac, "LMAC%d", lmac_id);
879e2fb3730SRakesh Babu 		seq_printf(filp, "%s\t0x%x\t\tNIX%d\t\t%s\t%s\n",
880e2fb3730SRakesh Babu 			   dev_name(&pdev->dev), pcifunc, blkid, cgx, lmac);
881d6660880SYang Yingliang 
882d6660880SYang Yingliang 		pci_dev_put(pdev);
883e2fb3730SRakesh Babu 	}
884e2fb3730SRakesh Babu 	return 0;
885e2fb3730SRakesh Babu }
886e2fb3730SRakesh Babu 
887e2fb3730SRakesh Babu RVU_DEBUG_SEQ_FOPS(rvu_pf_cgx_map, rvu_pf_cgx_map_display, NULL);
888e2fb3730SRakesh Babu 
rvu_dbg_is_valid_lf(struct rvu * rvu,int blkaddr,int lf,u16 * pcifunc)8890f3ce484SRakesh Babu static bool rvu_dbg_is_valid_lf(struct rvu *rvu, int blkaddr, int lf,
8908756828aSChristina Jacob 				u16 *pcifunc)
8918756828aSChristina Jacob {
8928756828aSChristina Jacob 	struct rvu_block *block;
8938756828aSChristina Jacob 	struct rvu_hwinfo *hw;
8948756828aSChristina Jacob 
8958756828aSChristina Jacob 	hw = rvu->hw;
8968756828aSChristina Jacob 	block = &hw->block[blkaddr];
8978756828aSChristina Jacob 
8988756828aSChristina Jacob 	if (lf < 0 || lf >= block->lf.max) {
8998756828aSChristina Jacob 		dev_warn(rvu->dev, "Invalid LF: valid range: 0-%d\n",
9008756828aSChristina Jacob 			 block->lf.max - 1);
9018756828aSChristina Jacob 		return false;
9028756828aSChristina Jacob 	}
9038756828aSChristina Jacob 
9048756828aSChristina Jacob 	*pcifunc = block->fn_map[lf];
9058756828aSChristina Jacob 	if (!*pcifunc) {
9068756828aSChristina Jacob 		dev_warn(rvu->dev,
9078756828aSChristina Jacob 			 "This LF is not attached to any RVU PFFUNC\n");
9088756828aSChristina Jacob 		return false;
9098756828aSChristina Jacob 	}
9108756828aSChristina Jacob 	return true;
9118756828aSChristina Jacob }
9128756828aSChristina Jacob 
print_npa_qsize(struct seq_file * m,struct rvu_pfvf * pfvf)9138756828aSChristina Jacob static void print_npa_qsize(struct seq_file *m, struct rvu_pfvf *pfvf)
9148756828aSChristina Jacob {
9158756828aSChristina Jacob 	char *buf;
9168756828aSChristina Jacob 
9178756828aSChristina Jacob 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
9188756828aSChristina Jacob 	if (!buf)
9198756828aSChristina Jacob 		return;
9208756828aSChristina Jacob 
9218756828aSChristina Jacob 	if (!pfvf->aura_ctx) {
9228756828aSChristina Jacob 		seq_puts(m, "Aura context is not initialized\n");
9238756828aSChristina Jacob 	} else {
9248756828aSChristina Jacob 		bitmap_print_to_pagebuf(false, buf, pfvf->aura_bmap,
9258756828aSChristina Jacob 					pfvf->aura_ctx->qsize);
9268756828aSChristina Jacob 		seq_printf(m, "Aura count : %d\n", pfvf->aura_ctx->qsize);
9278756828aSChristina Jacob 		seq_printf(m, "Aura context ena/dis bitmap : %s\n", buf);
9288756828aSChristina Jacob 	}
9298756828aSChristina Jacob 
9308756828aSChristina Jacob 	if (!pfvf->pool_ctx) {
9318756828aSChristina Jacob 		seq_puts(m, "Pool context is not initialized\n");
9328756828aSChristina Jacob 	} else {
9338756828aSChristina Jacob 		bitmap_print_to_pagebuf(false, buf, pfvf->pool_bmap,
9348756828aSChristina Jacob 					pfvf->pool_ctx->qsize);
9358756828aSChristina Jacob 		seq_printf(m, "Pool count : %d\n", pfvf->pool_ctx->qsize);
9368756828aSChristina Jacob 		seq_printf(m, "Pool context ena/dis bitmap : %s\n", buf);
9378756828aSChristina Jacob 	}
9388756828aSChristina Jacob 	kfree(buf);
9398756828aSChristina Jacob }
9408756828aSChristina Jacob 
9418756828aSChristina Jacob /* The 'qsize' entry dumps current Aura/Pool context Qsize
9428756828aSChristina Jacob  * and each context's current enable/disable status in a bitmap.
9438756828aSChristina Jacob  */
rvu_dbg_qsize_display(struct seq_file * filp,void * unsused,int blktype)9448756828aSChristina Jacob static int rvu_dbg_qsize_display(struct seq_file *filp, void *unsused,
9458756828aSChristina Jacob 				 int blktype)
9468756828aSChristina Jacob {
9478756828aSChristina Jacob 	void (*print_qsize)(struct seq_file *filp,
9488756828aSChristina Jacob 			    struct rvu_pfvf *pfvf) = NULL;
9490f3ce484SRakesh Babu 	struct dentry *current_dir;
9508756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
9518756828aSChristina Jacob 	struct rvu *rvu;
9528756828aSChristina Jacob 	int qsize_id;
9538756828aSChristina Jacob 	u16 pcifunc;
9540f3ce484SRakesh Babu 	int blkaddr;
9558756828aSChristina Jacob 
9568756828aSChristina Jacob 	rvu = filp->private;
9578756828aSChristina Jacob 	switch (blktype) {
9588756828aSChristina Jacob 	case BLKTYPE_NPA:
9598756828aSChristina Jacob 		qsize_id = rvu->rvu_dbg.npa_qsize_id;
9608756828aSChristina Jacob 		print_qsize = print_npa_qsize;
9618756828aSChristina Jacob 		break;
96202e202c3SPrakash Brahmajyosyula 
96302e202c3SPrakash Brahmajyosyula 	case BLKTYPE_NIX:
96402e202c3SPrakash Brahmajyosyula 		qsize_id = rvu->rvu_dbg.nix_qsize_id;
96502e202c3SPrakash Brahmajyosyula 		print_qsize = print_nix_qsize;
96602e202c3SPrakash Brahmajyosyula 		break;
96702e202c3SPrakash Brahmajyosyula 
9688756828aSChristina Jacob 	default:
9698756828aSChristina Jacob 		return -EINVAL;
9708756828aSChristina Jacob 	}
9718756828aSChristina Jacob 
9720f3ce484SRakesh Babu 	if (blktype == BLKTYPE_NPA) {
9730f3ce484SRakesh Babu 		blkaddr = BLKADDR_NPA;
9740f3ce484SRakesh Babu 	} else {
9750f3ce484SRakesh Babu 		current_dir = filp->file->f_path.dentry->d_parent;
9760f3ce484SRakesh Babu 		blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
9770f3ce484SRakesh Babu 				   BLKADDR_NIX1 : BLKADDR_NIX0);
9780f3ce484SRakesh Babu 	}
9790f3ce484SRakesh Babu 
9800f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, blkaddr, qsize_id, &pcifunc))
9818756828aSChristina Jacob 		return -EINVAL;
9828756828aSChristina Jacob 
9838756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
9848756828aSChristina Jacob 	print_qsize(filp, pfvf);
9858756828aSChristina Jacob 
9868756828aSChristina Jacob 	return 0;
9878756828aSChristina Jacob }
9888756828aSChristina Jacob 
rvu_dbg_qsize_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos,int blktype)9898756828aSChristina Jacob static ssize_t rvu_dbg_qsize_write(struct file *filp,
9908756828aSChristina Jacob 				   const char __user *buffer, size_t count,
9918756828aSChristina Jacob 				   loff_t *ppos, int blktype)
9928756828aSChristina Jacob {
9938756828aSChristina Jacob 	char *blk_string = (blktype == BLKTYPE_NPA) ? "npa" : "nix";
9948756828aSChristina Jacob 	struct seq_file *seqfile = filp->private_data;
9958756828aSChristina Jacob 	char *cmd_buf, *cmd_buf_tmp, *subtoken;
9968756828aSChristina Jacob 	struct rvu *rvu = seqfile->private;
9970f3ce484SRakesh Babu 	struct dentry *current_dir;
9980f3ce484SRakesh Babu 	int blkaddr;
9998756828aSChristina Jacob 	u16 pcifunc;
10008756828aSChristina Jacob 	int ret, lf;
10018756828aSChristina Jacob 
1002*f299ee70SBui Quang Minh 	cmd_buf = memdup_user_nul(buffer, count);
10038756828aSChristina Jacob 	if (IS_ERR(cmd_buf))
10048756828aSChristina Jacob 		return -ENOMEM;
10058756828aSChristina Jacob 
10068756828aSChristina Jacob 	cmd_buf_tmp = strchr(cmd_buf, '\n');
10078756828aSChristina Jacob 	if (cmd_buf_tmp) {
10088756828aSChristina Jacob 		*cmd_buf_tmp = '\0';
10098756828aSChristina Jacob 		count = cmd_buf_tmp - cmd_buf + 1;
10108756828aSChristina Jacob 	}
10118756828aSChristina Jacob 
10128756828aSChristina Jacob 	cmd_buf_tmp = cmd_buf;
10138756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
10148756828aSChristina Jacob 	ret = subtoken ? kstrtoint(subtoken, 10, &lf) : -EINVAL;
10158756828aSChristina Jacob 	if (cmd_buf)
10168756828aSChristina Jacob 		ret = -EINVAL;
10178756828aSChristina Jacob 
1018c2d4c543SRakesh Babu Saladi 	if (ret < 0 || !strncmp(subtoken, "help", 4)) {
10198756828aSChristina Jacob 		dev_info(rvu->dev, "Use echo <%s-lf > qsize\n", blk_string);
10208756828aSChristina Jacob 		goto qsize_write_done;
10218756828aSChristina Jacob 	}
10228756828aSChristina Jacob 
10230f3ce484SRakesh Babu 	if (blktype == BLKTYPE_NPA) {
10240f3ce484SRakesh Babu 		blkaddr = BLKADDR_NPA;
10250f3ce484SRakesh Babu 	} else {
10260f3ce484SRakesh Babu 		current_dir = filp->f_path.dentry->d_parent;
10270f3ce484SRakesh Babu 		blkaddr = (!strcmp(current_dir->d_name.name, "nix1") ?
10280f3ce484SRakesh Babu 				   BLKADDR_NIX1 : BLKADDR_NIX0);
10290f3ce484SRakesh Babu 	}
10300f3ce484SRakesh Babu 
10310f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, blkaddr, lf, &pcifunc)) {
10328756828aSChristina Jacob 		ret = -EINVAL;
10338756828aSChristina Jacob 		goto qsize_write_done;
10348756828aSChristina Jacob 	}
10358756828aSChristina Jacob 	if (blktype  == BLKTYPE_NPA)
10368756828aSChristina Jacob 		rvu->rvu_dbg.npa_qsize_id = lf;
103702e202c3SPrakash Brahmajyosyula 	else
103802e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_qsize_id = lf;
10398756828aSChristina Jacob 
10408756828aSChristina Jacob qsize_write_done:
10418756828aSChristina Jacob 	kfree(cmd_buf_tmp);
10428756828aSChristina Jacob 	return ret ? ret : count;
10438756828aSChristina Jacob }
10448756828aSChristina Jacob 
rvu_dbg_npa_qsize_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)10458756828aSChristina Jacob static ssize_t rvu_dbg_npa_qsize_write(struct file *filp,
10468756828aSChristina Jacob 				       const char __user *buffer,
10478756828aSChristina Jacob 				       size_t count, loff_t *ppos)
10488756828aSChristina Jacob {
10498756828aSChristina Jacob 	return rvu_dbg_qsize_write(filp, buffer, count, ppos,
10508756828aSChristina Jacob 					    BLKTYPE_NPA);
10518756828aSChristina Jacob }
10528756828aSChristina Jacob 
rvu_dbg_npa_qsize_display(struct seq_file * filp,void * unused)10538756828aSChristina Jacob static int rvu_dbg_npa_qsize_display(struct seq_file *filp, void *unused)
10548756828aSChristina Jacob {
10558756828aSChristina Jacob 	return rvu_dbg_qsize_display(filp, unused, BLKTYPE_NPA);
10568756828aSChristina Jacob }
10578756828aSChristina Jacob 
10588756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_qsize, npa_qsize_display, npa_qsize_write);
10598756828aSChristina Jacob 
10608756828aSChristina Jacob /* Dumps given NPA Aura's context */
print_npa_aura_ctx(struct seq_file * m,struct npa_aq_enq_rsp * rsp)10618756828aSChristina Jacob static void print_npa_aura_ctx(struct seq_file *m, struct npa_aq_enq_rsp *rsp)
10628756828aSChristina Jacob {
10638756828aSChristina Jacob 	struct npa_aura_s *aura = &rsp->aura;
10643feac505SGeetha sowjanya 	struct rvu *rvu = m->private;
10658756828aSChristina Jacob 
10668756828aSChristina Jacob 	seq_printf(m, "W0: Pool addr\t\t%llx\n", aura->pool_addr);
10678756828aSChristina Jacob 
10688756828aSChristina Jacob 	seq_printf(m, "W1: ena\t\t\t%d\nW1: pool caching\t%d\n",
10698756828aSChristina Jacob 		   aura->ena, aura->pool_caching);
10708756828aSChristina Jacob 	seq_printf(m, "W1: pool way mask\t%d\nW1: avg con\t\t%d\n",
10718756828aSChristina Jacob 		   aura->pool_way_mask, aura->avg_con);
10728756828aSChristina Jacob 	seq_printf(m, "W1: pool drop ena\t%d\nW1: aura drop ena\t%d\n",
10738756828aSChristina Jacob 		   aura->pool_drop_ena, aura->aura_drop_ena);
10748756828aSChristina Jacob 	seq_printf(m, "W1: bp_ena\t\t%d\nW1: aura drop\t\t%d\n",
10758756828aSChristina Jacob 		   aura->bp_ena, aura->aura_drop);
10768756828aSChristina Jacob 	seq_printf(m, "W1: aura shift\t\t%d\nW1: avg_level\t\t%d\n",
10778756828aSChristina Jacob 		   aura->shift, aura->avg_level);
10788756828aSChristina Jacob 
10798756828aSChristina Jacob 	seq_printf(m, "W2: count\t\t%llu\nW2: nix0_bpid\t\t%d\nW2: nix1_bpid\t\t%d\n",
10808756828aSChristina Jacob 		   (u64)aura->count, aura->nix0_bpid, aura->nix1_bpid);
10818756828aSChristina Jacob 
10828756828aSChristina Jacob 	seq_printf(m, "W3: limit\t\t%llu\nW3: bp\t\t\t%d\nW3: fc_ena\t\t%d\n",
10838756828aSChristina Jacob 		   (u64)aura->limit, aura->bp, aura->fc_ena);
10843feac505SGeetha sowjanya 
10853feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
10863feac505SGeetha sowjanya 		seq_printf(m, "W3: fc_be\t\t%d\n", aura->fc_be);
10878756828aSChristina Jacob 	seq_printf(m, "W3: fc_up_crossing\t%d\nW3: fc_stype\t\t%d\n",
10888756828aSChristina Jacob 		   aura->fc_up_crossing, aura->fc_stype);
10898756828aSChristina Jacob 	seq_printf(m, "W3: fc_hyst_bits\t%d\n", aura->fc_hyst_bits);
10908756828aSChristina Jacob 
10918756828aSChristina Jacob 	seq_printf(m, "W4: fc_addr\t\t%llx\n", aura->fc_addr);
10928756828aSChristina Jacob 
10938756828aSChristina Jacob 	seq_printf(m, "W5: pool_drop\t\t%d\nW5: update_time\t\t%d\n",
10948756828aSChristina Jacob 		   aura->pool_drop, aura->update_time);
10958756828aSChristina Jacob 	seq_printf(m, "W5: err_int \t\t%d\nW5: err_int_ena\t\t%d\n",
10968756828aSChristina Jacob 		   aura->err_int, aura->err_int_ena);
10978756828aSChristina Jacob 	seq_printf(m, "W5: thresh_int\t\t%d\nW5: thresh_int_ena \t%d\n",
10988756828aSChristina Jacob 		   aura->thresh_int, aura->thresh_int_ena);
10998756828aSChristina Jacob 	seq_printf(m, "W5: thresh_up\t\t%d\nW5: thresh_qint_idx\t%d\n",
11008756828aSChristina Jacob 		   aura->thresh_up, aura->thresh_qint_idx);
11018756828aSChristina Jacob 	seq_printf(m, "W5: err_qint_idx \t%d\n", aura->err_qint_idx);
11028756828aSChristina Jacob 
11038756828aSChristina Jacob 	seq_printf(m, "W6: thresh\t\t%llu\n", (u64)aura->thresh);
11043feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
11053feac505SGeetha sowjanya 		seq_printf(m, "W6: fc_msh_dst\t\t%d\n", aura->fc_msh_dst);
11068756828aSChristina Jacob }
11078756828aSChristina Jacob 
11088756828aSChristina Jacob /* Dumps given NPA Pool's context */
print_npa_pool_ctx(struct seq_file * m,struct npa_aq_enq_rsp * rsp)11098756828aSChristina Jacob static void print_npa_pool_ctx(struct seq_file *m, struct npa_aq_enq_rsp *rsp)
11108756828aSChristina Jacob {
11118756828aSChristina Jacob 	struct npa_pool_s *pool = &rsp->pool;
11123feac505SGeetha sowjanya 	struct rvu *rvu = m->private;
11138756828aSChristina Jacob 
11148756828aSChristina Jacob 	seq_printf(m, "W0: Stack base\t\t%llx\n", pool->stack_base);
11158756828aSChristina Jacob 
11168756828aSChristina Jacob 	seq_printf(m, "W1: ena \t\t%d\nW1: nat_align \t\t%d\n",
11178756828aSChristina Jacob 		   pool->ena, pool->nat_align);
11188756828aSChristina Jacob 	seq_printf(m, "W1: stack_caching\t%d\nW1: stack_way_mask\t%d\n",
11198756828aSChristina Jacob 		   pool->stack_caching, pool->stack_way_mask);
11208756828aSChristina Jacob 	seq_printf(m, "W1: buf_offset\t\t%d\nW1: buf_size\t\t%d\n",
11218756828aSChristina Jacob 		   pool->buf_offset, pool->buf_size);
11228756828aSChristina Jacob 
11238756828aSChristina Jacob 	seq_printf(m, "W2: stack_max_pages \t%d\nW2: stack_pages\t\t%d\n",
11248756828aSChristina Jacob 		   pool->stack_max_pages, pool->stack_pages);
11258756828aSChristina Jacob 
11268756828aSChristina Jacob 	seq_printf(m, "W3: op_pc \t\t%llu\n", (u64)pool->op_pc);
11278756828aSChristina Jacob 
11288756828aSChristina Jacob 	seq_printf(m, "W4: stack_offset\t%d\nW4: shift\t\t%d\nW4: avg_level\t\t%d\n",
11298756828aSChristina Jacob 		   pool->stack_offset, pool->shift, pool->avg_level);
11308756828aSChristina Jacob 	seq_printf(m, "W4: avg_con \t\t%d\nW4: fc_ena\t\t%d\nW4: fc_stype\t\t%d\n",
11318756828aSChristina Jacob 		   pool->avg_con, pool->fc_ena, pool->fc_stype);
11328756828aSChristina Jacob 	seq_printf(m, "W4: fc_hyst_bits\t%d\nW4: fc_up_crossing\t%d\n",
11338756828aSChristina Jacob 		   pool->fc_hyst_bits, pool->fc_up_crossing);
11343feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
11353feac505SGeetha sowjanya 		seq_printf(m, "W4: fc_be\t\t%d\n", pool->fc_be);
11368756828aSChristina Jacob 	seq_printf(m, "W4: update_time\t\t%d\n", pool->update_time);
11378756828aSChristina Jacob 
11388756828aSChristina Jacob 	seq_printf(m, "W5: fc_addr\t\t%llx\n", pool->fc_addr);
11398756828aSChristina Jacob 
11408756828aSChristina Jacob 	seq_printf(m, "W6: ptr_start\t\t%llx\n", pool->ptr_start);
11418756828aSChristina Jacob 
11428756828aSChristina Jacob 	seq_printf(m, "W7: ptr_end\t\t%llx\n", pool->ptr_end);
11438756828aSChristina Jacob 
11448756828aSChristina Jacob 	seq_printf(m, "W8: err_int\t\t%d\nW8: err_int_ena\t\t%d\n",
11458756828aSChristina Jacob 		   pool->err_int, pool->err_int_ena);
11468756828aSChristina Jacob 	seq_printf(m, "W8: thresh_int\t\t%d\n", pool->thresh_int);
11478756828aSChristina Jacob 	seq_printf(m, "W8: thresh_int_ena\t%d\nW8: thresh_up\t\t%d\n",
11488756828aSChristina Jacob 		   pool->thresh_int_ena, pool->thresh_up);
11493feac505SGeetha sowjanya 	seq_printf(m, "W8: thresh_qint_idx\t%d\nW8: err_qint_idx\t%d\n",
11508756828aSChristina Jacob 		   pool->thresh_qint_idx, pool->err_qint_idx);
11513feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
11523feac505SGeetha sowjanya 		seq_printf(m, "W8: fc_msh_dst\t\t%d\n", pool->fc_msh_dst);
11538756828aSChristina Jacob }
11548756828aSChristina Jacob 
11558756828aSChristina Jacob /* Reads aura/pool's ctx from admin queue */
rvu_dbg_npa_ctx_display(struct seq_file * m,void * unused,int ctype)11568756828aSChristina Jacob static int rvu_dbg_npa_ctx_display(struct seq_file *m, void *unused, int ctype)
11578756828aSChristina Jacob {
11588756828aSChristina Jacob 	void (*print_npa_ctx)(struct seq_file *m, struct npa_aq_enq_rsp *rsp);
11598756828aSChristina Jacob 	struct npa_aq_enq_req aq_req;
11608756828aSChristina Jacob 	struct npa_aq_enq_rsp rsp;
11618756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
11628756828aSChristina Jacob 	int aura, rc, max_id;
11638756828aSChristina Jacob 	int npalf, id, all;
11648756828aSChristina Jacob 	struct rvu *rvu;
11658756828aSChristina Jacob 	u16 pcifunc;
11668756828aSChristina Jacob 
11678756828aSChristina Jacob 	rvu = m->private;
11688756828aSChristina Jacob 
11698756828aSChristina Jacob 	switch (ctype) {
11708756828aSChristina Jacob 	case NPA_AQ_CTYPE_AURA:
11718756828aSChristina Jacob 		npalf = rvu->rvu_dbg.npa_aura_ctx.lf;
11728756828aSChristina Jacob 		id = rvu->rvu_dbg.npa_aura_ctx.id;
11738756828aSChristina Jacob 		all = rvu->rvu_dbg.npa_aura_ctx.all;
11748756828aSChristina Jacob 		break;
11758756828aSChristina Jacob 
11768756828aSChristina Jacob 	case NPA_AQ_CTYPE_POOL:
11778756828aSChristina Jacob 		npalf = rvu->rvu_dbg.npa_pool_ctx.lf;
11788756828aSChristina Jacob 		id = rvu->rvu_dbg.npa_pool_ctx.id;
11798756828aSChristina Jacob 		all = rvu->rvu_dbg.npa_pool_ctx.all;
11808756828aSChristina Jacob 		break;
11818756828aSChristina Jacob 	default:
11828756828aSChristina Jacob 		return -EINVAL;
11838756828aSChristina Jacob 	}
11848756828aSChristina Jacob 
11850f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
11868756828aSChristina Jacob 		return -EINVAL;
11878756828aSChristina Jacob 
11888756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
11898756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA && !pfvf->aura_ctx) {
11908756828aSChristina Jacob 		seq_puts(m, "Aura context is not initialized\n");
11918756828aSChristina Jacob 		return -EINVAL;
11928756828aSChristina Jacob 	} else if (ctype == NPA_AQ_CTYPE_POOL && !pfvf->pool_ctx) {
11938756828aSChristina Jacob 		seq_puts(m, "Pool context is not initialized\n");
11948756828aSChristina Jacob 		return -EINVAL;
11958756828aSChristina Jacob 	}
11968756828aSChristina Jacob 
11978756828aSChristina Jacob 	memset(&aq_req, 0, sizeof(struct npa_aq_enq_req));
11988756828aSChristina Jacob 	aq_req.hdr.pcifunc = pcifunc;
11998756828aSChristina Jacob 	aq_req.ctype = ctype;
12008756828aSChristina Jacob 	aq_req.op = NPA_AQ_INSTOP_READ;
12018756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA) {
12028756828aSChristina Jacob 		max_id = pfvf->aura_ctx->qsize;
12038756828aSChristina Jacob 		print_npa_ctx = print_npa_aura_ctx;
12048756828aSChristina Jacob 	} else {
12058756828aSChristina Jacob 		max_id = pfvf->pool_ctx->qsize;
12068756828aSChristina Jacob 		print_npa_ctx = print_npa_pool_ctx;
12078756828aSChristina Jacob 	}
12088756828aSChristina Jacob 
12098756828aSChristina Jacob 	if (id < 0 || id >= max_id) {
12108756828aSChristina Jacob 		seq_printf(m, "Invalid %s, valid range is 0-%d\n",
12118756828aSChristina Jacob 			   (ctype == NPA_AQ_CTYPE_AURA) ? "aura" : "pool",
12128756828aSChristina Jacob 			max_id - 1);
12138756828aSChristina Jacob 		return -EINVAL;
12148756828aSChristina Jacob 	}
12158756828aSChristina Jacob 
12168756828aSChristina Jacob 	if (all)
12178756828aSChristina Jacob 		id = 0;
12188756828aSChristina Jacob 	else
12198756828aSChristina Jacob 		max_id = id + 1;
12208756828aSChristina Jacob 
12218756828aSChristina Jacob 	for (aura = id; aura < max_id; aura++) {
12228756828aSChristina Jacob 		aq_req.aura_id = aura;
1223ab6dddd2SSubbaraya Sundeep 
1224ab6dddd2SSubbaraya Sundeep 		/* Skip if queue is uninitialized */
1225ab6dddd2SSubbaraya Sundeep 		if (ctype == NPA_AQ_CTYPE_POOL && !test_bit(aura, pfvf->pool_bmap))
1226ab6dddd2SSubbaraya Sundeep 			continue;
1227ab6dddd2SSubbaraya Sundeep 
12288756828aSChristina Jacob 		seq_printf(m, "======%s : %d=======\n",
12298756828aSChristina Jacob 			   (ctype == NPA_AQ_CTYPE_AURA) ? "AURA" : "POOL",
12308756828aSChristina Jacob 			aq_req.aura_id);
12318756828aSChristina Jacob 		rc = rvu_npa_aq_enq_inst(rvu, &aq_req, &rsp);
12328756828aSChristina Jacob 		if (rc) {
12338756828aSChristina Jacob 			seq_puts(m, "Failed to read context\n");
12348756828aSChristina Jacob 			return -EINVAL;
12358756828aSChristina Jacob 		}
12368756828aSChristina Jacob 		print_npa_ctx(m, &rsp);
12378756828aSChristina Jacob 	}
12388756828aSChristina Jacob 	return 0;
12398756828aSChristina Jacob }
12408756828aSChristina Jacob 
write_npa_ctx(struct rvu * rvu,bool all,int npalf,int id,int ctype)12418756828aSChristina Jacob static int write_npa_ctx(struct rvu *rvu, bool all,
12428756828aSChristina Jacob 			 int npalf, int id, int ctype)
12438756828aSChristina Jacob {
12448756828aSChristina Jacob 	struct rvu_pfvf *pfvf;
12458756828aSChristina Jacob 	int max_id = 0;
12468756828aSChristina Jacob 	u16 pcifunc;
12478756828aSChristina Jacob 
12480f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, BLKADDR_NPA, npalf, &pcifunc))
12498756828aSChristina Jacob 		return -EINVAL;
12508756828aSChristina Jacob 
12518756828aSChristina Jacob 	pfvf = rvu_get_pfvf(rvu, pcifunc);
12528756828aSChristina Jacob 
12538756828aSChristina Jacob 	if (ctype == NPA_AQ_CTYPE_AURA) {
12548756828aSChristina Jacob 		if (!pfvf->aura_ctx) {
12558756828aSChristina Jacob 			dev_warn(rvu->dev, "Aura context is not initialized\n");
12568756828aSChristina Jacob 			return -EINVAL;
12578756828aSChristina Jacob 		}
12588756828aSChristina Jacob 		max_id = pfvf->aura_ctx->qsize;
12598756828aSChristina Jacob 	} else if (ctype == NPA_AQ_CTYPE_POOL) {
12608756828aSChristina Jacob 		if (!pfvf->pool_ctx) {
12618756828aSChristina Jacob 			dev_warn(rvu->dev, "Pool context is not initialized\n");
12628756828aSChristina Jacob 			return -EINVAL;
12638756828aSChristina Jacob 		}
12648756828aSChristina Jacob 		max_id = pfvf->pool_ctx->qsize;
12658756828aSChristina Jacob 	}
12668756828aSChristina Jacob 
12678756828aSChristina Jacob 	if (id < 0 || id >= max_id) {
12688756828aSChristina Jacob 		dev_warn(rvu->dev, "Invalid %s, valid range is 0-%d\n",
12698756828aSChristina Jacob 			 (ctype == NPA_AQ_CTYPE_AURA) ? "aura" : "pool",
12708756828aSChristina Jacob 			max_id - 1);
12718756828aSChristina Jacob 		return -EINVAL;
12728756828aSChristina Jacob 	}
12738756828aSChristina Jacob 
12748756828aSChristina Jacob 	switch (ctype) {
12758756828aSChristina Jacob 	case NPA_AQ_CTYPE_AURA:
12768756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.lf = npalf;
12778756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.id = id;
12788756828aSChristina Jacob 		rvu->rvu_dbg.npa_aura_ctx.all = all;
12798756828aSChristina Jacob 		break;
12808756828aSChristina Jacob 
12818756828aSChristina Jacob 	case NPA_AQ_CTYPE_POOL:
12828756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.lf = npalf;
12838756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.id = id;
12848756828aSChristina Jacob 		rvu->rvu_dbg.npa_pool_ctx.all = all;
12858756828aSChristina Jacob 		break;
12868756828aSChristina Jacob 	default:
12878756828aSChristina Jacob 		return -EINVAL;
12888756828aSChristina Jacob 	}
12898756828aSChristina Jacob 	return 0;
12908756828aSChristina Jacob }
12918756828aSChristina Jacob 
parse_cmd_buffer_ctx(char * cmd_buf,size_t * count,const char __user * buffer,int * npalf,int * id,bool * all)12928756828aSChristina Jacob static int parse_cmd_buffer_ctx(char *cmd_buf, size_t *count,
12938756828aSChristina Jacob 				const char __user *buffer, int *npalf,
12948756828aSChristina Jacob 				int *id, bool *all)
12958756828aSChristina Jacob {
12968756828aSChristina Jacob 	int bytes_not_copied;
12978756828aSChristina Jacob 	char *cmd_buf_tmp;
12988756828aSChristina Jacob 	char *subtoken;
12998756828aSChristina Jacob 	int ret;
13008756828aSChristina Jacob 
13018756828aSChristina Jacob 	bytes_not_copied = copy_from_user(cmd_buf, buffer, *count);
13028756828aSChristina Jacob 	if (bytes_not_copied)
13038756828aSChristina Jacob 		return -EFAULT;
13048756828aSChristina Jacob 
13058756828aSChristina Jacob 	cmd_buf[*count] = '\0';
13068756828aSChristina Jacob 	cmd_buf_tmp = strchr(cmd_buf, '\n');
13078756828aSChristina Jacob 
13088756828aSChristina Jacob 	if (cmd_buf_tmp) {
13098756828aSChristina Jacob 		*cmd_buf_tmp = '\0';
13108756828aSChristina Jacob 		*count = cmd_buf_tmp - cmd_buf + 1;
13118756828aSChristina Jacob 	}
13128756828aSChristina Jacob 
13138756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
13148756828aSChristina Jacob 	ret = subtoken ? kstrtoint(subtoken, 10, npalf) : -EINVAL;
13158756828aSChristina Jacob 	if (ret < 0)
13168756828aSChristina Jacob 		return ret;
13178756828aSChristina Jacob 	subtoken = strsep(&cmd_buf, " ");
13188756828aSChristina Jacob 	if (subtoken && strcmp(subtoken, "all") == 0) {
13198756828aSChristina Jacob 		*all = true;
13208756828aSChristina Jacob 	} else {
13218756828aSChristina Jacob 		ret = subtoken ? kstrtoint(subtoken, 10, id) : -EINVAL;
13228756828aSChristina Jacob 		if (ret < 0)
13238756828aSChristina Jacob 			return ret;
13248756828aSChristina Jacob 	}
13258756828aSChristina Jacob 	if (cmd_buf)
13268756828aSChristina Jacob 		return -EINVAL;
13278756828aSChristina Jacob 	return ret;
13288756828aSChristina Jacob }
13298756828aSChristina Jacob 
rvu_dbg_npa_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos,int ctype)13308756828aSChristina Jacob static ssize_t rvu_dbg_npa_ctx_write(struct file *filp,
13318756828aSChristina Jacob 				     const char __user *buffer,
13328756828aSChristina Jacob 				     size_t count, loff_t *ppos, int ctype)
13338756828aSChristina Jacob {
13348756828aSChristina Jacob 	char *cmd_buf, *ctype_string = (ctype == NPA_AQ_CTYPE_AURA) ?
13358756828aSChristina Jacob 					"aura" : "pool";
13368756828aSChristina Jacob 	struct seq_file *seqfp = filp->private_data;
13378756828aSChristina Jacob 	struct rvu *rvu = seqfp->private;
13388756828aSChristina Jacob 	int npalf, id = 0, ret;
13398756828aSChristina Jacob 	bool all = false;
13408756828aSChristina Jacob 
13418756828aSChristina Jacob 	if ((*ppos != 0) || !count)
13428756828aSChristina Jacob 		return -EINVAL;
13438756828aSChristina Jacob 
13448756828aSChristina Jacob 	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
13458756828aSChristina Jacob 	if (!cmd_buf)
13468756828aSChristina Jacob 		return count;
13478756828aSChristina Jacob 	ret = parse_cmd_buffer_ctx(cmd_buf, &count, buffer,
13488756828aSChristina Jacob 				   &npalf, &id, &all);
13498756828aSChristina Jacob 	if (ret < 0) {
13508756828aSChristina Jacob 		dev_info(rvu->dev,
13518756828aSChristina Jacob 			 "Usage: echo <npalf> [%s number/all] > %s_ctx\n",
13528756828aSChristina Jacob 			 ctype_string, ctype_string);
13538756828aSChristina Jacob 		goto done;
13548756828aSChristina Jacob 	} else {
13558756828aSChristina Jacob 		ret = write_npa_ctx(rvu, all, npalf, id, ctype);
13568756828aSChristina Jacob 	}
13578756828aSChristina Jacob done:
13588756828aSChristina Jacob 	kfree(cmd_buf);
13598756828aSChristina Jacob 	return ret ? ret : count;
13608756828aSChristina Jacob }
13618756828aSChristina Jacob 
rvu_dbg_npa_aura_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)13628756828aSChristina Jacob static ssize_t rvu_dbg_npa_aura_ctx_write(struct file *filp,
13638756828aSChristina Jacob 					  const char __user *buffer,
13648756828aSChristina Jacob 					  size_t count, loff_t *ppos)
13658756828aSChristina Jacob {
13668756828aSChristina Jacob 	return rvu_dbg_npa_ctx_write(filp, buffer, count, ppos,
13678756828aSChristina Jacob 				     NPA_AQ_CTYPE_AURA);
13688756828aSChristina Jacob }
13698756828aSChristina Jacob 
rvu_dbg_npa_aura_ctx_display(struct seq_file * filp,void * unused)13708756828aSChristina Jacob static int rvu_dbg_npa_aura_ctx_display(struct seq_file *filp, void *unused)
13718756828aSChristina Jacob {
13728756828aSChristina Jacob 	return rvu_dbg_npa_ctx_display(filp, unused, NPA_AQ_CTYPE_AURA);
13738756828aSChristina Jacob }
13748756828aSChristina Jacob 
13758756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_aura_ctx, npa_aura_ctx_display, npa_aura_ctx_write);
13768756828aSChristina Jacob 
rvu_dbg_npa_pool_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)13778756828aSChristina Jacob static ssize_t rvu_dbg_npa_pool_ctx_write(struct file *filp,
13788756828aSChristina Jacob 					  const char __user *buffer,
13798756828aSChristina Jacob 					  size_t count, loff_t *ppos)
13808756828aSChristina Jacob {
13818756828aSChristina Jacob 	return rvu_dbg_npa_ctx_write(filp, buffer, count, ppos,
13828756828aSChristina Jacob 				     NPA_AQ_CTYPE_POOL);
13838756828aSChristina Jacob }
13848756828aSChristina Jacob 
rvu_dbg_npa_pool_ctx_display(struct seq_file * filp,void * unused)13858756828aSChristina Jacob static int rvu_dbg_npa_pool_ctx_display(struct seq_file *filp, void *unused)
13868756828aSChristina Jacob {
13878756828aSChristina Jacob 	return rvu_dbg_npa_ctx_display(filp, unused, NPA_AQ_CTYPE_POOL);
13888756828aSChristina Jacob }
13898756828aSChristina Jacob 
13908756828aSChristina Jacob RVU_DEBUG_SEQ_FOPS(npa_pool_ctx, npa_pool_ctx_display, npa_pool_ctx_write);
13918756828aSChristina Jacob 
ndc_cache_stats(struct seq_file * s,int blk_addr,int ctype,int transaction)1392c5a797e0SPrakash Brahmajyosyula static void ndc_cache_stats(struct seq_file *s, int blk_addr,
1393c5a797e0SPrakash Brahmajyosyula 			    int ctype, int transaction)
1394c5a797e0SPrakash Brahmajyosyula {
1395c5a797e0SPrakash Brahmajyosyula 	u64 req, out_req, lat, cant_alloc;
13960f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
13970f3ce484SRakesh Babu 	struct rvu *rvu;
1398c5a797e0SPrakash Brahmajyosyula 	int port;
1399c5a797e0SPrakash Brahmajyosyula 
14000f3ce484SRakesh Babu 	if (blk_addr == BLKADDR_NDC_NPA0) {
14010f3ce484SRakesh Babu 		rvu = s->private;
14020f3ce484SRakesh Babu 	} else {
14030f3ce484SRakesh Babu 		nix_hw = s->private;
14040f3ce484SRakesh Babu 		rvu = nix_hw->rvu;
14050f3ce484SRakesh Babu 	}
14060f3ce484SRakesh Babu 
1407c5a797e0SPrakash Brahmajyosyula 	for (port = 0; port < NDC_MAX_PORT; port++) {
1408c5a797e0SPrakash Brahmajyosyula 		req = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_REQ_PC
1409c5a797e0SPrakash Brahmajyosyula 						(port, ctype, transaction));
1410c5a797e0SPrakash Brahmajyosyula 		lat = rvu_read64(rvu, blk_addr, NDC_AF_PORTX_RTX_RWX_LAT_PC
1411c5a797e0SPrakash Brahmajyosyula 						(port, ctype, transaction));
1412c5a797e0SPrakash Brahmajyosyula 		out_req = rvu_read64(rvu, blk_addr,
1413c5a797e0SPrakash Brahmajyosyula 				     NDC_AF_PORTX_RTX_RWX_OSTDN_PC
1414c5a797e0SPrakash Brahmajyosyula 				     (port, ctype, transaction));
1415c5a797e0SPrakash Brahmajyosyula 		cant_alloc = rvu_read64(rvu, blk_addr,
1416c5a797e0SPrakash Brahmajyosyula 					NDC_AF_PORTX_RTX_CANT_ALLOC_PC
1417c5a797e0SPrakash Brahmajyosyula 					(port, transaction));
1418c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\nPort:%d\n", port);
1419c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tTotal Requests:\t\t%lld\n", req);
1420c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tTotal Time Taken:\t%lld cycles\n", lat);
1421c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tAvg Latency:\t\t%lld cycles\n", lat / req);
1422c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tOutstanding Requests:\t%lld\n", out_req);
1423c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tCant Alloc Requests:\t%lld\n", cant_alloc);
1424c5a797e0SPrakash Brahmajyosyula 	}
1425c5a797e0SPrakash Brahmajyosyula }
1426c5a797e0SPrakash Brahmajyosyula 
ndc_blk_cache_stats(struct seq_file * s,int idx,int blk_addr)1427c5a797e0SPrakash Brahmajyosyula static int ndc_blk_cache_stats(struct seq_file *s, int idx, int blk_addr)
1428c5a797e0SPrakash Brahmajyosyula {
1429c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** CACHE mode read stats *****\n");
1430c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, CACHING, NDC_READ_TRANS);
1431c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** CACHE mode write stats *****\n");
1432c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, CACHING, NDC_WRITE_TRANS);
1433c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** BY-PASS mode read stats *****\n");
1434c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, BYPASS, NDC_READ_TRANS);
1435c5a797e0SPrakash Brahmajyosyula 	seq_puts(s, "\n***** BY-PASS mode write stats *****\n");
1436c5a797e0SPrakash Brahmajyosyula 	ndc_cache_stats(s, blk_addr, BYPASS, NDC_WRITE_TRANS);
1437c5a797e0SPrakash Brahmajyosyula 	return 0;
1438c5a797e0SPrakash Brahmajyosyula }
1439c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_npa_ndc_cache_display(struct seq_file * filp,void * unused)1440c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_npa_ndc_cache_display(struct seq_file *filp, void *unused)
1441c5a797e0SPrakash Brahmajyosyula {
1442c5a797e0SPrakash Brahmajyosyula 	return ndc_blk_cache_stats(filp, NPA0_U, BLKADDR_NDC_NPA0);
1443c5a797e0SPrakash Brahmajyosyula }
1444c5a797e0SPrakash Brahmajyosyula 
1445c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(npa_ndc_cache, npa_ndc_cache_display, NULL);
1446c5a797e0SPrakash Brahmajyosyula 
ndc_blk_hits_miss_stats(struct seq_file * s,int idx,int blk_addr)1447c5a797e0SPrakash Brahmajyosyula static int ndc_blk_hits_miss_stats(struct seq_file *s, int idx, int blk_addr)
1448c5a797e0SPrakash Brahmajyosyula {
14490f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
14500f3ce484SRakesh Babu 	struct rvu *rvu;
1451c5a797e0SPrakash Brahmajyosyula 	int bank, max_bank;
1452ea9dd2e5SSuman Ghosh 	u64 ndc_af_const;
1453c5a797e0SPrakash Brahmajyosyula 
14540f3ce484SRakesh Babu 	if (blk_addr == BLKADDR_NDC_NPA0) {
14550f3ce484SRakesh Babu 		rvu = s->private;
14560f3ce484SRakesh Babu 	} else {
14570f3ce484SRakesh Babu 		nix_hw = s->private;
14580f3ce484SRakesh Babu 		rvu = nix_hw->rvu;
14590f3ce484SRakesh Babu 	}
14600f3ce484SRakesh Babu 
1461ea9dd2e5SSuman Ghosh 	ndc_af_const = rvu_read64(rvu, blk_addr, NDC_AF_CONST);
1462ea9dd2e5SSuman Ghosh 	max_bank = FIELD_GET(NDC_AF_BANK_MASK, ndc_af_const);
1463c5a797e0SPrakash Brahmajyosyula 	for (bank = 0; bank < max_bank; bank++) {
1464c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "BANK:%d\n", bank);
1465c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tHits:\t%lld\n",
1466c5a797e0SPrakash Brahmajyosyula 			   (u64)rvu_read64(rvu, blk_addr,
1467c5a797e0SPrakash Brahmajyosyula 			   NDC_AF_BANKX_HIT_PC(bank)));
1468c5a797e0SPrakash Brahmajyosyula 		seq_printf(s, "\tMiss:\t%lld\n",
1469c5a797e0SPrakash Brahmajyosyula 			   (u64)rvu_read64(rvu, blk_addr,
1470c5a797e0SPrakash Brahmajyosyula 			    NDC_AF_BANKX_MISS_PC(bank)));
1471c5a797e0SPrakash Brahmajyosyula 	}
1472c5a797e0SPrakash Brahmajyosyula 	return 0;
1473c5a797e0SPrakash Brahmajyosyula }
1474c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_nix_ndc_rx_cache_display(struct seq_file * filp,void * unused)1475c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_rx_cache_display(struct seq_file *filp, void *unused)
1476c5a797e0SPrakash Brahmajyosyula {
14770f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
14780f3ce484SRakesh Babu 	int blkaddr = 0;
14790f3ce484SRakesh Babu 	int ndc_idx = 0;
14800f3ce484SRakesh Babu 
14810f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
14820f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
14830f3ce484SRakesh Babu 	ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_RX : NIX0_RX);
14840f3ce484SRakesh Babu 
14850f3ce484SRakesh Babu 	return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
1486c5a797e0SPrakash Brahmajyosyula }
1487c5a797e0SPrakash Brahmajyosyula 
1488c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_cache, nix_ndc_rx_cache_display, NULL);
1489c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_nix_ndc_tx_cache_display(struct seq_file * filp,void * unused)1490c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_tx_cache_display(struct seq_file *filp, void *unused)
1491c5a797e0SPrakash Brahmajyosyula {
14920f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
14930f3ce484SRakesh Babu 	int blkaddr = 0;
14940f3ce484SRakesh Babu 	int ndc_idx = 0;
14950f3ce484SRakesh Babu 
14960f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
14970f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
14980f3ce484SRakesh Babu 	ndc_idx = (nix_hw->blkaddr == BLKADDR_NIX1 ? NIX1_TX : NIX0_TX);
14990f3ce484SRakesh Babu 
15000f3ce484SRakesh Babu 	return ndc_blk_cache_stats(filp, ndc_idx, blkaddr);
1501c5a797e0SPrakash Brahmajyosyula }
1502c5a797e0SPrakash Brahmajyosyula 
1503c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_cache, nix_ndc_tx_cache_display, NULL);
1504c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_npa_ndc_hits_miss_display(struct seq_file * filp,void * unused)1505c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_npa_ndc_hits_miss_display(struct seq_file *filp,
1506c5a797e0SPrakash Brahmajyosyula 					     void *unused)
1507c5a797e0SPrakash Brahmajyosyula {
1508c5a797e0SPrakash Brahmajyosyula 	return ndc_blk_hits_miss_stats(filp, NPA0_U, BLKADDR_NDC_NPA0);
1509c5a797e0SPrakash Brahmajyosyula }
1510c5a797e0SPrakash Brahmajyosyula 
1511c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(npa_ndc_hits_miss, npa_ndc_hits_miss_display, NULL);
1512c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_nix_ndc_rx_hits_miss_display(struct seq_file * filp,void * unused)1513c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_rx_hits_miss_display(struct seq_file *filp,
1514c5a797e0SPrakash Brahmajyosyula 						void *unused)
1515c5a797e0SPrakash Brahmajyosyula {
15160f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
15170f3ce484SRakesh Babu 	int ndc_idx = NPA0_U;
15180f3ce484SRakesh Babu 	int blkaddr = 0;
15190f3ce484SRakesh Babu 
15200f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
15210f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_RX : BLKADDR_NDC_NIX0_RX);
15220f3ce484SRakesh Babu 
15230f3ce484SRakesh Babu 	return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
1524c5a797e0SPrakash Brahmajyosyula }
1525c5a797e0SPrakash Brahmajyosyula 
1526c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_rx_hits_miss, nix_ndc_rx_hits_miss_display, NULL);
1527c5a797e0SPrakash Brahmajyosyula 
rvu_dbg_nix_ndc_tx_hits_miss_display(struct seq_file * filp,void * unused)1528c5a797e0SPrakash Brahmajyosyula static int rvu_dbg_nix_ndc_tx_hits_miss_display(struct seq_file *filp,
1529c5a797e0SPrakash Brahmajyosyula 						void *unused)
1530c5a797e0SPrakash Brahmajyosyula {
15310f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
15320f3ce484SRakesh Babu 	int ndc_idx = NPA0_U;
15330f3ce484SRakesh Babu 	int blkaddr = 0;
15340f3ce484SRakesh Babu 
15350f3ce484SRakesh Babu 	blkaddr = (nix_hw->blkaddr == BLKADDR_NIX1 ?
15360f3ce484SRakesh Babu 		   BLKADDR_NDC_NIX1_TX : BLKADDR_NDC_NIX0_TX);
15370f3ce484SRakesh Babu 
15380f3ce484SRakesh Babu 	return ndc_blk_hits_miss_stats(filp, ndc_idx, blkaddr);
1539c5a797e0SPrakash Brahmajyosyula }
1540c5a797e0SPrakash Brahmajyosyula 
1541c5a797e0SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_ndc_tx_hits_miss, nix_ndc_tx_hits_miss_display, NULL);
1542c5a797e0SPrakash Brahmajyosyula 
print_nix_cn10k_sq_ctx(struct seq_file * m,struct nix_cn10k_sq_ctx_s * sq_ctx)15433feac505SGeetha sowjanya static void print_nix_cn10k_sq_ctx(struct seq_file *m,
15443feac505SGeetha sowjanya 				   struct nix_cn10k_sq_ctx_s *sq_ctx)
15453feac505SGeetha sowjanya {
15463feac505SGeetha sowjanya 	seq_printf(m, "W0: ena \t\t\t%d\nW0: qint_idx \t\t\t%d\n",
15473feac505SGeetha sowjanya 		   sq_ctx->ena, sq_ctx->qint_idx);
15483feac505SGeetha sowjanya 	seq_printf(m, "W0: substream \t\t\t0x%03x\nW0: sdp_mcast \t\t\t%d\n",
15493feac505SGeetha sowjanya 		   sq_ctx->substream, sq_ctx->sdp_mcast);
15503feac505SGeetha sowjanya 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: sqe_way_mask \t\t%d\n\n",
15513feac505SGeetha sowjanya 		   sq_ctx->cq, sq_ctx->sqe_way_mask);
15523feac505SGeetha sowjanya 
15533feac505SGeetha sowjanya 	seq_printf(m, "W1: smq \t\t\t%d\nW1: cq_ena \t\t\t%d\nW1: xoff\t\t\t%d\n",
15543feac505SGeetha sowjanya 		   sq_ctx->smq, sq_ctx->cq_ena, sq_ctx->xoff);
15553feac505SGeetha sowjanya 	seq_printf(m, "W1: sso_ena \t\t\t%d\nW1: smq_rr_weight\t\t%d\n",
15563feac505SGeetha sowjanya 		   sq_ctx->sso_ena, sq_ctx->smq_rr_weight);
15573feac505SGeetha sowjanya 	seq_printf(m, "W1: default_chan\t\t%d\nW1: sqb_count\t\t\t%d\n\n",
15583feac505SGeetha sowjanya 		   sq_ctx->default_chan, sq_ctx->sqb_count);
15593feac505SGeetha sowjanya 
15603feac505SGeetha sowjanya 	seq_printf(m, "W2: smq_rr_count_lb \t\t%d\n", sq_ctx->smq_rr_count_lb);
15613feac505SGeetha sowjanya 	seq_printf(m, "W2: smq_rr_count_ub \t\t%d\n", sq_ctx->smq_rr_count_ub);
15623feac505SGeetha sowjanya 	seq_printf(m, "W2: sqb_aura \t\t\t%d\nW2: sq_int \t\t\t%d\n",
15633feac505SGeetha sowjanya 		   sq_ctx->sqb_aura, sq_ctx->sq_int);
15643feac505SGeetha sowjanya 	seq_printf(m, "W2: sq_int_ena \t\t\t%d\nW2: sqe_stype \t\t\t%d\n",
15653feac505SGeetha sowjanya 		   sq_ctx->sq_int_ena, sq_ctx->sqe_stype);
15663feac505SGeetha sowjanya 
15673feac505SGeetha sowjanya 	seq_printf(m, "W3: max_sqe_size\t\t%d\nW3: cq_limit\t\t\t%d\n",
15683feac505SGeetha sowjanya 		   sq_ctx->max_sqe_size, sq_ctx->cq_limit);
15693feac505SGeetha sowjanya 	seq_printf(m, "W3: lmt_dis \t\t\t%d\nW3: mnq_dis \t\t\t%d\n",
15703feac505SGeetha sowjanya 		   sq_ctx->mnq_dis, sq_ctx->lmt_dis);
15713feac505SGeetha sowjanya 	seq_printf(m, "W3: smq_next_sq\t\t\t%d\nW3: smq_lso_segnum\t\t%d\n",
15723feac505SGeetha sowjanya 		   sq_ctx->smq_next_sq, sq_ctx->smq_lso_segnum);
15733feac505SGeetha sowjanya 	seq_printf(m, "W3: tail_offset \t\t%d\nW3: smenq_offset\t\t%d\n",
15743feac505SGeetha sowjanya 		   sq_ctx->tail_offset, sq_ctx->smenq_offset);
15753feac505SGeetha sowjanya 	seq_printf(m, "W3: head_offset\t\t\t%d\nW3: smenq_next_sqb_vld\t\t%d\n\n",
15763feac505SGeetha sowjanya 		   sq_ctx->head_offset, sq_ctx->smenq_next_sqb_vld);
15773feac505SGeetha sowjanya 
1578c5d731c5SGeetha sowjanya 	seq_printf(m, "W3: smq_next_sq_vld\t\t%d\nW3: smq_pend\t\t\t%d\n",
1579c5d731c5SGeetha sowjanya 		   sq_ctx->smq_next_sq_vld, sq_ctx->smq_pend);
15803feac505SGeetha sowjanya 	seq_printf(m, "W4: next_sqb \t\t\t%llx\n\n", sq_ctx->next_sqb);
15813feac505SGeetha sowjanya 	seq_printf(m, "W5: tail_sqb \t\t\t%llx\n\n", sq_ctx->tail_sqb);
15823feac505SGeetha sowjanya 	seq_printf(m, "W6: smenq_sqb \t\t\t%llx\n\n", sq_ctx->smenq_sqb);
15833feac505SGeetha sowjanya 	seq_printf(m, "W7: smenq_next_sqb \t\t%llx\n\n",
15843feac505SGeetha sowjanya 		   sq_ctx->smenq_next_sqb);
15853feac505SGeetha sowjanya 
15863feac505SGeetha sowjanya 	seq_printf(m, "W8: head_sqb\t\t\t%llx\n\n", sq_ctx->head_sqb);
15873feac505SGeetha sowjanya 
15883feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_total\t\t%d\n", sq_ctx->vfi_lso_total);
15893feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_sizem1\t\t%d\nW9: vfi_lso_sb\t\t\t%d\n",
15903feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_sizem1, sq_ctx->vfi_lso_sb);
15913feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_mps\t\t\t%d\nW9: vfi_lso_vlan0_ins_ena\t%d\n",
15923feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_mps, sq_ctx->vfi_lso_vlan0_ins_ena);
15933feac505SGeetha sowjanya 	seq_printf(m, "W9: vfi_lso_vlan1_ins_ena\t%d\nW9: vfi_lso_vld \t\t%d\n\n",
15943feac505SGeetha sowjanya 		   sq_ctx->vfi_lso_vld, sq_ctx->vfi_lso_vlan1_ins_ena);
15953feac505SGeetha sowjanya 
15963feac505SGeetha sowjanya 	seq_printf(m, "W10: scm_lso_rem \t\t%llu\n\n",
15973feac505SGeetha sowjanya 		   (u64)sq_ctx->scm_lso_rem);
15983feac505SGeetha sowjanya 	seq_printf(m, "W11: octs \t\t\t%llu\n\n", (u64)sq_ctx->octs);
15993feac505SGeetha sowjanya 	seq_printf(m, "W12: pkts \t\t\t%llu\n\n", (u64)sq_ctx->pkts);
16003feac505SGeetha sowjanya 	seq_printf(m, "W14: dropped_octs \t\t%llu\n\n",
16013feac505SGeetha sowjanya 		   (u64)sq_ctx->dropped_octs);
16023feac505SGeetha sowjanya 	seq_printf(m, "W15: dropped_pkts \t\t%llu\n\n",
16033feac505SGeetha sowjanya 		   (u64)sq_ctx->dropped_pkts);
16043feac505SGeetha sowjanya }
16053feac505SGeetha sowjanya 
160602e202c3SPrakash Brahmajyosyula /* Dumps given nix_sq's context */
print_nix_sq_ctx(struct seq_file * m,struct nix_aq_enq_rsp * rsp)160702e202c3SPrakash Brahmajyosyula static void print_nix_sq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
160802e202c3SPrakash Brahmajyosyula {
160902e202c3SPrakash Brahmajyosyula 	struct nix_sq_ctx_s *sq_ctx = &rsp->sq;
16103feac505SGeetha sowjanya 	struct nix_hw *nix_hw = m->private;
16113feac505SGeetha sowjanya 	struct rvu *rvu = nix_hw->rvu;
161202e202c3SPrakash Brahmajyosyula 
16133feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu)) {
16143feac505SGeetha sowjanya 		print_nix_cn10k_sq_ctx(m, (struct nix_cn10k_sq_ctx_s *)sq_ctx);
16153feac505SGeetha sowjanya 		return;
16163feac505SGeetha sowjanya 	}
161702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: sqe_way_mask \t\t%d\nW0: cq \t\t\t\t%d\n",
161802e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqe_way_mask, sq_ctx->cq);
161902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: sdp_mcast \t\t\t%d\nW0: substream \t\t\t0x%03x\n",
162002e202c3SPrakash Brahmajyosyula 		   sq_ctx->sdp_mcast, sq_ctx->substream);
162102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: qint_idx \t\t\t%d\nW0: ena \t\t\t%d\n\n",
162202e202c3SPrakash Brahmajyosyula 		   sq_ctx->qint_idx, sq_ctx->ena);
162302e202c3SPrakash Brahmajyosyula 
162402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: sqb_count \t\t\t%d\nW1: default_chan \t\t%d\n",
162502e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqb_count, sq_ctx->default_chan);
162602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: smq_rr_quantum \t\t%d\nW1: sso_ena \t\t\t%d\n",
162702e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_rr_quantum, sq_ctx->sso_ena);
162802e202c3SPrakash 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",
162902e202c3SPrakash Brahmajyosyula 		   sq_ctx->xoff, sq_ctx->cq_ena, sq_ctx->smq);
163002e202c3SPrakash Brahmajyosyula 
163102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: sqe_stype \t\t\t%d\nW2: sq_int_ena \t\t\t%d\n",
163202e202c3SPrakash Brahmajyosyula 		   sq_ctx->sqe_stype, sq_ctx->sq_int_ena);
163302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: sq_int \t\t\t%d\nW2: sqb_aura \t\t\t%d\n",
163402e202c3SPrakash Brahmajyosyula 		   sq_ctx->sq_int, sq_ctx->sqb_aura);
163502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: smq_rr_count \t\t%d\n\n", sq_ctx->smq_rr_count);
163602e202c3SPrakash Brahmajyosyula 
163702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smq_next_sq_vld\t\t%d\nW3: smq_pend\t\t\t%d\n",
163802e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_next_sq_vld, sq_ctx->smq_pend);
163902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smenq_next_sqb_vld \t\t%d\nW3: head_offset\t\t\t%d\n",
164002e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_next_sqb_vld, sq_ctx->head_offset);
164102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smenq_offset\t\t%d\nW3: tail_offset\t\t\t%d\n",
164202e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_offset, sq_ctx->tail_offset);
164302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: smq_lso_segnum \t\t%d\nW3: smq_next_sq\t\t\t%d\n",
164402e202c3SPrakash Brahmajyosyula 		   sq_ctx->smq_lso_segnum, sq_ctx->smq_next_sq);
164502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: mnq_dis \t\t\t%d\nW3: lmt_dis \t\t\t%d\n",
164602e202c3SPrakash Brahmajyosyula 		   sq_ctx->mnq_dis, sq_ctx->lmt_dis);
164702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: cq_limit\t\t\t%d\nW3: max_sqe_size\t\t%d\n\n",
164802e202c3SPrakash Brahmajyosyula 		   sq_ctx->cq_limit, sq_ctx->max_sqe_size);
164902e202c3SPrakash Brahmajyosyula 
165002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: next_sqb \t\t\t%llx\n\n", sq_ctx->next_sqb);
165102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: tail_sqb \t\t\t%llx\n\n", sq_ctx->tail_sqb);
165202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W6: smenq_sqb \t\t\t%llx\n\n", sq_ctx->smenq_sqb);
165302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W7: smenq_next_sqb \t\t%llx\n\n",
165402e202c3SPrakash Brahmajyosyula 		   sq_ctx->smenq_next_sqb);
165502e202c3SPrakash Brahmajyosyula 
165602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W8: head_sqb\t\t\t%llx\n\n", sq_ctx->head_sqb);
165702e202c3SPrakash Brahmajyosyula 
165802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_vld\t\t\t%d\nW9: vfi_lso_vlan1_ins_ena\t%d\n",
165902e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_vld, sq_ctx->vfi_lso_vlan1_ins_ena);
166002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_vlan0_ins_ena\t%d\nW9: vfi_lso_mps\t\t\t%d\n",
166102e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_vlan0_ins_ena, sq_ctx->vfi_lso_mps);
166202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_sb\t\t\t%d\nW9: vfi_lso_sizem1\t\t%d\n",
166302e202c3SPrakash Brahmajyosyula 		   sq_ctx->vfi_lso_sb, sq_ctx->vfi_lso_sizem1);
166402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: vfi_lso_total\t\t%d\n\n", sq_ctx->vfi_lso_total);
166502e202c3SPrakash Brahmajyosyula 
166602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W10: scm_lso_rem \t\t%llu\n\n",
166702e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->scm_lso_rem);
166802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W11: octs \t\t\t%llu\n\n", (u64)sq_ctx->octs);
166902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W12: pkts \t\t\t%llu\n\n", (u64)sq_ctx->pkts);
167002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W14: dropped_octs \t\t%llu\n\n",
167102e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->dropped_octs);
167202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W15: dropped_pkts \t\t%llu\n\n",
167302e202c3SPrakash Brahmajyosyula 		   (u64)sq_ctx->dropped_pkts);
167402e202c3SPrakash Brahmajyosyula }
167502e202c3SPrakash Brahmajyosyula 
print_nix_cn10k_rq_ctx(struct seq_file * m,struct nix_cn10k_rq_ctx_s * rq_ctx)16763feac505SGeetha sowjanya static void print_nix_cn10k_rq_ctx(struct seq_file *m,
16773feac505SGeetha sowjanya 				   struct nix_cn10k_rq_ctx_s *rq_ctx)
16783feac505SGeetha sowjanya {
16793feac505SGeetha sowjanya 	seq_printf(m, "W0: ena \t\t\t%d\nW0: sso_ena \t\t\t%d\n",
16803feac505SGeetha sowjanya 		   rq_ctx->ena, rq_ctx->sso_ena);
16813feac505SGeetha sowjanya 	seq_printf(m, "W0: ipsech_ena \t\t\t%d\nW0: ena_wqwd \t\t\t%d\n",
16823feac505SGeetha sowjanya 		   rq_ctx->ipsech_ena, rq_ctx->ena_wqwd);
16833feac505SGeetha sowjanya 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: lenerr_dis \t\t\t%d\n",
16843feac505SGeetha sowjanya 		   rq_ctx->cq, rq_ctx->lenerr_dis);
16853feac505SGeetha sowjanya 	seq_printf(m, "W0: csum_il4_dis \t\t%d\nW0: csum_ol4_dis \t\t%d\n",
16863feac505SGeetha sowjanya 		   rq_ctx->csum_il4_dis, rq_ctx->csum_ol4_dis);
16873feac505SGeetha sowjanya 	seq_printf(m, "W0: len_il4_dis \t\t%d\nW0: len_il3_dis \t\t%d\n",
16883feac505SGeetha sowjanya 		   rq_ctx->len_il4_dis, rq_ctx->len_il3_dis);
16893feac505SGeetha sowjanya 	seq_printf(m, "W0: len_ol4_dis \t\t%d\nW0: len_ol3_dis \t\t%d\n",
16903feac505SGeetha sowjanya 		   rq_ctx->len_ol4_dis, rq_ctx->len_ol3_dis);
16913feac505SGeetha sowjanya 	seq_printf(m, "W0: wqe_aura \t\t\t%d\n\n", rq_ctx->wqe_aura);
16923feac505SGeetha sowjanya 
16933feac505SGeetha sowjanya 	seq_printf(m, "W1: spb_aura \t\t\t%d\nW1: lpb_aura \t\t\t%d\n",
16943feac505SGeetha sowjanya 		   rq_ctx->spb_aura, rq_ctx->lpb_aura);
16953feac505SGeetha sowjanya 	seq_printf(m, "W1: spb_aura \t\t\t%d\n", rq_ctx->spb_aura);
16963feac505SGeetha sowjanya 	seq_printf(m, "W1: sso_grp \t\t\t%d\nW1: sso_tt \t\t\t%d\n",
16973feac505SGeetha sowjanya 		   rq_ctx->sso_grp, rq_ctx->sso_tt);
16983feac505SGeetha sowjanya 	seq_printf(m, "W1: pb_caching \t\t\t%d\nW1: wqe_caching \t\t%d\n",
16993feac505SGeetha sowjanya 		   rq_ctx->pb_caching, rq_ctx->wqe_caching);
17003feac505SGeetha sowjanya 	seq_printf(m, "W1: xqe_drop_ena \t\t%d\nW1: spb_drop_ena \t\t%d\n",
17013feac505SGeetha sowjanya 		   rq_ctx->xqe_drop_ena, rq_ctx->spb_drop_ena);
17023feac505SGeetha sowjanya 	seq_printf(m, "W1: lpb_drop_ena \t\t%d\nW1: pb_stashing \t\t%d\n",
17033feac505SGeetha sowjanya 		   rq_ctx->lpb_drop_ena, rq_ctx->pb_stashing);
17043feac505SGeetha sowjanya 	seq_printf(m, "W1: ipsecd_drop_ena \t\t%d\nW1: chi_ena \t\t\t%d\n\n",
17053feac505SGeetha sowjanya 		   rq_ctx->ipsecd_drop_ena, rq_ctx->chi_ena);
17063feac505SGeetha sowjanya 
17073feac505SGeetha sowjanya 	seq_printf(m, "W2: band_prof_id \t\t%d\n", rq_ctx->band_prof_id);
17083feac505SGeetha sowjanya 	seq_printf(m, "W2: policer_ena \t\t%d\n", rq_ctx->policer_ena);
17093feac505SGeetha sowjanya 	seq_printf(m, "W2: spb_sizem1 \t\t\t%d\n", rq_ctx->spb_sizem1);
17103feac505SGeetha sowjanya 	seq_printf(m, "W2: wqe_skip \t\t\t%d\nW2: sqb_ena \t\t\t%d\n",
17113feac505SGeetha sowjanya 		   rq_ctx->wqe_skip, rq_ctx->spb_ena);
17123feac505SGeetha sowjanya 	seq_printf(m, "W2: lpb_size1 \t\t\t%d\nW2: first_skip \t\t\t%d\n",
17133feac505SGeetha sowjanya 		   rq_ctx->lpb_sizem1, rq_ctx->first_skip);
17143feac505SGeetha sowjanya 	seq_printf(m, "W2: later_skip\t\t\t%d\nW2: xqe_imm_size\t\t%d\n",
17153feac505SGeetha sowjanya 		   rq_ctx->later_skip, rq_ctx->xqe_imm_size);
17163feac505SGeetha sowjanya 	seq_printf(m, "W2: xqe_imm_copy \t\t%d\nW2: xqe_hdr_split \t\t%d\n\n",
17173feac505SGeetha sowjanya 		   rq_ctx->xqe_imm_copy, rq_ctx->xqe_hdr_split);
17183feac505SGeetha sowjanya 
17193feac505SGeetha sowjanya 	seq_printf(m, "W3: xqe_drop \t\t\t%d\nW3: xqe_pass \t\t\t%d\n",
17203feac505SGeetha sowjanya 		   rq_ctx->xqe_drop, rq_ctx->xqe_pass);
17213feac505SGeetha sowjanya 	seq_printf(m, "W3: wqe_pool_drop \t\t%d\nW3: wqe_pool_pass \t\t%d\n",
17223feac505SGeetha sowjanya 		   rq_ctx->wqe_pool_drop, rq_ctx->wqe_pool_pass);
17233feac505SGeetha sowjanya 	seq_printf(m, "W3: spb_pool_drop \t\t%d\nW3: spb_pool_pass \t\t%d\n",
17243feac505SGeetha sowjanya 		   rq_ctx->spb_pool_drop, rq_ctx->spb_pool_pass);
17253feac505SGeetha sowjanya 	seq_printf(m, "W3: spb_aura_drop \t\t%d\nW3: spb_aura_pass \t\t%d\n\n",
17263feac505SGeetha sowjanya 		   rq_ctx->spb_aura_pass, rq_ctx->spb_aura_drop);
17273feac505SGeetha sowjanya 
17283feac505SGeetha sowjanya 	seq_printf(m, "W4: lpb_aura_drop \t\t%d\nW3: lpb_aura_pass \t\t%d\n",
17293feac505SGeetha sowjanya 		   rq_ctx->lpb_aura_pass, rq_ctx->lpb_aura_drop);
17303feac505SGeetha sowjanya 	seq_printf(m, "W4: lpb_pool_drop \t\t%d\nW3: lpb_pool_pass \t\t%d\n",
17313feac505SGeetha sowjanya 		   rq_ctx->lpb_pool_drop, rq_ctx->lpb_pool_pass);
17323feac505SGeetha sowjanya 	seq_printf(m, "W4: rq_int \t\t\t%d\nW4: rq_int_ena\t\t\t%d\n",
17333feac505SGeetha sowjanya 		   rq_ctx->rq_int, rq_ctx->rq_int_ena);
17343feac505SGeetha sowjanya 	seq_printf(m, "W4: qint_idx \t\t\t%d\n\n", rq_ctx->qint_idx);
17353feac505SGeetha sowjanya 
17363feac505SGeetha sowjanya 	seq_printf(m, "W5: ltag \t\t\t%d\nW5: good_utag \t\t\t%d\n",
17373feac505SGeetha sowjanya 		   rq_ctx->ltag, rq_ctx->good_utag);
17383feac505SGeetha sowjanya 	seq_printf(m, "W5: bad_utag \t\t\t%d\nW5: flow_tagw \t\t\t%d\n",
17393feac505SGeetha sowjanya 		   rq_ctx->bad_utag, rq_ctx->flow_tagw);
17403feac505SGeetha sowjanya 	seq_printf(m, "W5: ipsec_vwqe \t\t\t%d\nW5: vwqe_ena \t\t\t%d\n",
17413feac505SGeetha sowjanya 		   rq_ctx->ipsec_vwqe, rq_ctx->vwqe_ena);
17423feac505SGeetha sowjanya 	seq_printf(m, "W5: vwqe_wait \t\t\t%d\nW5: max_vsize_exp\t\t%d\n",
17433feac505SGeetha sowjanya 		   rq_ctx->vwqe_wait, rq_ctx->max_vsize_exp);
17443feac505SGeetha sowjanya 	seq_printf(m, "W5: vwqe_skip \t\t\t%d\n\n", rq_ctx->vwqe_skip);
17453feac505SGeetha sowjanya 
17463feac505SGeetha sowjanya 	seq_printf(m, "W6: octs \t\t\t%llu\n\n", (u64)rq_ctx->octs);
17473feac505SGeetha sowjanya 	seq_printf(m, "W7: pkts \t\t\t%llu\n\n", (u64)rq_ctx->pkts);
17483feac505SGeetha sowjanya 	seq_printf(m, "W8: drop_octs \t\t\t%llu\n\n", (u64)rq_ctx->drop_octs);
17493feac505SGeetha sowjanya 	seq_printf(m, "W9: drop_pkts \t\t\t%llu\n\n", (u64)rq_ctx->drop_pkts);
17503feac505SGeetha sowjanya 	seq_printf(m, "W10: re_pkts \t\t\t%llu\n", (u64)rq_ctx->re_pkts);
17513feac505SGeetha sowjanya }
17523feac505SGeetha sowjanya 
175302e202c3SPrakash Brahmajyosyula /* Dumps given nix_rq's context */
print_nix_rq_ctx(struct seq_file * m,struct nix_aq_enq_rsp * rsp)175402e202c3SPrakash Brahmajyosyula static void print_nix_rq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
175502e202c3SPrakash Brahmajyosyula {
175602e202c3SPrakash Brahmajyosyula 	struct nix_rq_ctx_s *rq_ctx = &rsp->rq;
17573feac505SGeetha sowjanya 	struct nix_hw *nix_hw = m->private;
17583feac505SGeetha sowjanya 	struct rvu *rvu = nix_hw->rvu;
17593feac505SGeetha sowjanya 
17603feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu)) {
17613feac505SGeetha sowjanya 		print_nix_cn10k_rq_ctx(m, (struct nix_cn10k_rq_ctx_s *)rq_ctx);
17623feac505SGeetha sowjanya 		return;
17633feac505SGeetha sowjanya 	}
176402e202c3SPrakash Brahmajyosyula 
176502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: wqe_aura \t\t\t%d\nW0: substream \t\t\t0x%03x\n",
176602e202c3SPrakash Brahmajyosyula 		   rq_ctx->wqe_aura, rq_ctx->substream);
176702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: cq \t\t\t\t%d\nW0: ena_wqwd \t\t\t%d\n",
176802e202c3SPrakash Brahmajyosyula 		   rq_ctx->cq, rq_ctx->ena_wqwd);
176902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: ipsech_ena \t\t\t%d\nW0: sso_ena \t\t\t%d\n",
177002e202c3SPrakash Brahmajyosyula 		   rq_ctx->ipsech_ena, rq_ctx->sso_ena);
177102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: ena \t\t\t%d\n\n", rq_ctx->ena);
177202e202c3SPrakash Brahmajyosyula 
177302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: lpb_drop_ena \t\t%d\nW1: spb_drop_ena \t\t%d\n",
177402e202c3SPrakash Brahmajyosyula 		   rq_ctx->lpb_drop_ena, rq_ctx->spb_drop_ena);
177502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: xqe_drop_ena \t\t%d\nW1: wqe_caching \t\t%d\n",
177602e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_drop_ena, rq_ctx->wqe_caching);
177702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: pb_caching \t\t\t%d\nW1: sso_tt \t\t\t%d\n",
177802e202c3SPrakash Brahmajyosyula 		   rq_ctx->pb_caching, rq_ctx->sso_tt);
177902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: sso_grp \t\t\t%d\nW1: lpb_aura \t\t\t%d\n",
178002e202c3SPrakash Brahmajyosyula 		   rq_ctx->sso_grp, rq_ctx->lpb_aura);
178102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: spb_aura \t\t\t%d\n\n", rq_ctx->spb_aura);
178202e202c3SPrakash Brahmajyosyula 
178302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: xqe_hdr_split \t\t%d\nW2: xqe_imm_copy \t\t%d\n",
178402e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_hdr_split, rq_ctx->xqe_imm_copy);
178502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: xqe_imm_size \t\t%d\nW2: later_skip \t\t\t%d\n",
178602e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_imm_size, rq_ctx->later_skip);
178702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: first_skip \t\t\t%d\nW2: lpb_sizem1 \t\t\t%d\n",
178802e202c3SPrakash Brahmajyosyula 		   rq_ctx->first_skip, rq_ctx->lpb_sizem1);
178902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: spb_ena \t\t\t%d\nW2: wqe_skip \t\t\t%d\n",
179002e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_ena, rq_ctx->wqe_skip);
179102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: spb_sizem1 \t\t\t%d\n\n", rq_ctx->spb_sizem1);
179202e202c3SPrakash Brahmajyosyula 
179302e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: spb_pool_pass \t\t%d\nW3: spb_pool_drop \t\t%d\n",
179402e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_pool_pass, rq_ctx->spb_pool_drop);
179502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: spb_aura_pass \t\t%d\nW3: spb_aura_drop \t\t%d\n",
179602e202c3SPrakash Brahmajyosyula 		   rq_ctx->spb_aura_pass, rq_ctx->spb_aura_drop);
179702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: wqe_pool_pass \t\t%d\nW3: wqe_pool_drop \t\t%d\n",
179802e202c3SPrakash Brahmajyosyula 		   rq_ctx->wqe_pool_pass, rq_ctx->wqe_pool_drop);
179902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: xqe_pass \t\t\t%d\nW3: xqe_drop \t\t\t%d\n\n",
180002e202c3SPrakash Brahmajyosyula 		   rq_ctx->xqe_pass, rq_ctx->xqe_drop);
180102e202c3SPrakash Brahmajyosyula 
180202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: qint_idx \t\t\t%d\nW4: rq_int_ena \t\t\t%d\n",
180302e202c3SPrakash Brahmajyosyula 		   rq_ctx->qint_idx, rq_ctx->rq_int_ena);
180402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: rq_int \t\t\t%d\nW4: lpb_pool_pass \t\t%d\n",
180502e202c3SPrakash Brahmajyosyula 		   rq_ctx->rq_int, rq_ctx->lpb_pool_pass);
180602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: lpb_pool_drop \t\t%d\nW4: lpb_aura_pass \t\t%d\n",
180702e202c3SPrakash Brahmajyosyula 		   rq_ctx->lpb_pool_drop, rq_ctx->lpb_aura_pass);
180802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W4: lpb_aura_drop \t\t%d\n\n", rq_ctx->lpb_aura_drop);
180902e202c3SPrakash Brahmajyosyula 
181002e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: flow_tagw \t\t\t%d\nW5: bad_utag \t\t\t%d\n",
181102e202c3SPrakash Brahmajyosyula 		   rq_ctx->flow_tagw, rq_ctx->bad_utag);
181202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W5: good_utag \t\t\t%d\nW5: ltag \t\t\t%d\n\n",
181302e202c3SPrakash Brahmajyosyula 		   rq_ctx->good_utag, rq_ctx->ltag);
181402e202c3SPrakash Brahmajyosyula 
181502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W6: octs \t\t\t%llu\n\n", (u64)rq_ctx->octs);
181602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W7: pkts \t\t\t%llu\n\n", (u64)rq_ctx->pkts);
181702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W8: drop_octs \t\t\t%llu\n\n", (u64)rq_ctx->drop_octs);
181802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W9: drop_pkts \t\t\t%llu\n\n", (u64)rq_ctx->drop_pkts);
181902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W10: re_pkts \t\t\t%llu\n", (u64)rq_ctx->re_pkts);
182002e202c3SPrakash Brahmajyosyula }
182102e202c3SPrakash Brahmajyosyula 
182202e202c3SPrakash Brahmajyosyula /* Dumps given nix_cq's context */
print_nix_cq_ctx(struct seq_file * m,struct nix_aq_enq_rsp * rsp)182302e202c3SPrakash Brahmajyosyula static void print_nix_cq_ctx(struct seq_file *m, struct nix_aq_enq_rsp *rsp)
182402e202c3SPrakash Brahmajyosyula {
182502e202c3SPrakash Brahmajyosyula 	struct nix_cq_ctx_s *cq_ctx = &rsp->cq;
18264f09947aSNithin Dabilpuram 	struct nix_hw *nix_hw = m->private;
18274f09947aSNithin Dabilpuram 	struct rvu *rvu = nix_hw->rvu;
182802e202c3SPrakash Brahmajyosyula 
182902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W0: base \t\t\t%llx\n\n", cq_ctx->base);
183002e202c3SPrakash Brahmajyosyula 
183102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: wrptr \t\t\t%llx\n", (u64)cq_ctx->wrptr);
183202e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: avg_con \t\t\t%d\nW1: cint_idx \t\t\t%d\n",
183302e202c3SPrakash Brahmajyosyula 		   cq_ctx->avg_con, cq_ctx->cint_idx);
183402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: cq_err \t\t\t%d\nW1: qint_idx \t\t\t%d\n",
183502e202c3SPrakash Brahmajyosyula 		   cq_ctx->cq_err, cq_ctx->qint_idx);
183602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W1: bpid \t\t\t%d\nW1: bp_ena \t\t\t%d\n\n",
183702e202c3SPrakash Brahmajyosyula 		   cq_ctx->bpid, cq_ctx->bp_ena);
183802e202c3SPrakash Brahmajyosyula 
18394f09947aSNithin Dabilpuram 	if (!is_rvu_otx2(rvu)) {
18404f09947aSNithin Dabilpuram 		seq_printf(m, "W1: lbpid_high \t\t\t0x%03x\n", cq_ctx->lbpid_high);
18414f09947aSNithin Dabilpuram 		seq_printf(m, "W1: lbpid_med \t\t\t0x%03x\n", cq_ctx->lbpid_med);
18424f09947aSNithin Dabilpuram 		seq_printf(m, "W1: lbpid_low \t\t\t0x%03x\n", cq_ctx->lbpid_low);
18434f09947aSNithin Dabilpuram 		seq_printf(m, "(W1: lbpid) \t\t\t0x%03x\n",
18444f09947aSNithin Dabilpuram 			   cq_ctx->lbpid_high << 6 | cq_ctx->lbpid_med << 3 |
18454f09947aSNithin Dabilpuram 			   cq_ctx->lbpid_low);
18464f09947aSNithin Dabilpuram 		seq_printf(m, "W1: lbp_ena \t\t\t\t%d\n\n", cq_ctx->lbp_ena);
18474f09947aSNithin Dabilpuram 	}
18484f09947aSNithin Dabilpuram 
184902e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: update_time \t\t%d\nW2:avg_level \t\t\t%d\n",
185002e202c3SPrakash Brahmajyosyula 		   cq_ctx->update_time, cq_ctx->avg_level);
185102e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W2: head \t\t\t%d\nW2:tail \t\t\t%d\n\n",
185202e202c3SPrakash Brahmajyosyula 		   cq_ctx->head, cq_ctx->tail);
185302e202c3SPrakash Brahmajyosyula 
185402e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: cq_err_int_ena \t\t%d\nW3:cq_err_int \t\t\t%d\n",
185502e202c3SPrakash Brahmajyosyula 		   cq_ctx->cq_err_int_ena, cq_ctx->cq_err_int);
185602e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: qsize \t\t\t%d\nW3:caching \t\t\t%d\n",
185702e202c3SPrakash Brahmajyosyula 		   cq_ctx->qsize, cq_ctx->caching);
185802e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: substream \t\t\t0x%03x\nW3: ena \t\t\t%d\n",
185902e202c3SPrakash Brahmajyosyula 		   cq_ctx->substream, cq_ctx->ena);
18604f09947aSNithin Dabilpuram 	if (!is_rvu_otx2(rvu)) {
18614f09947aSNithin Dabilpuram 		seq_printf(m, "W3: lbp_frac \t\t\t%d\n", cq_ctx->lbp_frac);
18624f09947aSNithin Dabilpuram 		seq_printf(m, "W3: cpt_drop_err_en \t\t\t%d\n",
18634f09947aSNithin Dabilpuram 			   cq_ctx->cpt_drop_err_en);
18644f09947aSNithin Dabilpuram 	}
186502e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: drop_ena \t\t\t%d\nW3: drop \t\t\t%d\n",
186602e202c3SPrakash Brahmajyosyula 		   cq_ctx->drop_ena, cq_ctx->drop);
186702e202c3SPrakash Brahmajyosyula 	seq_printf(m, "W3: bp \t\t\t\t%d\n\n", cq_ctx->bp);
186802e202c3SPrakash Brahmajyosyula }
186902e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_queue_ctx_display(struct seq_file * filp,void * unused,int ctype)187002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_queue_ctx_display(struct seq_file *filp,
187102e202c3SPrakash Brahmajyosyula 					 void *unused, int ctype)
187202e202c3SPrakash Brahmajyosyula {
187302e202c3SPrakash Brahmajyosyula 	void (*print_nix_ctx)(struct seq_file *filp,
187402e202c3SPrakash Brahmajyosyula 			      struct nix_aq_enq_rsp *rsp) = NULL;
18750f3ce484SRakesh Babu 	struct nix_hw *nix_hw = filp->private;
18760f3ce484SRakesh Babu 	struct rvu *rvu = nix_hw->rvu;
187702e202c3SPrakash Brahmajyosyula 	struct nix_aq_enq_req aq_req;
187802e202c3SPrakash Brahmajyosyula 	struct nix_aq_enq_rsp rsp;
187902e202c3SPrakash Brahmajyosyula 	char *ctype_string = NULL;
188002e202c3SPrakash Brahmajyosyula 	int qidx, rc, max_id = 0;
188102e202c3SPrakash Brahmajyosyula 	struct rvu_pfvf *pfvf;
188202e202c3SPrakash Brahmajyosyula 	int nixlf, id, all;
188302e202c3SPrakash Brahmajyosyula 	u16 pcifunc;
188402e202c3SPrakash Brahmajyosyula 
188502e202c3SPrakash Brahmajyosyula 	switch (ctype) {
188602e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
188702e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_cq_ctx.lf;
188802e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_cq_ctx.id;
188902e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_cq_ctx.all;
189002e202c3SPrakash Brahmajyosyula 		break;
189102e202c3SPrakash Brahmajyosyula 
189202e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
189302e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_sq_ctx.lf;
189402e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_sq_ctx.id;
189502e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_sq_ctx.all;
189602e202c3SPrakash Brahmajyosyula 		break;
189702e202c3SPrakash Brahmajyosyula 
189802e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
189902e202c3SPrakash Brahmajyosyula 		nixlf = rvu->rvu_dbg.nix_rq_ctx.lf;
190002e202c3SPrakash Brahmajyosyula 		id = rvu->rvu_dbg.nix_rq_ctx.id;
190102e202c3SPrakash Brahmajyosyula 		all = rvu->rvu_dbg.nix_rq_ctx.all;
190202e202c3SPrakash Brahmajyosyula 		break;
190302e202c3SPrakash Brahmajyosyula 
190402e202c3SPrakash Brahmajyosyula 	default:
190502e202c3SPrakash Brahmajyosyula 		return -EINVAL;
190602e202c3SPrakash Brahmajyosyula 	}
190702e202c3SPrakash Brahmajyosyula 
19080f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
190902e202c3SPrakash Brahmajyosyula 		return -EINVAL;
191002e202c3SPrakash Brahmajyosyula 
191102e202c3SPrakash Brahmajyosyula 	pfvf = rvu_get_pfvf(rvu, pcifunc);
191202e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ && !pfvf->sq_ctx) {
191302e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "SQ context is not initialized\n");
191402e202c3SPrakash Brahmajyosyula 		return -EINVAL;
191502e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ && !pfvf->rq_ctx) {
191602e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "RQ context is not initialized\n");
191702e202c3SPrakash Brahmajyosyula 		return -EINVAL;
191802e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ && !pfvf->cq_ctx) {
191902e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "CQ context is not initialized\n");
192002e202c3SPrakash Brahmajyosyula 		return -EINVAL;
192102e202c3SPrakash Brahmajyosyula 	}
192202e202c3SPrakash Brahmajyosyula 
192302e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ) {
192402e202c3SPrakash Brahmajyosyula 		max_id = pfvf->sq_ctx->qsize;
192502e202c3SPrakash Brahmajyosyula 		ctype_string = "sq";
192602e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_sq_ctx;
192702e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ) {
192802e202c3SPrakash Brahmajyosyula 		max_id = pfvf->rq_ctx->qsize;
192902e202c3SPrakash Brahmajyosyula 		ctype_string = "rq";
193002e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_rq_ctx;
193102e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ) {
193202e202c3SPrakash Brahmajyosyula 		max_id = pfvf->cq_ctx->qsize;
193302e202c3SPrakash Brahmajyosyula 		ctype_string = "cq";
193402e202c3SPrakash Brahmajyosyula 		print_nix_ctx = print_nix_cq_ctx;
193502e202c3SPrakash Brahmajyosyula 	}
193602e202c3SPrakash Brahmajyosyula 
193702e202c3SPrakash Brahmajyosyula 	memset(&aq_req, 0, sizeof(struct nix_aq_enq_req));
193802e202c3SPrakash Brahmajyosyula 	aq_req.hdr.pcifunc = pcifunc;
193902e202c3SPrakash Brahmajyosyula 	aq_req.ctype = ctype;
194002e202c3SPrakash Brahmajyosyula 	aq_req.op = NIX_AQ_INSTOP_READ;
194102e202c3SPrakash Brahmajyosyula 	if (all)
194202e202c3SPrakash Brahmajyosyula 		id = 0;
194302e202c3SPrakash Brahmajyosyula 	else
194402e202c3SPrakash Brahmajyosyula 		max_id = id + 1;
194502e202c3SPrakash Brahmajyosyula 	for (qidx = id; qidx < max_id; qidx++) {
194602e202c3SPrakash Brahmajyosyula 		aq_req.qidx = qidx;
194702e202c3SPrakash Brahmajyosyula 		seq_printf(filp, "=====%s_ctx for nixlf:%d and qidx:%d is=====\n",
194802e202c3SPrakash Brahmajyosyula 			   ctype_string, nixlf, aq_req.qidx);
194902e202c3SPrakash Brahmajyosyula 		rc = rvu_mbox_handler_nix_aq_enq(rvu, &aq_req, &rsp);
195002e202c3SPrakash Brahmajyosyula 		if (rc) {
195102e202c3SPrakash Brahmajyosyula 			seq_puts(filp, "Failed to read the context\n");
195202e202c3SPrakash Brahmajyosyula 			return -EINVAL;
195302e202c3SPrakash Brahmajyosyula 		}
195402e202c3SPrakash Brahmajyosyula 		print_nix_ctx(filp, &rsp);
195502e202c3SPrakash Brahmajyosyula 	}
195602e202c3SPrakash Brahmajyosyula 	return 0;
195702e202c3SPrakash Brahmajyosyula }
195802e202c3SPrakash Brahmajyosyula 
write_nix_queue_ctx(struct rvu * rvu,bool all,int nixlf,int id,int ctype,char * ctype_string,struct seq_file * m)195902e202c3SPrakash Brahmajyosyula static int write_nix_queue_ctx(struct rvu *rvu, bool all, int nixlf,
19600f3ce484SRakesh Babu 			       int id, int ctype, char *ctype_string,
19610f3ce484SRakesh Babu 			       struct seq_file *m)
196202e202c3SPrakash Brahmajyosyula {
19630f3ce484SRakesh Babu 	struct nix_hw *nix_hw = m->private;
196402e202c3SPrakash Brahmajyosyula 	struct rvu_pfvf *pfvf;
196502e202c3SPrakash Brahmajyosyula 	int max_id = 0;
196602e202c3SPrakash Brahmajyosyula 	u16 pcifunc;
196702e202c3SPrakash Brahmajyosyula 
19680f3ce484SRakesh Babu 	if (!rvu_dbg_is_valid_lf(rvu, nix_hw->blkaddr, nixlf, &pcifunc))
196902e202c3SPrakash Brahmajyosyula 		return -EINVAL;
197002e202c3SPrakash Brahmajyosyula 
197102e202c3SPrakash Brahmajyosyula 	pfvf = rvu_get_pfvf(rvu, pcifunc);
197202e202c3SPrakash Brahmajyosyula 
197302e202c3SPrakash Brahmajyosyula 	if (ctype == NIX_AQ_CTYPE_SQ) {
197402e202c3SPrakash Brahmajyosyula 		if (!pfvf->sq_ctx) {
197502e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "SQ context is not initialized\n");
197602e202c3SPrakash Brahmajyosyula 			return -EINVAL;
197702e202c3SPrakash Brahmajyosyula 		}
197802e202c3SPrakash Brahmajyosyula 		max_id = pfvf->sq_ctx->qsize;
197902e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_RQ) {
198002e202c3SPrakash Brahmajyosyula 		if (!pfvf->rq_ctx) {
198102e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "RQ context is not initialized\n");
198202e202c3SPrakash Brahmajyosyula 			return -EINVAL;
198302e202c3SPrakash Brahmajyosyula 		}
198402e202c3SPrakash Brahmajyosyula 		max_id = pfvf->rq_ctx->qsize;
198502e202c3SPrakash Brahmajyosyula 	} else if (ctype == NIX_AQ_CTYPE_CQ) {
198602e202c3SPrakash Brahmajyosyula 		if (!pfvf->cq_ctx) {
198702e202c3SPrakash Brahmajyosyula 			dev_warn(rvu->dev, "CQ context is not initialized\n");
198802e202c3SPrakash Brahmajyosyula 			return -EINVAL;
198902e202c3SPrakash Brahmajyosyula 		}
199002e202c3SPrakash Brahmajyosyula 		max_id = pfvf->cq_ctx->qsize;
199102e202c3SPrakash Brahmajyosyula 	}
199202e202c3SPrakash Brahmajyosyula 
199302e202c3SPrakash Brahmajyosyula 	if (id < 0 || id >= max_id) {
199402e202c3SPrakash Brahmajyosyula 		dev_warn(rvu->dev, "Invalid %s_ctx valid range 0-%d\n",
199502e202c3SPrakash Brahmajyosyula 			 ctype_string, max_id - 1);
199602e202c3SPrakash Brahmajyosyula 		return -EINVAL;
199702e202c3SPrakash Brahmajyosyula 	}
199802e202c3SPrakash Brahmajyosyula 	switch (ctype) {
199902e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
200002e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.lf = nixlf;
200102e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.id = id;
200202e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_cq_ctx.all = all;
200302e202c3SPrakash Brahmajyosyula 		break;
200402e202c3SPrakash Brahmajyosyula 
200502e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
200602e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.lf = nixlf;
200702e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.id = id;
200802e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_sq_ctx.all = all;
200902e202c3SPrakash Brahmajyosyula 		break;
201002e202c3SPrakash Brahmajyosyula 
201102e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
201202e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.lf = nixlf;
201302e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.id = id;
201402e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix_rq_ctx.all = all;
201502e202c3SPrakash Brahmajyosyula 		break;
201602e202c3SPrakash Brahmajyosyula 	default:
201702e202c3SPrakash Brahmajyosyula 		return -EINVAL;
201802e202c3SPrakash Brahmajyosyula 	}
201902e202c3SPrakash Brahmajyosyula 	return 0;
202002e202c3SPrakash Brahmajyosyula }
202102e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_queue_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos,int ctype)202202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_queue_ctx_write(struct file *filp,
202302e202c3SPrakash Brahmajyosyula 					   const char __user *buffer,
202402e202c3SPrakash Brahmajyosyula 					   size_t count, loff_t *ppos,
202502e202c3SPrakash Brahmajyosyula 					   int ctype)
202602e202c3SPrakash Brahmajyosyula {
202702e202c3SPrakash Brahmajyosyula 	struct seq_file *m = filp->private_data;
20280f3ce484SRakesh Babu 	struct nix_hw *nix_hw = m->private;
20290f3ce484SRakesh Babu 	struct rvu *rvu = nix_hw->rvu;
203002e202c3SPrakash Brahmajyosyula 	char *cmd_buf, *ctype_string;
203102e202c3SPrakash Brahmajyosyula 	int nixlf, id = 0, ret;
203202e202c3SPrakash Brahmajyosyula 	bool all = false;
203302e202c3SPrakash Brahmajyosyula 
203402e202c3SPrakash Brahmajyosyula 	if ((*ppos != 0) || !count)
203502e202c3SPrakash Brahmajyosyula 		return -EINVAL;
203602e202c3SPrakash Brahmajyosyula 
203702e202c3SPrakash Brahmajyosyula 	switch (ctype) {
203802e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_SQ:
203902e202c3SPrakash Brahmajyosyula 		ctype_string = "sq";
204002e202c3SPrakash Brahmajyosyula 		break;
204102e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_RQ:
204202e202c3SPrakash Brahmajyosyula 		ctype_string = "rq";
204302e202c3SPrakash Brahmajyosyula 		break;
204402e202c3SPrakash Brahmajyosyula 	case NIX_AQ_CTYPE_CQ:
204502e202c3SPrakash Brahmajyosyula 		ctype_string = "cq";
204602e202c3SPrakash Brahmajyosyula 		break;
204702e202c3SPrakash Brahmajyosyula 	default:
204802e202c3SPrakash Brahmajyosyula 		return -EINVAL;
204902e202c3SPrakash Brahmajyosyula 	}
205002e202c3SPrakash Brahmajyosyula 
205102e202c3SPrakash Brahmajyosyula 	cmd_buf = kzalloc(count + 1, GFP_KERNEL);
205202e202c3SPrakash Brahmajyosyula 
205302e202c3SPrakash Brahmajyosyula 	if (!cmd_buf)
205402e202c3SPrakash Brahmajyosyula 		return count;
205502e202c3SPrakash Brahmajyosyula 
205602e202c3SPrakash Brahmajyosyula 	ret = parse_cmd_buffer_ctx(cmd_buf, &count, buffer,
205702e202c3SPrakash Brahmajyosyula 				   &nixlf, &id, &all);
205802e202c3SPrakash Brahmajyosyula 	if (ret < 0) {
205902e202c3SPrakash Brahmajyosyula 		dev_info(rvu->dev,
206002e202c3SPrakash Brahmajyosyula 			 "Usage: echo <nixlf> [%s number/all] > %s_ctx\n",
206102e202c3SPrakash Brahmajyosyula 			 ctype_string, ctype_string);
206202e202c3SPrakash Brahmajyosyula 		goto done;
206302e202c3SPrakash Brahmajyosyula 	} else {
206402e202c3SPrakash Brahmajyosyula 		ret = write_nix_queue_ctx(rvu, all, nixlf, id, ctype,
20650f3ce484SRakesh Babu 					  ctype_string, m);
206602e202c3SPrakash Brahmajyosyula 	}
206702e202c3SPrakash Brahmajyosyula done:
206802e202c3SPrakash Brahmajyosyula 	kfree(cmd_buf);
206902e202c3SPrakash Brahmajyosyula 	return ret ? ret : count;
207002e202c3SPrakash Brahmajyosyula }
207102e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_sq_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)207202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_sq_ctx_write(struct file *filp,
207302e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
207402e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
207502e202c3SPrakash Brahmajyosyula {
207602e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
207702e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_SQ);
207802e202c3SPrakash Brahmajyosyula }
207902e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_sq_ctx_display(struct seq_file * filp,void * unused)208002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_sq_ctx_display(struct seq_file *filp, void *unused)
208102e202c3SPrakash Brahmajyosyula {
208202e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused, NIX_AQ_CTYPE_SQ);
208302e202c3SPrakash Brahmajyosyula }
208402e202c3SPrakash Brahmajyosyula 
208502e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_sq_ctx, nix_sq_ctx_display, nix_sq_ctx_write);
208602e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_rq_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)208702e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_rq_ctx_write(struct file *filp,
208802e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
208902e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
209002e202c3SPrakash Brahmajyosyula {
209102e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
209202e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_RQ);
209302e202c3SPrakash Brahmajyosyula }
209402e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_rq_ctx_display(struct seq_file * filp,void * unused)209502e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_rq_ctx_display(struct seq_file *filp, void  *unused)
209602e202c3SPrakash Brahmajyosyula {
209702e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused,  NIX_AQ_CTYPE_RQ);
209802e202c3SPrakash Brahmajyosyula }
209902e202c3SPrakash Brahmajyosyula 
210002e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_rq_ctx, nix_rq_ctx_display, nix_rq_ctx_write);
210102e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_cq_ctx_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)210202e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_cq_ctx_write(struct file *filp,
210302e202c3SPrakash Brahmajyosyula 					const char __user *buffer,
210402e202c3SPrakash Brahmajyosyula 					size_t count, loff_t *ppos)
210502e202c3SPrakash Brahmajyosyula {
210602e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_write(filp, buffer, count, ppos,
210702e202c3SPrakash Brahmajyosyula 					    NIX_AQ_CTYPE_CQ);
210802e202c3SPrakash Brahmajyosyula }
210902e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_cq_ctx_display(struct seq_file * filp,void * unused)211002e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_cq_ctx_display(struct seq_file *filp, void *unused)
211102e202c3SPrakash Brahmajyosyula {
211202e202c3SPrakash Brahmajyosyula 	return rvu_dbg_nix_queue_ctx_display(filp, unused, NIX_AQ_CTYPE_CQ);
211302e202c3SPrakash Brahmajyosyula }
211402e202c3SPrakash Brahmajyosyula 
211502e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_cq_ctx, nix_cq_ctx_display, nix_cq_ctx_write);
211602e202c3SPrakash Brahmajyosyula 
print_nix_qctx_qsize(struct seq_file * filp,int qsize,unsigned long * bmap,char * qtype)211702e202c3SPrakash Brahmajyosyula static void print_nix_qctx_qsize(struct seq_file *filp, int qsize,
211802e202c3SPrakash Brahmajyosyula 				 unsigned long *bmap, char *qtype)
211902e202c3SPrakash Brahmajyosyula {
212002e202c3SPrakash Brahmajyosyula 	char *buf;
212102e202c3SPrakash Brahmajyosyula 
212202e202c3SPrakash Brahmajyosyula 	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
212302e202c3SPrakash Brahmajyosyula 	if (!buf)
212402e202c3SPrakash Brahmajyosyula 		return;
212502e202c3SPrakash Brahmajyosyula 
212602e202c3SPrakash Brahmajyosyula 	bitmap_print_to_pagebuf(false, buf, bmap, qsize);
212702e202c3SPrakash Brahmajyosyula 	seq_printf(filp, "%s context count : %d\n", qtype, qsize);
212802e202c3SPrakash Brahmajyosyula 	seq_printf(filp, "%s context ena/dis bitmap : %s\n",
212902e202c3SPrakash Brahmajyosyula 		   qtype, buf);
213002e202c3SPrakash Brahmajyosyula 	kfree(buf);
213102e202c3SPrakash Brahmajyosyula }
213202e202c3SPrakash Brahmajyosyula 
print_nix_qsize(struct seq_file * filp,struct rvu_pfvf * pfvf)213302e202c3SPrakash Brahmajyosyula static void print_nix_qsize(struct seq_file *filp, struct rvu_pfvf *pfvf)
213402e202c3SPrakash Brahmajyosyula {
213502e202c3SPrakash Brahmajyosyula 	if (!pfvf->cq_ctx)
213602e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "cq context is not initialized\n");
213702e202c3SPrakash Brahmajyosyula 	else
213802e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->cq_ctx->qsize, pfvf->cq_bmap,
213902e202c3SPrakash Brahmajyosyula 				     "cq");
214002e202c3SPrakash Brahmajyosyula 
214102e202c3SPrakash Brahmajyosyula 	if (!pfvf->rq_ctx)
214202e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "rq context is not initialized\n");
214302e202c3SPrakash Brahmajyosyula 	else
214402e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->rq_ctx->qsize, pfvf->rq_bmap,
214502e202c3SPrakash Brahmajyosyula 				     "rq");
214602e202c3SPrakash Brahmajyosyula 
214702e202c3SPrakash Brahmajyosyula 	if (!pfvf->sq_ctx)
214802e202c3SPrakash Brahmajyosyula 		seq_puts(filp, "sq context is not initialized\n");
214902e202c3SPrakash Brahmajyosyula 	else
215002e202c3SPrakash Brahmajyosyula 		print_nix_qctx_qsize(filp, pfvf->sq_ctx->qsize, pfvf->sq_bmap,
215102e202c3SPrakash Brahmajyosyula 				     "sq");
215202e202c3SPrakash Brahmajyosyula }
215302e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_qsize_write(struct file * filp,const char __user * buffer,size_t count,loff_t * ppos)215402e202c3SPrakash Brahmajyosyula static ssize_t rvu_dbg_nix_qsize_write(struct file *filp,
215502e202c3SPrakash Brahmajyosyula 				       const char __user *buffer,
215602e202c3SPrakash Brahmajyosyula 				       size_t count, loff_t *ppos)
215702e202c3SPrakash Brahmajyosyula {
215802e202c3SPrakash Brahmajyosyula 	return rvu_dbg_qsize_write(filp, buffer, count, ppos,
215902e202c3SPrakash Brahmajyosyula 				   BLKTYPE_NIX);
216002e202c3SPrakash Brahmajyosyula }
216102e202c3SPrakash Brahmajyosyula 
rvu_dbg_nix_qsize_display(struct seq_file * filp,void * unused)216202e202c3SPrakash Brahmajyosyula static int rvu_dbg_nix_qsize_display(struct seq_file *filp, void *unused)
216302e202c3SPrakash Brahmajyosyula {
216402e202c3SPrakash Brahmajyosyula 	return rvu_dbg_qsize_display(filp, unused, BLKTYPE_NIX);
216502e202c3SPrakash Brahmajyosyula }
216602e202c3SPrakash Brahmajyosyula 
216702e202c3SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(nix_qsize, nix_qsize_display, nix_qsize_write);
216802e202c3SPrakash Brahmajyosyula 
print_band_prof_ctx(struct seq_file * m,struct nix_bandprof_s * prof)2169e7d89717SSunil Goutham static void print_band_prof_ctx(struct seq_file *m,
2170e7d89717SSunil Goutham 				struct nix_bandprof_s *prof)
2171e7d89717SSunil Goutham {
2172e7d89717SSunil Goutham 	char *str;
2173e7d89717SSunil Goutham 
2174e7d89717SSunil Goutham 	switch (prof->pc_mode) {
2175e7d89717SSunil Goutham 	case NIX_RX_PC_MODE_VLAN:
2176e7d89717SSunil Goutham 		str = "VLAN";
2177e7d89717SSunil Goutham 		break;
2178e7d89717SSunil Goutham 	case NIX_RX_PC_MODE_DSCP:
2179e7d89717SSunil Goutham 		str = "DSCP";
2180e7d89717SSunil Goutham 		break;
2181e7d89717SSunil Goutham 	case NIX_RX_PC_MODE_GEN:
2182e7d89717SSunil Goutham 		str = "Generic";
2183e7d89717SSunil Goutham 		break;
2184e7d89717SSunil Goutham 	case NIX_RX_PC_MODE_RSVD:
2185e7d89717SSunil Goutham 		str = "Reserved";
2186e7d89717SSunil Goutham 		break;
2187e7d89717SSunil Goutham 	}
2188e7d89717SSunil Goutham 	seq_printf(m, "W0: pc_mode\t\t%s\n", str);
2189e7d89717SSunil Goutham 	str = (prof->icolor == 3) ? "Color blind" :
2190e7d89717SSunil Goutham 		(prof->icolor == 0) ? "Green" :
2191e7d89717SSunil Goutham 		(prof->icolor == 1) ? "Yellow" : "Red";
2192e7d89717SSunil Goutham 	seq_printf(m, "W0: icolor\t\t%s\n", str);
2193e7d89717SSunil Goutham 	seq_printf(m, "W0: tnl_ena\t\t%d\n", prof->tnl_ena);
2194e7d89717SSunil Goutham 	seq_printf(m, "W0: peir_exponent\t%d\n", prof->peir_exponent);
2195e7d89717SSunil Goutham 	seq_printf(m, "W0: pebs_exponent\t%d\n", prof->pebs_exponent);
2196e7d89717SSunil Goutham 	seq_printf(m, "W0: cir_exponent\t%d\n", prof->cir_exponent);
2197e7d89717SSunil Goutham 	seq_printf(m, "W0: cbs_exponent\t%d\n", prof->cbs_exponent);
2198e7d89717SSunil Goutham 	seq_printf(m, "W0: peir_mantissa\t%d\n", prof->peir_mantissa);
2199e7d89717SSunil Goutham 	seq_printf(m, "W0: pebs_mantissa\t%d\n", prof->pebs_mantissa);
2200e7d89717SSunil Goutham 	seq_printf(m, "W0: cir_mantissa\t%d\n", prof->cir_mantissa);
2201e7d89717SSunil Goutham 
2202e7d89717SSunil Goutham 	seq_printf(m, "W1: cbs_mantissa\t%d\n", prof->cbs_mantissa);
2203e7d89717SSunil Goutham 	str = (prof->lmode == 0) ? "byte" : "packet";
2204e7d89717SSunil Goutham 	seq_printf(m, "W1: lmode\t\t%s\n", str);
2205e7d89717SSunil Goutham 	seq_printf(m, "W1: l_select\t\t%d\n", prof->l_sellect);
2206e7d89717SSunil Goutham 	seq_printf(m, "W1: rdiv\t\t%d\n", prof->rdiv);
2207e7d89717SSunil Goutham 	seq_printf(m, "W1: adjust_exponent\t%d\n", prof->adjust_exponent);
2208e7d89717SSunil Goutham 	seq_printf(m, "W1: adjust_mantissa\t%d\n", prof->adjust_mantissa);
2209e7d89717SSunil Goutham 	str = (prof->gc_action == 0) ? "PASS" :
2210e7d89717SSunil Goutham 		(prof->gc_action == 1) ? "DROP" : "RED";
2211e7d89717SSunil Goutham 	seq_printf(m, "W1: gc_action\t\t%s\n", str);
2212e7d89717SSunil Goutham 	str = (prof->yc_action == 0) ? "PASS" :
2213e7d89717SSunil Goutham 		(prof->yc_action == 1) ? "DROP" : "RED";
2214e7d89717SSunil Goutham 	seq_printf(m, "W1: yc_action\t\t%s\n", str);
2215e7d89717SSunil Goutham 	str = (prof->rc_action == 0) ? "PASS" :
2216e7d89717SSunil Goutham 		(prof->rc_action == 1) ? "DROP" : "RED";
2217e7d89717SSunil Goutham 	seq_printf(m, "W1: rc_action\t\t%s\n", str);
2218e7d89717SSunil Goutham 	seq_printf(m, "W1: meter_algo\t\t%d\n", prof->meter_algo);
2219e7d89717SSunil Goutham 	seq_printf(m, "W1: band_prof_id\t%d\n", prof->band_prof_id);
2220e7d89717SSunil Goutham 	seq_printf(m, "W1: hl_en\t\t%d\n", prof->hl_en);
2221e7d89717SSunil Goutham 
2222e7d89717SSunil Goutham 	seq_printf(m, "W2: ts\t\t\t%lld\n", (u64)prof->ts);
2223e7d89717SSunil Goutham 	seq_printf(m, "W3: pe_accum\t\t%d\n", prof->pe_accum);
2224e7d89717SSunil Goutham 	seq_printf(m, "W3: c_accum\t\t%d\n", prof->c_accum);
2225e7d89717SSunil Goutham 	seq_printf(m, "W4: green_pkt_pass\t%lld\n",
2226e7d89717SSunil Goutham 		   (u64)prof->green_pkt_pass);
2227e7d89717SSunil Goutham 	seq_printf(m, "W5: yellow_pkt_pass\t%lld\n",
2228e7d89717SSunil Goutham 		   (u64)prof->yellow_pkt_pass);
2229e7d89717SSunil Goutham 	seq_printf(m, "W6: red_pkt_pass\t%lld\n", (u64)prof->red_pkt_pass);
2230e7d89717SSunil Goutham 	seq_printf(m, "W7: green_octs_pass\t%lld\n",
2231e7d89717SSunil Goutham 		   (u64)prof->green_octs_pass);
2232e7d89717SSunil Goutham 	seq_printf(m, "W8: yellow_octs_pass\t%lld\n",
2233e7d89717SSunil Goutham 		   (u64)prof->yellow_octs_pass);
2234e7d89717SSunil Goutham 	seq_printf(m, "W9: red_octs_pass\t%lld\n", (u64)prof->red_octs_pass);
2235e7d89717SSunil Goutham 	seq_printf(m, "W10: green_pkt_drop\t%lld\n",
2236e7d89717SSunil Goutham 		   (u64)prof->green_pkt_drop);
2237e7d89717SSunil Goutham 	seq_printf(m, "W11: yellow_pkt_drop\t%lld\n",
2238e7d89717SSunil Goutham 		   (u64)prof->yellow_pkt_drop);
2239e7d89717SSunil Goutham 	seq_printf(m, "W12: red_pkt_drop\t%lld\n", (u64)prof->red_pkt_drop);
2240e7d89717SSunil Goutham 	seq_printf(m, "W13: green_octs_drop\t%lld\n",
2241e7d89717SSunil Goutham 		   (u64)prof->green_octs_drop);
2242e7d89717SSunil Goutham 	seq_printf(m, "W14: yellow_octs_drop\t%lld\n",
2243e7d89717SSunil Goutham 		   (u64)prof->yellow_octs_drop);
2244e7d89717SSunil Goutham 	seq_printf(m, "W15: red_octs_drop\t%lld\n", (u64)prof->red_octs_drop);
2245e7d89717SSunil Goutham 	seq_puts(m, "==============================\n");
2246e7d89717SSunil Goutham }
2247e7d89717SSunil Goutham 
rvu_dbg_nix_band_prof_ctx_display(struct seq_file * m,void * unused)2248e7d89717SSunil Goutham static int rvu_dbg_nix_band_prof_ctx_display(struct seq_file *m, void *unused)
2249e7d89717SSunil Goutham {
2250e7d89717SSunil Goutham 	struct nix_hw *nix_hw = m->private;
2251e7d89717SSunil Goutham 	struct nix_cn10k_aq_enq_req aq_req;
2252e7d89717SSunil Goutham 	struct nix_cn10k_aq_enq_rsp aq_rsp;
2253e7d89717SSunil Goutham 	struct rvu *rvu = nix_hw->rvu;
2254e7d89717SSunil Goutham 	struct nix_ipolicer *ipolicer;
2255e7d89717SSunil Goutham 	int layer, prof_idx, idx, rc;
2256e7d89717SSunil Goutham 	u16 pcifunc;
2257e7d89717SSunil Goutham 	char *str;
2258e7d89717SSunil Goutham 
2259cc45b96eSSubbaraya Sundeep 	/* Ingress policers do not exist on all platforms */
2260cc45b96eSSubbaraya Sundeep 	if (!nix_hw->ipolicer)
2261cc45b96eSSubbaraya Sundeep 		return 0;
2262cc45b96eSSubbaraya Sundeep 
2263e7d89717SSunil Goutham 	for (layer = 0; layer < BAND_PROF_NUM_LAYERS; layer++) {
2264e7d89717SSunil Goutham 		if (layer == BAND_PROF_INVAL_LAYER)
2265e7d89717SSunil Goutham 			continue;
2266e7d89717SSunil Goutham 		str = (layer == BAND_PROF_LEAF_LAYER) ? "Leaf" :
2267e7d89717SSunil Goutham 			(layer == BAND_PROF_MID_LAYER) ? "Mid" : "Top";
2268e7d89717SSunil Goutham 
2269e7d89717SSunil Goutham 		seq_printf(m, "\n%s bandwidth profiles\n", str);
2270e7d89717SSunil Goutham 		seq_puts(m, "=======================\n");
2271e7d89717SSunil Goutham 
2272e7d89717SSunil Goutham 		ipolicer = &nix_hw->ipolicer[layer];
2273e7d89717SSunil Goutham 
2274e7d89717SSunil Goutham 		for (idx = 0; idx < ipolicer->band_prof.max; idx++) {
2275e7d89717SSunil Goutham 			if (is_rsrc_free(&ipolicer->band_prof, idx))
2276e7d89717SSunil Goutham 				continue;
2277e7d89717SSunil Goutham 
2278e7d89717SSunil Goutham 			prof_idx = (idx & 0x3FFF) | (layer << 14);
2279e7d89717SSunil Goutham 			rc = nix_aq_context_read(rvu, nix_hw, &aq_req, &aq_rsp,
2280e7d89717SSunil Goutham 						 0x00, NIX_AQ_CTYPE_BANDPROF,
2281e7d89717SSunil Goutham 						 prof_idx);
2282e7d89717SSunil Goutham 			if (rc) {
2283e7d89717SSunil Goutham 				dev_err(rvu->dev,
2284e7d89717SSunil Goutham 					"%s: Failed to fetch context of %s profile %d, err %d\n",
2285e7d89717SSunil Goutham 					__func__, str, idx, rc);
2286e7d89717SSunil Goutham 				return 0;
2287e7d89717SSunil Goutham 			}
2288e7d89717SSunil Goutham 			seq_printf(m, "\n%s bandwidth profile:: %d\n", str, idx);
2289e7d89717SSunil Goutham 			pcifunc = ipolicer->pfvf_map[idx];
2290e7d89717SSunil Goutham 			if (!(pcifunc & RVU_PFVF_FUNC_MASK))
2291e7d89717SSunil Goutham 				seq_printf(m, "Allocated to :: PF %d\n",
2292e7d89717SSunil Goutham 					   rvu_get_pf(pcifunc));
2293e7d89717SSunil Goutham 			else
2294e7d89717SSunil Goutham 				seq_printf(m, "Allocated to :: PF %d VF %d\n",
2295e7d89717SSunil Goutham 					   rvu_get_pf(pcifunc),
2296e7d89717SSunil Goutham 					   (pcifunc & RVU_PFVF_FUNC_MASK) - 1);
2297e7d89717SSunil Goutham 			print_band_prof_ctx(m, &aq_rsp.prof);
2298e7d89717SSunil Goutham 		}
2299e7d89717SSunil Goutham 	}
2300e7d89717SSunil Goutham 	return 0;
2301e7d89717SSunil Goutham }
2302e7d89717SSunil Goutham 
2303e7d89717SSunil Goutham RVU_DEBUG_SEQ_FOPS(nix_band_prof_ctx, nix_band_prof_ctx_display, NULL);
2304e7d89717SSunil Goutham 
rvu_dbg_nix_band_prof_rsrc_display(struct seq_file * m,void * unused)2305e7d89717SSunil Goutham static int rvu_dbg_nix_band_prof_rsrc_display(struct seq_file *m, void *unused)
2306e7d89717SSunil Goutham {
2307e7d89717SSunil Goutham 	struct nix_hw *nix_hw = m->private;
2308e7d89717SSunil Goutham 	struct nix_ipolicer *ipolicer;
2309e7d89717SSunil Goutham 	int layer;
2310e7d89717SSunil Goutham 	char *str;
2311e7d89717SSunil Goutham 
2312cc45b96eSSubbaraya Sundeep 	/* Ingress policers do not exist on all platforms */
2313cc45b96eSSubbaraya Sundeep 	if (!nix_hw->ipolicer)
2314cc45b96eSSubbaraya Sundeep 		return 0;
2315cc45b96eSSubbaraya Sundeep 
2316e7d89717SSunil Goutham 	seq_puts(m, "\nBandwidth profile resource free count\n");
2317e7d89717SSunil Goutham 	seq_puts(m, "=====================================\n");
2318e7d89717SSunil Goutham 	for (layer = 0; layer < BAND_PROF_NUM_LAYERS; layer++) {
2319e7d89717SSunil Goutham 		if (layer == BAND_PROF_INVAL_LAYER)
2320e7d89717SSunil Goutham 			continue;
2321e7d89717SSunil Goutham 		str = (layer == BAND_PROF_LEAF_LAYER) ? "Leaf" :
2322e7d89717SSunil Goutham 			(layer == BAND_PROF_MID_LAYER) ? "Mid " : "Top ";
2323e7d89717SSunil Goutham 
2324e7d89717SSunil Goutham 		ipolicer = &nix_hw->ipolicer[layer];
2325e7d89717SSunil Goutham 		seq_printf(m, "%s :: Max: %4d  Free: %4d\n", str,
2326e7d89717SSunil Goutham 			   ipolicer->band_prof.max,
2327e7d89717SSunil Goutham 			   rvu_rsrc_free_count(&ipolicer->band_prof));
2328e7d89717SSunil Goutham 	}
2329e7d89717SSunil Goutham 	seq_puts(m, "=====================================\n");
2330e7d89717SSunil Goutham 
2331e7d89717SSunil Goutham 	return 0;
2332e7d89717SSunil Goutham }
2333e7d89717SSunil Goutham 
2334e7d89717SSunil Goutham RVU_DEBUG_SEQ_FOPS(nix_band_prof_rsrc, nix_band_prof_rsrc_display, NULL);
2335e7d89717SSunil Goutham 
rvu_dbg_nix_init(struct rvu * rvu,int blkaddr)23360f3ce484SRakesh Babu static void rvu_dbg_nix_init(struct rvu *rvu, int blkaddr)
233702e202c3SPrakash Brahmajyosyula {
23380f3ce484SRakesh Babu 	struct nix_hw *nix_hw;
233902e202c3SPrakash Brahmajyosyula 
23400f3ce484SRakesh Babu 	if (!is_block_implemented(rvu->hw, blkaddr))
23410f3ce484SRakesh Babu 		return;
23420f3ce484SRakesh Babu 
23430f3ce484SRakesh Babu 	if (blkaddr == BLKADDR_NIX0) {
234402e202c3SPrakash Brahmajyosyula 		rvu->rvu_dbg.nix = debugfs_create_dir("nix", rvu->rvu_dbg.root);
23450f3ce484SRakesh Babu 		nix_hw = &rvu->hw->nix[0];
23460f3ce484SRakesh Babu 	} else {
23470f3ce484SRakesh Babu 		rvu->rvu_dbg.nix = debugfs_create_dir("nix1",
23480f3ce484SRakesh Babu 						      rvu->rvu_dbg.root);
23490f3ce484SRakesh Babu 		nix_hw = &rvu->hw->nix[1];
23500f3ce484SRakesh Babu 	}
235102e202c3SPrakash Brahmajyosyula 
23522ce5a307SDan Carpenter 	debugfs_create_file("sq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
235302e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_sq_ctx_fops);
23542ce5a307SDan Carpenter 	debugfs_create_file("rq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
235502e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_rq_ctx_fops);
23562ce5a307SDan Carpenter 	debugfs_create_file("cq_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
235702e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_cq_ctx_fops);
23582ce5a307SDan Carpenter 	debugfs_create_file("ndc_tx_cache", 0600, rvu->rvu_dbg.nix, nix_hw,
23592ce5a307SDan Carpenter 			    &rvu_dbg_nix_ndc_tx_cache_fops);
23602ce5a307SDan Carpenter 	debugfs_create_file("ndc_rx_cache", 0600, rvu->rvu_dbg.nix, nix_hw,
23612ce5a307SDan Carpenter 			    &rvu_dbg_nix_ndc_rx_cache_fops);
23622ce5a307SDan Carpenter 	debugfs_create_file("ndc_tx_hits_miss", 0600, rvu->rvu_dbg.nix, nix_hw,
23630f3ce484SRakesh Babu 			    &rvu_dbg_nix_ndc_tx_hits_miss_fops);
23642ce5a307SDan Carpenter 	debugfs_create_file("ndc_rx_hits_miss", 0600, rvu->rvu_dbg.nix, nix_hw,
23650f3ce484SRakesh Babu 			    &rvu_dbg_nix_ndc_rx_hits_miss_fops);
23662ce5a307SDan Carpenter 	debugfs_create_file("qsize", 0600, rvu->rvu_dbg.nix, rvu,
236702e202c3SPrakash Brahmajyosyula 			    &rvu_dbg_nix_qsize_fops);
2368e7d89717SSunil Goutham 	debugfs_create_file("ingress_policer_ctx", 0600, rvu->rvu_dbg.nix, nix_hw,
2369e7d89717SSunil Goutham 			    &rvu_dbg_nix_band_prof_ctx_fops);
2370e7d89717SSunil Goutham 	debugfs_create_file("ingress_policer_rsrc", 0600, rvu->rvu_dbg.nix, nix_hw,
2371e7d89717SSunil Goutham 			    &rvu_dbg_nix_band_prof_rsrc_fops);
237202e202c3SPrakash Brahmajyosyula }
237302e202c3SPrakash Brahmajyosyula 
rvu_dbg_npa_init(struct rvu * rvu)23748756828aSChristina Jacob static void rvu_dbg_npa_init(struct rvu *rvu)
23758756828aSChristina Jacob {
23768756828aSChristina Jacob 	rvu->rvu_dbg.npa = debugfs_create_dir("npa", rvu->rvu_dbg.root);
23778756828aSChristina Jacob 
23782ce5a307SDan Carpenter 	debugfs_create_file("qsize", 0600, rvu->rvu_dbg.npa, rvu,
23798756828aSChristina Jacob 			    &rvu_dbg_npa_qsize_fops);
23802ce5a307SDan Carpenter 	debugfs_create_file("aura_ctx", 0600, rvu->rvu_dbg.npa, rvu,
23818756828aSChristina Jacob 			    &rvu_dbg_npa_aura_ctx_fops);
23822ce5a307SDan Carpenter 	debugfs_create_file("pool_ctx", 0600, rvu->rvu_dbg.npa, rvu,
23838756828aSChristina Jacob 			    &rvu_dbg_npa_pool_ctx_fops);
23842ce5a307SDan Carpenter 	debugfs_create_file("ndc_cache", 0600, rvu->rvu_dbg.npa, rvu,
2385c5a797e0SPrakash Brahmajyosyula 			    &rvu_dbg_npa_ndc_cache_fops);
23862ce5a307SDan Carpenter 	debugfs_create_file("ndc_hits_miss", 0600, rvu->rvu_dbg.npa, rvu,
23872ce5a307SDan Carpenter 			    &rvu_dbg_npa_ndc_hits_miss_fops);
23888756828aSChristina Jacob }
23898756828aSChristina Jacob 
2390f967488dSLinu Cherian #define PRINT_CGX_CUML_NIXRX_STATUS(idx, name)				\
2391f967488dSLinu Cherian 	({								\
2392f967488dSLinu Cherian 		u64 cnt;						\
2393f967488dSLinu Cherian 		err = rvu_cgx_nix_cuml_stats(rvu, cgxd, lmac_id, (idx),	\
2394f967488dSLinu Cherian 					     NIX_STATS_RX, &(cnt));	\
2395f967488dSLinu Cherian 		if (!err)						\
2396f967488dSLinu Cherian 			seq_printf(s, "%s: %llu\n", name, cnt);		\
2397f967488dSLinu Cherian 		cnt;							\
2398f967488dSLinu Cherian 	})
2399f967488dSLinu Cherian 
2400f967488dSLinu Cherian #define PRINT_CGX_CUML_NIXTX_STATUS(idx, name)			\
2401f967488dSLinu Cherian 	({								\
2402f967488dSLinu Cherian 		u64 cnt;						\
2403f967488dSLinu Cherian 		err = rvu_cgx_nix_cuml_stats(rvu, cgxd, lmac_id, (idx),	\
2404f967488dSLinu Cherian 					  NIX_STATS_TX, &(cnt));	\
2405f967488dSLinu Cherian 		if (!err)						\
2406f967488dSLinu Cherian 			seq_printf(s, "%s: %llu\n", name, cnt);		\
2407f967488dSLinu Cherian 		cnt;							\
2408f967488dSLinu Cherian 	})
2409f967488dSLinu Cherian 
cgx_print_stats(struct seq_file * s,int lmac_id)2410c57211b5SPrakash Brahmajyosyula static int cgx_print_stats(struct seq_file *s, int lmac_id)
2411c57211b5SPrakash Brahmajyosyula {
2412c57211b5SPrakash Brahmajyosyula 	struct cgx_link_user_info linfo;
241391c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
2414c57211b5SPrakash Brahmajyosyula 	void *cgxd = s->private;
2415f967488dSLinu Cherian 	u64 ucast, mcast, bcast;
2416c57211b5SPrakash Brahmajyosyula 	int stat = 0, err = 0;
2417c57211b5SPrakash Brahmajyosyula 	u64 tx_stat, rx_stat;
2418f967488dSLinu Cherian 	struct rvu *rvu;
2419f967488dSLinu Cherian 
2420f967488dSLinu Cherian 	rvu = pci_get_drvdata(pci_get_device(PCI_VENDOR_ID_CAVIUM,
2421f967488dSLinu Cherian 					     PCI_DEVID_OCTEONTX2_RVU_AF, NULL));
2422f967488dSLinu Cherian 	if (!rvu)
2423f967488dSLinu Cherian 		return -ENODEV;
2424c57211b5SPrakash Brahmajyosyula 
242591c6945eSHariprasad Kelam 	mac_ops = get_mac_ops(cgxd);
24261910ccf0SRakesh Babu Saladi 	/* There can be no CGX devices at all */
242791c6945eSHariprasad Kelam 	if (!mac_ops)
242891c6945eSHariprasad Kelam 		return 0;
242991c6945eSHariprasad Kelam 
2430c57211b5SPrakash Brahmajyosyula 	/* Link status */
2431c57211b5SPrakash Brahmajyosyula 	seq_puts(s, "\n=======Link Status======\n\n");
2432c57211b5SPrakash Brahmajyosyula 	err = cgx_get_link_info(cgxd, lmac_id, &linfo);
2433c57211b5SPrakash Brahmajyosyula 	if (err)
2434c57211b5SPrakash Brahmajyosyula 		seq_puts(s, "Failed to read link status\n");
2435c57211b5SPrakash Brahmajyosyula 	seq_printf(s, "\nLink is %s %d Mbps\n\n",
2436c57211b5SPrakash Brahmajyosyula 		   linfo.link_up ? "UP" : "DOWN", linfo.speed);
2437c57211b5SPrakash Brahmajyosyula 
2438c57211b5SPrakash Brahmajyosyula 	/* Rx stats */
243991c6945eSHariprasad Kelam 	seq_printf(s, "\n=======NIX RX_STATS(%s port level)======\n\n",
244091c6945eSHariprasad Kelam 		   mac_ops->name);
2441f967488dSLinu Cherian 	ucast = PRINT_CGX_CUML_NIXRX_STATUS(RX_UCAST, "rx_ucast_frames");
2442f967488dSLinu Cherian 	if (err)
2443f967488dSLinu Cherian 		return err;
2444f967488dSLinu Cherian 	mcast = PRINT_CGX_CUML_NIXRX_STATUS(RX_MCAST, "rx_mcast_frames");
2445f967488dSLinu Cherian 	if (err)
2446f967488dSLinu Cherian 		return err;
2447f967488dSLinu Cherian 	bcast = PRINT_CGX_CUML_NIXRX_STATUS(RX_BCAST, "rx_bcast_frames");
2448f967488dSLinu Cherian 	if (err)
2449f967488dSLinu Cherian 		return err;
2450f967488dSLinu Cherian 	seq_printf(s, "rx_frames: %llu\n", ucast + mcast + bcast);
2451f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_OCTS, "rx_bytes");
2452f967488dSLinu Cherian 	if (err)
2453f967488dSLinu Cherian 		return err;
2454f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_DROP, "rx_drops");
2455f967488dSLinu Cherian 	if (err)
2456f967488dSLinu Cherian 		return err;
2457f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXRX_STATUS(RX_ERR, "rx_errors");
2458f967488dSLinu Cherian 	if (err)
2459f967488dSLinu Cherian 		return err;
2460f967488dSLinu Cherian 
2461f967488dSLinu Cherian 	/* Tx stats */
246291c6945eSHariprasad Kelam 	seq_printf(s, "\n=======NIX TX_STATS(%s port level)======\n\n",
246391c6945eSHariprasad Kelam 		   mac_ops->name);
2464f967488dSLinu Cherian 	ucast = PRINT_CGX_CUML_NIXTX_STATUS(TX_UCAST, "tx_ucast_frames");
2465f967488dSLinu Cherian 	if (err)
2466f967488dSLinu Cherian 		return err;
2467f967488dSLinu Cherian 	mcast = PRINT_CGX_CUML_NIXTX_STATUS(TX_MCAST, "tx_mcast_frames");
2468f967488dSLinu Cherian 	if (err)
2469f967488dSLinu Cherian 		return err;
2470f967488dSLinu Cherian 	bcast = PRINT_CGX_CUML_NIXTX_STATUS(TX_BCAST, "tx_bcast_frames");
2471f967488dSLinu Cherian 	if (err)
2472f967488dSLinu Cherian 		return err;
2473f967488dSLinu Cherian 	seq_printf(s, "tx_frames: %llu\n", ucast + mcast + bcast);
2474f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXTX_STATUS(TX_OCTS, "tx_bytes");
2475f967488dSLinu Cherian 	if (err)
2476f967488dSLinu Cherian 		return err;
2477f967488dSLinu Cherian 	PRINT_CGX_CUML_NIXTX_STATUS(TX_DROP, "tx_drops");
2478f967488dSLinu Cherian 	if (err)
2479f967488dSLinu Cherian 		return err;
2480f967488dSLinu Cherian 
2481f967488dSLinu Cherian 	/* Rx stats */
248291c6945eSHariprasad Kelam 	seq_printf(s, "\n=======%s RX_STATS======\n\n", mac_ops->name);
2483ce7a6c31SHariprasad Kelam 	while (stat < mac_ops->rx_stats_cnt) {
2484ce7a6c31SHariprasad Kelam 		err = mac_ops->mac_get_rx_stats(cgxd, lmac_id, stat, &rx_stat);
2485c57211b5SPrakash Brahmajyosyula 		if (err)
2486c57211b5SPrakash Brahmajyosyula 			return err;
2487ce7a6c31SHariprasad Kelam 		if (is_rvu_otx2(rvu))
2488ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", cgx_rx_stats_fields[stat],
2489ce7a6c31SHariprasad Kelam 				   rx_stat);
2490ce7a6c31SHariprasad Kelam 		else
2491ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", rpm_rx_stats_fields[stat],
2492ce7a6c31SHariprasad Kelam 				   rx_stat);
2493c57211b5SPrakash Brahmajyosyula 		stat++;
2494c57211b5SPrakash Brahmajyosyula 	}
2495c57211b5SPrakash Brahmajyosyula 
2496c57211b5SPrakash Brahmajyosyula 	/* Tx stats */
2497c57211b5SPrakash Brahmajyosyula 	stat = 0;
249891c6945eSHariprasad Kelam 	seq_printf(s, "\n=======%s TX_STATS======\n\n", mac_ops->name);
2499ce7a6c31SHariprasad Kelam 	while (stat < mac_ops->tx_stats_cnt) {
2500ce7a6c31SHariprasad Kelam 		err = mac_ops->mac_get_tx_stats(cgxd, lmac_id, stat, &tx_stat);
2501c57211b5SPrakash Brahmajyosyula 		if (err)
2502c57211b5SPrakash Brahmajyosyula 			return err;
2503ce7a6c31SHariprasad Kelam 
2504ce7a6c31SHariprasad Kelam 		if (is_rvu_otx2(rvu))
2505ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", cgx_tx_stats_fields[stat],
2506ce7a6c31SHariprasad Kelam 				   tx_stat);
2507ce7a6c31SHariprasad Kelam 		else
2508ce7a6c31SHariprasad Kelam 			seq_printf(s, "%s: %llu\n", rpm_tx_stats_fields[stat],
2509ce7a6c31SHariprasad Kelam 				   tx_stat);
2510c57211b5SPrakash Brahmajyosyula 		stat++;
2511c57211b5SPrakash Brahmajyosyula 	}
2512c57211b5SPrakash Brahmajyosyula 
2513c57211b5SPrakash Brahmajyosyula 	return err;
2514c57211b5SPrakash Brahmajyosyula }
2515c57211b5SPrakash Brahmajyosyula 
rvu_dbg_derive_lmacid(struct seq_file * filp,int * lmac_id)2516dbc52debSHariprasad Kelam static int rvu_dbg_derive_lmacid(struct seq_file *filp, int *lmac_id)
2517c57211b5SPrakash Brahmajyosyula {
2518c57211b5SPrakash Brahmajyosyula 	struct dentry *current_dir;
2519c57211b5SPrakash Brahmajyosyula 	char *buf;
2520c57211b5SPrakash Brahmajyosyula 
2521c57211b5SPrakash Brahmajyosyula 	current_dir = filp->file->f_path.dentry->d_parent;
2522c57211b5SPrakash Brahmajyosyula 	buf = strrchr(current_dir->d_name.name, 'c');
2523c57211b5SPrakash Brahmajyosyula 	if (!buf)
2524c57211b5SPrakash Brahmajyosyula 		return -EINVAL;
2525c57211b5SPrakash Brahmajyosyula 
2526dbc52debSHariprasad Kelam 	return kstrtoint(buf + 1, 10, lmac_id);
2527c57211b5SPrakash Brahmajyosyula }
2528dbc52debSHariprasad Kelam 
rvu_dbg_cgx_stat_display(struct seq_file * filp,void * unused)2529dbc52debSHariprasad Kelam static int rvu_dbg_cgx_stat_display(struct seq_file *filp, void *unused)
2530dbc52debSHariprasad Kelam {
2531dbc52debSHariprasad Kelam 	int lmac_id, err;
2532dbc52debSHariprasad Kelam 
2533dbc52debSHariprasad Kelam 	err = rvu_dbg_derive_lmacid(filp, &lmac_id);
2534dbc52debSHariprasad Kelam 	if (!err)
2535dbc52debSHariprasad Kelam 		return cgx_print_stats(filp, lmac_id);
2536dbc52debSHariprasad Kelam 
2537c57211b5SPrakash Brahmajyosyula 	return err;
2538c57211b5SPrakash Brahmajyosyula }
2539c57211b5SPrakash Brahmajyosyula 
2540c57211b5SPrakash Brahmajyosyula RVU_DEBUG_SEQ_FOPS(cgx_stat, cgx_stat_display, NULL);
2541c57211b5SPrakash Brahmajyosyula 
cgx_print_dmac_flt(struct seq_file * s,int lmac_id)2542dbc52debSHariprasad Kelam static int cgx_print_dmac_flt(struct seq_file *s, int lmac_id)
2543dbc52debSHariprasad Kelam {
2544dbc52debSHariprasad Kelam 	struct pci_dev *pdev = NULL;
2545dbc52debSHariprasad Kelam 	void *cgxd = s->private;
2546dbc52debSHariprasad Kelam 	char *bcast, *mcast;
2547dbc52debSHariprasad Kelam 	u16 index, domain;
2548dbc52debSHariprasad Kelam 	u8 dmac[ETH_ALEN];
2549dbc52debSHariprasad Kelam 	struct rvu *rvu;
2550dbc52debSHariprasad Kelam 	u64 cfg, mac;
2551dbc52debSHariprasad Kelam 	int pf;
2552dbc52debSHariprasad Kelam 
2553dbc52debSHariprasad Kelam 	rvu = pci_get_drvdata(pci_get_device(PCI_VENDOR_ID_CAVIUM,
2554dbc52debSHariprasad Kelam 					     PCI_DEVID_OCTEONTX2_RVU_AF, NULL));
2555dbc52debSHariprasad Kelam 	if (!rvu)
2556dbc52debSHariprasad Kelam 		return -ENODEV;
2557dbc52debSHariprasad Kelam 
2558dbc52debSHariprasad Kelam 	pf = cgxlmac_to_pf(rvu, cgx_get_cgxid(cgxd), lmac_id);
2559dbc52debSHariprasad Kelam 	domain = 2;
2560dbc52debSHariprasad Kelam 
2561dbc52debSHariprasad Kelam 	pdev = pci_get_domain_bus_and_slot(domain, pf + 1, 0);
2562dbc52debSHariprasad Kelam 	if (!pdev)
2563dbc52debSHariprasad Kelam 		return 0;
2564dbc52debSHariprasad Kelam 
2565dbc52debSHariprasad Kelam 	cfg = cgx_read_dmac_ctrl(cgxd, lmac_id);
2566dbc52debSHariprasad Kelam 	bcast = cfg & CGX_DMAC_BCAST_MODE ? "ACCEPT" : "REJECT";
2567dbc52debSHariprasad Kelam 	mcast = cfg & CGX_DMAC_MCAST_MODE ? "ACCEPT" : "REJECT";
2568dbc52debSHariprasad Kelam 
2569dbc52debSHariprasad Kelam 	seq_puts(s,
2570dbc52debSHariprasad Kelam 		 "PCI dev       RVUPF   BROADCAST  MULTICAST  FILTER-MODE\n");
2571dbc52debSHariprasad Kelam 	seq_printf(s, "%s  PF%d  %9s  %9s",
2572dbc52debSHariprasad Kelam 		   dev_name(&pdev->dev), pf, bcast, mcast);
2573dbc52debSHariprasad Kelam 	if (cfg & CGX_DMAC_CAM_ACCEPT)
2574dbc52debSHariprasad Kelam 		seq_printf(s, "%12s\n\n", "UNICAST");
2575dbc52debSHariprasad Kelam 	else
2576dbc52debSHariprasad Kelam 		seq_printf(s, "%16s\n\n", "PROMISCUOUS");
2577dbc52debSHariprasad Kelam 
2578dbc52debSHariprasad Kelam 	seq_puts(s, "\nDMAC-INDEX  ADDRESS\n");
2579dbc52debSHariprasad Kelam 
2580dbc52debSHariprasad Kelam 	for (index = 0 ; index < 32 ; index++) {
2581dbc52debSHariprasad Kelam 		cfg = cgx_read_dmac_entry(cgxd, index);
2582dbc52debSHariprasad Kelam 		/* Display enabled dmac entries associated with current lmac */
2583dbc52debSHariprasad Kelam 		if (lmac_id == FIELD_GET(CGX_DMAC_CAM_ENTRY_LMACID, cfg) &&
2584dbc52debSHariprasad Kelam 		    FIELD_GET(CGX_DMAC_CAM_ADDR_ENABLE, cfg)) {
2585dbc52debSHariprasad Kelam 			mac = FIELD_GET(CGX_RX_DMAC_ADR_MASK, cfg);
2586dbc52debSHariprasad Kelam 			u64_to_ether_addr(mac, dmac);
2587dbc52debSHariprasad Kelam 			seq_printf(s, "%7d     %pM\n", index, dmac);
2588dbc52debSHariprasad Kelam 		}
2589dbc52debSHariprasad Kelam 	}
2590dbc52debSHariprasad Kelam 
2591d6660880SYang Yingliang 	pci_dev_put(pdev);
2592dbc52debSHariprasad Kelam 	return 0;
2593dbc52debSHariprasad Kelam }
2594dbc52debSHariprasad Kelam 
rvu_dbg_cgx_dmac_flt_display(struct seq_file * filp,void * unused)2595dbc52debSHariprasad Kelam static int rvu_dbg_cgx_dmac_flt_display(struct seq_file *filp, void *unused)
2596dbc52debSHariprasad Kelam {
2597dbc52debSHariprasad Kelam 	int err, lmac_id;
2598dbc52debSHariprasad Kelam 
2599dbc52debSHariprasad Kelam 	err = rvu_dbg_derive_lmacid(filp, &lmac_id);
2600dbc52debSHariprasad Kelam 	if (!err)
2601dbc52debSHariprasad Kelam 		return cgx_print_dmac_flt(filp, lmac_id);
2602dbc52debSHariprasad Kelam 
2603dbc52debSHariprasad Kelam 	return err;
2604dbc52debSHariprasad Kelam }
2605dbc52debSHariprasad Kelam 
2606dbc52debSHariprasad Kelam RVU_DEBUG_SEQ_FOPS(cgx_dmac_flt, cgx_dmac_flt_display, NULL);
2607dbc52debSHariprasad Kelam 
rvu_dbg_cgx_init(struct rvu * rvu)2608c57211b5SPrakash Brahmajyosyula static void rvu_dbg_cgx_init(struct rvu *rvu)
2609c57211b5SPrakash Brahmajyosyula {
261091c6945eSHariprasad Kelam 	struct mac_ops *mac_ops;
261191c6945eSHariprasad Kelam 	unsigned long lmac_bmap;
2612c57211b5SPrakash Brahmajyosyula 	int i, lmac_id;
2613c57211b5SPrakash Brahmajyosyula 	char dname[20];
2614c57211b5SPrakash Brahmajyosyula 	void *cgx;
2615c57211b5SPrakash Brahmajyosyula 
26163feac505SGeetha sowjanya 	if (!cgx_get_cgxcnt_max())
26173feac505SGeetha sowjanya 		return;
26183feac505SGeetha sowjanya 
261929788787SSubbaraya Sundeep 	mac_ops = get_mac_ops(rvu_first_cgx_pdata(rvu));
262091c6945eSHariprasad Kelam 	if (!mac_ops)
262191c6945eSHariprasad Kelam 		return;
262291c6945eSHariprasad Kelam 
262391c6945eSHariprasad Kelam 	rvu->rvu_dbg.cgx_root = debugfs_create_dir(mac_ops->name,
262491c6945eSHariprasad Kelam 						   rvu->rvu_dbg.root);
2625c57211b5SPrakash Brahmajyosyula 
2626c57211b5SPrakash Brahmajyosyula 	for (i = 0; i < cgx_get_cgxcnt_max(); i++) {
2627c57211b5SPrakash Brahmajyosyula 		cgx = rvu_cgx_pdata(i, rvu);
2628c57211b5SPrakash Brahmajyosyula 		if (!cgx)
2629c57211b5SPrakash Brahmajyosyula 			continue;
263091c6945eSHariprasad Kelam 		lmac_bmap = cgx_get_lmac_bmap(cgx);
2631c57211b5SPrakash Brahmajyosyula 		/* cgx debugfs dir */
263291c6945eSHariprasad Kelam 		sprintf(dname, "%s%d", mac_ops->name, i);
2633c57211b5SPrakash Brahmajyosyula 		rvu->rvu_dbg.cgx = debugfs_create_dir(dname,
2634c57211b5SPrakash Brahmajyosyula 						      rvu->rvu_dbg.cgx_root);
263591c6945eSHariprasad Kelam 
2636f2e664adSRakesh Babu Saladi 		for_each_set_bit(lmac_id, &lmac_bmap, rvu->hw->lmac_per_cgx) {
2637c57211b5SPrakash Brahmajyosyula 			/* lmac debugfs dir */
2638c57211b5SPrakash Brahmajyosyula 			sprintf(dname, "lmac%d", lmac_id);
2639c57211b5SPrakash Brahmajyosyula 			rvu->rvu_dbg.lmac =
2640c57211b5SPrakash Brahmajyosyula 				debugfs_create_dir(dname, rvu->rvu_dbg.cgx);
2641c57211b5SPrakash Brahmajyosyula 
26422ce5a307SDan Carpenter 			debugfs_create_file("stats", 0600, rvu->rvu_dbg.lmac,
26432ce5a307SDan Carpenter 					    cgx, &rvu_dbg_cgx_stat_fops);
2644dbc52debSHariprasad Kelam 			debugfs_create_file("mac_filter", 0600,
2645dbc52debSHariprasad Kelam 					    rvu->rvu_dbg.lmac, cgx,
2646dbc52debSHariprasad Kelam 					    &rvu_dbg_cgx_dmac_flt_fops);
2647c57211b5SPrakash Brahmajyosyula 		}
2648c57211b5SPrakash Brahmajyosyula 	}
2649c57211b5SPrakash Brahmajyosyula }
2650c57211b5SPrakash Brahmajyosyula 
2651e07fb507SSunil Goutham /* NPC debugfs APIs */
rvu_print_npc_mcam_info(struct seq_file * s,u16 pcifunc,int blkaddr)2652e07fb507SSunil Goutham static void rvu_print_npc_mcam_info(struct seq_file *s,
2653e07fb507SSunil Goutham 				    u16 pcifunc, int blkaddr)
2654e07fb507SSunil Goutham {
2655e07fb507SSunil Goutham 	struct rvu *rvu = s->private;
2656e07fb507SSunil Goutham 	int entry_acnt, entry_ecnt;
2657e07fb507SSunil Goutham 	int cntr_acnt, cntr_ecnt;
2658e07fb507SSunil Goutham 
2659e07fb507SSunil Goutham 	rvu_npc_get_mcam_entry_alloc_info(rvu, pcifunc, blkaddr,
2660e07fb507SSunil Goutham 					  &entry_acnt, &entry_ecnt);
2661e07fb507SSunil Goutham 	rvu_npc_get_mcam_counter_alloc_info(rvu, pcifunc, blkaddr,
2662e07fb507SSunil Goutham 					    &cntr_acnt, &cntr_ecnt);
2663e07fb507SSunil Goutham 	if (!entry_acnt && !cntr_acnt)
2664e07fb507SSunil Goutham 		return;
2665e07fb507SSunil Goutham 
2666e07fb507SSunil Goutham 	if (!(pcifunc & RVU_PFVF_FUNC_MASK))
2667e07fb507SSunil Goutham 		seq_printf(s, "\n\t\t Device \t\t: PF%d\n",
2668e07fb507SSunil Goutham 			   rvu_get_pf(pcifunc));
2669e07fb507SSunil Goutham 	else
2670e07fb507SSunil Goutham 		seq_printf(s, "\n\t\t Device \t\t: PF%d VF%d\n",
2671e07fb507SSunil Goutham 			   rvu_get_pf(pcifunc),
2672e07fb507SSunil Goutham 			   (pcifunc & RVU_PFVF_FUNC_MASK) - 1);
2673e07fb507SSunil Goutham 
2674e07fb507SSunil Goutham 	if (entry_acnt) {
2675e07fb507SSunil Goutham 		seq_printf(s, "\t\t Entries allocated \t: %d\n", entry_acnt);
2676e07fb507SSunil Goutham 		seq_printf(s, "\t\t Entries enabled \t: %d\n", entry_ecnt);
2677e07fb507SSunil Goutham 	}
2678e07fb507SSunil Goutham 	if (cntr_acnt) {
2679e07fb507SSunil Goutham 		seq_printf(s, "\t\t Counters allocated \t: %d\n", cntr_acnt);
2680e07fb507SSunil Goutham 		seq_printf(s, "\t\t Counters enabled \t: %d\n", cntr_ecnt);
2681e07fb507SSunil Goutham 	}
2682e07fb507SSunil Goutham }
2683e07fb507SSunil Goutham 
rvu_dbg_npc_mcam_info_display(struct seq_file * filp,void * unsued)2684e07fb507SSunil Goutham static int rvu_dbg_npc_mcam_info_display(struct seq_file *filp, void *unsued)
2685e07fb507SSunil Goutham {
2686e07fb507SSunil Goutham 	struct rvu *rvu = filp->private;
2687e07fb507SSunil Goutham 	int pf, vf, numvfs, blkaddr;
2688e07fb507SSunil Goutham 	struct npc_mcam *mcam;
26891c1935c9SSubbaraya Sundeep 	u16 pcifunc, counters;
2690e07fb507SSunil Goutham 	u64 cfg;
2691e07fb507SSunil Goutham 
2692e07fb507SSunil Goutham 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
2693e07fb507SSunil Goutham 	if (blkaddr < 0)
2694e07fb507SSunil Goutham 		return -ENODEV;
2695e07fb507SSunil Goutham 
2696e07fb507SSunil Goutham 	mcam = &rvu->hw->mcam;
26971c1935c9SSubbaraya Sundeep 	counters = rvu->hw->npc_counters;
2698e07fb507SSunil Goutham 
2699e07fb507SSunil Goutham 	seq_puts(filp, "\nNPC MCAM info:\n");
2700e07fb507SSunil Goutham 	/* MCAM keywidth on receive and transmit sides */
2701e07fb507SSunil Goutham 	cfg = rvu_read64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(NIX_INTF_RX));
2702e07fb507SSunil Goutham 	cfg = (cfg >> 32) & 0x07;
2703e07fb507SSunil Goutham 	seq_printf(filp, "\t\t RX keywidth \t: %s\n", (cfg == NPC_MCAM_KEY_X1) ?
2704e07fb507SSunil Goutham 		   "112bits" : ((cfg == NPC_MCAM_KEY_X2) ?
2705e07fb507SSunil Goutham 		   "224bits" : "448bits"));
2706e07fb507SSunil Goutham 	cfg = rvu_read64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(NIX_INTF_TX));
2707e07fb507SSunil Goutham 	cfg = (cfg >> 32) & 0x07;
2708e07fb507SSunil Goutham 	seq_printf(filp, "\t\t TX keywidth \t: %s\n", (cfg == NPC_MCAM_KEY_X1) ?
2709e07fb507SSunil Goutham 		   "112bits" : ((cfg == NPC_MCAM_KEY_X2) ?
2710e07fb507SSunil Goutham 		   "224bits" : "448bits"));
2711e07fb507SSunil Goutham 
2712e07fb507SSunil Goutham 	mutex_lock(&mcam->lock);
2713e07fb507SSunil Goutham 	/* MCAM entries */
2714e07fb507SSunil Goutham 	seq_printf(filp, "\n\t\t MCAM entries \t: %d\n", mcam->total_entries);
2715e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Reserved \t: %d\n",
2716e07fb507SSunil Goutham 		   mcam->total_entries - mcam->bmap_entries);
2717e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Available \t: %d\n", mcam->bmap_fcnt);
2718e07fb507SSunil Goutham 
2719e07fb507SSunil Goutham 	/* MCAM counters */
27201c1935c9SSubbaraya Sundeep 	seq_printf(filp, "\n\t\t MCAM counters \t: %d\n", counters);
27211c1935c9SSubbaraya Sundeep 	seq_printf(filp, "\t\t Reserved \t: %d\n",
27221c1935c9SSubbaraya Sundeep 		   counters - mcam->counters.max);
2723e07fb507SSunil Goutham 	seq_printf(filp, "\t\t Available \t: %d\n",
2724e07fb507SSunil Goutham 		   rvu_rsrc_free_count(&mcam->counters));
2725e07fb507SSunil Goutham 
2726e07fb507SSunil Goutham 	if (mcam->bmap_entries == mcam->bmap_fcnt) {
2727e07fb507SSunil Goutham 		mutex_unlock(&mcam->lock);
2728e07fb507SSunil Goutham 		return 0;
2729e07fb507SSunil Goutham 	}
2730e07fb507SSunil Goutham 
2731e07fb507SSunil Goutham 	seq_puts(filp, "\n\t\t Current allocation\n");
2732e07fb507SSunil Goutham 	seq_puts(filp, "\t\t====================\n");
2733e07fb507SSunil Goutham 	for (pf = 0; pf < rvu->hw->total_pfs; pf++) {
2734e07fb507SSunil Goutham 		pcifunc = (pf << RVU_PFVF_PF_SHIFT);
2735e07fb507SSunil Goutham 		rvu_print_npc_mcam_info(filp, pcifunc, blkaddr);
2736e07fb507SSunil Goutham 
2737e07fb507SSunil Goutham 		cfg = rvu_read64(rvu, BLKADDR_RVUM, RVU_PRIV_PFX_CFG(pf));
2738e07fb507SSunil Goutham 		numvfs = (cfg >> 12) & 0xFF;
2739e07fb507SSunil Goutham 		for (vf = 0; vf < numvfs; vf++) {
2740e07fb507SSunil Goutham 			pcifunc = (pf << RVU_PFVF_PF_SHIFT) | (vf + 1);
2741e07fb507SSunil Goutham 			rvu_print_npc_mcam_info(filp, pcifunc, blkaddr);
2742e07fb507SSunil Goutham 		}
2743e07fb507SSunil Goutham 	}
2744e07fb507SSunil Goutham 
2745e07fb507SSunil Goutham 	mutex_unlock(&mcam->lock);
2746e07fb507SSunil Goutham 	return 0;
2747e07fb507SSunil Goutham }
2748e07fb507SSunil Goutham 
2749e07fb507SSunil Goutham RVU_DEBUG_SEQ_FOPS(npc_mcam_info, npc_mcam_info_display, NULL);
2750e07fb507SSunil Goutham 
rvu_dbg_npc_rx_miss_stats_display(struct seq_file * filp,void * unused)2751e07fb507SSunil Goutham static int rvu_dbg_npc_rx_miss_stats_display(struct seq_file *filp,
2752e07fb507SSunil Goutham 					     void *unused)
2753e07fb507SSunil Goutham {
2754e07fb507SSunil Goutham 	struct rvu *rvu = filp->private;
2755e07fb507SSunil Goutham 	struct npc_mcam *mcam;
2756e07fb507SSunil Goutham 	int blkaddr;
2757e07fb507SSunil Goutham 
2758e07fb507SSunil Goutham 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
2759e07fb507SSunil Goutham 	if (blkaddr < 0)
2760e07fb507SSunil Goutham 		return -ENODEV;
2761e07fb507SSunil Goutham 
2762e07fb507SSunil Goutham 	mcam = &rvu->hw->mcam;
2763e07fb507SSunil Goutham 
2764e07fb507SSunil Goutham 	seq_puts(filp, "\nNPC MCAM RX miss action stats\n");
2765e07fb507SSunil Goutham 	seq_printf(filp, "\t\tStat %d: \t%lld\n", mcam->rx_miss_act_cntr,
2766e07fb507SSunil Goutham 		   rvu_read64(rvu, blkaddr,
2767e07fb507SSunil Goutham 			      NPC_AF_MATCH_STATX(mcam->rx_miss_act_cntr)));
2768e07fb507SSunil Goutham 
2769e07fb507SSunil Goutham 	return 0;
2770e07fb507SSunil Goutham }
2771e07fb507SSunil Goutham 
2772e07fb507SSunil Goutham RVU_DEBUG_SEQ_FOPS(npc_rx_miss_act, npc_rx_miss_stats_display, NULL);
2773e07fb507SSunil Goutham 
2774a63df366SHariprasad Kelam #define RVU_DBG_PRINT_MPLS_TTL(pkt, mask)                                     \
2775a63df366SHariprasad Kelam do {									      \
2776a63df366SHariprasad Kelam 	seq_printf(s, "%ld ", FIELD_GET(OTX2_FLOWER_MASK_MPLS_TTL, pkt));     \
2777a63df366SHariprasad Kelam 	seq_printf(s, "mask 0x%lx\n",                                         \
2778a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_TTL, mask));               \
2779a63df366SHariprasad Kelam } while (0)                                                                   \
2780a63df366SHariprasad Kelam 
2781a63df366SHariprasad Kelam #define RVU_DBG_PRINT_MPLS_LBTCBOS(_pkt, _mask)                               \
2782a63df366SHariprasad Kelam do {									      \
2783a63df366SHariprasad Kelam 	typeof(_pkt) (pkt) = (_pkt);					      \
2784a63df366SHariprasad Kelam 	typeof(_mask) (mask) = (_mask);                                       \
2785a63df366SHariprasad Kelam 	seq_printf(s, "%ld %ld %ld\n",                                        \
2786a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_LB, pkt),                  \
2787a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_TC, pkt),                  \
2788a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_BOS, pkt));                \
2789a63df366SHariprasad Kelam 	seq_printf(s, "\tmask 0x%lx 0x%lx 0x%lx\n",                           \
2790a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_LB, mask),                 \
2791a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_TC, mask),                 \
2792a63df366SHariprasad Kelam 		   FIELD_GET(OTX2_FLOWER_MASK_MPLS_BOS, mask));               \
2793a63df366SHariprasad Kelam } while (0)                                                                   \
2794a63df366SHariprasad Kelam 
rvu_dbg_npc_mcam_show_flows(struct seq_file * s,struct rvu_npc_mcam_rule * rule)27954d6beb9cSSubbaraya Sundeep static void rvu_dbg_npc_mcam_show_flows(struct seq_file *s,
27964d6beb9cSSubbaraya Sundeep 					struct rvu_npc_mcam_rule *rule)
27974d6beb9cSSubbaraya Sundeep {
27984d6beb9cSSubbaraya Sundeep 	u8 bit;
27994d6beb9cSSubbaraya Sundeep 
28004d6beb9cSSubbaraya Sundeep 	for_each_set_bit(bit, (unsigned long *)&rule->features, 64) {
28014d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\t%s  ", npc_get_field_name(bit));
28024d6beb9cSSubbaraya Sundeep 		switch (bit) {
28032cee6401SSuman Ghosh 		case NPC_LXMB:
28042cee6401SSuman Ghosh 			if (rule->lxmb == 1)
28052cee6401SSuman Ghosh 				seq_puts(s, "\tL2M nibble is set\n");
28062cee6401SSuman Ghosh 			else
28072cee6401SSuman Ghosh 				seq_puts(s, "\tL2B nibble is set\n");
28082cee6401SSuman Ghosh 			break;
28094d6beb9cSSubbaraya Sundeep 		case NPC_DMAC:
28104d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pM ", rule->packet.dmac);
28114d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pM\n", rule->mask.dmac);
28124d6beb9cSSubbaraya Sundeep 			break;
28134d6beb9cSSubbaraya Sundeep 		case NPC_SMAC:
28144d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pM ", rule->packet.smac);
28154d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pM\n", rule->mask.smac);
28164d6beb9cSSubbaraya Sundeep 			break;
28174d6beb9cSSubbaraya Sundeep 		case NPC_ETYPE:
28184d6beb9cSSubbaraya Sundeep 			seq_printf(s, "0x%x ", ntohs(rule->packet.etype));
28194d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.etype));
28204d6beb9cSSubbaraya Sundeep 			break;
28214d6beb9cSSubbaraya Sundeep 		case NPC_OUTER_VID:
28221d4d9e42SNaveen Mamindlapalli 			seq_printf(s, "0x%x ", ntohs(rule->packet.vlan_tci));
28234d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n",
28244d6beb9cSSubbaraya Sundeep 				   ntohs(rule->mask.vlan_tci));
28254d6beb9cSSubbaraya Sundeep 			break;
282621e74835SSuman Ghosh 		case NPC_INNER_VID:
282721e74835SSuman Ghosh 			seq_printf(s, "0x%x ", ntohs(rule->packet.vlan_itci));
282821e74835SSuman Ghosh 			seq_printf(s, "mask 0x%x\n",
282921e74835SSuman Ghosh 				   ntohs(rule->mask.vlan_itci));
283021e74835SSuman Ghosh 			break;
28314d6beb9cSSubbaraya Sundeep 		case NPC_TOS:
28324d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", rule->packet.tos);
28334d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", rule->mask.tos);
28344d6beb9cSSubbaraya Sundeep 			break;
28354d6beb9cSSubbaraya Sundeep 		case NPC_SIP_IPV4:
28364d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI4 ", &rule->packet.ip4src);
28374d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI4\n", &rule->mask.ip4src);
28384d6beb9cSSubbaraya Sundeep 			break;
28394d6beb9cSSubbaraya Sundeep 		case NPC_DIP_IPV4:
28404d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI4 ", &rule->packet.ip4dst);
28414d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI4\n", &rule->mask.ip4dst);
28424d6beb9cSSubbaraya Sundeep 			break;
28434d6beb9cSSubbaraya Sundeep 		case NPC_SIP_IPV6:
28444d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI6 ", rule->packet.ip6src);
28454d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI6\n", rule->mask.ip6src);
28464d6beb9cSSubbaraya Sundeep 			break;
28474d6beb9cSSubbaraya Sundeep 		case NPC_DIP_IPV6:
28484d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%pI6 ", rule->packet.ip6dst);
28494d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask %pI6\n", rule->mask.ip6dst);
28504d6beb9cSSubbaraya Sundeep 			break;
2851c672e372SSuman Ghosh 		case NPC_IPFRAG_IPV6:
2852c672e372SSuman Ghosh 			seq_printf(s, "0x%x ", rule->packet.next_header);
2853c672e372SSuman Ghosh 			seq_printf(s, "mask 0x%x\n", rule->mask.next_header);
2854c672e372SSuman Ghosh 			break;
2855c672e372SSuman Ghosh 		case NPC_IPFRAG_IPV4:
2856c672e372SSuman Ghosh 			seq_printf(s, "0x%x ", rule->packet.ip_flag);
2857c672e372SSuman Ghosh 			seq_printf(s, "mask 0x%x\n", rule->mask.ip_flag);
2858c672e372SSuman Ghosh 			break;
28594d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_TCP:
28604d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_UDP:
28614d6beb9cSSubbaraya Sundeep 		case NPC_SPORT_SCTP:
28624d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", ntohs(rule->packet.sport));
28634d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.sport));
28644d6beb9cSSubbaraya Sundeep 			break;
28654d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_TCP:
28664d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_UDP:
28674d6beb9cSSubbaraya Sundeep 		case NPC_DPORT_SCTP:
28684d6beb9cSSubbaraya Sundeep 			seq_printf(s, "%d ", ntohs(rule->packet.dport));
28694d6beb9cSSubbaraya Sundeep 			seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.dport));
28704d6beb9cSSubbaraya Sundeep 			break;
28713b43f19dSSai Krishna 		case NPC_TCP_FLAGS:
28723b43f19dSSai Krishna 			seq_printf(s, "%d ", rule->packet.tcp_flags);
28733b43f19dSSai Krishna 			seq_printf(s, "mask 0x%x\n", rule->mask.tcp_flags);
28743b43f19dSSai Krishna 			break;
287573b4c04eSRatheesh Kannoth 		case NPC_IPSEC_SPI:
287673b4c04eSRatheesh Kannoth 			seq_printf(s, "0x%x ", ntohl(rule->packet.spi));
287773b4c04eSRatheesh Kannoth 			seq_printf(s, "mask 0x%x\n", ntohl(rule->mask.spi));
287873b4c04eSRatheesh Kannoth 			break;
2879a63df366SHariprasad Kelam 		case NPC_MPLS1_LBTCBOS:
2880a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_LBTCBOS(rule->packet.mpls_lse[0],
2881a63df366SHariprasad Kelam 						   rule->mask.mpls_lse[0]);
2882a63df366SHariprasad Kelam 			break;
2883a63df366SHariprasad Kelam 		case NPC_MPLS1_TTL:
2884a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_TTL(rule->packet.mpls_lse[0],
2885a63df366SHariprasad Kelam 					       rule->mask.mpls_lse[0]);
2886a63df366SHariprasad Kelam 			break;
2887a63df366SHariprasad Kelam 		case NPC_MPLS2_LBTCBOS:
2888a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_LBTCBOS(rule->packet.mpls_lse[1],
2889a63df366SHariprasad Kelam 						   rule->mask.mpls_lse[1]);
2890a63df366SHariprasad Kelam 			break;
2891a63df366SHariprasad Kelam 		case NPC_MPLS2_TTL:
2892a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_TTL(rule->packet.mpls_lse[1],
2893a63df366SHariprasad Kelam 					       rule->mask.mpls_lse[1]);
2894a63df366SHariprasad Kelam 			break;
2895a63df366SHariprasad Kelam 		case NPC_MPLS3_LBTCBOS:
2896a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_LBTCBOS(rule->packet.mpls_lse[2],
2897a63df366SHariprasad Kelam 						   rule->mask.mpls_lse[2]);
2898a63df366SHariprasad Kelam 			break;
2899a63df366SHariprasad Kelam 		case NPC_MPLS3_TTL:
2900a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_TTL(rule->packet.mpls_lse[2],
2901a63df366SHariprasad Kelam 					       rule->mask.mpls_lse[2]);
2902a63df366SHariprasad Kelam 			break;
2903a63df366SHariprasad Kelam 		case NPC_MPLS4_LBTCBOS:
2904a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_LBTCBOS(rule->packet.mpls_lse[3],
2905a63df366SHariprasad Kelam 						   rule->mask.mpls_lse[3]);
2906a63df366SHariprasad Kelam 			break;
2907a63df366SHariprasad Kelam 		case NPC_MPLS4_TTL:
2908a63df366SHariprasad Kelam 			RVU_DBG_PRINT_MPLS_TTL(rule->packet.mpls_lse[3],
2909a63df366SHariprasad Kelam 					       rule->mask.mpls_lse[3]);
2910a63df366SHariprasad Kelam 			break;
2911a8d4879dSGeetha sowjanya 		case NPC_TYPE_ICMP:
2912a8d4879dSGeetha sowjanya 			seq_printf(s, "%d ", rule->packet.icmp_type);
2913a8d4879dSGeetha sowjanya 			seq_printf(s, "mask 0x%x\n", rule->mask.icmp_type);
2914a8d4879dSGeetha sowjanya 			break;
2915a8d4879dSGeetha sowjanya 		case NPC_CODE_ICMP:
2916a8d4879dSGeetha sowjanya 			seq_printf(s, "%d ", rule->packet.icmp_code);
2917a8d4879dSGeetha sowjanya 			seq_printf(s, "mask 0x%x\n", rule->mask.icmp_code);
2918a8d4879dSGeetha sowjanya 			break;
29194d6beb9cSSubbaraya Sundeep 		default:
2920b7cf9661SNaveen Mamindlapalli 			seq_puts(s, "\n");
29214d6beb9cSSubbaraya Sundeep 			break;
29224d6beb9cSSubbaraya Sundeep 		}
29234d6beb9cSSubbaraya Sundeep 	}
29244d6beb9cSSubbaraya Sundeep }
29254d6beb9cSSubbaraya Sundeep 
rvu_dbg_npc_mcam_show_action(struct seq_file * s,struct rvu_npc_mcam_rule * rule)29264d6beb9cSSubbaraya Sundeep static void rvu_dbg_npc_mcam_show_action(struct seq_file *s,
29274d6beb9cSSubbaraya Sundeep 					 struct rvu_npc_mcam_rule *rule)
29284d6beb9cSSubbaraya Sundeep {
2929cb7a6b3bSSubbaraya Sundeep 	if (is_npc_intf_tx(rule->intf)) {
29304d6beb9cSSubbaraya Sundeep 		switch (rule->tx_action.op) {
29314d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_DROP:
29324d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Drop\n");
29334d6beb9cSSubbaraya Sundeep 			break;
29344d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_UCAST_DEFAULT:
29354d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Unicast to default channel\n");
29364d6beb9cSSubbaraya Sundeep 			break;
29374d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_UCAST_CHAN:
29384d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\taction: Unicast to channel %d\n",
29394d6beb9cSSubbaraya Sundeep 				   rule->tx_action.index);
29404d6beb9cSSubbaraya Sundeep 			break;
29414d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_MCAST:
29424d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Multicast\n");
29434d6beb9cSSubbaraya Sundeep 			break;
29444d6beb9cSSubbaraya Sundeep 		case NIX_TX_ACTIONOP_DROP_VIOL:
29454d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Lockdown Violation Drop\n");
29464d6beb9cSSubbaraya Sundeep 			break;
29474d6beb9cSSubbaraya Sundeep 		default:
29484d6beb9cSSubbaraya Sundeep 			break;
2949fc6f89ddSXu Wang 		}
29504d6beb9cSSubbaraya Sundeep 	} else {
29514d6beb9cSSubbaraya Sundeep 		switch (rule->rx_action.op) {
29524d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_DROP:
29534d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Drop\n");
29544d6beb9cSSubbaraya Sundeep 			break;
29554d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_UCAST:
29564d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\taction: Direct to queue %d\n",
29574d6beb9cSSubbaraya Sundeep 				   rule->rx_action.index);
29584d6beb9cSSubbaraya Sundeep 			break;
29594d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_RSS:
29604d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: RSS\n");
29614d6beb9cSSubbaraya Sundeep 			break;
29624d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_UCAST_IPSEC:
29634d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Unicast ipsec\n");
29644d6beb9cSSubbaraya Sundeep 			break;
29654d6beb9cSSubbaraya Sundeep 		case NIX_RX_ACTIONOP_MCAST:
29664d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\taction: Multicast\n");
29674d6beb9cSSubbaraya Sundeep 			break;
29684d6beb9cSSubbaraya Sundeep 		default:
29694d6beb9cSSubbaraya Sundeep 			break;
2970fc6f89ddSXu Wang 		}
29714d6beb9cSSubbaraya Sundeep 	}
29724d6beb9cSSubbaraya Sundeep }
29734d6beb9cSSubbaraya Sundeep 
rvu_dbg_get_intf_name(int intf)29744d6beb9cSSubbaraya Sundeep static const char *rvu_dbg_get_intf_name(int intf)
29754d6beb9cSSubbaraya Sundeep {
29764d6beb9cSSubbaraya Sundeep 	switch (intf) {
29774d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_RX(0):
29784d6beb9cSSubbaraya Sundeep 		return "NIX0_RX";
29794d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_RX(1):
29804d6beb9cSSubbaraya Sundeep 		return "NIX1_RX";
29814d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_TX(0):
29824d6beb9cSSubbaraya Sundeep 		return "NIX0_TX";
29834d6beb9cSSubbaraya Sundeep 	case NIX_INTFX_TX(1):
29844d6beb9cSSubbaraya Sundeep 		return "NIX1_TX";
29854d6beb9cSSubbaraya Sundeep 	default:
29864d6beb9cSSubbaraya Sundeep 		break;
29874d6beb9cSSubbaraya Sundeep 	}
29884d6beb9cSSubbaraya Sundeep 
29894d6beb9cSSubbaraya Sundeep 	return "unknown";
29904d6beb9cSSubbaraya Sundeep }
29914d6beb9cSSubbaraya Sundeep 
rvu_dbg_npc_mcam_show_rules(struct seq_file * s,void * unused)29924d6beb9cSSubbaraya Sundeep static int rvu_dbg_npc_mcam_show_rules(struct seq_file *s, void *unused)
29934d6beb9cSSubbaraya Sundeep {
29944d6beb9cSSubbaraya Sundeep 	struct rvu_npc_mcam_rule *iter;
29954d6beb9cSSubbaraya Sundeep 	struct rvu *rvu = s->private;
29964d6beb9cSSubbaraya Sundeep 	struct npc_mcam *mcam;
29974d6beb9cSSubbaraya Sundeep 	int pf, vf = -1;
2998967db352SNaveen Mamindlapalli 	bool enabled;
29994d6beb9cSSubbaraya Sundeep 	int blkaddr;
30004d6beb9cSSubbaraya Sundeep 	u16 target;
30014d6beb9cSSubbaraya Sundeep 	u64 hits;
30024d6beb9cSSubbaraya Sundeep 
30034d6beb9cSSubbaraya Sundeep 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
30044d6beb9cSSubbaraya Sundeep 	if (blkaddr < 0)
30054d6beb9cSSubbaraya Sundeep 		return 0;
30064d6beb9cSSubbaraya Sundeep 
30074d6beb9cSSubbaraya Sundeep 	mcam = &rvu->hw->mcam;
30084d6beb9cSSubbaraya Sundeep 
30094d6beb9cSSubbaraya Sundeep 	mutex_lock(&mcam->lock);
30104d6beb9cSSubbaraya Sundeep 	list_for_each_entry(iter, &mcam->mcam_rules, list) {
30114d6beb9cSSubbaraya Sundeep 		pf = (iter->owner >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
30124d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\n\tInstalled by: PF%d ", pf);
30134d6beb9cSSubbaraya Sundeep 
30144d6beb9cSSubbaraya Sundeep 		if (iter->owner & RVU_PFVF_FUNC_MASK) {
30154d6beb9cSSubbaraya Sundeep 			vf = (iter->owner & RVU_PFVF_FUNC_MASK) - 1;
30164d6beb9cSSubbaraya Sundeep 			seq_printf(s, "VF%d", vf);
30174d6beb9cSSubbaraya Sundeep 		}
30184d6beb9cSSubbaraya Sundeep 		seq_puts(s, "\n");
30194d6beb9cSSubbaraya Sundeep 
30204d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tdirection: %s\n", is_npc_intf_rx(iter->intf) ?
30214d6beb9cSSubbaraya Sundeep 						    "RX" : "TX");
30224d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tinterface: %s\n",
30234d6beb9cSSubbaraya Sundeep 			   rvu_dbg_get_intf_name(iter->intf));
30244d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tmcam entry: %d\n", iter->entry);
30254d6beb9cSSubbaraya Sundeep 
30264d6beb9cSSubbaraya Sundeep 		rvu_dbg_npc_mcam_show_flows(s, iter);
302763f925dcSNaveen Mamindlapalli 		if (is_npc_intf_rx(iter->intf)) {
30284d6beb9cSSubbaraya Sundeep 			target = iter->rx_action.pf_func;
30294d6beb9cSSubbaraya Sundeep 			pf = (target >> RVU_PFVF_PF_SHIFT) & RVU_PFVF_PF_MASK;
30304d6beb9cSSubbaraya Sundeep 			seq_printf(s, "\tForward to: PF%d ", pf);
30314d6beb9cSSubbaraya Sundeep 
30324d6beb9cSSubbaraya Sundeep 			if (target & RVU_PFVF_FUNC_MASK) {
30334d6beb9cSSubbaraya Sundeep 				vf = (target & RVU_PFVF_FUNC_MASK) - 1;
30344d6beb9cSSubbaraya Sundeep 				seq_printf(s, "VF%d", vf);
30354d6beb9cSSubbaraya Sundeep 			}
30364d6beb9cSSubbaraya Sundeep 			seq_puts(s, "\n");
30379716a40aSRakesh Babu 			seq_printf(s, "\tchannel: 0x%x\n", iter->chan);
30389716a40aSRakesh Babu 			seq_printf(s, "\tchannel_mask: 0x%x\n", iter->chan_mask);
30394d6beb9cSSubbaraya Sundeep 		}
30404d6beb9cSSubbaraya Sundeep 
30414d6beb9cSSubbaraya Sundeep 		rvu_dbg_npc_mcam_show_action(s, iter);
3042967db352SNaveen Mamindlapalli 
3043967db352SNaveen Mamindlapalli 		enabled = is_mcam_entry_enabled(rvu, mcam, blkaddr, iter->entry);
3044967db352SNaveen Mamindlapalli 		seq_printf(s, "\tenabled: %s\n", enabled ? "yes" : "no");
30454d6beb9cSSubbaraya Sundeep 
30464d6beb9cSSubbaraya Sundeep 		if (!iter->has_cntr)
30474d6beb9cSSubbaraya Sundeep 			continue;
30484d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\tcounter: %d\n", iter->cntr);
30494d6beb9cSSubbaraya Sundeep 
30504d6beb9cSSubbaraya Sundeep 		hits = rvu_read64(rvu, blkaddr, NPC_AF_MATCH_STATX(iter->cntr));
30514d6beb9cSSubbaraya Sundeep 		seq_printf(s, "\thits: %lld\n", hits);
30524d6beb9cSSubbaraya Sundeep 	}
30534d6beb9cSSubbaraya Sundeep 	mutex_unlock(&mcam->lock);
30544d6beb9cSSubbaraya Sundeep 
30554d6beb9cSSubbaraya Sundeep 	return 0;
30564d6beb9cSSubbaraya Sundeep }
30574d6beb9cSSubbaraya Sundeep 
30584d6beb9cSSubbaraya Sundeep RVU_DEBUG_SEQ_FOPS(npc_mcam_rules, npc_mcam_show_rules, NULL);
30594d6beb9cSSubbaraya Sundeep 
rvu_dbg_npc_exact_show_entries(struct seq_file * s,void * unused)306087e4ea29SRatheesh Kannoth static int rvu_dbg_npc_exact_show_entries(struct seq_file *s, void *unused)
306187e4ea29SRatheesh Kannoth {
306287e4ea29SRatheesh Kannoth 	struct npc_exact_table_entry *mem_entry[NPC_EXACT_TBL_MAX_WAYS] = { 0 };
306387e4ea29SRatheesh Kannoth 	struct npc_exact_table_entry *cam_entry;
306487e4ea29SRatheesh Kannoth 	struct npc_exact_table *table;
306587e4ea29SRatheesh Kannoth 	struct rvu *rvu = s->private;
306687e4ea29SRatheesh Kannoth 	int i, j;
306787e4ea29SRatheesh Kannoth 
306887e4ea29SRatheesh Kannoth 	u8 bitmap = 0;
306987e4ea29SRatheesh Kannoth 
307087e4ea29SRatheesh Kannoth 	table = rvu->hw->table;
307187e4ea29SRatheesh Kannoth 
307287e4ea29SRatheesh Kannoth 	mutex_lock(&table->lock);
307387e4ea29SRatheesh Kannoth 
307487e4ea29SRatheesh Kannoth 	/* Check if there is at least one entry in mem table */
307587e4ea29SRatheesh Kannoth 	if (!table->mem_tbl_entry_cnt)
307687e4ea29SRatheesh Kannoth 		goto dump_cam_table;
307787e4ea29SRatheesh Kannoth 
307887e4ea29SRatheesh Kannoth 	/* Print table headers */
307987e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\tExact Match MEM Table\n");
308087e4ea29SRatheesh Kannoth 	seq_puts(s, "Index\t");
308187e4ea29SRatheesh Kannoth 
308287e4ea29SRatheesh Kannoth 	for (i = 0; i < table->mem_table.ways; i++) {
308387e4ea29SRatheesh Kannoth 		mem_entry[i] = list_first_entry_or_null(&table->lhead_mem_tbl_entry[i],
308487e4ea29SRatheesh Kannoth 							struct npc_exact_table_entry, list);
308587e4ea29SRatheesh Kannoth 
308687e4ea29SRatheesh Kannoth 		seq_printf(s, "Way-%d\t\t\t\t\t", i);
308787e4ea29SRatheesh Kannoth 	}
308887e4ea29SRatheesh Kannoth 
308987e4ea29SRatheesh Kannoth 	seq_puts(s, "\n");
309087e4ea29SRatheesh Kannoth 	for (i = 0; i < table->mem_table.ways; i++)
309187e4ea29SRatheesh Kannoth 		seq_puts(s, "\tChan  MAC                     \t");
309287e4ea29SRatheesh Kannoth 
309387e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\n");
309487e4ea29SRatheesh Kannoth 
309587e4ea29SRatheesh Kannoth 	/* Print mem table entries */
309687e4ea29SRatheesh Kannoth 	for (i = 0; i < table->mem_table.depth; i++) {
309787e4ea29SRatheesh Kannoth 		bitmap = 0;
309887e4ea29SRatheesh Kannoth 		for (j = 0; j < table->mem_table.ways; j++) {
309987e4ea29SRatheesh Kannoth 			if (!mem_entry[j])
310087e4ea29SRatheesh Kannoth 				continue;
310187e4ea29SRatheesh Kannoth 
310287e4ea29SRatheesh Kannoth 			if (mem_entry[j]->index != i)
310387e4ea29SRatheesh Kannoth 				continue;
310487e4ea29SRatheesh Kannoth 
310587e4ea29SRatheesh Kannoth 			bitmap |= BIT(j);
310687e4ea29SRatheesh Kannoth 		}
310787e4ea29SRatheesh Kannoth 
310887e4ea29SRatheesh Kannoth 		/* No valid entries */
310987e4ea29SRatheesh Kannoth 		if (!bitmap)
311087e4ea29SRatheesh Kannoth 			continue;
311187e4ea29SRatheesh Kannoth 
311287e4ea29SRatheesh Kannoth 		seq_printf(s, "%d\t", i);
311387e4ea29SRatheesh Kannoth 		for (j = 0; j < table->mem_table.ways; j++) {
311487e4ea29SRatheesh Kannoth 			if (!(bitmap & BIT(j))) {
311587e4ea29SRatheesh Kannoth 				seq_puts(s, "nil\t\t\t\t\t");
311687e4ea29SRatheesh Kannoth 				continue;
311787e4ea29SRatheesh Kannoth 			}
311887e4ea29SRatheesh Kannoth 
311987e4ea29SRatheesh Kannoth 			seq_printf(s, "0x%x %pM\t\t\t", mem_entry[j]->chan,
312087e4ea29SRatheesh Kannoth 				   mem_entry[j]->mac);
312187e4ea29SRatheesh Kannoth 			mem_entry[j] = list_next_entry(mem_entry[j], list);
312287e4ea29SRatheesh Kannoth 		}
312387e4ea29SRatheesh Kannoth 		seq_puts(s, "\n");
312487e4ea29SRatheesh Kannoth 	}
312587e4ea29SRatheesh Kannoth 
312687e4ea29SRatheesh Kannoth dump_cam_table:
312787e4ea29SRatheesh Kannoth 
312887e4ea29SRatheesh Kannoth 	if (!table->cam_tbl_entry_cnt)
312987e4ea29SRatheesh Kannoth 		goto done;
313087e4ea29SRatheesh Kannoth 
313187e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\tExact Match CAM Table\n");
313287e4ea29SRatheesh Kannoth 	seq_puts(s, "index\tchan\tMAC\n");
313387e4ea29SRatheesh Kannoth 
313487e4ea29SRatheesh Kannoth 	/* Traverse cam table entries */
313587e4ea29SRatheesh Kannoth 	list_for_each_entry(cam_entry, &table->lhead_cam_tbl_entry, list) {
313687e4ea29SRatheesh Kannoth 		seq_printf(s, "%d\t0x%x\t%pM\n", cam_entry->index, cam_entry->chan,
313787e4ea29SRatheesh Kannoth 			   cam_entry->mac);
313887e4ea29SRatheesh Kannoth 	}
313987e4ea29SRatheesh Kannoth 
314087e4ea29SRatheesh Kannoth done:
314187e4ea29SRatheesh Kannoth 	mutex_unlock(&table->lock);
314287e4ea29SRatheesh Kannoth 	return 0;
314387e4ea29SRatheesh Kannoth }
314487e4ea29SRatheesh Kannoth 
314587e4ea29SRatheesh Kannoth RVU_DEBUG_SEQ_FOPS(npc_exact_entries, npc_exact_show_entries, NULL);
314687e4ea29SRatheesh Kannoth 
rvu_dbg_npc_exact_show_info(struct seq_file * s,void * unused)314787e4ea29SRatheesh Kannoth static int rvu_dbg_npc_exact_show_info(struct seq_file *s, void *unused)
314887e4ea29SRatheesh Kannoth {
314987e4ea29SRatheesh Kannoth 	struct npc_exact_table *table;
315087e4ea29SRatheesh Kannoth 	struct rvu *rvu = s->private;
315187e4ea29SRatheesh Kannoth 	int i;
315287e4ea29SRatheesh Kannoth 
315387e4ea29SRatheesh Kannoth 	table = rvu->hw->table;
315487e4ea29SRatheesh Kannoth 
315587e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\tExact Table Info\n");
315687e4ea29SRatheesh Kannoth 	seq_printf(s, "Exact Match Feature : %s\n",
315787e4ea29SRatheesh Kannoth 		   rvu->hw->cap.npc_exact_match_enabled ? "enabled" : "disable");
315887e4ea29SRatheesh Kannoth 	if (!rvu->hw->cap.npc_exact_match_enabled)
315987e4ea29SRatheesh Kannoth 		return 0;
316087e4ea29SRatheesh Kannoth 
316187e4ea29SRatheesh Kannoth 	seq_puts(s, "\nMCAM Index\tMAC Filter Rules Count\n");
316287e4ea29SRatheesh Kannoth 	for (i = 0; i < table->num_drop_rules; i++)
316387e4ea29SRatheesh Kannoth 		seq_printf(s, "%d\t\t%d\n", i, table->cnt_cmd_rules[i]);
316487e4ea29SRatheesh Kannoth 
316587e4ea29SRatheesh Kannoth 	seq_puts(s, "\nMcam Index\tPromisc Mode Status\n");
316687e4ea29SRatheesh Kannoth 	for (i = 0; i < table->num_drop_rules; i++)
316787e4ea29SRatheesh Kannoth 		seq_printf(s, "%d\t\t%s\n", i, table->promisc_mode[i] ? "on" : "off");
316887e4ea29SRatheesh Kannoth 
316987e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\tMEM Table Info\n");
317087e4ea29SRatheesh Kannoth 	seq_printf(s, "Ways : %d\n", table->mem_table.ways);
317187e4ea29SRatheesh Kannoth 	seq_printf(s, "Depth : %d\n", table->mem_table.depth);
317287e4ea29SRatheesh Kannoth 	seq_printf(s, "Mask : 0x%llx\n", table->mem_table.mask);
317387e4ea29SRatheesh Kannoth 	seq_printf(s, "Hash Mask : 0x%x\n", table->mem_table.hash_mask);
317487e4ea29SRatheesh Kannoth 	seq_printf(s, "Hash Offset : 0x%x\n", table->mem_table.hash_offset);
317587e4ea29SRatheesh Kannoth 
317687e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\tCAM Table Info\n");
317787e4ea29SRatheesh Kannoth 	seq_printf(s, "Depth : %d\n", table->cam_table.depth);
317887e4ea29SRatheesh Kannoth 
317987e4ea29SRatheesh Kannoth 	return 0;
318087e4ea29SRatheesh Kannoth }
318187e4ea29SRatheesh Kannoth 
318287e4ea29SRatheesh Kannoth RVU_DEBUG_SEQ_FOPS(npc_exact_info, npc_exact_show_info, NULL);
318387e4ea29SRatheesh Kannoth 
rvu_dbg_npc_exact_drop_cnt(struct seq_file * s,void * unused)318487e4ea29SRatheesh Kannoth static int rvu_dbg_npc_exact_drop_cnt(struct seq_file *s, void *unused)
318587e4ea29SRatheesh Kannoth {
318687e4ea29SRatheesh Kannoth 	struct npc_exact_table *table;
318787e4ea29SRatheesh Kannoth 	struct rvu *rvu = s->private;
318887e4ea29SRatheesh Kannoth 	struct npc_key_field *field;
318987e4ea29SRatheesh Kannoth 	u16 chan, pcifunc;
319087e4ea29SRatheesh Kannoth 	int blkaddr, i;
319187e4ea29SRatheesh Kannoth 	u64 cfg, cam1;
319287e4ea29SRatheesh Kannoth 	char *str;
319387e4ea29SRatheesh Kannoth 
319487e4ea29SRatheesh Kannoth 	blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0);
319587e4ea29SRatheesh Kannoth 	table = rvu->hw->table;
319687e4ea29SRatheesh Kannoth 
319787e4ea29SRatheesh Kannoth 	field = &rvu->hw->mcam.rx_key_fields[NPC_CHAN];
319887e4ea29SRatheesh Kannoth 
319987e4ea29SRatheesh Kannoth 	seq_puts(s, "\n\t Exact Hit on drop status\n");
320087e4ea29SRatheesh Kannoth 	seq_puts(s, "\npcifunc\tmcam_idx\tHits\tchan\tstatus\n");
320187e4ea29SRatheesh Kannoth 
320287e4ea29SRatheesh Kannoth 	for (i = 0; i < table->num_drop_rules; i++) {
320387e4ea29SRatheesh Kannoth 		pcifunc = rvu_npc_exact_drop_rule_to_pcifunc(rvu, i);
320487e4ea29SRatheesh Kannoth 		cfg = rvu_read64(rvu, blkaddr, NPC_AF_MCAMEX_BANKX_CFG(i, 0));
320587e4ea29SRatheesh Kannoth 
320687e4ea29SRatheesh Kannoth 		/* channel will be always in keyword 0 */
320787e4ea29SRatheesh Kannoth 		cam1 = rvu_read64(rvu, blkaddr,
320887e4ea29SRatheesh Kannoth 				  NPC_AF_MCAMEX_BANKX_CAMX_W0(i, 0, 1));
320987e4ea29SRatheesh Kannoth 		chan = field->kw_mask[0] & cam1;
321087e4ea29SRatheesh Kannoth 
321187e4ea29SRatheesh Kannoth 		str = (cfg & 1) ? "enabled" : "disabled";
321287e4ea29SRatheesh Kannoth 
321387e4ea29SRatheesh Kannoth 		seq_printf(s, "0x%x\t%d\t\t%llu\t0x%x\t%s\n", pcifunc, i,
321487e4ea29SRatheesh Kannoth 			   rvu_read64(rvu, blkaddr,
321587e4ea29SRatheesh Kannoth 				      NPC_AF_MATCH_STATX(table->counter_idx[i])),
321687e4ea29SRatheesh Kannoth 			   chan, str);
321787e4ea29SRatheesh Kannoth 	}
321887e4ea29SRatheesh Kannoth 
321987e4ea29SRatheesh Kannoth 	return 0;
322087e4ea29SRatheesh Kannoth }
322187e4ea29SRatheesh Kannoth 
322287e4ea29SRatheesh Kannoth RVU_DEBUG_SEQ_FOPS(npc_exact_drop_cnt, npc_exact_drop_cnt, NULL);
322387e4ea29SRatheesh Kannoth 
rvu_dbg_npc_init(struct rvu * rvu)3224e07fb507SSunil Goutham static void rvu_dbg_npc_init(struct rvu *rvu)
3225e07fb507SSunil Goutham {
3226e07fb507SSunil Goutham 	rvu->rvu_dbg.npc = debugfs_create_dir("npc", rvu->rvu_dbg.root);
3227e07fb507SSunil Goutham 
32282ce5a307SDan Carpenter 	debugfs_create_file("mcam_info", 0444, rvu->rvu_dbg.npc, rvu,
32292ce5a307SDan Carpenter 			    &rvu_dbg_npc_mcam_info_fops);
32302ce5a307SDan Carpenter 	debugfs_create_file("mcam_rules", 0444, rvu->rvu_dbg.npc, rvu,
32312ce5a307SDan Carpenter 			    &rvu_dbg_npc_mcam_rules_fops);
323287e4ea29SRatheesh Kannoth 
32332ce5a307SDan Carpenter 	debugfs_create_file("rx_miss_act_stats", 0444, rvu->rvu_dbg.npc, rvu,
32342ce5a307SDan Carpenter 			    &rvu_dbg_npc_rx_miss_act_fops);
323587e4ea29SRatheesh Kannoth 
323687e4ea29SRatheesh Kannoth 	if (!rvu->hw->cap.npc_exact_match_enabled)
323787e4ea29SRatheesh Kannoth 		return;
323887e4ea29SRatheesh Kannoth 
323987e4ea29SRatheesh Kannoth 	debugfs_create_file("exact_entries", 0444, rvu->rvu_dbg.npc, rvu,
324087e4ea29SRatheesh Kannoth 			    &rvu_dbg_npc_exact_entries_fops);
324187e4ea29SRatheesh Kannoth 
324287e4ea29SRatheesh Kannoth 	debugfs_create_file("exact_info", 0444, rvu->rvu_dbg.npc, rvu,
324387e4ea29SRatheesh Kannoth 			    &rvu_dbg_npc_exact_info_fops);
324487e4ea29SRatheesh Kannoth 
324587e4ea29SRatheesh Kannoth 	debugfs_create_file("exact_drop_cnt", 0444, rvu->rvu_dbg.npc, rvu,
324687e4ea29SRatheesh Kannoth 			    &rvu_dbg_npc_exact_drop_cnt_fops);
324787e4ea29SRatheesh Kannoth 
3248e07fb507SSunil Goutham }
3249e07fb507SSunil Goutham 
cpt_eng_sts_display(struct seq_file * filp,u8 eng_type)325076638a2eSSrujana Challa static int cpt_eng_sts_display(struct seq_file *filp, u8 eng_type)
325176638a2eSSrujana Challa {
3252b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
325376638a2eSSrujana Challa 	u64 busy_sts = 0, free_sts = 0;
325476638a2eSSrujana Challa 	u32 e_min = 0, e_max = 0, e, i;
325576638a2eSSrujana Challa 	u16 max_ses, max_ies, max_aes;
3256b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
3257b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
325876638a2eSSrujana Challa 	u64 reg;
325976638a2eSSrujana Challa 
326076638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1);
326176638a2eSSrujana Challa 	max_ses = reg & 0xffff;
326276638a2eSSrujana Challa 	max_ies = (reg >> 16) & 0xffff;
326376638a2eSSrujana Challa 	max_aes = (reg >> 32) & 0xffff;
326476638a2eSSrujana Challa 
326576638a2eSSrujana Challa 	switch (eng_type) {
326676638a2eSSrujana Challa 	case CPT_AE_TYPE:
326776638a2eSSrujana Challa 		e_min = max_ses + max_ies;
326876638a2eSSrujana Challa 		e_max = max_ses + max_ies + max_aes;
326976638a2eSSrujana Challa 		break;
327076638a2eSSrujana Challa 	case CPT_SE_TYPE:
327176638a2eSSrujana Challa 		e_min = 0;
327276638a2eSSrujana Challa 		e_max = max_ses;
327376638a2eSSrujana Challa 		break;
327476638a2eSSrujana Challa 	case CPT_IE_TYPE:
327576638a2eSSrujana Challa 		e_min = max_ses;
327676638a2eSSrujana Challa 		e_max = max_ses + max_ies;
327776638a2eSSrujana Challa 		break;
327876638a2eSSrujana Challa 	default:
327976638a2eSSrujana Challa 		return -EINVAL;
328076638a2eSSrujana Challa 	}
328176638a2eSSrujana Challa 
328276638a2eSSrujana Challa 	for (e = e_min, i = 0; e < e_max; e++, i++) {
328376638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(e));
328476638a2eSSrujana Challa 		if (reg & 0x1)
328576638a2eSSrujana Challa 			busy_sts |= 1ULL << i;
328676638a2eSSrujana Challa 
328776638a2eSSrujana Challa 		if (reg & 0x2)
328876638a2eSSrujana Challa 			free_sts |= 1ULL << i;
328976638a2eSSrujana Challa 	}
329076638a2eSSrujana Challa 	seq_printf(filp, "FREE STS : 0x%016llx\n", free_sts);
329176638a2eSSrujana Challa 	seq_printf(filp, "BUSY STS : 0x%016llx\n", busy_sts);
329276638a2eSSrujana Challa 
329376638a2eSSrujana Challa 	return 0;
329476638a2eSSrujana Challa }
329576638a2eSSrujana Challa 
rvu_dbg_cpt_ae_sts_display(struct seq_file * filp,void * unused)329676638a2eSSrujana Challa static int rvu_dbg_cpt_ae_sts_display(struct seq_file *filp, void *unused)
329776638a2eSSrujana Challa {
329876638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_AE_TYPE);
329976638a2eSSrujana Challa }
330076638a2eSSrujana Challa 
330176638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_ae_sts, cpt_ae_sts_display, NULL);
330276638a2eSSrujana Challa 
rvu_dbg_cpt_se_sts_display(struct seq_file * filp,void * unused)330376638a2eSSrujana Challa static int rvu_dbg_cpt_se_sts_display(struct seq_file *filp, void *unused)
330476638a2eSSrujana Challa {
330576638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_SE_TYPE);
330676638a2eSSrujana Challa }
330776638a2eSSrujana Challa 
330876638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_se_sts, cpt_se_sts_display, NULL);
330976638a2eSSrujana Challa 
rvu_dbg_cpt_ie_sts_display(struct seq_file * filp,void * unused)331076638a2eSSrujana Challa static int rvu_dbg_cpt_ie_sts_display(struct seq_file *filp, void *unused)
331176638a2eSSrujana Challa {
331276638a2eSSrujana Challa 	return cpt_eng_sts_display(filp, CPT_IE_TYPE);
331376638a2eSSrujana Challa }
331476638a2eSSrujana Challa 
331576638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_ie_sts, cpt_ie_sts_display, NULL);
331676638a2eSSrujana Challa 
rvu_dbg_cpt_engines_info_display(struct seq_file * filp,void * unused)331776638a2eSSrujana Challa static int rvu_dbg_cpt_engines_info_display(struct seq_file *filp, void *unused)
331876638a2eSSrujana Challa {
3319b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
332076638a2eSSrujana Challa 	u16 max_ses, max_ies, max_aes;
3321b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
3322b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
332376638a2eSSrujana Challa 	u32 e_max, e;
332476638a2eSSrujana Challa 	u64 reg;
332576638a2eSSrujana Challa 
332676638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CONSTANTS1);
332776638a2eSSrujana Challa 	max_ses = reg & 0xffff;
332876638a2eSSrujana Challa 	max_ies = (reg >> 16) & 0xffff;
332976638a2eSSrujana Challa 	max_aes = (reg >> 32) & 0xffff;
333076638a2eSSrujana Challa 
333176638a2eSSrujana Challa 	e_max = max_ses + max_ies + max_aes;
333276638a2eSSrujana Challa 
333376638a2eSSrujana Challa 	seq_puts(filp, "===========================================\n");
333476638a2eSSrujana Challa 	for (e = 0; e < e_max; e++) {
333576638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL2(e));
333676638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Group Enable   0x%02llx\n", e,
333776638a2eSSrujana Challa 			   reg & 0xff);
333876638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_ACTIVE(e));
333976638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Active Info    0x%llx\n", e,
334076638a2eSSrujana Challa 			   reg);
334176638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL(e));
334276638a2eSSrujana Challa 		seq_printf(filp, "CPT Engine[%u] Control        0x%llx\n", e,
334376638a2eSSrujana Challa 			   reg);
334476638a2eSSrujana Challa 		seq_puts(filp, "===========================================\n");
334576638a2eSSrujana Challa 	}
334676638a2eSSrujana Challa 	return 0;
334776638a2eSSrujana Challa }
334876638a2eSSrujana Challa 
334976638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_engines_info, cpt_engines_info_display, NULL);
335076638a2eSSrujana Challa 
rvu_dbg_cpt_lfs_info_display(struct seq_file * filp,void * unused)335176638a2eSSrujana Challa static int rvu_dbg_cpt_lfs_info_display(struct seq_file *filp, void *unused)
335276638a2eSSrujana Challa {
3353b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
3354b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
3355b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
335676638a2eSSrujana Challa 	struct rvu_block *block;
3357b0f60fabSSrujana Challa 	struct rvu_hwinfo *hw;
335876638a2eSSrujana Challa 	u64 reg;
335976638a2eSSrujana Challa 	u32 lf;
336076638a2eSSrujana Challa 
3361b0f60fabSSrujana Challa 	hw = rvu->hw;
336276638a2eSSrujana Challa 	block = &hw->block[blkaddr];
336376638a2eSSrujana Challa 	if (!block->lf.bmap)
336476638a2eSSrujana Challa 		return -ENODEV;
336576638a2eSSrujana Challa 
336676638a2eSSrujana Challa 	seq_puts(filp, "===========================================\n");
336776638a2eSSrujana Challa 	for (lf = 0; lf < block->lf.max; lf++) {
336876638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_CTL(lf));
336976638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CTL          0x%llx\n", lf, reg);
337076638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_CTL2(lf));
337176638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CTL2         0x%llx\n", lf, reg);
337276638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, CPT_AF_LFX_PTR_CTL(lf));
337376638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] PTR_CTL      0x%llx\n", lf, reg);
337476638a2eSSrujana Challa 		reg = rvu_read64(rvu, blkaddr, block->lfcfg_reg |
337576638a2eSSrujana Challa 				(lf << block->lfshift));
337676638a2eSSrujana Challa 		seq_printf(filp, "CPT Lf[%u] CFG          0x%llx\n", lf, reg);
337776638a2eSSrujana Challa 		seq_puts(filp, "===========================================\n");
337876638a2eSSrujana Challa 	}
337976638a2eSSrujana Challa 	return 0;
338076638a2eSSrujana Challa }
338176638a2eSSrujana Challa 
338276638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_lfs_info, cpt_lfs_info_display, NULL);
338376638a2eSSrujana Challa 
rvu_dbg_cpt_err_info_display(struct seq_file * filp,void * unused)338476638a2eSSrujana Challa static int rvu_dbg_cpt_err_info_display(struct seq_file *filp, void *unused)
338576638a2eSSrujana Challa {
3386b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
3387b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
3388b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
338976638a2eSSrujana Challa 	u64 reg0, reg1;
339076638a2eSSrujana Challa 
339176638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_FLTX_INT(0));
339276638a2eSSrujana Challa 	reg1 = rvu_read64(rvu, blkaddr, CPT_AF_FLTX_INT(1));
339376638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_FLTX_INT:       0x%llx 0x%llx\n", reg0, reg1);
339476638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_EXE(0));
339576638a2eSSrujana Challa 	reg1 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_EXE(1));
339676638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_PSNX_EXE:       0x%llx 0x%llx\n", reg0, reg1);
339776638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_PSNX_LF(0));
339876638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_PSNX_LF:        0x%llx\n", reg0);
339976638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_RVU_INT);
340076638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_RVU_INT:        0x%llx\n", reg0);
340176638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_RAS_INT);
340276638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_RAS_INT:        0x%llx\n", reg0);
340376638a2eSSrujana Challa 	reg0 = rvu_read64(rvu, blkaddr, CPT_AF_EXE_ERR_INFO);
340476638a2eSSrujana Challa 	seq_printf(filp, "CPT_AF_EXE_ERR_INFO:   0x%llx\n", reg0);
340576638a2eSSrujana Challa 
340676638a2eSSrujana Challa 	return 0;
340776638a2eSSrujana Challa }
340876638a2eSSrujana Challa 
340976638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_err_info, cpt_err_info_display, NULL);
341076638a2eSSrujana Challa 
rvu_dbg_cpt_pc_display(struct seq_file * filp,void * unused)341176638a2eSSrujana Challa static int rvu_dbg_cpt_pc_display(struct seq_file *filp, void *unused)
341276638a2eSSrujana Challa {
3413b0f60fabSSrujana Challa 	struct cpt_ctx *ctx = filp->private;
3414b0f60fabSSrujana Challa 	struct rvu *rvu = ctx->rvu;
3415b0f60fabSSrujana Challa 	int blkaddr = ctx->blkaddr;
341676638a2eSSrujana Challa 	u64 reg;
341776638a2eSSrujana Challa 
341876638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_INST_REQ_PC);
341976638a2eSSrujana Challa 	seq_printf(filp, "CPT instruction requests   %llu\n", reg);
342076638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_INST_LATENCY_PC);
342176638a2eSSrujana Challa 	seq_printf(filp, "CPT instruction latency    %llu\n", reg);
342276638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_REQ_PC);
342376638a2eSSrujana Challa 	seq_printf(filp, "CPT NCB read requests      %llu\n", reg);
342476638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_LATENCY_PC);
342576638a2eSSrujana Challa 	seq_printf(filp, "CPT NCB read latency       %llu\n", reg);
342676638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_RD_UC_PC);
342776638a2eSSrujana Challa 	seq_printf(filp, "CPT read requests caused by UC fills   %llu\n", reg);
342876638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_ACTIVE_CYCLES_PC);
342976638a2eSSrujana Challa 	seq_printf(filp, "CPT active cycles pc       %llu\n", reg);
343076638a2eSSrujana Challa 	reg = rvu_read64(rvu, blkaddr, CPT_AF_CPTCLK_CNT);
343176638a2eSSrujana Challa 	seq_printf(filp, "CPT clock count pc         %llu\n", reg);
343276638a2eSSrujana Challa 
343376638a2eSSrujana Challa 	return 0;
343476638a2eSSrujana Challa }
343576638a2eSSrujana Challa 
343676638a2eSSrujana Challa RVU_DEBUG_SEQ_FOPS(cpt_pc, cpt_pc_display, NULL);
343776638a2eSSrujana Challa 
rvu_dbg_cpt_init(struct rvu * rvu,int blkaddr)3438b0f60fabSSrujana Challa static void rvu_dbg_cpt_init(struct rvu *rvu, int blkaddr)
343976638a2eSSrujana Challa {
3440b0f60fabSSrujana Challa 	struct cpt_ctx *ctx;
3441b0f60fabSSrujana Challa 
3442b0f60fabSSrujana Challa 	if (!is_block_implemented(rvu->hw, blkaddr))
344376638a2eSSrujana Challa 		return;
344476638a2eSSrujana Challa 
3445b0f60fabSSrujana Challa 	if (blkaddr == BLKADDR_CPT0) {
344676638a2eSSrujana Challa 		rvu->rvu_dbg.cpt = debugfs_create_dir("cpt", rvu->rvu_dbg.root);
3447b0f60fabSSrujana Challa 		ctx = &rvu->rvu_dbg.cpt_ctx[0];
3448b0f60fabSSrujana Challa 		ctx->blkaddr = BLKADDR_CPT0;
3449b0f60fabSSrujana Challa 		ctx->rvu = rvu;
3450b0f60fabSSrujana Challa 	} else {
3451b0f60fabSSrujana Challa 		rvu->rvu_dbg.cpt = debugfs_create_dir("cpt1",
3452b0f60fabSSrujana Challa 						      rvu->rvu_dbg.root);
3453b0f60fabSSrujana Challa 		ctx = &rvu->rvu_dbg.cpt_ctx[1];
3454b0f60fabSSrujana Challa 		ctx->blkaddr = BLKADDR_CPT1;
3455b0f60fabSSrujana Challa 		ctx->rvu = rvu;
3456b0f60fabSSrujana Challa 	}
345776638a2eSSrujana Challa 
3458b0f60fabSSrujana Challa 	debugfs_create_file("cpt_pc", 0600, rvu->rvu_dbg.cpt, ctx,
345976638a2eSSrujana Challa 			    &rvu_dbg_cpt_pc_fops);
3460b0f60fabSSrujana Challa 	debugfs_create_file("cpt_ae_sts", 0600, rvu->rvu_dbg.cpt, ctx,
346176638a2eSSrujana Challa 			    &rvu_dbg_cpt_ae_sts_fops);
3462b0f60fabSSrujana Challa 	debugfs_create_file("cpt_se_sts", 0600, rvu->rvu_dbg.cpt, ctx,
346376638a2eSSrujana Challa 			    &rvu_dbg_cpt_se_sts_fops);
3464b0f60fabSSrujana Challa 	debugfs_create_file("cpt_ie_sts", 0600, rvu->rvu_dbg.cpt, ctx,
346576638a2eSSrujana Challa 			    &rvu_dbg_cpt_ie_sts_fops);
3466b0f60fabSSrujana Challa 	debugfs_create_file("cpt_engines_info", 0600, rvu->rvu_dbg.cpt, ctx,
346776638a2eSSrujana Challa 			    &rvu_dbg_cpt_engines_info_fops);
3468b0f60fabSSrujana Challa 	debugfs_create_file("cpt_lfs_info", 0600, rvu->rvu_dbg.cpt, ctx,
346976638a2eSSrujana Challa 			    &rvu_dbg_cpt_lfs_info_fops);
3470b0f60fabSSrujana Challa 	debugfs_create_file("cpt_err_info", 0600, rvu->rvu_dbg.cpt, ctx,
347176638a2eSSrujana Challa 			    &rvu_dbg_cpt_err_info_fops);
347276638a2eSSrujana Challa }
347376638a2eSSrujana Challa 
rvu_get_dbg_dir_name(struct rvu * rvu)34743feac505SGeetha sowjanya static const char *rvu_get_dbg_dir_name(struct rvu *rvu)
34753feac505SGeetha sowjanya {
34763feac505SGeetha sowjanya 	if (!is_rvu_otx2(rvu))
34773feac505SGeetha sowjanya 		return "cn10k";
34783feac505SGeetha sowjanya 	else
34793feac505SGeetha sowjanya 		return "octeontx2";
34803feac505SGeetha sowjanya }
34813feac505SGeetha sowjanya 
rvu_dbg_init(struct rvu * rvu)348223205e6dSChristina Jacob void rvu_dbg_init(struct rvu *rvu)
348323205e6dSChristina Jacob {
34843feac505SGeetha sowjanya 	rvu->rvu_dbg.root = debugfs_create_dir(rvu_get_dbg_dir_name(rvu), NULL);
348523205e6dSChristina Jacob 
34862ce5a307SDan Carpenter 	debugfs_create_file("rsrc_alloc", 0444, rvu->rvu_dbg.root, rvu,
34872ce5a307SDan Carpenter 			    &rvu_dbg_rsrc_status_fops);
3488e2fb3730SRakesh Babu 
34890daa55d0SHarman Kalra 	if (!is_rvu_otx2(rvu))
34900daa55d0SHarman Kalra 		debugfs_create_file("lmtst_map_table", 0444, rvu->rvu_dbg.root,
34910daa55d0SHarman Kalra 				    rvu, &rvu_dbg_lmtst_map_table_fops);
34920daa55d0SHarman Kalra 
349391c6945eSHariprasad Kelam 	if (!cgx_get_cgxcnt_max())
349491c6945eSHariprasad Kelam 		goto create;
349591c6945eSHariprasad Kelam 
349691c6945eSHariprasad Kelam 	if (is_rvu_otx2(rvu))
349791c6945eSHariprasad Kelam 		debugfs_create_file("rvu_pf_cgx_map", 0444, rvu->rvu_dbg.root,
349891c6945eSHariprasad Kelam 				    rvu, &rvu_dbg_rvu_pf_cgx_map_fops);
349991c6945eSHariprasad Kelam 	else
3500786621d2SGeetha sowjanya 		debugfs_create_file("rvu_pf_rpm_map", 0444, rvu->rvu_dbg.root,
350191c6945eSHariprasad Kelam 				    rvu, &rvu_dbg_rvu_pf_cgx_map_fops);
350291c6945eSHariprasad Kelam 
350391c6945eSHariprasad Kelam create:
35048756828aSChristina Jacob 	rvu_dbg_npa_init(rvu);
35050f3ce484SRakesh Babu 	rvu_dbg_nix_init(rvu, BLKADDR_NIX0);
35060f3ce484SRakesh Babu 
35070f3ce484SRakesh Babu 	rvu_dbg_nix_init(rvu, BLKADDR_NIX1);
3508c57211b5SPrakash Brahmajyosyula 	rvu_dbg_cgx_init(rvu);
3509e07fb507SSunil Goutham 	rvu_dbg_npc_init(rvu);
3510b0f60fabSSrujana Challa 	rvu_dbg_cpt_init(rvu, BLKADDR_CPT0);
3511b0f60fabSSrujana Challa 	rvu_dbg_cpt_init(rvu, BLKADDR_CPT1);
3512d06c2abaSGeetha sowjanya 	rvu_dbg_mcs_init(rvu);
351323205e6dSChristina Jacob }
351423205e6dSChristina Jacob 
rvu_dbg_exit(struct rvu * rvu)351523205e6dSChristina Jacob void rvu_dbg_exit(struct rvu *rvu)
351623205e6dSChristina Jacob {
351723205e6dSChristina Jacob 	debugfs_remove_recursive(rvu->rvu_dbg.root);
351823205e6dSChristina Jacob }
351923205e6dSChristina Jacob 
352023205e6dSChristina Jacob #endif /* CONFIG_DEBUG_FS */
3521