xref: /dpdk/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h (revision 591200ef6f32b56adc367ebe3647cc3dbe9362db)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2015 Freescale Semiconductor, Inc.
3  * Copyright 2018-2023 NXP
4  */
5 #ifndef _FSL_QBMAN_DEBUG_H
6 #define _FSL_QBMAN_DEBUG_H
7 
8 #include <rte_compat.h>
9 
10 struct qbman_swp;
11 /* Buffer pool query commands */
12 struct qbman_bp_query_rslt {
13 	uint8_t verb;
14 	uint8_t rslt;
15 	uint8_t reserved[4];
16 	uint8_t bdi;
17 	uint8_t state;
18 	uint32_t fill;
19 	uint32_t hdptr;
20 	uint16_t swdet;
21 	uint16_t swdxt;
22 	uint16_t hwdet;
23 	uint16_t hwdxt;
24 	uint16_t swset;
25 	uint16_t swsxt;
26 	uint16_t vbpid;
27 	uint16_t icid;
28 	uint64_t bpscn_addr;
29 	uint64_t bpscn_ctx;
30 	uint16_t hw_targ;
31 	uint8_t dbe;
32 	uint8_t reserved2;
33 	uint8_t sdcnt;
34 	uint8_t hdcnt;
35 	uint8_t sscnt;
36 	uint8_t reserved3[9];
37 };
38 
39 int qbman_bp_query(struct qbman_swp *s, uint32_t bpid,
40 		   struct qbman_bp_query_rslt *r);
41 int qbman_bp_get_bdi(struct qbman_bp_query_rslt *r);
42 int qbman_bp_get_va(struct qbman_bp_query_rslt *r);
43 int qbman_bp_get_wae(struct qbman_bp_query_rslt *r);
44 uint16_t qbman_bp_get_swdet(struct qbman_bp_query_rslt  *r);
45 uint16_t qbman_bp_get_swdxt(struct qbman_bp_query_rslt  *r);
46 uint16_t qbman_bp_get_hwdet(struct qbman_bp_query_rslt  *r);
47 uint16_t qbman_bp_get_hwdxt(struct qbman_bp_query_rslt  *r);
48 uint16_t qbman_bp_get_swset(struct qbman_bp_query_rslt  *r);
49 uint16_t qbman_bp_get_swsxt(struct qbman_bp_query_rslt  *r);
50 uint16_t qbman_bp_get_vbpid(struct qbman_bp_query_rslt  *r);
51 uint16_t qbman_bp_get_icid(struct qbman_bp_query_rslt  *r);
52 int qbman_bp_get_pl(struct qbman_bp_query_rslt  *r);
53 uint64_t qbman_bp_get_bpscn_addr(struct qbman_bp_query_rslt  *r);
54 uint64_t qbman_bp_get_bpscn_ctx(struct qbman_bp_query_rslt  *r);
55 uint16_t qbman_bp_get_hw_targ(struct qbman_bp_query_rslt  *r);
56 int qbman_bp_has_free_bufs(struct qbman_bp_query_rslt  *r);
57 uint32_t qbman_bp_num_free_bufs(struct qbman_bp_query_rslt  *r);
58 int qbman_bp_is_depleted(struct qbman_bp_query_rslt  *r);
59 int qbman_bp_is_surplus(struct qbman_bp_query_rslt  *r);
60 uint32_t qbman_bp_get_hdptr(struct qbman_bp_query_rslt  *r);
61 uint32_t qbman_bp_get_sdcnt(struct qbman_bp_query_rslt  *r);
62 uint32_t qbman_bp_get_hdcnt(struct qbman_bp_query_rslt  *r);
63 uint32_t qbman_bp_get_sscnt(struct qbman_bp_query_rslt  *r);
64 
65 /* FQ query function for programmable fields */
66 struct qbman_fq_query_rslt {
67 	uint8_t verb;
68 	uint8_t rslt;
69 	uint8_t reserved[8];
70 	uint16_t cgid;
71 	uint16_t dest_wq;
72 	uint8_t reserved2;
73 	uint8_t fq_ctrl;
74 	uint16_t ics_cred;
75 	uint16_t td_thresh;
76 	uint16_t oal_oac;
77 	uint8_t reserved3;
78 	uint8_t mctl;
79 	uint64_t fqd_ctx;
80 	uint16_t icid;
81 	uint16_t reserved4;
82 	uint32_t vfqid;
83 	uint32_t fqid_er;
84 	uint16_t opridsz;
85 	uint8_t reserved5[18];
86 };
87 
88 int qbman_fq_query(struct qbman_swp *s, uint32_t fqid,
89 		   struct qbman_fq_query_rslt *r);
90 uint8_t qbman_fq_attr_get_fqctrl(struct qbman_fq_query_rslt *r);
91 uint16_t qbman_fq_attr_get_cgrid(struct qbman_fq_query_rslt *r);
92 uint16_t qbman_fq_attr_get_destwq(struct qbman_fq_query_rslt *r);
93 uint16_t qbman_fq_attr_get_tdthresh(struct qbman_fq_query_rslt *r);
94 int qbman_fq_attr_get_oa_ics(struct qbman_fq_query_rslt *r);
95 int qbman_fq_attr_get_oa_cgr(struct qbman_fq_query_rslt *r);
96 uint16_t qbman_fq_attr_get_oal(struct qbman_fq_query_rslt *r);
97 int qbman_fq_attr_get_bdi(struct qbman_fq_query_rslt *r);
98 int qbman_fq_attr_get_ff(struct qbman_fq_query_rslt *r);
99 int qbman_fq_attr_get_va(struct qbman_fq_query_rslt *r);
100 int qbman_fq_attr_get_ps(struct qbman_fq_query_rslt *r);
101 int qbman_fq_attr_get_pps(struct qbman_fq_query_rslt *r);
102 uint16_t qbman_fq_attr_get_icid(struct qbman_fq_query_rslt *r);
103 int qbman_fq_attr_get_pl(struct qbman_fq_query_rslt *r);
104 uint32_t qbman_fq_attr_get_vfqid(struct qbman_fq_query_rslt *r);
105 uint32_t qbman_fq_attr_get_erfqid(struct qbman_fq_query_rslt *r);
106 uint16_t qbman_fq_attr_get_opridsz(struct qbman_fq_query_rslt *r);
107 
108 struct qbman_fq_query_np_rslt {
109 uint8_t verb;
110 	uint8_t rslt;
111 	uint8_t st1;
112 	uint8_t st2;
113 	uint8_t reserved[2];
114 	uint16_t od1_sfdr;
115 	uint16_t od2_sfdr;
116 	uint16_t od3_sfdr;
117 	uint16_t ra1_sfdr;
118 	uint16_t ra2_sfdr;
119 	uint32_t pfdr_hptr;
120 	uint32_t pfdr_tptr;
121 	uint32_t frm_cnt;
122 	uint32_t byte_cnt;
123 	uint16_t ics_surp;
124 	uint8_t is;
125 	uint8_t reserved2[29];
126 };
127 
128 __rte_internal
129 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
130 			 struct qbman_fq_query_np_rslt *r);
131 uint8_t qbman_fq_state_schedstate(const struct qbman_fq_query_np_rslt *r);
132 int qbman_fq_state_force_eligible(const struct qbman_fq_query_np_rslt *r);
133 int qbman_fq_state_xoff(const struct qbman_fq_query_np_rslt *r);
134 int qbman_fq_state_retirement_pending(const struct qbman_fq_query_np_rslt *r);
135 int qbman_fq_state_overflow_error(const struct qbman_fq_query_np_rslt *r);
136 __rte_internal
137 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
138 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
139 
140 /* CGR query */
141 struct qbman_cgr_query_rslt {
142 	uint8_t verb;
143 	uint8_t rslt;
144 	uint8_t reserved[6];
145 	uint8_t ctl1;
146 	uint8_t reserved1;
147 	uint16_t oal;
148 	uint16_t reserved2;
149 	uint8_t mode;
150 	uint8_t ctl2;
151 	uint8_t iwc;
152 	uint8_t tdc;
153 	uint16_t cs_thres;
154 	uint16_t cs_thres_x;
155 	uint16_t td_thres;
156 	uint16_t cscn_tdcp;
157 	uint16_t cscn_wqid;
158 	uint16_t cscn_vcgid;
159 	uint16_t cg_icid;
160 	uint64_t cg_wr_addr;
161 	uint64_t cscn_ctx;
162 	uint64_t i_cnt;
163 	uint64_t a_cnt;
164 };
165 
166 int qbman_cgr_query(struct qbman_swp *s, uint32_t cgid,
167 		    struct qbman_cgr_query_rslt *r);
168 int qbman_cgr_get_cscn_wq_en_enter(struct qbman_cgr_query_rslt *r);
169 int qbman_cgr_get_cscn_wq_en_exit(struct qbman_cgr_query_rslt *r);
170 int qbman_cgr_get_cscn_wq_icd(struct qbman_cgr_query_rslt *r);
171 uint8_t qbman_cgr_get_mode(struct qbman_cgr_query_rslt *r);
172 int qbman_cgr_get_rej_cnt_mode(struct qbman_cgr_query_rslt *r);
173 int qbman_cgr_get_cscn_bdi(struct qbman_cgr_query_rslt *r);
174 uint16_t qbman_cgr_attr_get_cs_thres(struct qbman_cgr_query_rslt *r);
175 uint16_t qbman_cgr_attr_get_cs_thres_x(struct qbman_cgr_query_rslt *r);
176 uint16_t qbman_cgr_attr_get_td_thres(struct qbman_cgr_query_rslt *r);
177 
178 /* WRED query */
179 struct qbman_wred_query_rslt {
180 	uint8_t verb;
181 	uint8_t rslt;
182 	uint8_t reserved[6];
183 	uint8_t edp[7];
184 	uint8_t reserved1;
185 	uint32_t wred_parm_dp[7];
186 	uint8_t reserved2[20];
187 };
188 
189 int qbman_cgr_wred_query(struct qbman_swp *s, uint32_t cgid,
190 			 struct qbman_wred_query_rslt *r);
191 int qbman_cgr_attr_wred_get_edp(struct qbman_wred_query_rslt *r, uint32_t idx);
192 void qbman_cgr_attr_wred_dp_decompose(uint32_t dp, uint64_t *minth,
193 				      uint64_t *maxth, uint8_t *maxp);
194 uint32_t qbman_cgr_attr_wred_get_parm_dp(struct qbman_wred_query_rslt *r,
195 					 uint32_t idx);
196 
197 /* CGR/CCGR/CQ statistics query */
198 int qbman_cgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
199 				uint64_t *frame_cnt, uint64_t *byte_cnt);
200 int qbman_ccgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
201 				 uint64_t *frame_cnt, uint64_t *byte_cnt);
202 int qbman_cq_dequeue_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
203 				uint64_t *frame_cnt, uint64_t *byte_cnt);
204 
205 /* Query Work Queue Channel */
206 struct qbman_wqchan_query_rslt {
207 	uint8_t verb;
208 	uint8_t rslt;
209 	uint16_t chid;
210 	uint8_t reserved;
211 	uint8_t ctrl;
212 	uint16_t cdan_wqid;
213 	uint64_t cdan_ctx;
214 	uint32_t reserved2[4];
215 	uint32_t wq_len[8];
216 };
217 
218 int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid,
219 		       struct qbman_wqchan_query_rslt *r);
220 uint32_t qbman_wqchan_attr_get_wqlen(struct qbman_wqchan_query_rslt *r, int wq);
221 uint64_t qbman_wqchan_attr_get_cdan_ctx(struct qbman_wqchan_query_rslt *r);
222 uint16_t qbman_wqchan_attr_get_cdan_wqid(struct qbman_wqchan_query_rslt *r);
223 uint8_t qbman_wqchan_attr_get_ctrl(struct qbman_wqchan_query_rslt *r);
224 uint16_t qbman_wqchan_attr_get_chanid(struct qbman_wqchan_query_rslt *r);
225 #endif /* !_FSL_QBMAN_DEBUG_H */
226