1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020 Marvell International Ltd.
4  *
5  * Configuration and status register (CSR) type definitions for
6  * Octeon pow.
7  */
8 
9 #ifndef __CVMX_POW_DEFS_H__
10 #define __CVMX_POW_DEFS_H__
11 
12 #define CVMX_POW_BIST_STAT	     (0x00016700000003F8ull)
13 #define CVMX_POW_DS_PC		     (0x0001670000000398ull)
14 #define CVMX_POW_ECC_ERR	     (0x0001670000000218ull)
15 #define CVMX_POW_IQ_CNTX(offset)     (0x0001670000000340ull + ((offset) & 7) * 8)
16 #define CVMX_POW_IQ_COM_CNT	     (0x0001670000000388ull)
17 #define CVMX_POW_IQ_INT		     (0x0001670000000238ull)
18 #define CVMX_POW_IQ_INT_EN	     (0x0001670000000240ull)
19 #define CVMX_POW_IQ_THRX(offset)     (0x00016700000003A0ull + ((offset) & 7) * 8)
20 #define CVMX_POW_NOS_CNT	     (0x0001670000000228ull)
21 #define CVMX_POW_NW_TIM		     (0x0001670000000210ull)
22 #define CVMX_POW_PF_RST_MSK	     (0x0001670000000230ull)
23 #define CVMX_POW_PP_GRP_MSKX(offset) (0x0001670000000000ull + ((offset) & 15) * 8)
24 #define CVMX_POW_QOS_RNDX(offset)    (0x00016700000001C0ull + ((offset) & 7) * 8)
25 #define CVMX_POW_QOS_THRX(offset)    (0x0001670000000180ull + ((offset) & 7) * 8)
26 #define CVMX_POW_TS_PC		     (0x0001670000000390ull)
27 #define CVMX_POW_WA_COM_PC	     (0x0001670000000380ull)
28 #define CVMX_POW_WA_PCX(offset)	     (0x0001670000000300ull + ((offset) & 7) * 8)
29 #define CVMX_POW_WQ_INT		     (0x0001670000000200ull)
30 #define CVMX_POW_WQ_INT_CNTX(offset) (0x0001670000000100ull + ((offset) & 15) * 8)
31 #define CVMX_POW_WQ_INT_PC	     (0x0001670000000208ull)
32 #define CVMX_POW_WQ_INT_THRX(offset) (0x0001670000000080ull + ((offset) & 15) * 8)
33 #define CVMX_POW_WS_PCX(offset)	     (0x0001670000000280ull + ((offset) & 15) * 8)
34 
35 /**
36  * cvmx_pow_bist_stat
37  *
38  * Contains the BIST status for the POW memories ('0' = pass, '1' = fail).
39  *
40  */
41 union cvmx_pow_bist_stat {
42 	u64 u64;
43 	struct cvmx_pow_bist_stat_s {
44 		u64 reserved_32_63 : 32;
45 		u64 pp : 16;
46 		u64 reserved_0_15 : 16;
47 	} s;
48 	struct cvmx_pow_bist_stat_cn30xx {
49 		u64 reserved_17_63 : 47;
50 		u64 pp : 1;
51 		u64 reserved_9_15 : 7;
52 		u64 cam : 1;
53 		u64 nbt1 : 1;
54 		u64 nbt0 : 1;
55 		u64 index : 1;
56 		u64 fidx : 1;
57 		u64 nbr1 : 1;
58 		u64 nbr0 : 1;
59 		u64 pend : 1;
60 		u64 adr : 1;
61 	} cn30xx;
62 	struct cvmx_pow_bist_stat_cn31xx {
63 		u64 reserved_18_63 : 46;
64 		u64 pp : 2;
65 		u64 reserved_9_15 : 7;
66 		u64 cam : 1;
67 		u64 nbt1 : 1;
68 		u64 nbt0 : 1;
69 		u64 index : 1;
70 		u64 fidx : 1;
71 		u64 nbr1 : 1;
72 		u64 nbr0 : 1;
73 		u64 pend : 1;
74 		u64 adr : 1;
75 	} cn31xx;
76 	struct cvmx_pow_bist_stat_cn38xx {
77 		u64 reserved_32_63 : 32;
78 		u64 pp : 16;
79 		u64 reserved_10_15 : 6;
80 		u64 cam : 1;
81 		u64 nbt : 1;
82 		u64 index : 1;
83 		u64 fidx : 1;
84 		u64 nbr1 : 1;
85 		u64 nbr0 : 1;
86 		u64 pend1 : 1;
87 		u64 pend0 : 1;
88 		u64 adr1 : 1;
89 		u64 adr0 : 1;
90 	} cn38xx;
91 	struct cvmx_pow_bist_stat_cn38xx cn38xxp2;
92 	struct cvmx_pow_bist_stat_cn31xx cn50xx;
93 	struct cvmx_pow_bist_stat_cn52xx {
94 		u64 reserved_20_63 : 44;
95 		u64 pp : 4;
96 		u64 reserved_9_15 : 7;
97 		u64 cam : 1;
98 		u64 nbt1 : 1;
99 		u64 nbt0 : 1;
100 		u64 index : 1;
101 		u64 fidx : 1;
102 		u64 nbr1 : 1;
103 		u64 nbr0 : 1;
104 		u64 pend : 1;
105 		u64 adr : 1;
106 	} cn52xx;
107 	struct cvmx_pow_bist_stat_cn52xx cn52xxp1;
108 	struct cvmx_pow_bist_stat_cn56xx {
109 		u64 reserved_28_63 : 36;
110 		u64 pp : 12;
111 		u64 reserved_10_15 : 6;
112 		u64 cam : 1;
113 		u64 nbt : 1;
114 		u64 index : 1;
115 		u64 fidx : 1;
116 		u64 nbr1 : 1;
117 		u64 nbr0 : 1;
118 		u64 pend1 : 1;
119 		u64 pend0 : 1;
120 		u64 adr1 : 1;
121 		u64 adr0 : 1;
122 	} cn56xx;
123 	struct cvmx_pow_bist_stat_cn56xx cn56xxp1;
124 	struct cvmx_pow_bist_stat_cn38xx cn58xx;
125 	struct cvmx_pow_bist_stat_cn38xx cn58xxp1;
126 	struct cvmx_pow_bist_stat_cn61xx {
127 		u64 reserved_20_63 : 44;
128 		u64 pp : 4;
129 		u64 reserved_12_15 : 4;
130 		u64 cam : 1;
131 		u64 nbr : 3;
132 		u64 nbt : 4;
133 		u64 index : 1;
134 		u64 fidx : 1;
135 		u64 pend : 1;
136 		u64 adr : 1;
137 	} cn61xx;
138 	struct cvmx_pow_bist_stat_cn63xx {
139 		u64 reserved_22_63 : 42;
140 		u64 pp : 6;
141 		u64 reserved_12_15 : 4;
142 		u64 cam : 1;
143 		u64 nbr : 3;
144 		u64 nbt : 4;
145 		u64 index : 1;
146 		u64 fidx : 1;
147 		u64 pend : 1;
148 		u64 adr : 1;
149 	} cn63xx;
150 	struct cvmx_pow_bist_stat_cn63xx cn63xxp1;
151 	struct cvmx_pow_bist_stat_cn66xx {
152 		u64 reserved_26_63 : 38;
153 		u64 pp : 10;
154 		u64 reserved_12_15 : 4;
155 		u64 cam : 1;
156 		u64 nbr : 3;
157 		u64 nbt : 4;
158 		u64 index : 1;
159 		u64 fidx : 1;
160 		u64 pend : 1;
161 		u64 adr : 1;
162 	} cn66xx;
163 	struct cvmx_pow_bist_stat_cn70xx {
164 		u64 reserved_12_63 : 52;
165 		u64 cam : 1;
166 		u64 reserved_10_10 : 1;
167 		u64 nbr : 2;
168 		u64 reserved_6_7 : 2;
169 		u64 nbt : 2;
170 		u64 index : 1;
171 		u64 fidx : 1;
172 		u64 pend : 1;
173 		u64 adr : 1;
174 	} cn70xx;
175 	struct cvmx_pow_bist_stat_cn70xx cn70xxp1;
176 	struct cvmx_pow_bist_stat_cn61xx cnf71xx;
177 };
178 
179 typedef union cvmx_pow_bist_stat cvmx_pow_bist_stat_t;
180 
181 /**
182  * cvmx_pow_ds_pc
183  *
184  * Counts the number of de-schedule requests.  Write to clear.
185  *
186  */
187 union cvmx_pow_ds_pc {
188 	u64 u64;
189 	struct cvmx_pow_ds_pc_s {
190 		u64 reserved_32_63 : 32;
191 		u64 ds_pc : 32;
192 	} s;
193 	struct cvmx_pow_ds_pc_s cn30xx;
194 	struct cvmx_pow_ds_pc_s cn31xx;
195 	struct cvmx_pow_ds_pc_s cn38xx;
196 	struct cvmx_pow_ds_pc_s cn38xxp2;
197 	struct cvmx_pow_ds_pc_s cn50xx;
198 	struct cvmx_pow_ds_pc_s cn52xx;
199 	struct cvmx_pow_ds_pc_s cn52xxp1;
200 	struct cvmx_pow_ds_pc_s cn56xx;
201 	struct cvmx_pow_ds_pc_s cn56xxp1;
202 	struct cvmx_pow_ds_pc_s cn58xx;
203 	struct cvmx_pow_ds_pc_s cn58xxp1;
204 	struct cvmx_pow_ds_pc_s cn61xx;
205 	struct cvmx_pow_ds_pc_s cn63xx;
206 	struct cvmx_pow_ds_pc_s cn63xxp1;
207 	struct cvmx_pow_ds_pc_s cn66xx;
208 	struct cvmx_pow_ds_pc_s cn70xx;
209 	struct cvmx_pow_ds_pc_s cn70xxp1;
210 	struct cvmx_pow_ds_pc_s cnf71xx;
211 };
212 
213 typedef union cvmx_pow_ds_pc cvmx_pow_ds_pc_t;
214 
215 /**
216  * cvmx_pow_ecc_err
217  *
218  * Contains the single and double error bits and the corresponding interrupt enables for the ECC-
219  * protected POW index memory.  Also contains the syndrome value in the event of an ECC error.
220  * Also contains the remote pointer error bit and interrupt enable.  RPE is set when the POW
221  * detected
222  * corruption on one or more of the input queue lists in L2/DRAM (POW's local copy of the tail
223  * pointer
224  * for the L2/DRAM input queue did not match the last entry on the the list).   This is caused by
225  * L2/DRAM corruption, and is generally a fatal error because it likely caused POW to load bad
226  * work
227  * queue entries.
228  * This register also contains the illegal operation error bits and the corresponding interrupt
229  * enables as follows:
230  *  <0> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL_NULL state
231  *  <1> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL state
232  *  <2> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK from PP with pending tag switch to ORDERED
233  * or ATOMIC
234  *  <3> Received SWTAG/SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL_NULL
235  *  <4> Received SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL
236  *  <5> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with
237  * GET_WORK pending
238  *  <6> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with NULL_RD
239  * pending
240  *  <7> Received CLR_NSCHED from PP with SWTAG_DESCH/DESCH/CLR_NSCHED pending
241  *  <8> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with
242  * CLR_NSCHED pending
243  *  <9> Received illegal opcode
244  * <10> Received ADD_WORK with tag specified as NULL_NULL
245  * <11> Received DBG load from PP with DBG load pending
246  * <12> Received CSR load from PP with CSR load pending
247  */
248 union cvmx_pow_ecc_err {
249 	u64 u64;
250 	struct cvmx_pow_ecc_err_s {
251 		u64 reserved_45_63 : 19;
252 		u64 iop_ie : 13;
253 		u64 reserved_29_31 : 3;
254 		u64 iop : 13;
255 		u64 reserved_14_15 : 2;
256 		u64 rpe_ie : 1;
257 		u64 rpe : 1;
258 		u64 reserved_9_11 : 3;
259 		u64 syn : 5;
260 		u64 dbe_ie : 1;
261 		u64 sbe_ie : 1;
262 		u64 dbe : 1;
263 		u64 sbe : 1;
264 	} s;
265 	struct cvmx_pow_ecc_err_s cn30xx;
266 	struct cvmx_pow_ecc_err_cn31xx {
267 		u64 reserved_14_63 : 50;
268 		u64 rpe_ie : 1;
269 		u64 rpe : 1;
270 		u64 reserved_9_11 : 3;
271 		u64 syn : 5;
272 		u64 dbe_ie : 1;
273 		u64 sbe_ie : 1;
274 		u64 dbe : 1;
275 		u64 sbe : 1;
276 	} cn31xx;
277 	struct cvmx_pow_ecc_err_s cn38xx;
278 	struct cvmx_pow_ecc_err_cn31xx cn38xxp2;
279 	struct cvmx_pow_ecc_err_s cn50xx;
280 	struct cvmx_pow_ecc_err_s cn52xx;
281 	struct cvmx_pow_ecc_err_s cn52xxp1;
282 	struct cvmx_pow_ecc_err_s cn56xx;
283 	struct cvmx_pow_ecc_err_s cn56xxp1;
284 	struct cvmx_pow_ecc_err_s cn58xx;
285 	struct cvmx_pow_ecc_err_s cn58xxp1;
286 	struct cvmx_pow_ecc_err_s cn61xx;
287 	struct cvmx_pow_ecc_err_s cn63xx;
288 	struct cvmx_pow_ecc_err_s cn63xxp1;
289 	struct cvmx_pow_ecc_err_s cn66xx;
290 	struct cvmx_pow_ecc_err_s cn70xx;
291 	struct cvmx_pow_ecc_err_s cn70xxp1;
292 	struct cvmx_pow_ecc_err_s cnf71xx;
293 };
294 
295 typedef union cvmx_pow_ecc_err cvmx_pow_ecc_err_t;
296 
297 /**
298  * cvmx_pow_iq_cnt#
299  *
300  * Contains a read-only count of the number of work queue entries for each QOS level.
301  *
302  */
303 union cvmx_pow_iq_cntx {
304 	u64 u64;
305 	struct cvmx_pow_iq_cntx_s {
306 		u64 reserved_32_63 : 32;
307 		u64 iq_cnt : 32;
308 	} s;
309 	struct cvmx_pow_iq_cntx_s cn30xx;
310 	struct cvmx_pow_iq_cntx_s cn31xx;
311 	struct cvmx_pow_iq_cntx_s cn38xx;
312 	struct cvmx_pow_iq_cntx_s cn38xxp2;
313 	struct cvmx_pow_iq_cntx_s cn50xx;
314 	struct cvmx_pow_iq_cntx_s cn52xx;
315 	struct cvmx_pow_iq_cntx_s cn52xxp1;
316 	struct cvmx_pow_iq_cntx_s cn56xx;
317 	struct cvmx_pow_iq_cntx_s cn56xxp1;
318 	struct cvmx_pow_iq_cntx_s cn58xx;
319 	struct cvmx_pow_iq_cntx_s cn58xxp1;
320 	struct cvmx_pow_iq_cntx_s cn61xx;
321 	struct cvmx_pow_iq_cntx_s cn63xx;
322 	struct cvmx_pow_iq_cntx_s cn63xxp1;
323 	struct cvmx_pow_iq_cntx_s cn66xx;
324 	struct cvmx_pow_iq_cntx_s cn70xx;
325 	struct cvmx_pow_iq_cntx_s cn70xxp1;
326 	struct cvmx_pow_iq_cntx_s cnf71xx;
327 };
328 
329 typedef union cvmx_pow_iq_cntx cvmx_pow_iq_cntx_t;
330 
331 /**
332  * cvmx_pow_iq_com_cnt
333  *
334  * Contains a read-only count of the total number of work queue entries in all QOS levels.
335  *
336  */
337 union cvmx_pow_iq_com_cnt {
338 	u64 u64;
339 	struct cvmx_pow_iq_com_cnt_s {
340 		u64 reserved_32_63 : 32;
341 		u64 iq_cnt : 32;
342 	} s;
343 	struct cvmx_pow_iq_com_cnt_s cn30xx;
344 	struct cvmx_pow_iq_com_cnt_s cn31xx;
345 	struct cvmx_pow_iq_com_cnt_s cn38xx;
346 	struct cvmx_pow_iq_com_cnt_s cn38xxp2;
347 	struct cvmx_pow_iq_com_cnt_s cn50xx;
348 	struct cvmx_pow_iq_com_cnt_s cn52xx;
349 	struct cvmx_pow_iq_com_cnt_s cn52xxp1;
350 	struct cvmx_pow_iq_com_cnt_s cn56xx;
351 	struct cvmx_pow_iq_com_cnt_s cn56xxp1;
352 	struct cvmx_pow_iq_com_cnt_s cn58xx;
353 	struct cvmx_pow_iq_com_cnt_s cn58xxp1;
354 	struct cvmx_pow_iq_com_cnt_s cn61xx;
355 	struct cvmx_pow_iq_com_cnt_s cn63xx;
356 	struct cvmx_pow_iq_com_cnt_s cn63xxp1;
357 	struct cvmx_pow_iq_com_cnt_s cn66xx;
358 	struct cvmx_pow_iq_com_cnt_s cn70xx;
359 	struct cvmx_pow_iq_com_cnt_s cn70xxp1;
360 	struct cvmx_pow_iq_com_cnt_s cnf71xx;
361 };
362 
363 typedef union cvmx_pow_iq_com_cnt cvmx_pow_iq_com_cnt_t;
364 
365 /**
366  * cvmx_pow_iq_int
367  *
368  * "Contains the bits (1 per QOS level) that can trigger the input queue interrupt.  An IQ_INT
369  * bit
370  * will be set if POW_IQ_CNT#QOS# changes and the resulting value is equal to POW_IQ_THR#QOS#."
371  */
372 union cvmx_pow_iq_int {
373 	u64 u64;
374 	struct cvmx_pow_iq_int_s {
375 		u64 reserved_8_63 : 56;
376 		u64 iq_int : 8;
377 	} s;
378 	struct cvmx_pow_iq_int_s cn52xx;
379 	struct cvmx_pow_iq_int_s cn52xxp1;
380 	struct cvmx_pow_iq_int_s cn56xx;
381 	struct cvmx_pow_iq_int_s cn56xxp1;
382 	struct cvmx_pow_iq_int_s cn61xx;
383 	struct cvmx_pow_iq_int_s cn63xx;
384 	struct cvmx_pow_iq_int_s cn63xxp1;
385 	struct cvmx_pow_iq_int_s cn66xx;
386 	struct cvmx_pow_iq_int_s cn70xx;
387 	struct cvmx_pow_iq_int_s cn70xxp1;
388 	struct cvmx_pow_iq_int_s cnf71xx;
389 };
390 
391 typedef union cvmx_pow_iq_int cvmx_pow_iq_int_t;
392 
393 /**
394  * cvmx_pow_iq_int_en
395  *
396  * Contains the bits (1 per QOS level) that enable the input queue interrupt.
397  *
398  */
399 union cvmx_pow_iq_int_en {
400 	u64 u64;
401 	struct cvmx_pow_iq_int_en_s {
402 		u64 reserved_8_63 : 56;
403 		u64 int_en : 8;
404 	} s;
405 	struct cvmx_pow_iq_int_en_s cn52xx;
406 	struct cvmx_pow_iq_int_en_s cn52xxp1;
407 	struct cvmx_pow_iq_int_en_s cn56xx;
408 	struct cvmx_pow_iq_int_en_s cn56xxp1;
409 	struct cvmx_pow_iq_int_en_s cn61xx;
410 	struct cvmx_pow_iq_int_en_s cn63xx;
411 	struct cvmx_pow_iq_int_en_s cn63xxp1;
412 	struct cvmx_pow_iq_int_en_s cn66xx;
413 	struct cvmx_pow_iq_int_en_s cn70xx;
414 	struct cvmx_pow_iq_int_en_s cn70xxp1;
415 	struct cvmx_pow_iq_int_en_s cnf71xx;
416 };
417 
418 typedef union cvmx_pow_iq_int_en cvmx_pow_iq_int_en_t;
419 
420 /**
421  * cvmx_pow_iq_thr#
422  *
423  * Threshold value for triggering input queue interrupts.
424  *
425  */
426 union cvmx_pow_iq_thrx {
427 	u64 u64;
428 	struct cvmx_pow_iq_thrx_s {
429 		u64 reserved_32_63 : 32;
430 		u64 iq_thr : 32;
431 	} s;
432 	struct cvmx_pow_iq_thrx_s cn52xx;
433 	struct cvmx_pow_iq_thrx_s cn52xxp1;
434 	struct cvmx_pow_iq_thrx_s cn56xx;
435 	struct cvmx_pow_iq_thrx_s cn56xxp1;
436 	struct cvmx_pow_iq_thrx_s cn61xx;
437 	struct cvmx_pow_iq_thrx_s cn63xx;
438 	struct cvmx_pow_iq_thrx_s cn63xxp1;
439 	struct cvmx_pow_iq_thrx_s cn66xx;
440 	struct cvmx_pow_iq_thrx_s cn70xx;
441 	struct cvmx_pow_iq_thrx_s cn70xxp1;
442 	struct cvmx_pow_iq_thrx_s cnf71xx;
443 };
444 
445 typedef union cvmx_pow_iq_thrx cvmx_pow_iq_thrx_t;
446 
447 /**
448  * cvmx_pow_nos_cnt
449  *
450  * Contains the number of work queue entries on the no-schedule list.
451  *
452  */
453 union cvmx_pow_nos_cnt {
454 	u64 u64;
455 	struct cvmx_pow_nos_cnt_s {
456 		u64 reserved_12_63 : 52;
457 		u64 nos_cnt : 12;
458 	} s;
459 	struct cvmx_pow_nos_cnt_cn30xx {
460 		u64 reserved_7_63 : 57;
461 		u64 nos_cnt : 7;
462 	} cn30xx;
463 	struct cvmx_pow_nos_cnt_cn31xx {
464 		u64 reserved_9_63 : 55;
465 		u64 nos_cnt : 9;
466 	} cn31xx;
467 	struct cvmx_pow_nos_cnt_s cn38xx;
468 	struct cvmx_pow_nos_cnt_s cn38xxp2;
469 	struct cvmx_pow_nos_cnt_cn31xx cn50xx;
470 	struct cvmx_pow_nos_cnt_cn52xx {
471 		u64 reserved_10_63 : 54;
472 		u64 nos_cnt : 10;
473 	} cn52xx;
474 	struct cvmx_pow_nos_cnt_cn52xx cn52xxp1;
475 	struct cvmx_pow_nos_cnt_s cn56xx;
476 	struct cvmx_pow_nos_cnt_s cn56xxp1;
477 	struct cvmx_pow_nos_cnt_s cn58xx;
478 	struct cvmx_pow_nos_cnt_s cn58xxp1;
479 	struct cvmx_pow_nos_cnt_cn52xx cn61xx;
480 	struct cvmx_pow_nos_cnt_cn63xx {
481 		u64 reserved_11_63 : 53;
482 		u64 nos_cnt : 11;
483 	} cn63xx;
484 	struct cvmx_pow_nos_cnt_cn63xx cn63xxp1;
485 	struct cvmx_pow_nos_cnt_cn63xx cn66xx;
486 	struct cvmx_pow_nos_cnt_cn52xx cn70xx;
487 	struct cvmx_pow_nos_cnt_cn52xx cn70xxp1;
488 	struct cvmx_pow_nos_cnt_cn52xx cnf71xx;
489 };
490 
491 typedef union cvmx_pow_nos_cnt cvmx_pow_nos_cnt_t;
492 
493 /**
494  * cvmx_pow_nw_tim
495  *
496  * Sets the minimum period for a new work request timeout.  Period is specified in n-1 notation
497  * where the increment value is 1024 clock cycles.  Thus, a value of 0x0 in this register
498  * translates
499  * to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc...  Note:
500  * the
501  * maximum period for a new work request timeout is 2 times the minimum period.  Note: the new
502  * work
503  * request timeout counter is reset when this register is written.
504  * There are two new work request timeout cases:
505  * - WAIT bit clear.  The new work request can timeout if the timer expires before the pre-fetch
506  *   engine has reached the end of all work queues.  This can occur if the executable work queue
507  *   entry is deep in the queue and the pre-fetch engine is subject to many resets (i.e. high
508  * switch,
509  *   de-schedule, or new work load from other PP's).  Thus, it is possible for a PP to receive a
510  * work
511  *   response with the NO_WORK bit set even though there was at least one executable entry in the
512  *   work queues.  The other (and typical) scenario for receiving a NO_WORK response with the
513  * WAIT
514  *   bit clear is that the pre-fetch engine has reached the end of all work queues without
515  * finding
516  *   executable work.
517  * - WAIT bit set.  The new work request can timeout if the timer expires before the pre-fetch
518  *   engine has found executable work.  In this case, the only scenario where the PP will receive
519  * a
520  *   work response with the NO_WORK bit set is if the timer expires.  Note: it is still possible
521  * for
522  *   a PP to receive a NO_WORK response even though there was at least one executable entry in
523  * the
524  *   work queues.
525  * In either case, it's important to note that switches and de-schedules are higher priority
526  * operations that can cause the pre-fetch engine to reset.  Thus in a system with many switches
527  * or
528  * de-schedules occurring, it's possible for the new work timer to expire (resulting in NO_WORK
529  * responses) before the pre-fetch engine is able to get very deep into the work queues.
530  */
531 union cvmx_pow_nw_tim {
532 	u64 u64;
533 	struct cvmx_pow_nw_tim_s {
534 		u64 reserved_10_63 : 54;
535 		u64 nw_tim : 10;
536 	} s;
537 	struct cvmx_pow_nw_tim_s cn30xx;
538 	struct cvmx_pow_nw_tim_s cn31xx;
539 	struct cvmx_pow_nw_tim_s cn38xx;
540 	struct cvmx_pow_nw_tim_s cn38xxp2;
541 	struct cvmx_pow_nw_tim_s cn50xx;
542 	struct cvmx_pow_nw_tim_s cn52xx;
543 	struct cvmx_pow_nw_tim_s cn52xxp1;
544 	struct cvmx_pow_nw_tim_s cn56xx;
545 	struct cvmx_pow_nw_tim_s cn56xxp1;
546 	struct cvmx_pow_nw_tim_s cn58xx;
547 	struct cvmx_pow_nw_tim_s cn58xxp1;
548 	struct cvmx_pow_nw_tim_s cn61xx;
549 	struct cvmx_pow_nw_tim_s cn63xx;
550 	struct cvmx_pow_nw_tim_s cn63xxp1;
551 	struct cvmx_pow_nw_tim_s cn66xx;
552 	struct cvmx_pow_nw_tim_s cn70xx;
553 	struct cvmx_pow_nw_tim_s cn70xxp1;
554 	struct cvmx_pow_nw_tim_s cnf71xx;
555 };
556 
557 typedef union cvmx_pow_nw_tim cvmx_pow_nw_tim_t;
558 
559 /**
560  * cvmx_pow_pf_rst_msk
561  *
562  * Resets the work prefetch engine when work is stored in an internal buffer (either when the add
563  * work arrives or when the work is reloaded from an external buffer) for an enabled QOS level
564  * (1 bit per QOS level).
565  */
566 union cvmx_pow_pf_rst_msk {
567 	u64 u64;
568 	struct cvmx_pow_pf_rst_msk_s {
569 		u64 reserved_8_63 : 56;
570 		u64 rst_msk : 8;
571 	} s;
572 	struct cvmx_pow_pf_rst_msk_s cn50xx;
573 	struct cvmx_pow_pf_rst_msk_s cn52xx;
574 	struct cvmx_pow_pf_rst_msk_s cn52xxp1;
575 	struct cvmx_pow_pf_rst_msk_s cn56xx;
576 	struct cvmx_pow_pf_rst_msk_s cn56xxp1;
577 	struct cvmx_pow_pf_rst_msk_s cn58xx;
578 	struct cvmx_pow_pf_rst_msk_s cn58xxp1;
579 	struct cvmx_pow_pf_rst_msk_s cn61xx;
580 	struct cvmx_pow_pf_rst_msk_s cn63xx;
581 	struct cvmx_pow_pf_rst_msk_s cn63xxp1;
582 	struct cvmx_pow_pf_rst_msk_s cn66xx;
583 	struct cvmx_pow_pf_rst_msk_s cn70xx;
584 	struct cvmx_pow_pf_rst_msk_s cn70xxp1;
585 	struct cvmx_pow_pf_rst_msk_s cnf71xx;
586 };
587 
588 typedef union cvmx_pow_pf_rst_msk cvmx_pow_pf_rst_msk_t;
589 
590 /**
591  * cvmx_pow_pp_grp_msk#
592  *
593  * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the PP's membership in
594  * the corresponding group.  A value of 0x0 will prevent the PP from receiving new work.  Note:
595  * disabled or non-existent PP's should have this field set to 0xffff (the reset value) in order
596  * to
597  * maximize POW performance.
598  * Also contains the QOS level priorities for each PP.  0x0 is highest priority, and 0x7 the
599  * lowest.
600  * Setting the priority to 0xf will prevent that PP from receiving work from that QOS level.
601  * Priority values 0x8 through 0xe are reserved and should not be used.  For a given PP,
602  * priorities
603  * should begin at 0x0 and remain contiguous throughout the range.
604  */
605 union cvmx_pow_pp_grp_mskx {
606 	u64 u64;
607 	struct cvmx_pow_pp_grp_mskx_s {
608 		u64 reserved_48_63 : 16;
609 		u64 qos7_pri : 4;
610 		u64 qos6_pri : 4;
611 		u64 qos5_pri : 4;
612 		u64 qos4_pri : 4;
613 		u64 qos3_pri : 4;
614 		u64 qos2_pri : 4;
615 		u64 qos1_pri : 4;
616 		u64 qos0_pri : 4;
617 		u64 grp_msk : 16;
618 	} s;
619 	struct cvmx_pow_pp_grp_mskx_cn30xx {
620 		u64 reserved_16_63 : 48;
621 		u64 grp_msk : 16;
622 	} cn30xx;
623 	struct cvmx_pow_pp_grp_mskx_cn30xx cn31xx;
624 	struct cvmx_pow_pp_grp_mskx_cn30xx cn38xx;
625 	struct cvmx_pow_pp_grp_mskx_cn30xx cn38xxp2;
626 	struct cvmx_pow_pp_grp_mskx_s cn50xx;
627 	struct cvmx_pow_pp_grp_mskx_s cn52xx;
628 	struct cvmx_pow_pp_grp_mskx_s cn52xxp1;
629 	struct cvmx_pow_pp_grp_mskx_s cn56xx;
630 	struct cvmx_pow_pp_grp_mskx_s cn56xxp1;
631 	struct cvmx_pow_pp_grp_mskx_s cn58xx;
632 	struct cvmx_pow_pp_grp_mskx_s cn58xxp1;
633 	struct cvmx_pow_pp_grp_mskx_s cn61xx;
634 	struct cvmx_pow_pp_grp_mskx_s cn63xx;
635 	struct cvmx_pow_pp_grp_mskx_s cn63xxp1;
636 	struct cvmx_pow_pp_grp_mskx_s cn66xx;
637 	struct cvmx_pow_pp_grp_mskx_s cn70xx;
638 	struct cvmx_pow_pp_grp_mskx_s cn70xxp1;
639 	struct cvmx_pow_pp_grp_mskx_s cnf71xx;
640 };
641 
642 typedef union cvmx_pow_pp_grp_mskx cvmx_pow_pp_grp_mskx_t;
643 
644 /**
645  * cvmx_pow_qos_rnd#
646  *
647  * Contains the round definitions for issuing new work.  Each round consists of 8 bits with each
648  * bit
649  * corresponding to a QOS level.  There are 4 rounds contained in each register for a total of 32
650  * rounds.  The issue logic traverses through the rounds sequentially (lowest round to highest
651  * round)
652  * in an attempt to find new work for each PP.  Within each round, the issue logic traverses
653  * through
654  * the QOS levels sequentially (highest QOS to lowest QOS) skipping over each QOS level with a
655  * clear
656  * bit in the round mask.  Note: setting a QOS level to all zeroes in all issue round registers
657  * will
658  * prevent work from being issued from that QOS level.
659  */
660 union cvmx_pow_qos_rndx {
661 	u64 u64;
662 	struct cvmx_pow_qos_rndx_s {
663 		u64 reserved_32_63 : 32;
664 		u64 rnd_p3 : 8;
665 		u64 rnd_p2 : 8;
666 		u64 rnd_p1 : 8;
667 		u64 rnd : 8;
668 	} s;
669 	struct cvmx_pow_qos_rndx_s cn30xx;
670 	struct cvmx_pow_qos_rndx_s cn31xx;
671 	struct cvmx_pow_qos_rndx_s cn38xx;
672 	struct cvmx_pow_qos_rndx_s cn38xxp2;
673 	struct cvmx_pow_qos_rndx_s cn50xx;
674 	struct cvmx_pow_qos_rndx_s cn52xx;
675 	struct cvmx_pow_qos_rndx_s cn52xxp1;
676 	struct cvmx_pow_qos_rndx_s cn56xx;
677 	struct cvmx_pow_qos_rndx_s cn56xxp1;
678 	struct cvmx_pow_qos_rndx_s cn58xx;
679 	struct cvmx_pow_qos_rndx_s cn58xxp1;
680 	struct cvmx_pow_qos_rndx_s cn61xx;
681 	struct cvmx_pow_qos_rndx_s cn63xx;
682 	struct cvmx_pow_qos_rndx_s cn63xxp1;
683 	struct cvmx_pow_qos_rndx_s cn66xx;
684 	struct cvmx_pow_qos_rndx_s cn70xx;
685 	struct cvmx_pow_qos_rndx_s cn70xxp1;
686 	struct cvmx_pow_qos_rndx_s cnf71xx;
687 };
688 
689 typedef union cvmx_pow_qos_rndx cvmx_pow_qos_rndx_t;
690 
691 /**
692  * cvmx_pow_qos_thr#
693  *
694  * Contains the thresholds for allocating POW internal storage buffers.  If the number of
695  * remaining
696  * free buffers drops below the minimum threshold (MIN_THR) or the number of allocated buffers
697  * for
698  * this QOS level rises above the maximum threshold (MAX_THR), future incoming work queue entries
699  * will be buffered externally rather than internally.  This register also contains a read-only
700  * count
701  * of the current number of free buffers (FREE_CNT), the number of internal buffers currently
702  * allocated to this QOS level (BUF_CNT), and the total number of buffers on the de-schedule list
703  * (DES_CNT) (which is not the same as the total number of de-scheduled buffers).
704  */
705 union cvmx_pow_qos_thrx {
706 	u64 u64;
707 	struct cvmx_pow_qos_thrx_s {
708 		u64 reserved_60_63 : 4;
709 		u64 des_cnt : 12;
710 		u64 buf_cnt : 12;
711 		u64 free_cnt : 12;
712 		u64 reserved_23_23 : 1;
713 		u64 max_thr : 11;
714 		u64 reserved_11_11 : 1;
715 		u64 min_thr : 11;
716 	} s;
717 	struct cvmx_pow_qos_thrx_cn30xx {
718 		u64 reserved_55_63 : 9;
719 		u64 des_cnt : 7;
720 		u64 reserved_43_47 : 5;
721 		u64 buf_cnt : 7;
722 		u64 reserved_31_35 : 5;
723 		u64 free_cnt : 7;
724 		u64 reserved_18_23 : 6;
725 		u64 max_thr : 6;
726 		u64 reserved_6_11 : 6;
727 		u64 min_thr : 6;
728 	} cn30xx;
729 	struct cvmx_pow_qos_thrx_cn31xx {
730 		u64 reserved_57_63 : 7;
731 		u64 des_cnt : 9;
732 		u64 reserved_45_47 : 3;
733 		u64 buf_cnt : 9;
734 		u64 reserved_33_35 : 3;
735 		u64 free_cnt : 9;
736 		u64 reserved_20_23 : 4;
737 		u64 max_thr : 8;
738 		u64 reserved_8_11 : 4;
739 		u64 min_thr : 8;
740 	} cn31xx;
741 	struct cvmx_pow_qos_thrx_s cn38xx;
742 	struct cvmx_pow_qos_thrx_s cn38xxp2;
743 	struct cvmx_pow_qos_thrx_cn31xx cn50xx;
744 	struct cvmx_pow_qos_thrx_cn52xx {
745 		u64 reserved_58_63 : 6;
746 		u64 des_cnt : 10;
747 		u64 reserved_46_47 : 2;
748 		u64 buf_cnt : 10;
749 		u64 reserved_34_35 : 2;
750 		u64 free_cnt : 10;
751 		u64 reserved_21_23 : 3;
752 		u64 max_thr : 9;
753 		u64 reserved_9_11 : 3;
754 		u64 min_thr : 9;
755 	} cn52xx;
756 	struct cvmx_pow_qos_thrx_cn52xx cn52xxp1;
757 	struct cvmx_pow_qos_thrx_s cn56xx;
758 	struct cvmx_pow_qos_thrx_s cn56xxp1;
759 	struct cvmx_pow_qos_thrx_s cn58xx;
760 	struct cvmx_pow_qos_thrx_s cn58xxp1;
761 	struct cvmx_pow_qos_thrx_cn52xx cn61xx;
762 	struct cvmx_pow_qos_thrx_cn63xx {
763 		u64 reserved_59_63 : 5;
764 		u64 des_cnt : 11;
765 		u64 reserved_47_47 : 1;
766 		u64 buf_cnt : 11;
767 		u64 reserved_35_35 : 1;
768 		u64 free_cnt : 11;
769 		u64 reserved_22_23 : 2;
770 		u64 max_thr : 10;
771 		u64 reserved_10_11 : 2;
772 		u64 min_thr : 10;
773 	} cn63xx;
774 	struct cvmx_pow_qos_thrx_cn63xx cn63xxp1;
775 	struct cvmx_pow_qos_thrx_cn63xx cn66xx;
776 	struct cvmx_pow_qos_thrx_cn52xx cn70xx;
777 	struct cvmx_pow_qos_thrx_cn52xx cn70xxp1;
778 	struct cvmx_pow_qos_thrx_cn52xx cnf71xx;
779 };
780 
781 typedef union cvmx_pow_qos_thrx cvmx_pow_qos_thrx_t;
782 
783 /**
784  * cvmx_pow_ts_pc
785  *
786  * Counts the number of tag switch requests.  Write to clear.
787  *
788  */
789 union cvmx_pow_ts_pc {
790 	u64 u64;
791 	struct cvmx_pow_ts_pc_s {
792 		u64 reserved_32_63 : 32;
793 		u64 ts_pc : 32;
794 	} s;
795 	struct cvmx_pow_ts_pc_s cn30xx;
796 	struct cvmx_pow_ts_pc_s cn31xx;
797 	struct cvmx_pow_ts_pc_s cn38xx;
798 	struct cvmx_pow_ts_pc_s cn38xxp2;
799 	struct cvmx_pow_ts_pc_s cn50xx;
800 	struct cvmx_pow_ts_pc_s cn52xx;
801 	struct cvmx_pow_ts_pc_s cn52xxp1;
802 	struct cvmx_pow_ts_pc_s cn56xx;
803 	struct cvmx_pow_ts_pc_s cn56xxp1;
804 	struct cvmx_pow_ts_pc_s cn58xx;
805 	struct cvmx_pow_ts_pc_s cn58xxp1;
806 	struct cvmx_pow_ts_pc_s cn61xx;
807 	struct cvmx_pow_ts_pc_s cn63xx;
808 	struct cvmx_pow_ts_pc_s cn63xxp1;
809 	struct cvmx_pow_ts_pc_s cn66xx;
810 	struct cvmx_pow_ts_pc_s cn70xx;
811 	struct cvmx_pow_ts_pc_s cn70xxp1;
812 	struct cvmx_pow_ts_pc_s cnf71xx;
813 };
814 
815 typedef union cvmx_pow_ts_pc cvmx_pow_ts_pc_t;
816 
817 /**
818  * cvmx_pow_wa_com_pc
819  *
820  * Counts the number of add new work requests for all QOS levels.  Write to clear.
821  *
822  */
823 union cvmx_pow_wa_com_pc {
824 	u64 u64;
825 	struct cvmx_pow_wa_com_pc_s {
826 		u64 reserved_32_63 : 32;
827 		u64 wa_pc : 32;
828 	} s;
829 	struct cvmx_pow_wa_com_pc_s cn30xx;
830 	struct cvmx_pow_wa_com_pc_s cn31xx;
831 	struct cvmx_pow_wa_com_pc_s cn38xx;
832 	struct cvmx_pow_wa_com_pc_s cn38xxp2;
833 	struct cvmx_pow_wa_com_pc_s cn50xx;
834 	struct cvmx_pow_wa_com_pc_s cn52xx;
835 	struct cvmx_pow_wa_com_pc_s cn52xxp1;
836 	struct cvmx_pow_wa_com_pc_s cn56xx;
837 	struct cvmx_pow_wa_com_pc_s cn56xxp1;
838 	struct cvmx_pow_wa_com_pc_s cn58xx;
839 	struct cvmx_pow_wa_com_pc_s cn58xxp1;
840 	struct cvmx_pow_wa_com_pc_s cn61xx;
841 	struct cvmx_pow_wa_com_pc_s cn63xx;
842 	struct cvmx_pow_wa_com_pc_s cn63xxp1;
843 	struct cvmx_pow_wa_com_pc_s cn66xx;
844 	struct cvmx_pow_wa_com_pc_s cn70xx;
845 	struct cvmx_pow_wa_com_pc_s cn70xxp1;
846 	struct cvmx_pow_wa_com_pc_s cnf71xx;
847 };
848 
849 typedef union cvmx_pow_wa_com_pc cvmx_pow_wa_com_pc_t;
850 
851 /**
852  * cvmx_pow_wa_pc#
853  *
854  * Counts the number of add new work requests for each QOS level.  Write to clear.
855  *
856  */
857 union cvmx_pow_wa_pcx {
858 	u64 u64;
859 	struct cvmx_pow_wa_pcx_s {
860 		u64 reserved_32_63 : 32;
861 		u64 wa_pc : 32;
862 	} s;
863 	struct cvmx_pow_wa_pcx_s cn30xx;
864 	struct cvmx_pow_wa_pcx_s cn31xx;
865 	struct cvmx_pow_wa_pcx_s cn38xx;
866 	struct cvmx_pow_wa_pcx_s cn38xxp2;
867 	struct cvmx_pow_wa_pcx_s cn50xx;
868 	struct cvmx_pow_wa_pcx_s cn52xx;
869 	struct cvmx_pow_wa_pcx_s cn52xxp1;
870 	struct cvmx_pow_wa_pcx_s cn56xx;
871 	struct cvmx_pow_wa_pcx_s cn56xxp1;
872 	struct cvmx_pow_wa_pcx_s cn58xx;
873 	struct cvmx_pow_wa_pcx_s cn58xxp1;
874 	struct cvmx_pow_wa_pcx_s cn61xx;
875 	struct cvmx_pow_wa_pcx_s cn63xx;
876 	struct cvmx_pow_wa_pcx_s cn63xxp1;
877 	struct cvmx_pow_wa_pcx_s cn66xx;
878 	struct cvmx_pow_wa_pcx_s cn70xx;
879 	struct cvmx_pow_wa_pcx_s cn70xxp1;
880 	struct cvmx_pow_wa_pcx_s cnf71xx;
881 };
882 
883 typedef union cvmx_pow_wa_pcx cvmx_pow_wa_pcx_t;
884 
885 /**
886  * cvmx_pow_wq_int
887  *
888  * Contains the bits (1 per group) that set work queue interrupts and are used to clear these
889  * interrupts.  Also contains the input queue interrupt temporary disable bits (1 per group). For
890  * more information regarding this register, see the interrupt section.
891  */
892 union cvmx_pow_wq_int {
893 	u64 u64;
894 	struct cvmx_pow_wq_int_s {
895 		u64 reserved_32_63 : 32;
896 		u64 iq_dis : 16;
897 		u64 wq_int : 16;
898 	} s;
899 	struct cvmx_pow_wq_int_s cn30xx;
900 	struct cvmx_pow_wq_int_s cn31xx;
901 	struct cvmx_pow_wq_int_s cn38xx;
902 	struct cvmx_pow_wq_int_s cn38xxp2;
903 	struct cvmx_pow_wq_int_s cn50xx;
904 	struct cvmx_pow_wq_int_s cn52xx;
905 	struct cvmx_pow_wq_int_s cn52xxp1;
906 	struct cvmx_pow_wq_int_s cn56xx;
907 	struct cvmx_pow_wq_int_s cn56xxp1;
908 	struct cvmx_pow_wq_int_s cn58xx;
909 	struct cvmx_pow_wq_int_s cn58xxp1;
910 	struct cvmx_pow_wq_int_s cn61xx;
911 	struct cvmx_pow_wq_int_s cn63xx;
912 	struct cvmx_pow_wq_int_s cn63xxp1;
913 	struct cvmx_pow_wq_int_s cn66xx;
914 	struct cvmx_pow_wq_int_s cn70xx;
915 	struct cvmx_pow_wq_int_s cn70xxp1;
916 	struct cvmx_pow_wq_int_s cnf71xx;
917 };
918 
919 typedef union cvmx_pow_wq_int cvmx_pow_wq_int_t;
920 
921 /**
922  * cvmx_pow_wq_int_cnt#
923  *
924  * Contains a read-only copy of the counts used to trigger work queue interrupts.  For more
925  * information regarding this register, see the interrupt section.
926  */
927 union cvmx_pow_wq_int_cntx {
928 	u64 u64;
929 	struct cvmx_pow_wq_int_cntx_s {
930 		u64 reserved_28_63 : 36;
931 		u64 tc_cnt : 4;
932 		u64 ds_cnt : 12;
933 		u64 iq_cnt : 12;
934 	} s;
935 	struct cvmx_pow_wq_int_cntx_cn30xx {
936 		u64 reserved_28_63 : 36;
937 		u64 tc_cnt : 4;
938 		u64 reserved_19_23 : 5;
939 		u64 ds_cnt : 7;
940 		u64 reserved_7_11 : 5;
941 		u64 iq_cnt : 7;
942 	} cn30xx;
943 	struct cvmx_pow_wq_int_cntx_cn31xx {
944 		u64 reserved_28_63 : 36;
945 		u64 tc_cnt : 4;
946 		u64 reserved_21_23 : 3;
947 		u64 ds_cnt : 9;
948 		u64 reserved_9_11 : 3;
949 		u64 iq_cnt : 9;
950 	} cn31xx;
951 	struct cvmx_pow_wq_int_cntx_s cn38xx;
952 	struct cvmx_pow_wq_int_cntx_s cn38xxp2;
953 	struct cvmx_pow_wq_int_cntx_cn31xx cn50xx;
954 	struct cvmx_pow_wq_int_cntx_cn52xx {
955 		u64 reserved_28_63 : 36;
956 		u64 tc_cnt : 4;
957 		u64 reserved_22_23 : 2;
958 		u64 ds_cnt : 10;
959 		u64 reserved_10_11 : 2;
960 		u64 iq_cnt : 10;
961 	} cn52xx;
962 	struct cvmx_pow_wq_int_cntx_cn52xx cn52xxp1;
963 	struct cvmx_pow_wq_int_cntx_s cn56xx;
964 	struct cvmx_pow_wq_int_cntx_s cn56xxp1;
965 	struct cvmx_pow_wq_int_cntx_s cn58xx;
966 	struct cvmx_pow_wq_int_cntx_s cn58xxp1;
967 	struct cvmx_pow_wq_int_cntx_cn52xx cn61xx;
968 	struct cvmx_pow_wq_int_cntx_cn63xx {
969 		u64 reserved_28_63 : 36;
970 		u64 tc_cnt : 4;
971 		u64 reserved_23_23 : 1;
972 		u64 ds_cnt : 11;
973 		u64 reserved_11_11 : 1;
974 		u64 iq_cnt : 11;
975 	} cn63xx;
976 	struct cvmx_pow_wq_int_cntx_cn63xx cn63xxp1;
977 	struct cvmx_pow_wq_int_cntx_cn63xx cn66xx;
978 	struct cvmx_pow_wq_int_cntx_cn52xx cn70xx;
979 	struct cvmx_pow_wq_int_cntx_cn52xx cn70xxp1;
980 	struct cvmx_pow_wq_int_cntx_cn52xx cnf71xx;
981 };
982 
983 typedef union cvmx_pow_wq_int_cntx cvmx_pow_wq_int_cntx_t;
984 
985 /**
986  * cvmx_pow_wq_int_pc
987  *
988  * Contains the threshold value for the work queue interrupt periodic counter and also a read-
989  * only
990  * copy of the periodic counter.  For more information regarding this register, see the interrupt
991  * section.
992  */
993 union cvmx_pow_wq_int_pc {
994 	u64 u64;
995 	struct cvmx_pow_wq_int_pc_s {
996 		u64 reserved_60_63 : 4;
997 		u64 pc : 28;
998 		u64 reserved_28_31 : 4;
999 		u64 pc_thr : 20;
1000 		u64 reserved_0_7 : 8;
1001 	} s;
1002 	struct cvmx_pow_wq_int_pc_s cn30xx;
1003 	struct cvmx_pow_wq_int_pc_s cn31xx;
1004 	struct cvmx_pow_wq_int_pc_s cn38xx;
1005 	struct cvmx_pow_wq_int_pc_s cn38xxp2;
1006 	struct cvmx_pow_wq_int_pc_s cn50xx;
1007 	struct cvmx_pow_wq_int_pc_s cn52xx;
1008 	struct cvmx_pow_wq_int_pc_s cn52xxp1;
1009 	struct cvmx_pow_wq_int_pc_s cn56xx;
1010 	struct cvmx_pow_wq_int_pc_s cn56xxp1;
1011 	struct cvmx_pow_wq_int_pc_s cn58xx;
1012 	struct cvmx_pow_wq_int_pc_s cn58xxp1;
1013 	struct cvmx_pow_wq_int_pc_s cn61xx;
1014 	struct cvmx_pow_wq_int_pc_s cn63xx;
1015 	struct cvmx_pow_wq_int_pc_s cn63xxp1;
1016 	struct cvmx_pow_wq_int_pc_s cn66xx;
1017 	struct cvmx_pow_wq_int_pc_s cn70xx;
1018 	struct cvmx_pow_wq_int_pc_s cn70xxp1;
1019 	struct cvmx_pow_wq_int_pc_s cnf71xx;
1020 };
1021 
1022 typedef union cvmx_pow_wq_int_pc cvmx_pow_wq_int_pc_t;
1023 
1024 /**
1025  * cvmx_pow_wq_int_thr#
1026  *
1027  * Contains the thresholds for enabling and setting work queue interrupts.  For more information
1028  * regarding this register, see the interrupt section.
1029  * Note: Up to 4 of the POW's internal storage buffers can be allocated for hardware use and are
1030  * therefore not available for incoming work queue entries.  Additionally, any PP that is not in
1031  * the
1032  * NULL_NULL state consumes a buffer.  Thus in a 4 PP system, it is not advisable to set either
1033  * IQ_THR or DS_THR to greater than 512 - 4 - 4 = 504.  Doing so may prevent the interrupt from
1034  * ever triggering.
1035  */
1036 union cvmx_pow_wq_int_thrx {
1037 	u64 u64;
1038 	struct cvmx_pow_wq_int_thrx_s {
1039 		u64 reserved_29_63 : 35;
1040 		u64 tc_en : 1;
1041 		u64 tc_thr : 4;
1042 		u64 reserved_23_23 : 1;
1043 		u64 ds_thr : 11;
1044 		u64 reserved_11_11 : 1;
1045 		u64 iq_thr : 11;
1046 	} s;
1047 	struct cvmx_pow_wq_int_thrx_cn30xx {
1048 		u64 reserved_29_63 : 35;
1049 		u64 tc_en : 1;
1050 		u64 tc_thr : 4;
1051 		u64 reserved_18_23 : 6;
1052 		u64 ds_thr : 6;
1053 		u64 reserved_6_11 : 6;
1054 		u64 iq_thr : 6;
1055 	} cn30xx;
1056 	struct cvmx_pow_wq_int_thrx_cn31xx {
1057 		u64 reserved_29_63 : 35;
1058 		u64 tc_en : 1;
1059 		u64 tc_thr : 4;
1060 		u64 reserved_20_23 : 4;
1061 		u64 ds_thr : 8;
1062 		u64 reserved_8_11 : 4;
1063 		u64 iq_thr : 8;
1064 	} cn31xx;
1065 	struct cvmx_pow_wq_int_thrx_s cn38xx;
1066 	struct cvmx_pow_wq_int_thrx_s cn38xxp2;
1067 	struct cvmx_pow_wq_int_thrx_cn31xx cn50xx;
1068 	struct cvmx_pow_wq_int_thrx_cn52xx {
1069 		u64 reserved_29_63 : 35;
1070 		u64 tc_en : 1;
1071 		u64 tc_thr : 4;
1072 		u64 reserved_21_23 : 3;
1073 		u64 ds_thr : 9;
1074 		u64 reserved_9_11 : 3;
1075 		u64 iq_thr : 9;
1076 	} cn52xx;
1077 	struct cvmx_pow_wq_int_thrx_cn52xx cn52xxp1;
1078 	struct cvmx_pow_wq_int_thrx_s cn56xx;
1079 	struct cvmx_pow_wq_int_thrx_s cn56xxp1;
1080 	struct cvmx_pow_wq_int_thrx_s cn58xx;
1081 	struct cvmx_pow_wq_int_thrx_s cn58xxp1;
1082 	struct cvmx_pow_wq_int_thrx_cn52xx cn61xx;
1083 	struct cvmx_pow_wq_int_thrx_cn63xx {
1084 		u64 reserved_29_63 : 35;
1085 		u64 tc_en : 1;
1086 		u64 tc_thr : 4;
1087 		u64 reserved_22_23 : 2;
1088 		u64 ds_thr : 10;
1089 		u64 reserved_10_11 : 2;
1090 		u64 iq_thr : 10;
1091 	} cn63xx;
1092 	struct cvmx_pow_wq_int_thrx_cn63xx cn63xxp1;
1093 	struct cvmx_pow_wq_int_thrx_cn63xx cn66xx;
1094 	struct cvmx_pow_wq_int_thrx_cn52xx cn70xx;
1095 	struct cvmx_pow_wq_int_thrx_cn52xx cn70xxp1;
1096 	struct cvmx_pow_wq_int_thrx_cn52xx cnf71xx;
1097 };
1098 
1099 typedef union cvmx_pow_wq_int_thrx cvmx_pow_wq_int_thrx_t;
1100 
1101 /**
1102  * cvmx_pow_ws_pc#
1103  *
1104  * Counts the number of work schedules for each group.  Write to clear.
1105  *
1106  */
1107 union cvmx_pow_ws_pcx {
1108 	u64 u64;
1109 	struct cvmx_pow_ws_pcx_s {
1110 		u64 reserved_32_63 : 32;
1111 		u64 ws_pc : 32;
1112 	} s;
1113 	struct cvmx_pow_ws_pcx_s cn30xx;
1114 	struct cvmx_pow_ws_pcx_s cn31xx;
1115 	struct cvmx_pow_ws_pcx_s cn38xx;
1116 	struct cvmx_pow_ws_pcx_s cn38xxp2;
1117 	struct cvmx_pow_ws_pcx_s cn50xx;
1118 	struct cvmx_pow_ws_pcx_s cn52xx;
1119 	struct cvmx_pow_ws_pcx_s cn52xxp1;
1120 	struct cvmx_pow_ws_pcx_s cn56xx;
1121 	struct cvmx_pow_ws_pcx_s cn56xxp1;
1122 	struct cvmx_pow_ws_pcx_s cn58xx;
1123 	struct cvmx_pow_ws_pcx_s cn58xxp1;
1124 	struct cvmx_pow_ws_pcx_s cn61xx;
1125 	struct cvmx_pow_ws_pcx_s cn63xx;
1126 	struct cvmx_pow_ws_pcx_s cn63xxp1;
1127 	struct cvmx_pow_ws_pcx_s cn66xx;
1128 	struct cvmx_pow_ws_pcx_s cn70xx;
1129 	struct cvmx_pow_ws_pcx_s cn70xxp1;
1130 	struct cvmx_pow_ws_pcx_s cnf71xx;
1131 };
1132 
1133 typedef union cvmx_pow_ws_pcx cvmx_pow_ws_pcx_t;
1134 
1135 #endif
1136