common/cnxk: update meter algorithm in band profile
[dpdk.git] / drivers / common / cnxk / hw / cpt.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef __CPT_HW_H__
6 #define __CPT_HW_H__
7
8 /* Register offsets */
9
10 #define CPT_COMP_NOT_DONE (0x0ull)
11 #define CPT_COMP_GOOD     (0x1ull)
12 #define CPT_COMP_FAULT    (0x2ull)
13 #define CPT_COMP_SWERR    (0x3ull)
14 #define CPT_COMP_HWERR    (0x4ull)
15 #define CPT_COMP_INSTERR  (0x5ull)
16 #define CPT_COMP_WARN     (0x6ull) /* [CN10K, .) */
17
18 #define CPT_LF_INT_VEC_MISC     (0x0ull)
19 #define CPT_LF_INT_VEC_DONE     (0x1ull)
20 #define CPT_LF_CTL              (0x10ull)
21 #define CPT_LF_DONE_WAIT        (0x30ull)
22 #define CPT_LF_INPROG           (0x40ull)
23 #define CPT_LF_DONE             (0x50ull)
24 #define CPT_LF_DONE_ACK         (0x60ull)
25 #define CPT_LF_DONE_INT_ENA_W1S (0x90ull)
26 #define CPT_LF_DONE_INT_ENA_W1C (0xa0ull)
27 #define CPT_LF_MISC_INT         (0xb0ull)
28 #define CPT_LF_MISC_INT_W1S     (0xc0ull)
29 #define CPT_LF_MISC_INT_ENA_W1S (0xd0ull)
30 #define CPT_LF_MISC_INT_ENA_W1C (0xe0ull)
31 #define CPT_LF_Q_BASE           (0xf0ull)
32 #define CPT_LF_Q_SIZE           (0x100ull)
33 #define CPT_LF_Q_INST_PTR       (0x110ull)
34 #define CPT_LF_Q_GRP_PTR        (0x120ull)
35 #define CPT_LF_NQX(a)           (0x400ull | (uint64_t)(a) << 3)
36 #define CPT_LF_CTX_CTL          (0x500ull)
37 #define CPT_LF_CTX_FLUSH        (0x510ull)
38 #define CPT_LF_CTX_ERR          (0x520ull)
39 #define CPT_LF_CTX_ENC_BYTE_CNT (0x530ull)
40 #define CPT_LF_CTX_ENC_PKT_CNT  (0x540ull)
41 #define CPT_LF_CTX_DEC_BYTE_CNT (0x550ull)
42 #define CPT_LF_CTX_DEC_PKT_CNT  (0x560ull)
43 #define CPT_LF_CTX_RELOAD       (0x570ull)
44
45 #define CPT_AF_LFX_CTL(a)  (0x27000ull | (uint64_t)(a) << 3)
46 #define CPT_AF_LFX_CTL2(a) (0x29000ull | (uint64_t)(a) << 3)
47
48 /* Structures definitions */
49
50 union cpt_lf_ctl {
51         uint64_t u;
52         struct cpt_lf_ctl_s {
53                 uint64_t ena : 1;
54                 uint64_t fc_ena : 1;
55                 uint64_t fc_up_crossing : 1;
56                 uint64_t reserved_3_3 : 1;
57                 uint64_t fc_hyst_bits : 4;
58                 uint64_t reserved_8_63 : 56;
59         } s;
60 };
61
62 union cpt_lf_ctx_flush {
63         uint64_t u;
64         struct {
65                 uint64_t cptr : 46;
66                 uint64_t inval : 1;
67                 uint64_t reserved_47_63 : 17;
68         } s;
69 };
70
71 union cpt_lf_ctx_reload {
72         uint64_t u;
73         struct {
74                 uint64_t cptr : 46;
75                 uint64_t reserved_46_63 : 18;
76         } s;
77 };
78
79 union cpt_lf_inprog {
80         uint64_t u;
81         struct cpt_lf_inprog_s {
82                 uint64_t inflight : 9;
83                 uint64_t reserved_9_15 : 7;
84                 uint64_t eena : 1;
85                 uint64_t grp_drp : 1;
86                 uint64_t reserved_18_30 : 13;
87                 uint64_t grb_partial : 1;
88                 uint64_t grb_cnt : 8;
89                 uint64_t gwb_cnt : 8;
90                 uint64_t reserved_48_63 : 16;
91         } s;
92 };
93
94 union cpt_lf_q_inst_ptr {
95         uint64_t u;
96         struct cpt_lf_q_inst_ptr_s {
97                 uint64_t dq_ptr : 20;
98                 uint64_t reserved_20_31 : 12;
99                 uint64_t nq_ptr : 20;
100                 uint64_t reserved_52_62 : 11;
101                 uint64_t xq_xor : 1;
102         } s;
103 };
104
105 union cpt_lf_q_base {
106         uint64_t u;
107         struct cpt_lf_q_base_s {
108                 uint64_t fault : 1;
109                 uint64_t stopped : 1;
110                 uint64_t reserved_2_6 : 5;
111                 uint64_t addr : 46;
112                 uint64_t reserved_53_63 : 11;
113         } s;
114 };
115
116 union cpt_lf_q_size {
117         uint64_t u;
118         struct cpt_lf_q_size_s {
119                 uint64_t size_div40 : 15;
120                 uint64_t reserved_15_63 : 49;
121         } s;
122 };
123
124 union cpt_lf_misc_int {
125         uint64_t u;
126         struct cpt_lf_misc_int_s {
127                 uint64_t reserved_0_0 : 1;
128                 uint64_t nqerr : 1;
129                 uint64_t irde : 1;
130                 uint64_t nwrp : 1;
131                 uint64_t reserved_4_4 : 1;
132                 uint64_t hwerr : 1;
133                 uint64_t fault : 1;
134                 uint64_t reserved_7_63 : 57;
135         } s;
136 };
137
138 union cpt_lf_q_grp_ptr {
139         uint64_t u;
140         struct {
141                 uint64_t dq_ptr : 15;
142                 uint64_t reserved_31_15 : 17;
143                 uint64_t nq_ptr : 15;
144                 uint64_t reserved_47_62 : 16;
145                 uint64_t xq_xor : 1;
146         } s;
147 };
148
149 union cpt_inst_w4 {
150         uint64_t u64;
151         struct {
152                 uint64_t dlen : 16;
153                 uint64_t param2 : 16;
154                 uint64_t param1 : 16;
155                 uint64_t opcode_major : 8;
156                 uint64_t opcode_minor : 8;
157         } s;
158 };
159
160 union cpt_inst_w7 {
161         uint64_t u64;
162         struct {
163                 uint64_t cptr : 60;
164                 uint64_t ctx_val : 1;
165                 uint64_t egrp : 3;
166         } s;
167 };
168
169 struct cpt_inst_s {
170         union cpt_inst_w0 {
171                 struct {
172                         uint64_t nixtxl : 3;
173                         uint64_t doneint : 1;
174                         uint64_t nixtx_addr : 60;
175                 } s;
176                 uint64_t u64;
177         } w0;
178
179         uint64_t res_addr;
180
181         union cpt_inst_w2 {
182                 struct {
183                         uint64_t tag : 32;
184                         uint64_t tt : 2;
185                         uint64_t grp : 10;
186                         uint64_t reserved_172_175 : 4;
187                         uint64_t rvu_pf_func : 16;
188                 } s;
189                 uint64_t u64;
190         } w2;
191
192         union cpt_inst_w3 {
193                 struct {
194                         uint64_t qord : 1;
195                         uint64_t reserved_194_193 : 2;
196                         uint64_t wqe_ptr : 61;
197                 } s;
198                 uint64_t u64;
199         } w3;
200
201         union cpt_inst_w4 w4;
202
203         uint64_t dptr;
204
205         uint64_t rptr;
206
207         union cpt_inst_w7 w7;
208 };
209
210 union cpt_res_s {
211         struct cpt_cn10k_res_s {
212                 uint64_t compcode : 7;
213                 uint64_t doneint : 1;
214                 uint64_t uc_compcode : 8;
215                 uint64_t rlen : 16;
216                 uint64_t spi : 32;
217
218                 uint64_t esn;
219         } cn10k;
220
221         struct cpt_cn9k_res_s {
222                 uint64_t compcode : 8;
223                 uint64_t uc_compcode : 8;
224                 uint64_t doneint : 1;
225                 uint64_t reserved_17_63 : 47;
226
227                 uint64_t reserved_64_127;
228         } cn9k;
229
230         uint64_t u64[2];
231 };
232
233 /* [CN10K, .) */
234 struct cpt_parse_hdr_s {
235         /* WORD 0 */
236         union {
237                 uint64_t u64;
238                 struct {
239                         uint8_t pad_len : 3;
240                         uint8_t num_frags : 3;
241                         uint8_t pkt_out : 2;
242
243                         uint8_t err_sum : 1;
244                         uint8_t reas_sts : 4;
245                         uint8_t reserved_53 : 1;
246                         uint8_t et_owr : 1;
247                         uint8_t pkt_fmt : 1;
248
249                         uint16_t match_id : 16;
250
251                         uint32_t cookie : 32;
252                 };
253         } w0;
254
255         /* WORD 1 */
256         uint64_t wqe_ptr;
257
258         /* WORD 2 */
259         union {
260                 uint64_t u64;
261                 struct {
262                         uint8_t fi_pad : 3;
263                         uint8_t fi_offset : 5;
264                         uint8_t il3_off;
265                         uint16_t orig_pf_func;
266                         uint16_t reserved_145_160;
267                         uint16_t frag_age;
268                 };
269         } w2;
270
271         /* WORD 3 */
272         union {
273                 uint64_t u64;
274                 struct {
275                         uint32_t spi;
276                         uint16_t reserved_209_224;
277                         uint8_t uc_ccode;
278                         uint8_t hw_ccode;
279                 };
280         } w3;
281
282         /* WORD 4 */
283         union {
284                 uint64_t u64;
285                 uint64_t esn;
286                 uint64_t frag1_wqe_ptr;
287         };
288 };
289
290 union cpt_frag_info {
291         uint16_t info;
292         struct {
293                 uint16_t f_off : 13;
294                 uint16_t f_mf : 1;
295                 uint16_t f_rsv : 2;
296         };
297 };
298
299 struct cpt_frag_info_s {
300         /* WORD 0 */
301         union {
302                 uint64_t u64;
303                 struct {
304                         union cpt_frag_info f3;
305                         union cpt_frag_info f2;
306                         union cpt_frag_info f1;
307                         union cpt_frag_info f0;
308                 };
309         } w0;
310
311         /* WORD 1 */
312         union {
313                 uint64_t u64;
314                 struct {
315                         uint16_t frag_size3;
316                         uint16_t frag_size2;
317                         uint16_t frag_size1;
318                         uint16_t frag_size0;
319                 };
320         } w1;
321 };
322
323 #endif /* __CPT_HW_H__ */