919f8420f0d8ccb53276abdc244630c2afabe91c
[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         } s;
68 };
69
70 union cpt_lf_ctx_reload {
71         uint64_t u;
72         struct {
73                 uint64_t cptr : 46;
74         } s;
75 };
76
77 union cpt_lf_inprog {
78         uint64_t u;
79         struct cpt_lf_inprog_s {
80                 uint64_t inflight : 9;
81                 uint64_t reserved_9_15 : 7;
82                 uint64_t eena : 1;
83                 uint64_t grp_drp : 1;
84                 uint64_t reserved_18_30 : 13;
85                 uint64_t grb_partial : 1;
86                 uint64_t grb_cnt : 8;
87                 uint64_t gwb_cnt : 8;
88                 uint64_t reserved_48_63 : 16;
89         } s;
90 };
91
92 union cpt_lf_q_base {
93         uint64_t u;
94         struct cpt_lf_q_base_s {
95                 uint64_t fault : 1;
96                 uint64_t stopped : 1;
97                 uint64_t reserved_2_6 : 5;
98                 uint64_t addr : 46;
99                 uint64_t reserved_53_63 : 11;
100         } s;
101 };
102
103 union cpt_lf_q_size {
104         uint64_t u;
105         struct cpt_lf_q_size_s {
106                 uint64_t size_div40 : 15;
107                 uint64_t reserved_15_63 : 49;
108         } s;
109 };
110
111 union cpt_lf_misc_int {
112         uint64_t u;
113         struct cpt_lf_misc_int_s {
114                 uint64_t reserved_0_0 : 1;
115                 uint64_t nqerr : 1;
116                 uint64_t irde : 1;
117                 uint64_t nwrp : 1;
118                 uint64_t reserved_4_4 : 1;
119                 uint64_t hwerr : 1;
120                 uint64_t fault : 1;
121                 uint64_t reserved_7_63 : 57;
122         } s;
123 };
124
125 union cpt_lf_q_grp_ptr {
126         uint64_t u;
127         struct {
128                 uint64_t dq_ptr : 15;
129                 uint64_t reserved_31_15 : 17;
130                 uint64_t nq_ptr : 15;
131                 uint64_t reserved_47_62 : 16;
132                 uint64_t xq_xor : 1;
133         } s;
134 };
135
136 union cpt_inst_w4 {
137         uint64_t u64;
138         struct {
139                 uint64_t dlen : 16;
140                 uint64_t param2 : 16;
141                 uint64_t param1 : 16;
142                 uint64_t opcode_major : 8;
143                 uint64_t opcode_minor : 8;
144         } s;
145 };
146
147 union cpt_inst_w7 {
148         uint64_t u64;
149         struct {
150                 uint64_t cptr : 60;
151                 uint64_t ctx_val : 1;
152                 uint64_t egrp : 3;
153         } s;
154 };
155
156 struct cpt_inst_s {
157         union cpt_inst_w0 {
158                 struct {
159                         uint64_t nixtxl : 3;
160                         uint64_t doneint : 1;
161                         uint64_t nixtx_addr : 60;
162                 } s;
163                 uint64_t u64;
164         } w0;
165
166         uint64_t res_addr;
167
168         union cpt_inst_w2 {
169                 struct {
170                         uint64_t tag : 32;
171                         uint64_t tt : 2;
172                         uint64_t grp : 10;
173                         uint64_t reserved_172_175 : 4;
174                         uint64_t rvu_pf_func : 16;
175                 } s;
176                 uint64_t u64;
177         } w2;
178
179         union cpt_inst_w3 {
180                 struct {
181                         uint64_t qord : 1;
182                         uint64_t reserved_194_193 : 2;
183                         uint64_t wqe_ptr : 61;
184                 } s;
185                 uint64_t u64;
186         } w3;
187
188         union cpt_inst_w4 w4;
189
190         uint64_t dptr;
191
192         uint64_t rptr;
193
194         union cpt_inst_w7 w7;
195 };
196
197 union cpt_res_s {
198         struct cpt_cn10k_res_s {
199                 uint64_t compcode : 7;
200                 uint64_t doneint : 1;
201                 uint64_t uc_compcode : 8;
202                 uint64_t rlen : 16;
203                 uint64_t spi : 32;
204
205                 uint64_t esn;
206         } cn10k;
207
208         struct cpt_cn9k_res_s {
209                 uint64_t compcode : 8;
210                 uint64_t uc_compcode : 8;
211                 uint64_t doneint : 1;
212                 uint64_t reserved_17_63 : 47;
213
214                 uint64_t reserved_64_127;
215         } cn9k;
216 };
217
218 /* [CN10K, .) */
219 struct cpt_parse_hdr_s {
220         /* WORD 0 */
221         union {
222                 uint64_t u64;
223                 struct {
224                         uint8_t pad_len : 3;
225                         uint8_t num_frags : 3;
226                         uint8_t pkt_out : 2;
227
228                         uint8_t err_sum : 1;
229                         uint8_t reas_sts : 4;
230                         uint8_t reserved_53 : 1;
231                         uint8_t et_owr : 1;
232                         uint8_t pkt_fmt : 1;
233
234                         uint16_t match_id : 16;
235
236                         uint32_t cookie : 32;
237                 };
238         } w0;
239
240         /* WORD 1 */
241         uint64_t wqe_ptr;
242
243         /* WORD 2 */
244         union {
245                 uint64_t u64;
246                 struct {
247                         uint8_t fi_pad : 3;
248                         uint8_t fi_offset : 5;
249                         uint8_t il3_off;
250                         uint16_t orig_pf_func;
251                         uint16_t reserved_145_160;
252                         uint16_t frag_age;
253                 };
254         } w2;
255
256         /* WORD 3 */
257         union {
258                 uint64_t u64;
259                 struct {
260                         uint32_t spi;
261                         uint16_t reserved_209_224;
262                         uint8_t uc_ccode;
263                         uint8_t hw_ccode;
264                 };
265         } w3;
266
267         /* WORD 4 */
268         union {
269                 uint64_t u64;
270                 uint64_t esn;
271                 uint64_t frag1_wqe_ptr;
272         };
273 };
274
275 union cpt_frag_info {
276         uint16_t info;
277         struct {
278                 uint16_t f_off : 13;
279                 uint16_t f_mf : 1;
280                 uint16_t f_rsv : 2;
281         };
282 };
283
284 struct cpt_frag_info_s {
285         /* WORD 0 */
286         union {
287                 uint64_t u64;
288                 struct {
289                         union cpt_frag_info f3;
290                         union cpt_frag_info f2;
291                         union cpt_frag_info f1;
292                         union cpt_frag_info f0;
293                 };
294         } w0;
295
296         /* WORD 1 */
297         union {
298                 uint64_t u64;
299                 struct {
300                         uint16_t frag_size3;
301                         uint16_t frag_size2;
302                         uint16_t frag_size1;
303                         uint16_t frag_size0;
304                 };
305         } w1;
306 };
307
308 #endif /* __CPT_HW_H__ */