xref: /dpdk/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h (revision daa02b5cddbb8e11b31d41e2bf7bb1ae64dcae2f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2015 Freescale Semiconductor, Inc.
3  * Copyright 2018-2020 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 /* FQ query command for non-programmable fields*/
109 enum qbman_fq_schedstate_e {
110 	qbman_fq_schedstate_oos = 0,
111 	qbman_fq_schedstate_retired,
112 	qbman_fq_schedstate_tentatively_scheduled,
113 	qbman_fq_schedstate_truly_scheduled,
114 	qbman_fq_schedstate_parked,
115 	qbman_fq_schedstate_held_active,
116 };
117 
118 struct qbman_fq_query_np_rslt {
119 uint8_t verb;
120 	uint8_t rslt;
121 	uint8_t st1;
122 	uint8_t st2;
123 	uint8_t reserved[2];
124 	uint16_t od1_sfdr;
125 	uint16_t od2_sfdr;
126 	uint16_t od3_sfdr;
127 	uint16_t ra1_sfdr;
128 	uint16_t ra2_sfdr;
129 	uint32_t pfdr_hptr;
130 	uint32_t pfdr_tptr;
131 	uint32_t frm_cnt;
132 	uint32_t byte_cnt;
133 	uint16_t ics_surp;
134 	uint8_t is;
135 	uint8_t reserved2[29];
136 };
137 
138 __rte_internal
139 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
140 			 struct qbman_fq_query_np_rslt *r);
141 uint8_t qbman_fq_state_schedstate(const struct qbman_fq_query_np_rslt *r);
142 int qbman_fq_state_force_eligible(const struct qbman_fq_query_np_rslt *r);
143 int qbman_fq_state_xoff(const struct qbman_fq_query_np_rslt *r);
144 int qbman_fq_state_retirement_pending(const struct qbman_fq_query_np_rslt *r);
145 int qbman_fq_state_overflow_error(const struct qbman_fq_query_np_rslt *r);
146 __rte_internal
147 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
148 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
149 
150 /* CGR query */
151 struct qbman_cgr_query_rslt {
152 	uint8_t verb;
153 	uint8_t rslt;
154 	uint8_t reserved[6];
155 	uint8_t ctl1;
156 	uint8_t reserved1;
157 	uint16_t oal;
158 	uint16_t reserved2;
159 	uint8_t mode;
160 	uint8_t ctl2;
161 	uint8_t iwc;
162 	uint8_t tdc;
163 	uint16_t cs_thres;
164 	uint16_t cs_thres_x;
165 	uint16_t td_thres;
166 	uint16_t cscn_tdcp;
167 	uint16_t cscn_wqid;
168 	uint16_t cscn_vcgid;
169 	uint16_t cg_icid;
170 	uint64_t cg_wr_addr;
171 	uint64_t cscn_ctx;
172 	uint64_t i_cnt;
173 	uint64_t a_cnt;
174 };
175 
176 int qbman_cgr_query(struct qbman_swp *s, uint32_t cgid,
177 		    struct qbman_cgr_query_rslt *r);
178 int qbman_cgr_get_cscn_wq_en_enter(struct qbman_cgr_query_rslt *r);
179 int qbman_cgr_get_cscn_wq_en_exit(struct qbman_cgr_query_rslt *r);
180 int qbman_cgr_get_cscn_wq_icd(struct qbman_cgr_query_rslt *r);
181 uint8_t qbman_cgr_get_mode(struct qbman_cgr_query_rslt *r);
182 int qbman_cgr_get_rej_cnt_mode(struct qbman_cgr_query_rslt *r);
183 int qbman_cgr_get_cscn_bdi(struct qbman_cgr_query_rslt *r);
184 uint16_t qbman_cgr_attr_get_cs_thres(struct qbman_cgr_query_rslt *r);
185 uint16_t qbman_cgr_attr_get_cs_thres_x(struct qbman_cgr_query_rslt *r);
186 uint16_t qbman_cgr_attr_get_td_thres(struct qbman_cgr_query_rslt *r);
187 
188 /* WRED query */
189 struct qbman_wred_query_rslt {
190 	uint8_t verb;
191 	uint8_t rslt;
192 	uint8_t reserved[6];
193 	uint8_t edp[7];
194 	uint8_t reserved1;
195 	uint32_t wred_parm_dp[7];
196 	uint8_t reserved2[20];
197 };
198 
199 int qbman_cgr_wred_query(struct qbman_swp *s, uint32_t cgid,
200 			 struct qbman_wred_query_rslt *r);
201 int qbman_cgr_attr_wred_get_edp(struct qbman_wred_query_rslt *r, uint32_t idx);
202 void qbman_cgr_attr_wred_dp_decompose(uint32_t dp, uint64_t *minth,
203 				      uint64_t *maxth, uint8_t *maxp);
204 uint32_t qbman_cgr_attr_wred_get_parm_dp(struct qbman_wred_query_rslt *r,
205 					 uint32_t idx);
206 
207 /* CGR/CCGR/CQ statistics query */
208 int qbman_cgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
209 				uint64_t *frame_cnt, uint64_t *byte_cnt);
210 int qbman_ccgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
211 				 uint64_t *frame_cnt, uint64_t *byte_cnt);
212 int qbman_cq_dequeue_statistics(struct qbman_swp *s, uint32_t cgid, int clear,
213 				uint64_t *frame_cnt, uint64_t *byte_cnt);
214 
215 /* Query Work Queue Channel */
216 struct qbman_wqchan_query_rslt {
217 	uint8_t verb;
218 	uint8_t rslt;
219 	uint16_t chid;
220 	uint8_t reserved;
221 	uint8_t ctrl;
222 	uint16_t cdan_wqid;
223 	uint64_t cdan_ctx;
224 	uint32_t reserved2[4];
225 	uint32_t wq_len[8];
226 };
227 
228 int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid,
229 		       struct qbman_wqchan_query_rslt *r);
230 uint32_t qbman_wqchan_attr_get_wqlen(struct qbman_wqchan_query_rslt *r, int wq);
231 uint64_t qbman_wqchan_attr_get_cdan_ctx(struct qbman_wqchan_query_rslt *r);
232 uint16_t qbman_wqchan_attr_get_cdan_wqid(struct qbman_wqchan_query_rslt *r);
233 uint8_t qbman_wqchan_attr_get_ctrl(struct qbman_wqchan_query_rslt *r);
234 uint16_t qbman_wqchan_attr_get_chanid(struct qbman_wqchan_query_rslt *r);
235 #endif /* !_FSL_QBMAN_DEBUG_H */
236