1 /***********************license start************************************
2  * Copyright (c) 2003-2017 Cavium, Inc.
3  * All rights reserved.
4  *
5  * License: one of 'Cavium License' or 'GNU General Public License Version 2'
6  *
7  * This file is provided under the terms of the Cavium License (see below)
8  * or under the terms of GNU General Public License, Version 2, as
9  * published by the Free Software Foundation. When using or redistributing
10  * this file, you may do so under either license.
11  *
12  * Cavium License:  Redistribution and use in source and binary forms, with
13  * or without modification, are permitted provided that the following
14  * conditions are met:
15  *
16  *  * Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  *
19  *  * Redistributions in binary form must reproduce the above
20  *    copyright notice, this list of conditions and the following
21  *    disclaimer in the documentation and/or other materials provided
22  *    with the distribution.
23  *
24  *  * Neither the name of Cavium Inc. nor the names of its contributors may be
25  *    used to endorse or promote products derived from this software without
26  *    specific prior written permission.
27  *
28  * This Software, including technical data, may be subject to U.S. export
29  * control laws, including the U.S. Export Administration Act and its
30  * associated regulations, and may be subject to export or import
31  * regulations in other countries.
32  *
33  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
34  * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS
35  * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
36  * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
37  * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
38  * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY)
39  * WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A
40  * PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET
41  * ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE
42  * ENTIRE  RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES
43  * WITH YOU.
44  ***********************license end**************************************/
45 
46 #ifndef __ZIP_REGS_H__
47 #define __ZIP_REGS_H__
48 
49 /*
50  * Configuration and status register (CSR) address and type definitions for
51  * Cavium ZIP.
52  */
53 
54 #include <linux/kern_levels.h>
55 
56 /* ZIP invocation result completion status codes */
57 #define ZIP_CMD_NOTDONE        0x0
58 
59 /* Successful completion. */
60 #define ZIP_CMD_SUCCESS        0x1
61 
62 /* Output truncated */
63 #define ZIP_CMD_DTRUNC         0x2
64 
65 /* Dynamic Stop */
66 #define ZIP_CMD_DYNAMIC_STOP   0x3
67 
68 /* Uncompress ran out of input data when IWORD0[EF] was set */
69 #define ZIP_CMD_ITRUNC         0x4
70 
71 /* Uncompress found the reserved block type 3 */
72 #define ZIP_CMD_RBLOCK         0x5
73 
74 /*
75  * Uncompress found LEN != ZIP_CMD_NLEN in an uncompressed block in the input.
76  */
77 #define ZIP_CMD_NLEN           0x6
78 
79 /* Uncompress found a bad code in the main Huffman codes. */
80 #define ZIP_CMD_BADCODE        0x7
81 
82 /* Uncompress found a bad code in the 19 Huffman codes encoding lengths. */
83 #define ZIP_CMD_BADCODE2       0x8
84 
85 /* Compress found a zero-length input. */
86 #define ZIP_CMD_ZERO_LEN       0x9
87 
88 /* The compress or decompress encountered an internal parity error. */
89 #define ZIP_CMD_PARITY         0xA
90 
91 /*
92  * Uncompress found a string identifier that precedes the uncompressed data and
93  * decompression history.
94  */
95 #define ZIP_CMD_FATAL          0xB
96 
97 /**
98  * enum zip_int_vec_e - ZIP MSI-X Vector Enumeration, enumerates the MSI-X
99  * interrupt vectors.
100  */
101 enum zip_int_vec_e {
102 	ZIP_INT_VEC_E_ECCE = 0x10,
103 	ZIP_INT_VEC_E_FIFE = 0x11,
104 	ZIP_INT_VEC_E_QUE0_DONE = 0x0,
105 	ZIP_INT_VEC_E_QUE0_ERR = 0x8,
106 	ZIP_INT_VEC_E_QUE1_DONE = 0x1,
107 	ZIP_INT_VEC_E_QUE1_ERR = 0x9,
108 	ZIP_INT_VEC_E_QUE2_DONE = 0x2,
109 	ZIP_INT_VEC_E_QUE2_ERR = 0xa,
110 	ZIP_INT_VEC_E_QUE3_DONE = 0x3,
111 	ZIP_INT_VEC_E_QUE3_ERR = 0xb,
112 	ZIP_INT_VEC_E_QUE4_DONE = 0x4,
113 	ZIP_INT_VEC_E_QUE4_ERR = 0xc,
114 	ZIP_INT_VEC_E_QUE5_DONE = 0x5,
115 	ZIP_INT_VEC_E_QUE5_ERR = 0xd,
116 	ZIP_INT_VEC_E_QUE6_DONE = 0x6,
117 	ZIP_INT_VEC_E_QUE6_ERR = 0xe,
118 	ZIP_INT_VEC_E_QUE7_DONE = 0x7,
119 	ZIP_INT_VEC_E_QUE7_ERR = 0xf,
120 	ZIP_INT_VEC_E_ENUM_LAST = 0x12,
121 };
122 
123 /**
124  * union zip_zptr_addr_s - ZIP Generic Pointer Structure for ADDR.
125  *
126  * It is the generic format of pointers in ZIP_INST_S.
127  */
128 union zip_zptr_addr_s {
129 	u64 u_reg64;
130 	struct {
131 #if defined(__BIG_ENDIAN_BITFIELD)
132 		u64 reserved_49_63              : 15;
133 		u64 addr                        : 49;
134 #elif defined(__LITTLE_ENDIAN_BITFIELD)
135 		u64 addr                        : 49;
136 		u64 reserved_49_63              : 15;
137 #endif
138 	} s;
139 
140 };
141 
142 /**
143  * union zip_zptr_ctl_s - ZIP Generic Pointer Structure for CTL.
144  *
145  * It is the generic format of pointers in ZIP_INST_S.
146  */
147 union zip_zptr_ctl_s {
148 	u64 u_reg64;
149 	struct {
150 #if defined(__BIG_ENDIAN_BITFIELD)
151 		u64 reserved_112_127            : 16;
152 		u64 length                      : 16;
153 		u64 reserved_67_95              : 29;
154 		u64 fw                          : 1;
155 		u64 nc                          : 1;
156 		u64 data_be                     : 1;
157 #elif defined(__LITTLE_ENDIAN_BITFIELD)
158 		u64 data_be                     : 1;
159 		u64 nc                          : 1;
160 		u64 fw                          : 1;
161 		u64 reserved_67_95              : 29;
162 		u64 length                      : 16;
163 		u64 reserved_112_127            : 16;
164 #endif
165 	} s;
166 };
167 
168 /**
169  * union zip_inst_s - ZIP Instruction Structure.
170  * Each ZIP instruction has 16 words (they are called IWORD0 to IWORD15 within
171  * the structure).
172  */
173 union zip_inst_s {
174 	u64 u_reg64[16];
175 	struct {
176 #if defined(__BIG_ENDIAN_BITFIELD)
177 		u64 doneint                     : 1;
178 		u64 reserved_56_62              : 7;
179 		u64 totaloutputlength           : 24;
180 		u64 reserved_27_31              : 5;
181 		u64 exn                         : 3;
182 		u64 reserved_23_23              : 1;
183 		u64 exbits                      : 7;
184 		u64 reserved_12_15              : 4;
185 		u64 sf                          : 1;
186 		u64 ss                          : 2;
187 		u64 cc                          : 2;
188 		u64 ef                          : 1;
189 		u64 bf                          : 1;
190 		u64 ce                          : 1;
191 		u64 reserved_3_3                : 1;
192 		u64 ds                          : 1;
193 		u64 dg                          : 1;
194 		u64 hg                          : 1;
195 #elif defined(__LITTLE_ENDIAN_BITFIELD)
196 		u64 hg                          : 1;
197 		u64 dg                          : 1;
198 		u64 ds                          : 1;
199 		u64 reserved_3_3                : 1;
200 		u64 ce                          : 1;
201 		u64 bf                          : 1;
202 		u64 ef                          : 1;
203 		u64 cc                          : 2;
204 		u64 ss                          : 2;
205 		u64 sf                          : 1;
206 		u64 reserved_12_15              : 4;
207 		u64 exbits                      : 7;
208 		u64 reserved_23_23              : 1;
209 		u64 exn                         : 3;
210 		u64 reserved_27_31              : 5;
211 		u64 totaloutputlength           : 24;
212 		u64 reserved_56_62              : 7;
213 		u64 doneint                     : 1;
214 #endif
215 #if defined(__BIG_ENDIAN_BITFIELD)
216 		u64 historylength               : 16;
217 		u64 reserved_96_111             : 16;
218 		u64 adlercrc32                  : 32;
219 #elif defined(__LITTLE_ENDIAN_BITFIELD)
220 		u64 adlercrc32                  : 32;
221 		u64 reserved_96_111             : 16;
222 		u64 historylength               : 16;
223 #endif
224 		union zip_zptr_addr_s ctx_ptr_addr;
225 		union zip_zptr_ctl_s ctx_ptr_ctl;
226 		union zip_zptr_addr_s his_ptr_addr;
227 		union zip_zptr_ctl_s his_ptr_ctl;
228 		union zip_zptr_addr_s inp_ptr_addr;
229 		union zip_zptr_ctl_s inp_ptr_ctl;
230 		union zip_zptr_addr_s out_ptr_addr;
231 		union zip_zptr_ctl_s out_ptr_ctl;
232 		union zip_zptr_addr_s res_ptr_addr;
233 		union zip_zptr_ctl_s res_ptr_ctl;
234 #if defined(__BIG_ENDIAN_BITFIELD)
235 		u64 reserved_817_831            : 15;
236 		u64 wq_ptr                      : 49;
237 #elif defined(__LITTLE_ENDIAN_BITFIELD)
238 		u64 wq_ptr                      : 49;
239 		u64 reserved_817_831            : 15;
240 #endif
241 #if defined(__BIG_ENDIAN_BITFIELD)
242 		u64 reserved_882_895            : 14;
243 		u64 tt                          : 2;
244 		u64 reserved_874_879            : 6;
245 		u64 grp                         : 10;
246 		u64 tag                         : 32;
247 #elif defined(__LITTLE_ENDIAN_BITFIELD)
248 		u64 tag                         : 32;
249 		u64 grp                         : 10;
250 		u64 reserved_874_879            : 6;
251 		u64 tt                          : 2;
252 		u64 reserved_882_895            : 14;
253 #endif
254 #if defined(__BIG_ENDIAN_BITFIELD)
255 		u64 reserved_896_959            : 64;
256 #elif defined(__LITTLE_ENDIAN_BITFIELD)
257 		u64 reserved_896_959            : 64;
258 #endif
259 #if defined(__BIG_ENDIAN_BITFIELD)
260 		u64 reserved_960_1023           : 64;
261 #elif defined(__LITTLE_ENDIAN_BITFIELD)
262 		u64 reserved_960_1023           : 64;
263 #endif
264 	} s;
265 };
266 
267 /**
268  * union zip_nptr_s - ZIP Instruction Next-Chunk-Buffer Pointer (NPTR)
269  * Structure
270  *
271  * ZIP_NPTR structure is used to chain all the zip instruction buffers
272  * together. ZIP instruction buffers are managed (allocated and released) by
273  * the software.
274  */
275 union zip_nptr_s {
276 	u64 u_reg64;
277 	struct {
278 #if defined(__BIG_ENDIAN_BITFIELD)
279 		u64 reserved_49_63              : 15;
280 		u64 addr                        : 49;
281 #elif defined(__LITTLE_ENDIAN_BITFIELD)
282 		u64 addr                        : 49;
283 		u64 reserved_49_63              : 15;
284 #endif
285 	} s;
286 };
287 
288 /**
289  * union zip_zptr_s - ZIP Generic Pointer Structure.
290  *
291  * It is the generic format of pointers in ZIP_INST_S.
292  */
293 union zip_zptr_s {
294 	u64 u_reg64[2];
295 	struct {
296 #if defined(__BIG_ENDIAN_BITFIELD)
297 		u64 reserved_49_63              : 15;
298 		u64 addr                        : 49;
299 #elif defined(__LITTLE_ENDIAN_BITFIELD)
300 		u64 addr                        : 49;
301 		u64 reserved_49_63              : 15;
302 #endif
303 #if defined(__BIG_ENDIAN_BITFIELD)
304 		u64 reserved_112_127            : 16;
305 		u64 length                      : 16;
306 		u64 reserved_67_95              : 29;
307 		u64 fw                          : 1;
308 		u64 nc                          : 1;
309 		u64 data_be                     : 1;
310 #elif defined(__LITTLE_ENDIAN_BITFIELD)
311 		u64 data_be                     : 1;
312 		u64 nc                          : 1;
313 		u64 fw                          : 1;
314 		u64 reserved_67_95              : 29;
315 		u64 length                      : 16;
316 		u64 reserved_112_127            : 16;
317 #endif
318 	} s;
319 };
320 
321 /**
322  * union zip_zres_s - ZIP Result Structure
323  *
324  * The ZIP coprocessor writes the result structure after it completes the
325  * invocation. The result structure is exactly 24 bytes, and each invocation of
326  * the ZIP coprocessor produces exactly one result structure.
327  */
328 union zip_zres_s {
329 	u64 u_reg64[3];
330 	struct {
331 #if defined(__BIG_ENDIAN_BITFIELD)
332 		u64 crc32                       : 32;
333 		u64 adler32                     : 32;
334 #elif defined(__LITTLE_ENDIAN_BITFIELD)
335 		u64 adler32                     : 32;
336 		u64 crc32                       : 32;
337 #endif
338 #if defined(__BIG_ENDIAN_BITFIELD)
339 		u64 totalbyteswritten           : 32;
340 		u64 totalbytesread              : 32;
341 #elif defined(__LITTLE_ENDIAN_BITFIELD)
342 		u64 totalbytesread              : 32;
343 		u64 totalbyteswritten           : 32;
344 #endif
345 #if defined(__BIG_ENDIAN_BITFIELD)
346 		u64 totalbitsprocessed          : 32;
347 		u64 doneint                     : 1;
348 		u64 reserved_155_158            : 4;
349 		u64 exn                         : 3;
350 		u64 reserved_151_151            : 1;
351 		u64 exbits                      : 7;
352 		u64 reserved_137_143            : 7;
353 		u64 ef                          : 1;
354 
355 		volatile u64 compcode           : 8;
356 #elif defined(__LITTLE_ENDIAN_BITFIELD)
357 
358 		volatile u64 compcode           : 8;
359 		u64 ef                          : 1;
360 		u64 reserved_137_143            : 7;
361 		u64 exbits                      : 7;
362 		u64 reserved_151_151            : 1;
363 		u64 exn                         : 3;
364 		u64 reserved_155_158            : 4;
365 		u64 doneint                     : 1;
366 		u64 totalbitsprocessed          : 32;
367 #endif
368 	} s;
369 };
370 
371 /**
372  * union zip_cmd_ctl - Structure representing the register that controls
373  * clock and reset.
374  */
375 union zip_cmd_ctl {
376 	u64 u_reg64;
377 	struct zip_cmd_ctl_s {
378 #if defined(__BIG_ENDIAN_BITFIELD)
379 		u64 reserved_2_63               : 62;
380 		u64 forceclk                    : 1;
381 		u64 reset                       : 1;
382 #elif defined(__LITTLE_ENDIAN_BITFIELD)
383 		u64 reset                       : 1;
384 		u64 forceclk                    : 1;
385 		u64 reserved_2_63               : 62;
386 #endif
387 	} s;
388 };
389 
390 #define ZIP_CMD_CTL 0x0ull
391 
392 /**
393  * union zip_constants - Data structure representing the register that contains
394  * all of the current implementation-related parameters of the zip core in this
395  * chip.
396  */
397 union zip_constants {
398 	u64 u_reg64;
399 	struct zip_constants_s {
400 #if defined(__BIG_ENDIAN_BITFIELD)
401 		u64 nexec                       : 8;
402 		u64 reserved_49_55              : 7;
403 		u64 syncflush_capable           : 1;
404 		u64 depth                       : 16;
405 		u64 onfsize                     : 12;
406 		u64 ctxsize                     : 12;
407 		u64 reserved_1_7                : 7;
408 		u64 disabled                    : 1;
409 #elif defined(__LITTLE_ENDIAN_BITFIELD)
410 		u64 disabled                    : 1;
411 		u64 reserved_1_7                : 7;
412 		u64 ctxsize                     : 12;
413 		u64 onfsize                     : 12;
414 		u64 depth                       : 16;
415 		u64 syncflush_capable           : 1;
416 		u64 reserved_49_55              : 7;
417 		u64 nexec                       : 8;
418 #endif
419 	} s;
420 };
421 
422 #define ZIP_CONSTANTS 0x00A0ull
423 
424 /**
425  * union zip_corex_bist_status - Represents registers which have the BIST
426  * status of memories in zip cores.
427  *
428  * Each bit is the BIST result of an individual memory
429  * (per bit, 0 = pass and 1 = fail).
430  */
431 union zip_corex_bist_status {
432 	u64 u_reg64;
433 	struct zip_corex_bist_status_s {
434 #if defined(__BIG_ENDIAN_BITFIELD)
435 		u64 reserved_53_63              : 11;
436 		u64 bstatus                     : 53;
437 #elif defined(__LITTLE_ENDIAN_BITFIELD)
438 		u64 bstatus                     : 53;
439 		u64 reserved_53_63              : 11;
440 #endif
441 	} s;
442 };
443 
ZIP_COREX_BIST_STATUS(u64 param1)444 static inline u64 ZIP_COREX_BIST_STATUS(u64 param1)
445 {
446 	if (param1 <= 1)
447 		return 0x0520ull + (param1 & 1) * 0x8ull;
448 	pr_err("ZIP_COREX_BIST_STATUS: %llu\n", param1);
449 	return 0;
450 }
451 
452 /**
453  * union zip_ctl_bist_status - Represents register that has the BIST status of
454  * memories in ZIP_CTL (instruction buffer, G/S pointer FIFO, input data
455  * buffer, output data buffers).
456  *
457  * Each bit is the BIST result of an individual memory
458  * (per bit, 0 = pass and 1 = fail).
459  */
460 union zip_ctl_bist_status {
461 	u64 u_reg64;
462 	struct zip_ctl_bist_status_s {
463 #if defined(__BIG_ENDIAN_BITFIELD)
464 		u64 reserved_9_63               : 55;
465 		u64 bstatus                     : 9;
466 #elif defined(__LITTLE_ENDIAN_BITFIELD)
467 		u64 bstatus                     : 9;
468 		u64 reserved_9_63               : 55;
469 #endif
470 	} s;
471 };
472 
473 #define ZIP_CTL_BIST_STATUS 0x0510ull
474 
475 /**
476  * union zip_ctl_cfg - Represents the register that controls the behavior of
477  * the ZIP DMA engines.
478  *
479  * It is recommended to keep default values for normal operation. Changing the
480  * values of the fields may be useful for diagnostics.
481  */
482 union zip_ctl_cfg {
483 	u64 u_reg64;
484 	struct zip_ctl_cfg_s {
485 #if defined(__BIG_ENDIAN_BITFIELD)
486 		u64 reserved_52_63              : 12;
487 		u64 ildf                        : 4;
488 		u64 reserved_36_47              : 12;
489 		u64 drtf                        : 4;
490 		u64 reserved_27_31              : 5;
491 		u64 stcf                        : 3;
492 		u64 reserved_19_23              : 5;
493 		u64 ldf                         : 3;
494 		u64 reserved_2_15               : 14;
495 		u64 busy                        : 1;
496 		u64 reserved_0_0                : 1;
497 #elif defined(__LITTLE_ENDIAN_BITFIELD)
498 		u64 reserved_0_0                : 1;
499 		u64 busy                        : 1;
500 		u64 reserved_2_15               : 14;
501 		u64 ldf                         : 3;
502 		u64 reserved_19_23              : 5;
503 		u64 stcf                        : 3;
504 		u64 reserved_27_31              : 5;
505 		u64 drtf                        : 4;
506 		u64 reserved_36_47              : 12;
507 		u64 ildf                        : 4;
508 		u64 reserved_52_63              : 12;
509 #endif
510 	} s;
511 };
512 
513 #define ZIP_CTL_CFG 0x0560ull
514 
515 /**
516  * union zip_dbg_corex_inst - Represents the registers that reflect the status
517  * of the current instruction that the ZIP core is executing or has executed.
518  *
519  * These registers are only for debug use.
520  */
521 union zip_dbg_corex_inst {
522 	u64 u_reg64;
523 	struct zip_dbg_corex_inst_s {
524 #if defined(__BIG_ENDIAN_BITFIELD)
525 		u64 busy                        : 1;
526 		u64 reserved_35_62              : 28;
527 		u64 qid                         : 3;
528 		u64 iid                         : 32;
529 #elif defined(__LITTLE_ENDIAN_BITFIELD)
530 		u64 iid                         : 32;
531 		u64 qid                         : 3;
532 		u64 reserved_35_62              : 28;
533 		u64 busy                        : 1;
534 #endif
535 	} s;
536 };
537 
ZIP_DBG_COREX_INST(u64 param1)538 static inline u64 ZIP_DBG_COREX_INST(u64 param1)
539 {
540 	if (param1 <= 1)
541 		return 0x0640ull + (param1 & 1) * 0x8ull;
542 	pr_err("ZIP_DBG_COREX_INST: %llu\n", param1);
543 	return 0;
544 }
545 
546 /**
547  * union zip_dbg_corex_sta - Represents registers that reflect the status of
548  * the zip cores.
549  *
550  * They are for debug use only.
551  */
552 union zip_dbg_corex_sta {
553 	u64 u_reg64;
554 	struct zip_dbg_corex_sta_s {
555 #if defined(__BIG_ENDIAN_BITFIELD)
556 		u64 busy                        : 1;
557 		u64 reserved_37_62              : 26;
558 		u64 ist                         : 5;
559 		u64 nie                         : 32;
560 #elif defined(__LITTLE_ENDIAN_BITFIELD)
561 		u64 nie                         : 32;
562 		u64 ist                         : 5;
563 		u64 reserved_37_62              : 26;
564 		u64 busy                        : 1;
565 #endif
566 	} s;
567 };
568 
ZIP_DBG_COREX_STA(u64 param1)569 static inline u64 ZIP_DBG_COREX_STA(u64 param1)
570 {
571 	if (param1 <= 1)
572 		return 0x0680ull + (param1 & 1) * 0x8ull;
573 	pr_err("ZIP_DBG_COREX_STA: %llu\n", param1);
574 	return 0;
575 }
576 
577 /**
578  * union zip_dbg_quex_sta - Represets registers that reflect status of the zip
579  * instruction queues.
580  *
581  * They are for debug use only.
582  */
583 union zip_dbg_quex_sta {
584 	u64 u_reg64;
585 	struct zip_dbg_quex_sta_s {
586 #if defined(__BIG_ENDIAN_BITFIELD)
587 		u64 busy                        : 1;
588 		u64 reserved_56_62              : 7;
589 		u64 rqwc                        : 24;
590 		u64 nii                         : 32;
591 #elif defined(__LITTLE_ENDIAN_BITFIELD)
592 		u64 nii                         : 32;
593 		u64 rqwc                        : 24;
594 		u64 reserved_56_62              : 7;
595 		u64 busy                        : 1;
596 #endif
597 	} s;
598 };
599 
ZIP_DBG_QUEX_STA(u64 param1)600 static inline u64 ZIP_DBG_QUEX_STA(u64 param1)
601 {
602 	if (param1 <= 7)
603 		return 0x1800ull + (param1 & 7) * 0x8ull;
604 	pr_err("ZIP_DBG_QUEX_STA: %llu\n", param1);
605 	return 0;
606 }
607 
608 /**
609  * union zip_ecc_ctl - Represents the register that enables ECC for each
610  * individual internal memory that requires ECC.
611  *
612  * For debug purpose, it can also flip one or two bits in the ECC data.
613  */
614 union zip_ecc_ctl {
615 	u64 u_reg64;
616 	struct zip_ecc_ctl_s {
617 #if defined(__BIG_ENDIAN_BITFIELD)
618 		u64 reserved_19_63              : 45;
619 		u64 vmem_cdis                   : 1;
620 		u64 vmem_fs                     : 2;
621 		u64 reserved_15_15              : 1;
622 		u64 idf1_cdis                   : 1;
623 		u64 idf1_fs                     : 2;
624 		u64 reserved_11_11              : 1;
625 		u64 idf0_cdis                   : 1;
626 		u64 idf0_fs                     : 2;
627 		u64 reserved_7_7                : 1;
628 		u64 gspf_cdis                   : 1;
629 		u64 gspf_fs                     : 2;
630 		u64 reserved_3_3                : 1;
631 		u64 iqf_cdis                    : 1;
632 		u64 iqf_fs                      : 2;
633 #elif defined(__LITTLE_ENDIAN_BITFIELD)
634 		u64 iqf_fs                      : 2;
635 		u64 iqf_cdis                    : 1;
636 		u64 reserved_3_3                : 1;
637 		u64 gspf_fs                     : 2;
638 		u64 gspf_cdis                   : 1;
639 		u64 reserved_7_7                : 1;
640 		u64 idf0_fs                     : 2;
641 		u64 idf0_cdis                   : 1;
642 		u64 reserved_11_11              : 1;
643 		u64 idf1_fs                     : 2;
644 		u64 idf1_cdis                   : 1;
645 		u64 reserved_15_15              : 1;
646 		u64 vmem_fs                     : 2;
647 		u64 vmem_cdis                   : 1;
648 		u64 reserved_19_63              : 45;
649 #endif
650 	} s;
651 };
652 
653 #define ZIP_ECC_CTL 0x0568ull
654 
655 /* NCB - zip_ecce_ena_w1c */
656 union zip_ecce_ena_w1c {
657 	u64 u_reg64;
658 	struct zip_ecce_ena_w1c_s {
659 #if defined(__BIG_ENDIAN_BITFIELD)
660 		u64 reserved_37_63              : 27;
661 		u64 dbe                         : 5;
662 		u64 reserved_5_31               : 27;
663 		u64 sbe                         : 5;
664 #elif defined(__LITTLE_ENDIAN_BITFIELD)
665 		u64 sbe                         : 5;
666 		u64 reserved_5_31               : 27;
667 		u64 dbe                         : 5;
668 		u64 reserved_37_63              : 27;
669 #endif
670 	} s;
671 };
672 
673 #define ZIP_ECCE_ENA_W1C 0x0598ull
674 
675 /* NCB - zip_ecce_ena_w1s */
676 union zip_ecce_ena_w1s {
677 	u64 u_reg64;
678 	struct zip_ecce_ena_w1s_s {
679 #if defined(__BIG_ENDIAN_BITFIELD)
680 		u64 reserved_37_63              : 27;
681 		u64 dbe                         : 5;
682 		u64 reserved_5_31               : 27;
683 		u64 sbe                         : 5;
684 #elif defined(__LITTLE_ENDIAN_BITFIELD)
685 		u64 sbe                         : 5;
686 		u64 reserved_5_31               : 27;
687 		u64 dbe                         : 5;
688 		u64 reserved_37_63              : 27;
689 #endif
690 	} s;
691 };
692 
693 #define ZIP_ECCE_ENA_W1S 0x0590ull
694 
695 /**
696  * union zip_ecce_int - Represents the register that contains the status of the
697  * ECC interrupt sources.
698  */
699 union zip_ecce_int {
700 	u64 u_reg64;
701 	struct zip_ecce_int_s {
702 #if defined(__BIG_ENDIAN_BITFIELD)
703 		u64 reserved_37_63              : 27;
704 		u64 dbe                         : 5;
705 		u64 reserved_5_31               : 27;
706 		u64 sbe                         : 5;
707 #elif defined(__LITTLE_ENDIAN_BITFIELD)
708 		u64 sbe                         : 5;
709 		u64 reserved_5_31               : 27;
710 		u64 dbe                         : 5;
711 		u64 reserved_37_63              : 27;
712 #endif
713 	} s;
714 };
715 
716 #define ZIP_ECCE_INT 0x0580ull
717 
718 /* NCB - zip_ecce_int_w1s */
719 union zip_ecce_int_w1s {
720 	u64 u_reg64;
721 	struct zip_ecce_int_w1s_s {
722 #if defined(__BIG_ENDIAN_BITFIELD)
723 		u64 reserved_37_63              : 27;
724 		u64 dbe                         : 5;
725 		u64 reserved_5_31               : 27;
726 		u64 sbe                         : 5;
727 #elif defined(__LITTLE_ENDIAN_BITFIELD)
728 		u64 sbe                         : 5;
729 		u64 reserved_5_31               : 27;
730 		u64 dbe                         : 5;
731 		u64 reserved_37_63              : 27;
732 #endif
733 	} s;
734 };
735 
736 #define ZIP_ECCE_INT_W1S 0x0588ull
737 
738 /* NCB - zip_fife_ena_w1c */
739 union zip_fife_ena_w1c {
740 	u64 u_reg64;
741 	struct zip_fife_ena_w1c_s {
742 #if defined(__BIG_ENDIAN_BITFIELD)
743 		u64 reserved_42_63              : 22;
744 		u64 asserts                     : 42;
745 #elif defined(__LITTLE_ENDIAN_BITFIELD)
746 		u64 asserts                     : 42;
747 		u64 reserved_42_63              : 22;
748 #endif
749 	} s;
750 };
751 
752 #define ZIP_FIFE_ENA_W1C 0x0090ull
753 
754 /* NCB - zip_fife_ena_w1s */
755 union zip_fife_ena_w1s {
756 	u64 u_reg64;
757 	struct zip_fife_ena_w1s_s {
758 #if defined(__BIG_ENDIAN_BITFIELD)
759 		u64 reserved_42_63              : 22;
760 		u64 asserts                     : 42;
761 #elif defined(__LITTLE_ENDIAN_BITFIELD)
762 		u64 asserts                     : 42;
763 		u64 reserved_42_63              : 22;
764 #endif
765 	} s;
766 };
767 
768 #define ZIP_FIFE_ENA_W1S 0x0088ull
769 
770 /* NCB - zip_fife_int */
771 union zip_fife_int {
772 	u64 u_reg64;
773 	struct zip_fife_int_s {
774 #if defined(__BIG_ENDIAN_BITFIELD)
775 		u64 reserved_42_63              : 22;
776 		u64 asserts                     : 42;
777 #elif defined(__LITTLE_ENDIAN_BITFIELD)
778 		u64 asserts                     : 42;
779 		u64 reserved_42_63              : 22;
780 #endif
781 	} s;
782 };
783 
784 #define ZIP_FIFE_INT 0x0078ull
785 
786 /* NCB - zip_fife_int_w1s */
787 union zip_fife_int_w1s {
788 	u64 u_reg64;
789 	struct zip_fife_int_w1s_s {
790 #if defined(__BIG_ENDIAN_BITFIELD)
791 		u64 reserved_42_63              : 22;
792 		u64 asserts                     : 42;
793 #elif defined(__LITTLE_ENDIAN_BITFIELD)
794 		u64 asserts                     : 42;
795 		u64 reserved_42_63              : 22;
796 #endif
797 	} s;
798 };
799 
800 #define ZIP_FIFE_INT_W1S 0x0080ull
801 
802 /**
803  * union zip_msix_pbax - Represents the register that is the MSI-X PBA table
804  *
805  * The bit number is indexed by the ZIP_INT_VEC_E enumeration.
806  */
807 union zip_msix_pbax {
808 	u64 u_reg64;
809 	struct zip_msix_pbax_s {
810 #if defined(__BIG_ENDIAN_BITFIELD)
811 		u64 pend                        : 64;
812 #elif defined(__LITTLE_ENDIAN_BITFIELD)
813 		u64 pend                        : 64;
814 #endif
815 	} s;
816 };
817 
ZIP_MSIX_PBAX(u64 param1)818 static inline u64 ZIP_MSIX_PBAX(u64 param1)
819 {
820 	if (param1 == 0)
821 		return 0x0000838000FF0000ull;
822 	pr_err("ZIP_MSIX_PBAX: %llu\n", param1);
823 	return 0;
824 }
825 
826 /**
827  * union zip_msix_vecx_addr - Represents the register that is the MSI-X vector
828  * table, indexed by the ZIP_INT_VEC_E enumeration.
829  */
830 union zip_msix_vecx_addr {
831 	u64 u_reg64;
832 	struct zip_msix_vecx_addr_s {
833 #if defined(__BIG_ENDIAN_BITFIELD)
834 		u64 reserved_49_63              : 15;
835 		u64 addr                        : 47;
836 		u64 reserved_1_1                : 1;
837 		u64 secvec                      : 1;
838 #elif defined(__LITTLE_ENDIAN_BITFIELD)
839 		u64 secvec                      : 1;
840 		u64 reserved_1_1                : 1;
841 		u64 addr                        : 47;
842 		u64 reserved_49_63              : 15;
843 #endif
844 	} s;
845 };
846 
ZIP_MSIX_VECX_ADDR(u64 param1)847 static inline u64 ZIP_MSIX_VECX_ADDR(u64 param1)
848 {
849 	if (param1 <= 17)
850 		return 0x0000838000F00000ull + (param1 & 31) * 0x10ull;
851 	pr_err("ZIP_MSIX_VECX_ADDR: %llu\n", param1);
852 	return 0;
853 }
854 
855 /**
856  * union zip_msix_vecx_ctl - Represents the register that is the MSI-X vector
857  * table, indexed by the ZIP_INT_VEC_E enumeration.
858  */
859 union zip_msix_vecx_ctl {
860 	u64 u_reg64;
861 	struct zip_msix_vecx_ctl_s {
862 #if defined(__BIG_ENDIAN_BITFIELD)
863 		u64 reserved_33_63              : 31;
864 		u64 mask                        : 1;
865 		u64 reserved_20_31              : 12;
866 		u64 data                        : 20;
867 #elif defined(__LITTLE_ENDIAN_BITFIELD)
868 		u64 data                        : 20;
869 		u64 reserved_20_31              : 12;
870 		u64 mask                        : 1;
871 		u64 reserved_33_63              : 31;
872 #endif
873 	} s;
874 };
875 
ZIP_MSIX_VECX_CTL(u64 param1)876 static inline u64 ZIP_MSIX_VECX_CTL(u64 param1)
877 {
878 	if (param1 <= 17)
879 		return 0x0000838000F00008ull + (param1 & 31) * 0x10ull;
880 	pr_err("ZIP_MSIX_VECX_CTL: %llu\n", param1);
881 	return 0;
882 }
883 
884 /**
885  * union zip_quex_done - Represents the registers that contain the per-queue
886  * instruction done count.
887  */
888 union zip_quex_done {
889 	u64 u_reg64;
890 	struct zip_quex_done_s {
891 #if defined(__BIG_ENDIAN_BITFIELD)
892 		u64 reserved_20_63              : 44;
893 		u64 done                        : 20;
894 #elif defined(__LITTLE_ENDIAN_BITFIELD)
895 		u64 done                        : 20;
896 		u64 reserved_20_63              : 44;
897 #endif
898 	} s;
899 };
900 
ZIP_QUEX_DONE(u64 param1)901 static inline u64 ZIP_QUEX_DONE(u64 param1)
902 {
903 	if (param1 <= 7)
904 		return 0x2000ull + (param1 & 7) * 0x8ull;
905 	pr_err("ZIP_QUEX_DONE: %llu\n", param1);
906 	return 0;
907 }
908 
909 /**
910  * union zip_quex_done_ack - Represents the registers on write to which will
911  * decrement the per-queue instructiona done count.
912  */
913 union zip_quex_done_ack {
914 	u64 u_reg64;
915 	struct zip_quex_done_ack_s {
916 #if defined(__BIG_ENDIAN_BITFIELD)
917 		u64 reserved_20_63              : 44;
918 		u64 done_ack                    : 20;
919 #elif defined(__LITTLE_ENDIAN_BITFIELD)
920 		u64 done_ack                    : 20;
921 		u64 reserved_20_63              : 44;
922 #endif
923 	} s;
924 };
925 
ZIP_QUEX_DONE_ACK(u64 param1)926 static inline u64 ZIP_QUEX_DONE_ACK(u64 param1)
927 {
928 	if (param1 <= 7)
929 		return 0x2200ull + (param1 & 7) * 0x8ull;
930 	pr_err("ZIP_QUEX_DONE_ACK: %llu\n", param1);
931 	return 0;
932 }
933 
934 /**
935  * union zip_quex_done_ena_w1c - Represents the register which when written
936  * 1 to will disable the DONEINT interrupt for the queue.
937  */
938 union zip_quex_done_ena_w1c {
939 	u64 u_reg64;
940 	struct zip_quex_done_ena_w1c_s {
941 #if defined(__BIG_ENDIAN_BITFIELD)
942 		u64 reserved_1_63               : 63;
943 		u64 done_ena                    : 1;
944 #elif defined(__LITTLE_ENDIAN_BITFIELD)
945 		u64 done_ena                    : 1;
946 		u64 reserved_1_63               : 63;
947 #endif
948 	} s;
949 };
950 
ZIP_QUEX_DONE_ENA_W1C(u64 param1)951 static inline u64 ZIP_QUEX_DONE_ENA_W1C(u64 param1)
952 {
953 	if (param1 <= 7)
954 		return 0x2600ull + (param1 & 7) * 0x8ull;
955 	pr_err("ZIP_QUEX_DONE_ENA_W1C: %llu\n", param1);
956 	return 0;
957 }
958 
959 /**
960  * union zip_quex_done_ena_w1s - Represents the register that when written 1 to
961  * will enable the DONEINT interrupt for the queue.
962  */
963 union zip_quex_done_ena_w1s {
964 	u64 u_reg64;
965 	struct zip_quex_done_ena_w1s_s {
966 #if defined(__BIG_ENDIAN_BITFIELD)
967 		u64 reserved_1_63               : 63;
968 		u64 done_ena                    : 1;
969 #elif defined(__LITTLE_ENDIAN_BITFIELD)
970 		u64 done_ena                    : 1;
971 		u64 reserved_1_63               : 63;
972 #endif
973 	} s;
974 };
975 
ZIP_QUEX_DONE_ENA_W1S(u64 param1)976 static inline u64 ZIP_QUEX_DONE_ENA_W1S(u64 param1)
977 {
978 	if (param1 <= 7)
979 		return 0x2400ull + (param1 & 7) * 0x8ull;
980 	pr_err("ZIP_QUEX_DONE_ENA_W1S: %llu\n", param1);
981 	return 0;
982 }
983 
984 /**
985  * union zip_quex_done_wait - Represents the register that specifies the per
986  * queue interrupt coalescing settings.
987  */
988 union zip_quex_done_wait {
989 	u64 u_reg64;
990 	struct zip_quex_done_wait_s {
991 #if defined(__BIG_ENDIAN_BITFIELD)
992 		u64 reserved_48_63              : 16;
993 		u64 time_wait                   : 16;
994 		u64 reserved_20_31              : 12;
995 		u64 num_wait                    : 20;
996 #elif defined(__LITTLE_ENDIAN_BITFIELD)
997 		u64 num_wait                    : 20;
998 		u64 reserved_20_31              : 12;
999 		u64 time_wait                   : 16;
1000 		u64 reserved_48_63              : 16;
1001 #endif
1002 	} s;
1003 };
1004 
ZIP_QUEX_DONE_WAIT(u64 param1)1005 static inline u64 ZIP_QUEX_DONE_WAIT(u64 param1)
1006 {
1007 	if (param1 <= 7)
1008 		return 0x2800ull + (param1 & 7) * 0x8ull;
1009 	pr_err("ZIP_QUEX_DONE_WAIT: %llu\n", param1);
1010 	return 0;
1011 }
1012 
1013 /**
1014  * union zip_quex_doorbell - Represents doorbell registers for the ZIP
1015  * instruction queues.
1016  */
1017 union zip_quex_doorbell {
1018 	u64 u_reg64;
1019 	struct zip_quex_doorbell_s {
1020 #if defined(__BIG_ENDIAN_BITFIELD)
1021 		u64 reserved_20_63              : 44;
1022 		u64 dbell_cnt                   : 20;
1023 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1024 		u64 dbell_cnt                   : 20;
1025 		u64 reserved_20_63              : 44;
1026 #endif
1027 	} s;
1028 };
1029 
ZIP_QUEX_DOORBELL(u64 param1)1030 static inline u64 ZIP_QUEX_DOORBELL(u64 param1)
1031 {
1032 	if (param1 <= 7)
1033 		return 0x4000ull + (param1 & 7) * 0x8ull;
1034 	pr_err("ZIP_QUEX_DOORBELL: %llu\n", param1);
1035 	return 0;
1036 }
1037 
1038 union zip_quex_err_ena_w1c {
1039 	u64 u_reg64;
1040 	struct zip_quex_err_ena_w1c_s {
1041 #if defined(__BIG_ENDIAN_BITFIELD)
1042 		u64 reserved_5_63               : 59;
1043 		u64 mdbe                        : 1;
1044 		u64 nwrp                        : 1;
1045 		u64 nrrp                        : 1;
1046 		u64 irde                        : 1;
1047 		u64 dovf                        : 1;
1048 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1049 		u64 dovf                        : 1;
1050 		u64 irde                        : 1;
1051 		u64 nrrp                        : 1;
1052 		u64 nwrp                        : 1;
1053 		u64 mdbe                        : 1;
1054 		u64 reserved_5_63               : 59;
1055 #endif
1056 	} s;
1057 };
1058 
ZIP_QUEX_ERR_ENA_W1C(u64 param1)1059 static inline u64 ZIP_QUEX_ERR_ENA_W1C(u64 param1)
1060 {
1061 	if (param1 <= 7)
1062 		return 0x3600ull + (param1 & 7) * 0x8ull;
1063 	pr_err("ZIP_QUEX_ERR_ENA_W1C: %llu\n", param1);
1064 	return 0;
1065 }
1066 
1067 union zip_quex_err_ena_w1s {
1068 	u64 u_reg64;
1069 	struct zip_quex_err_ena_w1s_s {
1070 #if defined(__BIG_ENDIAN_BITFIELD)
1071 		u64 reserved_5_63               : 59;
1072 		u64 mdbe                        : 1;
1073 		u64 nwrp                        : 1;
1074 		u64 nrrp                        : 1;
1075 		u64 irde                        : 1;
1076 		u64 dovf                        : 1;
1077 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1078 		u64 dovf                        : 1;
1079 		u64 irde                        : 1;
1080 		u64 nrrp                        : 1;
1081 		u64 nwrp                        : 1;
1082 		u64 mdbe                        : 1;
1083 		u64 reserved_5_63               : 59;
1084 #endif
1085 	} s;
1086 };
1087 
ZIP_QUEX_ERR_ENA_W1S(u64 param1)1088 static inline u64 ZIP_QUEX_ERR_ENA_W1S(u64 param1)
1089 {
1090 	if (param1 <= 7)
1091 		return 0x3400ull + (param1 & 7) * 0x8ull;
1092 	pr_err("ZIP_QUEX_ERR_ENA_W1S: %llu\n", param1);
1093 	return 0;
1094 }
1095 
1096 /**
1097  * union zip_quex_err_int - Represents registers that contain the per-queue
1098  * error interrupts.
1099  */
1100 union zip_quex_err_int {
1101 	u64 u_reg64;
1102 	struct zip_quex_err_int_s {
1103 #if defined(__BIG_ENDIAN_BITFIELD)
1104 		u64 reserved_5_63               : 59;
1105 		u64 mdbe                        : 1;
1106 		u64 nwrp                        : 1;
1107 		u64 nrrp                        : 1;
1108 		u64 irde                        : 1;
1109 		u64 dovf                        : 1;
1110 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1111 		u64 dovf                        : 1;
1112 		u64 irde                        : 1;
1113 		u64 nrrp                        : 1;
1114 		u64 nwrp                        : 1;
1115 		u64 mdbe                        : 1;
1116 		u64 reserved_5_63               : 59;
1117 #endif
1118 	} s;
1119 };
1120 
ZIP_QUEX_ERR_INT(u64 param1)1121 static inline u64 ZIP_QUEX_ERR_INT(u64 param1)
1122 {
1123 	if (param1 <= 7)
1124 		return 0x3000ull + (param1 & 7) * 0x8ull;
1125 	pr_err("ZIP_QUEX_ERR_INT: %llu\n", param1);
1126 	return 0;
1127 }
1128 
1129 /* NCB - zip_que#_err_int_w1s */
1130 union zip_quex_err_int_w1s {
1131 	u64 u_reg64;
1132 	struct zip_quex_err_int_w1s_s {
1133 #if defined(__BIG_ENDIAN_BITFIELD)
1134 		u64 reserved_5_63               : 59;
1135 		u64 mdbe                        : 1;
1136 		u64 nwrp                        : 1;
1137 		u64 nrrp                        : 1;
1138 		u64 irde                        : 1;
1139 		u64 dovf                        : 1;
1140 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1141 		u64 dovf                        : 1;
1142 		u64 irde                        : 1;
1143 		u64 nrrp                        : 1;
1144 		u64 nwrp                        : 1;
1145 		u64 mdbe                        : 1;
1146 		u64 reserved_5_63               : 59;
1147 #endif
1148 	} s;
1149 };
1150 
ZIP_QUEX_ERR_INT_W1S(u64 param1)1151 static inline u64 ZIP_QUEX_ERR_INT_W1S(u64 param1)
1152 {
1153 	if (param1 <= 7)
1154 		return 0x3200ull + (param1 & 7) * 0x8ull;
1155 	pr_err("ZIP_QUEX_ERR_INT_W1S: %llu\n", param1);
1156 	return 0;
1157 }
1158 
1159 /**
1160  * union zip_quex_gcfg - Represents the registers that reflect status of the
1161  * zip instruction queues,debug use only.
1162  */
1163 union zip_quex_gcfg {
1164 	u64 u_reg64;
1165 	struct zip_quex_gcfg_s {
1166 #if defined(__BIG_ENDIAN_BITFIELD)
1167 		u64 reserved_4_63               : 60;
1168 		u64 iqb_ldwb                    : 1;
1169 		u64 cbw_sty                     : 1;
1170 		u64 l2ld_cmd                    : 2;
1171 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1172 		u64 l2ld_cmd                    : 2;
1173 		u64 cbw_sty                     : 1;
1174 		u64 iqb_ldwb                    : 1;
1175 		u64 reserved_4_63               : 60;
1176 #endif
1177 	} s;
1178 };
1179 
ZIP_QUEX_GCFG(u64 param1)1180 static inline u64 ZIP_QUEX_GCFG(u64 param1)
1181 {
1182 	if (param1 <= 7)
1183 		return 0x1A00ull + (param1 & 7) * 0x8ull;
1184 	pr_err("ZIP_QUEX_GCFG: %llu\n", param1);
1185 	return 0;
1186 }
1187 
1188 /**
1189  * union zip_quex_map - Represents the registers that control how each
1190  * instruction queue maps to zip cores.
1191  */
1192 union zip_quex_map {
1193 	u64 u_reg64;
1194 	struct zip_quex_map_s {
1195 #if defined(__BIG_ENDIAN_BITFIELD)
1196 		u64 reserved_2_63               : 62;
1197 		u64 zce                         : 2;
1198 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1199 		u64 zce                         : 2;
1200 		u64 reserved_2_63               : 62;
1201 #endif
1202 	} s;
1203 };
1204 
ZIP_QUEX_MAP(u64 param1)1205 static inline u64 ZIP_QUEX_MAP(u64 param1)
1206 {
1207 	if (param1 <= 7)
1208 		return 0x1400ull + (param1 & 7) * 0x8ull;
1209 	pr_err("ZIP_QUEX_MAP: %llu\n", param1);
1210 	return 0;
1211 }
1212 
1213 /**
1214  * union zip_quex_sbuf_addr - Represents the registers that set the buffer
1215  * parameters for the instruction queues.
1216  *
1217  * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite
1218  * this register to effectively reset the command buffer state machine.
1219  * These registers must be programmed after SW programs the corresponding
1220  * ZIP_QUE(0..7)_SBUF_CTL.
1221  */
1222 union zip_quex_sbuf_addr {
1223 	u64 u_reg64;
1224 	struct zip_quex_sbuf_addr_s {
1225 #if defined(__BIG_ENDIAN_BITFIELD)
1226 		u64 reserved_49_63              : 15;
1227 		u64 ptr                         : 42;
1228 		u64 off                         : 7;
1229 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1230 		u64 off                         : 7;
1231 		u64 ptr                         : 42;
1232 		u64 reserved_49_63              : 15;
1233 #endif
1234 	} s;
1235 };
1236 
ZIP_QUEX_SBUF_ADDR(u64 param1)1237 static inline u64 ZIP_QUEX_SBUF_ADDR(u64 param1)
1238 {
1239 	if (param1 <= 7)
1240 		return 0x1000ull + (param1 & 7) * 0x8ull;
1241 	pr_err("ZIP_QUEX_SBUF_ADDR: %llu\n", param1);
1242 	return 0;
1243 }
1244 
1245 /**
1246  * union zip_quex_sbuf_ctl - Represents the registers that set the buffer
1247  * parameters for the instruction queues.
1248  *
1249  * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite
1250  * this register to effectively reset the command buffer state machine.
1251  * These registers must be programmed before SW programs the corresponding
1252  * ZIP_QUE(0..7)_SBUF_ADDR.
1253  */
1254 union zip_quex_sbuf_ctl {
1255 	u64 u_reg64;
1256 	struct zip_quex_sbuf_ctl_s {
1257 #if defined(__BIG_ENDIAN_BITFIELD)
1258 		u64 reserved_45_63              : 19;
1259 		u64 size                        : 13;
1260 		u64 inst_be                     : 1;
1261 		u64 reserved_24_30              : 7;
1262 		u64 stream_id                   : 8;
1263 		u64 reserved_12_15              : 4;
1264 		u64 aura                        : 12;
1265 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1266 		u64 aura                        : 12;
1267 		u64 reserved_12_15              : 4;
1268 		u64 stream_id                   : 8;
1269 		u64 reserved_24_30              : 7;
1270 		u64 inst_be                     : 1;
1271 		u64 size                        : 13;
1272 		u64 reserved_45_63              : 19;
1273 #endif
1274 	} s;
1275 };
1276 
ZIP_QUEX_SBUF_CTL(u64 param1)1277 static inline u64 ZIP_QUEX_SBUF_CTL(u64 param1)
1278 {
1279 	if (param1 <= 7)
1280 		return 0x1200ull + (param1 & 7) * 0x8ull;
1281 	pr_err("ZIP_QUEX_SBUF_CTL: %llu\n", param1);
1282 	return 0;
1283 }
1284 
1285 /**
1286  * union zip_que_ena - Represents queue enable register
1287  *
1288  * If a queue is disabled, ZIP_CTL stops fetching instructions from the queue.
1289  */
1290 union zip_que_ena {
1291 	u64 u_reg64;
1292 	struct zip_que_ena_s {
1293 #if defined(__BIG_ENDIAN_BITFIELD)
1294 		u64 reserved_8_63               : 56;
1295 		u64 ena                         : 8;
1296 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1297 		u64 ena                         : 8;
1298 		u64 reserved_8_63               : 56;
1299 #endif
1300 	} s;
1301 };
1302 
1303 #define ZIP_QUE_ENA 0x0500ull
1304 
1305 /**
1306  * union zip_que_pri - Represents the register that defines the priority
1307  * between instruction queues.
1308  */
1309 union zip_que_pri {
1310 	u64 u_reg64;
1311 	struct zip_que_pri_s {
1312 #if defined(__BIG_ENDIAN_BITFIELD)
1313 		u64 reserved_8_63               : 56;
1314 		u64 pri                         : 8;
1315 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1316 		u64 pri                         : 8;
1317 		u64 reserved_8_63               : 56;
1318 #endif
1319 	} s;
1320 };
1321 
1322 #define ZIP_QUE_PRI 0x0508ull
1323 
1324 /**
1325  * union zip_throttle - Represents the register that controls the maximum
1326  * number of in-flight X2I data fetch transactions.
1327  *
1328  * Writing 0 to this register causes the ZIP module to temporarily suspend NCB
1329  * accesses; it is not recommended for normal operation, but may be useful for
1330  * diagnostics.
1331  */
1332 union zip_throttle {
1333 	u64 u_reg64;
1334 	struct zip_throttle_s {
1335 #if defined(__BIG_ENDIAN_BITFIELD)
1336 		u64 reserved_6_63               : 58;
1337 		u64 ld_infl                     : 6;
1338 #elif defined(__LITTLE_ENDIAN_BITFIELD)
1339 		u64 ld_infl                     : 6;
1340 		u64 reserved_6_63               : 58;
1341 #endif
1342 	} s;
1343 };
1344 
1345 #define ZIP_THROTTLE 0x0010ull
1346 
1347 #endif /* _CSRS_ZIP__ */
1348