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 */
41union 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
179typedef 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 */
187union 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
213typedef 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 */
248union 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
295typedef 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 */
303union 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
329typedef 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 */
337union 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
363typedef 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 */
372union 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
391typedef 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 */
399union 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
418typedef 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 */
426union 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
445typedef 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 */
453union 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
491typedef 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 */
531union 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
557typedef 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 */
566union 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
588typedef 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 */
605union 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
642typedef 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 */
660union 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
689typedef 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 */
705union 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
781typedef 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 */
789union 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
815typedef 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 */
823union 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
849typedef 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 */
857union 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
883typedef 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 */
892union 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
919typedef 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 */
927union 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
983typedef 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 */
993union 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
1022typedef 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 */
1036union 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
1099typedef 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 */
1107union 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
1133typedef union cvmx_pow_ws_pcx cvmx_pow_ws_pcx_t;
1134
1135#endif
1136