]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/contrib/octeon-sdk/cvmx-pow-defs.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / contrib / octeon-sdk / cvmx-pow-defs.h
1 /***********************license start***************
2  * Copyright (c) 2003-2010  Cavium Networks (support@cavium.com). All rights
3  * reserved.
4  *
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  *   * Redistributions of source code must retain the above copyright
11  *     notice, this list of conditions and the following disclaimer.
12  *
13  *   * Redistributions in binary form must reproduce the above
14  *     copyright notice, this list of conditions and the following
15  *     disclaimer in the documentation and/or other materials provided
16  *     with the distribution.
17
18  *   * Neither the name of Cavium Networks nor the names of
19  *     its contributors may be used to endorse or promote products
20  *     derived from this software without specific prior written
21  *     permission.
22
23  * This Software, including technical data, may be subject to U.S. export  control
24  * laws, including the U.S. Export Administration Act and its  associated
25  * regulations, and may be subject to export or import  regulations in other
26  * countries.
27
28  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29  * AND WITH ALL FAULTS AND CAVIUM  NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
30  * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31  * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32  * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33  * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34  * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35  * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36  * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37  * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38  ***********************license end**************************************/
39
40
41 /**
42  * cvmx-pow-defs.h
43  *
44  * Configuration and status register (CSR) type definitions for
45  * Octeon pow.
46  *
47  * This file is auto generated. Do not edit.
48  *
49  * <hr>$Revision$<hr>
50  *
51  */
52 #ifndef __CVMX_POW_TYPEDEFS_H__
53 #define __CVMX_POW_TYPEDEFS_H__
54
55 #define CVMX_POW_BIST_STAT (CVMX_ADD_IO_SEG(0x00016700000003F8ull))
56 #define CVMX_POW_DS_PC (CVMX_ADD_IO_SEG(0x0001670000000398ull))
57 #define CVMX_POW_ECC_ERR (CVMX_ADD_IO_SEG(0x0001670000000218ull))
58 #define CVMX_POW_INT_CTL (CVMX_ADD_IO_SEG(0x0001670000000220ull))
59 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
60 static inline uint64_t CVMX_POW_IQ_CNTX(unsigned long offset)
61 {
62         if (!(
63               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
64               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
65               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
66               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
67               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
68               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
69               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
70               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
71                 cvmx_warn("CVMX_POW_IQ_CNTX(%lu) is invalid on this chip\n", offset);
72         return CVMX_ADD_IO_SEG(0x0001670000000340ull) + ((offset) & 7) * 8;
73 }
74 #else
75 #define CVMX_POW_IQ_CNTX(offset) (CVMX_ADD_IO_SEG(0x0001670000000340ull) + ((offset) & 7) * 8)
76 #endif
77 #define CVMX_POW_IQ_COM_CNT (CVMX_ADD_IO_SEG(0x0001670000000388ull))
78 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
79 #define CVMX_POW_IQ_INT CVMX_POW_IQ_INT_FUNC()
80 static inline uint64_t CVMX_POW_IQ_INT_FUNC(void)
81 {
82         if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
83                 cvmx_warn("CVMX_POW_IQ_INT not supported on this chip\n");
84         return CVMX_ADD_IO_SEG(0x0001670000000238ull);
85 }
86 #else
87 #define CVMX_POW_IQ_INT (CVMX_ADD_IO_SEG(0x0001670000000238ull))
88 #endif
89 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
90 #define CVMX_POW_IQ_INT_EN CVMX_POW_IQ_INT_EN_FUNC()
91 static inline uint64_t CVMX_POW_IQ_INT_EN_FUNC(void)
92 {
93         if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
94                 cvmx_warn("CVMX_POW_IQ_INT_EN not supported on this chip\n");
95         return CVMX_ADD_IO_SEG(0x0001670000000240ull);
96 }
97 #else
98 #define CVMX_POW_IQ_INT_EN (CVMX_ADD_IO_SEG(0x0001670000000240ull))
99 #endif
100 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
101 static inline uint64_t CVMX_POW_IQ_THRX(unsigned long offset)
102 {
103         if (!(
104               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
105               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
106               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
107                 cvmx_warn("CVMX_POW_IQ_THRX(%lu) is invalid on this chip\n", offset);
108         return CVMX_ADD_IO_SEG(0x00016700000003A0ull) + ((offset) & 7) * 8;
109 }
110 #else
111 #define CVMX_POW_IQ_THRX(offset) (CVMX_ADD_IO_SEG(0x00016700000003A0ull) + ((offset) & 7) * 8)
112 #endif
113 #define CVMX_POW_NOS_CNT (CVMX_ADD_IO_SEG(0x0001670000000228ull))
114 #define CVMX_POW_NW_TIM (CVMX_ADD_IO_SEG(0x0001670000000210ull))
115 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
116 #define CVMX_POW_PF_RST_MSK CVMX_POW_PF_RST_MSK_FUNC()
117 static inline uint64_t CVMX_POW_PF_RST_MSK_FUNC(void)
118 {
119         if (!(OCTEON_IS_MODEL(OCTEON_CN5XXX) || OCTEON_IS_MODEL(OCTEON_CN63XX)))
120                 cvmx_warn("CVMX_POW_PF_RST_MSK not supported on this chip\n");
121         return CVMX_ADD_IO_SEG(0x0001670000000230ull);
122 }
123 #else
124 #define CVMX_POW_PF_RST_MSK (CVMX_ADD_IO_SEG(0x0001670000000230ull))
125 #endif
126 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
127 static inline uint64_t CVMX_POW_PP_GRP_MSKX(unsigned long offset)
128 {
129         if (!(
130               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) ||
131               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) ||
132               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 15))) ||
133               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) ||
134               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
135               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 11))) ||
136               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 15))) ||
137               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5)))))
138                 cvmx_warn("CVMX_POW_PP_GRP_MSKX(%lu) is invalid on this chip\n", offset);
139         return CVMX_ADD_IO_SEG(0x0001670000000000ull) + ((offset) & 15) * 8;
140 }
141 #else
142 #define CVMX_POW_PP_GRP_MSKX(offset) (CVMX_ADD_IO_SEG(0x0001670000000000ull) + ((offset) & 15) * 8)
143 #endif
144 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
145 static inline uint64_t CVMX_POW_QOS_RNDX(unsigned long offset)
146 {
147         if (!(
148               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
149               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
150               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
151               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
152               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
153               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
154               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
155               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
156                 cvmx_warn("CVMX_POW_QOS_RNDX(%lu) is invalid on this chip\n", offset);
157         return CVMX_ADD_IO_SEG(0x00016700000001C0ull) + ((offset) & 7) * 8;
158 }
159 #else
160 #define CVMX_POW_QOS_RNDX(offset) (CVMX_ADD_IO_SEG(0x00016700000001C0ull) + ((offset) & 7) * 8)
161 #endif
162 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
163 static inline uint64_t CVMX_POW_QOS_THRX(unsigned long offset)
164 {
165         if (!(
166               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
167               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
168               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
169               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
170               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
171               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
172               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
173               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
174                 cvmx_warn("CVMX_POW_QOS_THRX(%lu) is invalid on this chip\n", offset);
175         return CVMX_ADD_IO_SEG(0x0001670000000180ull) + ((offset) & 7) * 8;
176 }
177 #else
178 #define CVMX_POW_QOS_THRX(offset) (CVMX_ADD_IO_SEG(0x0001670000000180ull) + ((offset) & 7) * 8)
179 #endif
180 #define CVMX_POW_TS_PC (CVMX_ADD_IO_SEG(0x0001670000000390ull))
181 #define CVMX_POW_WA_COM_PC (CVMX_ADD_IO_SEG(0x0001670000000380ull))
182 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
183 static inline uint64_t CVMX_POW_WA_PCX(unsigned long offset)
184 {
185         if (!(
186               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 7))) ||
187               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 7))) ||
188               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 7))) ||
189               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 7))) ||
190               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 7))) ||
191               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 7))) ||
192               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 7))) ||
193               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 7)))))
194                 cvmx_warn("CVMX_POW_WA_PCX(%lu) is invalid on this chip\n", offset);
195         return CVMX_ADD_IO_SEG(0x0001670000000300ull) + ((offset) & 7) * 8;
196 }
197 #else
198 #define CVMX_POW_WA_PCX(offset) (CVMX_ADD_IO_SEG(0x0001670000000300ull) + ((offset) & 7) * 8)
199 #endif
200 #define CVMX_POW_WQ_INT (CVMX_ADD_IO_SEG(0x0001670000000200ull))
201 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
202 static inline uint64_t CVMX_POW_WQ_INT_CNTX(unsigned long offset)
203 {
204         if (!(
205               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 15))) ||
206               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 15))) ||
207               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 15))) ||
208               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 15))) ||
209               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 15))) ||
210               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 15))) ||
211               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 15))) ||
212               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 15)))))
213                 cvmx_warn("CVMX_POW_WQ_INT_CNTX(%lu) is invalid on this chip\n", offset);
214         return CVMX_ADD_IO_SEG(0x0001670000000100ull) + ((offset) & 15) * 8;
215 }
216 #else
217 #define CVMX_POW_WQ_INT_CNTX(offset) (CVMX_ADD_IO_SEG(0x0001670000000100ull) + ((offset) & 15) * 8)
218 #endif
219 #define CVMX_POW_WQ_INT_PC (CVMX_ADD_IO_SEG(0x0001670000000208ull))
220 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
221 static inline uint64_t CVMX_POW_WQ_INT_THRX(unsigned long offset)
222 {
223         if (!(
224               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 15))) ||
225               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 15))) ||
226               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 15))) ||
227               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 15))) ||
228               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 15))) ||
229               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 15))) ||
230               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 15))) ||
231               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 15)))))
232                 cvmx_warn("CVMX_POW_WQ_INT_THRX(%lu) is invalid on this chip\n", offset);
233         return CVMX_ADD_IO_SEG(0x0001670000000080ull) + ((offset) & 15) * 8;
234 }
235 #else
236 #define CVMX_POW_WQ_INT_THRX(offset) (CVMX_ADD_IO_SEG(0x0001670000000080ull) + ((offset) & 15) * 8)
237 #endif
238 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
239 static inline uint64_t CVMX_POW_WS_PCX(unsigned long offset)
240 {
241         if (!(
242               (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 15))) ||
243               (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 15))) ||
244               (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 15))) ||
245               (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 15))) ||
246               (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 15))) ||
247               (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 15))) ||
248               (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 15))) ||
249               (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 15)))))
250                 cvmx_warn("CVMX_POW_WS_PCX(%lu) is invalid on this chip\n", offset);
251         return CVMX_ADD_IO_SEG(0x0001670000000280ull) + ((offset) & 15) * 8;
252 }
253 #else
254 #define CVMX_POW_WS_PCX(offset) (CVMX_ADD_IO_SEG(0x0001670000000280ull) + ((offset) & 15) * 8)
255 #endif
256
257 /**
258  * cvmx_pow_bist_stat
259  *
260  * POW_BIST_STAT = POW BIST Status Register
261  *
262  * Contains the BIST status for the POW memories ('0' = pass, '1' = fail).
263  *
264  * Also contains the BIST status for the PP's.  Each bit in the PP field is the OR of all BIST
265  * results for the corresponding physical PP ('0' = pass, '1' = fail).
266  */
267 union cvmx_pow_bist_stat
268 {
269         uint64_t u64;
270         struct cvmx_pow_bist_stat_s
271         {
272 #if __BYTE_ORDER == __BIG_ENDIAN
273         uint64_t reserved_32_63               : 32;
274         uint64_t pp                           : 16; /**< Physical PP BIST status */
275         uint64_t reserved_0_15                : 16;
276 #else
277         uint64_t reserved_0_15                : 16;
278         uint64_t pp                           : 16;
279         uint64_t reserved_32_63               : 32;
280 #endif
281         } s;
282         struct cvmx_pow_bist_stat_cn30xx
283         {
284 #if __BYTE_ORDER == __BIG_ENDIAN
285         uint64_t reserved_17_63               : 47;
286         uint64_t pp                           : 1;  /**< Physical PP BIST status */
287         uint64_t reserved_9_15                : 7;
288         uint64_t cam                          : 1;  /**< POW CAM BIST status */
289         uint64_t nbt1                         : 1;  /**< NCB transmitter memory 1 BIST status */
290         uint64_t nbt0                         : 1;  /**< NCB transmitter memory 0 BIST status */
291         uint64_t index                        : 1;  /**< Index memory BIST status */
292         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
293         uint64_t nbr1                         : 1;  /**< NCB receiver memory 1 BIST status */
294         uint64_t nbr0                         : 1;  /**< NCB receiver memory 0 BIST status */
295         uint64_t pend                         : 1;  /**< Pending switch memory BIST status */
296         uint64_t adr                          : 1;  /**< Address memory BIST status */
297 #else
298         uint64_t adr                          : 1;
299         uint64_t pend                         : 1;
300         uint64_t nbr0                         : 1;
301         uint64_t nbr1                         : 1;
302         uint64_t fidx                         : 1;
303         uint64_t index                        : 1;
304         uint64_t nbt0                         : 1;
305         uint64_t nbt1                         : 1;
306         uint64_t cam                          : 1;
307         uint64_t reserved_9_15                : 7;
308         uint64_t pp                           : 1;
309         uint64_t reserved_17_63               : 47;
310 #endif
311         } cn30xx;
312         struct cvmx_pow_bist_stat_cn31xx
313         {
314 #if __BYTE_ORDER == __BIG_ENDIAN
315         uint64_t reserved_18_63               : 46;
316         uint64_t pp                           : 2;  /**< Physical PP BIST status */
317         uint64_t reserved_9_15                : 7;
318         uint64_t cam                          : 1;  /**< POW CAM BIST status */
319         uint64_t nbt1                         : 1;  /**< NCB transmitter memory 1 BIST status */
320         uint64_t nbt0                         : 1;  /**< NCB transmitter memory 0 BIST status */
321         uint64_t index                        : 1;  /**< Index memory BIST status */
322         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
323         uint64_t nbr1                         : 1;  /**< NCB receiver memory 1 BIST status */
324         uint64_t nbr0                         : 1;  /**< NCB receiver memory 0 BIST status */
325         uint64_t pend                         : 1;  /**< Pending switch memory BIST status */
326         uint64_t adr                          : 1;  /**< Address memory BIST status */
327 #else
328         uint64_t adr                          : 1;
329         uint64_t pend                         : 1;
330         uint64_t nbr0                         : 1;
331         uint64_t nbr1                         : 1;
332         uint64_t fidx                         : 1;
333         uint64_t index                        : 1;
334         uint64_t nbt0                         : 1;
335         uint64_t nbt1                         : 1;
336         uint64_t cam                          : 1;
337         uint64_t reserved_9_15                : 7;
338         uint64_t pp                           : 2;
339         uint64_t reserved_18_63               : 46;
340 #endif
341         } cn31xx;
342         struct cvmx_pow_bist_stat_cn38xx
343         {
344 #if __BYTE_ORDER == __BIG_ENDIAN
345         uint64_t reserved_32_63               : 32;
346         uint64_t pp                           : 16; /**< Physical PP BIST status */
347         uint64_t reserved_10_15               : 6;
348         uint64_t cam                          : 1;  /**< POW CAM BIST status */
349         uint64_t nbt                          : 1;  /**< NCB transmitter memory BIST status */
350         uint64_t index                        : 1;  /**< Index memory BIST status */
351         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
352         uint64_t nbr1                         : 1;  /**< NCB receiver memory 1 BIST status */
353         uint64_t nbr0                         : 1;  /**< NCB receiver memory 0 BIST status */
354         uint64_t pend1                        : 1;  /**< Pending switch memory 1 BIST status */
355         uint64_t pend0                        : 1;  /**< Pending switch memory 0 BIST status */
356         uint64_t adr1                         : 1;  /**< Address memory 1 BIST status */
357         uint64_t adr0                         : 1;  /**< Address memory 0 BIST status */
358 #else
359         uint64_t adr0                         : 1;
360         uint64_t adr1                         : 1;
361         uint64_t pend0                        : 1;
362         uint64_t pend1                        : 1;
363         uint64_t nbr0                         : 1;
364         uint64_t nbr1                         : 1;
365         uint64_t fidx                         : 1;
366         uint64_t index                        : 1;
367         uint64_t nbt                          : 1;
368         uint64_t cam                          : 1;
369         uint64_t reserved_10_15               : 6;
370         uint64_t pp                           : 16;
371         uint64_t reserved_32_63               : 32;
372 #endif
373         } cn38xx;
374         struct cvmx_pow_bist_stat_cn38xx      cn38xxp2;
375         struct cvmx_pow_bist_stat_cn31xx      cn50xx;
376         struct cvmx_pow_bist_stat_cn52xx
377         {
378 #if __BYTE_ORDER == __BIG_ENDIAN
379         uint64_t reserved_20_63               : 44;
380         uint64_t pp                           : 4;  /**< Physical PP BIST status */
381         uint64_t reserved_9_15                : 7;
382         uint64_t cam                          : 1;  /**< POW CAM BIST status */
383         uint64_t nbt1                         : 1;  /**< NCB transmitter memory 1 BIST status */
384         uint64_t nbt0                         : 1;  /**< NCB transmitter memory 0 BIST status */
385         uint64_t index                        : 1;  /**< Index memory BIST status */
386         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
387         uint64_t nbr1                         : 1;  /**< NCB receiver memory 1 BIST status */
388         uint64_t nbr0                         : 1;  /**< NCB receiver memory 0 BIST status */
389         uint64_t pend                         : 1;  /**< Pending switch memory BIST status */
390         uint64_t adr                          : 1;  /**< Address memory BIST status */
391 #else
392         uint64_t adr                          : 1;
393         uint64_t pend                         : 1;
394         uint64_t nbr0                         : 1;
395         uint64_t nbr1                         : 1;
396         uint64_t fidx                         : 1;
397         uint64_t index                        : 1;
398         uint64_t nbt0                         : 1;
399         uint64_t nbt1                         : 1;
400         uint64_t cam                          : 1;
401         uint64_t reserved_9_15                : 7;
402         uint64_t pp                           : 4;
403         uint64_t reserved_20_63               : 44;
404 #endif
405         } cn52xx;
406         struct cvmx_pow_bist_stat_cn52xx      cn52xxp1;
407         struct cvmx_pow_bist_stat_cn56xx
408         {
409 #if __BYTE_ORDER == __BIG_ENDIAN
410         uint64_t reserved_28_63               : 36;
411         uint64_t pp                           : 12; /**< Physical PP BIST status */
412         uint64_t reserved_10_15               : 6;
413         uint64_t cam                          : 1;  /**< POW CAM BIST status */
414         uint64_t nbt                          : 1;  /**< NCB transmitter memory BIST status */
415         uint64_t index                        : 1;  /**< Index memory BIST status */
416         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
417         uint64_t nbr1                         : 1;  /**< NCB receiver memory 1 BIST status */
418         uint64_t nbr0                         : 1;  /**< NCB receiver memory 0 BIST status */
419         uint64_t pend1                        : 1;  /**< Pending switch memory 1 BIST status */
420         uint64_t pend0                        : 1;  /**< Pending switch memory 0 BIST status */
421         uint64_t adr1                         : 1;  /**< Address memory 1 BIST status */
422         uint64_t adr0                         : 1;  /**< Address memory 0 BIST status */
423 #else
424         uint64_t adr0                         : 1;
425         uint64_t adr1                         : 1;
426         uint64_t pend0                        : 1;
427         uint64_t pend1                        : 1;
428         uint64_t nbr0                         : 1;
429         uint64_t nbr1                         : 1;
430         uint64_t fidx                         : 1;
431         uint64_t index                        : 1;
432         uint64_t nbt                          : 1;
433         uint64_t cam                          : 1;
434         uint64_t reserved_10_15               : 6;
435         uint64_t pp                           : 12;
436         uint64_t reserved_28_63               : 36;
437 #endif
438         } cn56xx;
439         struct cvmx_pow_bist_stat_cn56xx      cn56xxp1;
440         struct cvmx_pow_bist_stat_cn38xx      cn58xx;
441         struct cvmx_pow_bist_stat_cn38xx      cn58xxp1;
442         struct cvmx_pow_bist_stat_cn63xx
443         {
444 #if __BYTE_ORDER == __BIG_ENDIAN
445         uint64_t reserved_22_63               : 42;
446         uint64_t pp                           : 6;  /**< Physical PP BIST status */
447         uint64_t reserved_12_15               : 4;
448         uint64_t cam                          : 1;  /**< POW CAM BIST status */
449         uint64_t nbr                          : 3;  /**< NCB receiver memory BIST status */
450         uint64_t nbt                          : 4;  /**< NCB transmitter memory BIST status */
451         uint64_t index                        : 1;  /**< Index memory BIST status */
452         uint64_t fidx                         : 1;  /**< Forward index memory BIST status */
453         uint64_t pend                         : 1;  /**< Pending switch memory BIST status */
454         uint64_t adr                          : 1;  /**< Address memory BIST status */
455 #else
456         uint64_t adr                          : 1;
457         uint64_t pend                         : 1;
458         uint64_t fidx                         : 1;
459         uint64_t index                        : 1;
460         uint64_t nbt                          : 4;
461         uint64_t nbr                          : 3;
462         uint64_t cam                          : 1;
463         uint64_t reserved_12_15               : 4;
464         uint64_t pp                           : 6;
465         uint64_t reserved_22_63               : 42;
466 #endif
467         } cn63xx;
468         struct cvmx_pow_bist_stat_cn63xx      cn63xxp1;
469 };
470 typedef union cvmx_pow_bist_stat cvmx_pow_bist_stat_t;
471
472 /**
473  * cvmx_pow_ds_pc
474  *
475  * POW_DS_PC = POW De-Schedule Performance Counter
476  *
477  * Counts the number of de-schedule requests.  Write to clear.
478  */
479 union cvmx_pow_ds_pc
480 {
481         uint64_t u64;
482         struct cvmx_pow_ds_pc_s
483         {
484 #if __BYTE_ORDER == __BIG_ENDIAN
485         uint64_t reserved_32_63               : 32;
486         uint64_t ds_pc                        : 32; /**< De-schedule performance counter */
487 #else
488         uint64_t ds_pc                        : 32;
489         uint64_t reserved_32_63               : 32;
490 #endif
491         } s;
492         struct cvmx_pow_ds_pc_s               cn30xx;
493         struct cvmx_pow_ds_pc_s               cn31xx;
494         struct cvmx_pow_ds_pc_s               cn38xx;
495         struct cvmx_pow_ds_pc_s               cn38xxp2;
496         struct cvmx_pow_ds_pc_s               cn50xx;
497         struct cvmx_pow_ds_pc_s               cn52xx;
498         struct cvmx_pow_ds_pc_s               cn52xxp1;
499         struct cvmx_pow_ds_pc_s               cn56xx;
500         struct cvmx_pow_ds_pc_s               cn56xxp1;
501         struct cvmx_pow_ds_pc_s               cn58xx;
502         struct cvmx_pow_ds_pc_s               cn58xxp1;
503         struct cvmx_pow_ds_pc_s               cn63xx;
504         struct cvmx_pow_ds_pc_s               cn63xxp1;
505 };
506 typedef union cvmx_pow_ds_pc cvmx_pow_ds_pc_t;
507
508 /**
509  * cvmx_pow_ecc_err
510  *
511  * POW_ECC_ERR = POW ECC Error Register
512  *
513  * Contains the single and double error bits and the corresponding interrupt enables for the ECC-
514  * protected POW index memory.  Also contains the syndrome value in the event of an ECC error.
515  *
516  * Also contains the remote pointer error bit and interrupt enable.  RPE is set when the POW detected
517  * corruption on one or more of the input queue lists in L2/DRAM (POW's local copy of the tail pointer
518  * for the L2/DRAM input queue did not match the last entry on the the list).   This is caused by
519  * L2/DRAM corruption, and is generally a fatal error because it likely caused POW to load bad work
520  * queue entries.
521  *
522  * This register also contains the illegal operation error bits and the corresponding interrupt
523  * enables as follows:
524  *
525  *  <0> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL_NULL state
526  *  <1> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL state
527  *  <2> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK from PP with pending tag switch to ORDERED or ATOMIC
528  *  <3> Received SWTAG/SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL_NULL
529  *  <4> Received SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL
530  *  <5> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with GET_WORK pending
531  *  <6> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with NULL_RD pending
532  *  <7> Received CLR_NSCHED from PP with SWTAG_DESCH/DESCH/CLR_NSCHED pending
533  *  <8> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with CLR_NSCHED pending
534  *  <9> Received illegal opcode
535  * <10> Received ADD_WORK with tag specified as NULL_NULL
536  * <11> Received DBG load from PP with DBG load pending
537  * <12> Received CSR load from PP with CSR load pending
538  */
539 union cvmx_pow_ecc_err
540 {
541         uint64_t u64;
542         struct cvmx_pow_ecc_err_s
543         {
544 #if __BYTE_ORDER == __BIG_ENDIAN
545         uint64_t reserved_45_63               : 19;
546         uint64_t iop_ie                       : 13; /**< Illegal operation interrupt enables */
547         uint64_t reserved_29_31               : 3;
548         uint64_t iop                          : 13; /**< Illegal operation errors */
549         uint64_t reserved_14_15               : 2;
550         uint64_t rpe_ie                       : 1;  /**< Remote pointer error interrupt enable */
551         uint64_t rpe                          : 1;  /**< Remote pointer error */
552         uint64_t reserved_9_11                : 3;
553         uint64_t syn                          : 5;  /**< Syndrome value (only valid when DBE or SBE is set) */
554         uint64_t dbe_ie                       : 1;  /**< Double bit error interrupt enable */
555         uint64_t sbe_ie                       : 1;  /**< Single bit error interrupt enable */
556         uint64_t dbe                          : 1;  /**< Double bit error */
557         uint64_t sbe                          : 1;  /**< Single bit error */
558 #else
559         uint64_t sbe                          : 1;
560         uint64_t dbe                          : 1;
561         uint64_t sbe_ie                       : 1;
562         uint64_t dbe_ie                       : 1;
563         uint64_t syn                          : 5;
564         uint64_t reserved_9_11                : 3;
565         uint64_t rpe                          : 1;
566         uint64_t rpe_ie                       : 1;
567         uint64_t reserved_14_15               : 2;
568         uint64_t iop                          : 13;
569         uint64_t reserved_29_31               : 3;
570         uint64_t iop_ie                       : 13;
571         uint64_t reserved_45_63               : 19;
572 #endif
573         } s;
574         struct cvmx_pow_ecc_err_s             cn30xx;
575         struct cvmx_pow_ecc_err_cn31xx
576         {
577 #if __BYTE_ORDER == __BIG_ENDIAN
578         uint64_t reserved_14_63               : 50;
579         uint64_t rpe_ie                       : 1;  /**< Remote pointer error interrupt enable */
580         uint64_t rpe                          : 1;  /**< Remote pointer error */
581         uint64_t reserved_9_11                : 3;
582         uint64_t syn                          : 5;  /**< Syndrome value (only valid when DBE or SBE is set) */
583         uint64_t dbe_ie                       : 1;  /**< Double bit error interrupt enable */
584         uint64_t sbe_ie                       : 1;  /**< Single bit error interrupt enable */
585         uint64_t dbe                          : 1;  /**< Double bit error */
586         uint64_t sbe                          : 1;  /**< Single bit error */
587 #else
588         uint64_t sbe                          : 1;
589         uint64_t dbe                          : 1;
590         uint64_t sbe_ie                       : 1;
591         uint64_t dbe_ie                       : 1;
592         uint64_t syn                          : 5;
593         uint64_t reserved_9_11                : 3;
594         uint64_t rpe                          : 1;
595         uint64_t rpe_ie                       : 1;
596         uint64_t reserved_14_63               : 50;
597 #endif
598         } cn31xx;
599         struct cvmx_pow_ecc_err_s             cn38xx;
600         struct cvmx_pow_ecc_err_cn31xx        cn38xxp2;
601         struct cvmx_pow_ecc_err_s             cn50xx;
602         struct cvmx_pow_ecc_err_s             cn52xx;
603         struct cvmx_pow_ecc_err_s             cn52xxp1;
604         struct cvmx_pow_ecc_err_s             cn56xx;
605         struct cvmx_pow_ecc_err_s             cn56xxp1;
606         struct cvmx_pow_ecc_err_s             cn58xx;
607         struct cvmx_pow_ecc_err_s             cn58xxp1;
608         struct cvmx_pow_ecc_err_s             cn63xx;
609         struct cvmx_pow_ecc_err_s             cn63xxp1;
610 };
611 typedef union cvmx_pow_ecc_err cvmx_pow_ecc_err_t;
612
613 /**
614  * cvmx_pow_int_ctl
615  *
616  * POW_INT_CTL = POW Internal Control Register
617  *
618  * Contains POW internal control values (for internal use, not typically for customer use):
619  *
620  * PFR_DIS = Disable high-performance pre-fetch reset mode.
621  *
622  * NBR_THR = Assert ncb__busy when the number of remaining coherent bus NBR credits equals is less
623  * than or equal to this value.
624  */
625 union cvmx_pow_int_ctl
626 {
627         uint64_t u64;
628         struct cvmx_pow_int_ctl_s
629         {
630 #if __BYTE_ORDER == __BIG_ENDIAN
631         uint64_t reserved_6_63                : 58;
632         uint64_t pfr_dis                      : 1;  /**< High-perf pre-fetch reset mode disable */
633         uint64_t nbr_thr                      : 5;  /**< NBR busy threshold */
634 #else
635         uint64_t nbr_thr                      : 5;
636         uint64_t pfr_dis                      : 1;
637         uint64_t reserved_6_63                : 58;
638 #endif
639         } s;
640         struct cvmx_pow_int_ctl_s             cn30xx;
641         struct cvmx_pow_int_ctl_s             cn31xx;
642         struct cvmx_pow_int_ctl_s             cn38xx;
643         struct cvmx_pow_int_ctl_s             cn38xxp2;
644         struct cvmx_pow_int_ctl_s             cn50xx;
645         struct cvmx_pow_int_ctl_s             cn52xx;
646         struct cvmx_pow_int_ctl_s             cn52xxp1;
647         struct cvmx_pow_int_ctl_s             cn56xx;
648         struct cvmx_pow_int_ctl_s             cn56xxp1;
649         struct cvmx_pow_int_ctl_s             cn58xx;
650         struct cvmx_pow_int_ctl_s             cn58xxp1;
651         struct cvmx_pow_int_ctl_s             cn63xx;
652         struct cvmx_pow_int_ctl_s             cn63xxp1;
653 };
654 typedef union cvmx_pow_int_ctl cvmx_pow_int_ctl_t;
655
656 /**
657  * cvmx_pow_iq_cnt#
658  *
659  * POW_IQ_CNTX = POW Input Queue Count Register (1 per QOS level)
660  *
661  * Contains a read-only count of the number of work queue entries for each QOS level.
662  */
663 union cvmx_pow_iq_cntx
664 {
665         uint64_t u64;
666         struct cvmx_pow_iq_cntx_s
667         {
668 #if __BYTE_ORDER == __BIG_ENDIAN
669         uint64_t reserved_32_63               : 32;
670         uint64_t iq_cnt                       : 32; /**< Input queue count for QOS level X */
671 #else
672         uint64_t iq_cnt                       : 32;
673         uint64_t reserved_32_63               : 32;
674 #endif
675         } s;
676         struct cvmx_pow_iq_cntx_s             cn30xx;
677         struct cvmx_pow_iq_cntx_s             cn31xx;
678         struct cvmx_pow_iq_cntx_s             cn38xx;
679         struct cvmx_pow_iq_cntx_s             cn38xxp2;
680         struct cvmx_pow_iq_cntx_s             cn50xx;
681         struct cvmx_pow_iq_cntx_s             cn52xx;
682         struct cvmx_pow_iq_cntx_s             cn52xxp1;
683         struct cvmx_pow_iq_cntx_s             cn56xx;
684         struct cvmx_pow_iq_cntx_s             cn56xxp1;
685         struct cvmx_pow_iq_cntx_s             cn58xx;
686         struct cvmx_pow_iq_cntx_s             cn58xxp1;
687         struct cvmx_pow_iq_cntx_s             cn63xx;
688         struct cvmx_pow_iq_cntx_s             cn63xxp1;
689 };
690 typedef union cvmx_pow_iq_cntx cvmx_pow_iq_cntx_t;
691
692 /**
693  * cvmx_pow_iq_com_cnt
694  *
695  * POW_IQ_COM_CNT = POW Input Queue Combined Count Register
696  *
697  * Contains a read-only count of the total number of work queue entries in all QOS levels.
698  */
699 union cvmx_pow_iq_com_cnt
700 {
701         uint64_t u64;
702         struct cvmx_pow_iq_com_cnt_s
703         {
704 #if __BYTE_ORDER == __BIG_ENDIAN
705         uint64_t reserved_32_63               : 32;
706         uint64_t iq_cnt                       : 32; /**< Input queue combined count */
707 #else
708         uint64_t iq_cnt                       : 32;
709         uint64_t reserved_32_63               : 32;
710 #endif
711         } s;
712         struct cvmx_pow_iq_com_cnt_s          cn30xx;
713         struct cvmx_pow_iq_com_cnt_s          cn31xx;
714         struct cvmx_pow_iq_com_cnt_s          cn38xx;
715         struct cvmx_pow_iq_com_cnt_s          cn38xxp2;
716         struct cvmx_pow_iq_com_cnt_s          cn50xx;
717         struct cvmx_pow_iq_com_cnt_s          cn52xx;
718         struct cvmx_pow_iq_com_cnt_s          cn52xxp1;
719         struct cvmx_pow_iq_com_cnt_s          cn56xx;
720         struct cvmx_pow_iq_com_cnt_s          cn56xxp1;
721         struct cvmx_pow_iq_com_cnt_s          cn58xx;
722         struct cvmx_pow_iq_com_cnt_s          cn58xxp1;
723         struct cvmx_pow_iq_com_cnt_s          cn63xx;
724         struct cvmx_pow_iq_com_cnt_s          cn63xxp1;
725 };
726 typedef union cvmx_pow_iq_com_cnt cvmx_pow_iq_com_cnt_t;
727
728 /**
729  * cvmx_pow_iq_int
730  *
731  * POW_IQ_INT = POW Input Queue Interrupt Register
732  *
733  * Contains the bits (1 per QOS level) that can trigger the input queue interrupt.  An IQ_INT bit
734  * will be set if POW_IQ_CNT#QOS# changes and the resulting value is equal to POW_IQ_THR#QOS#.
735  */
736 union cvmx_pow_iq_int
737 {
738         uint64_t u64;
739         struct cvmx_pow_iq_int_s
740         {
741 #if __BYTE_ORDER == __BIG_ENDIAN
742         uint64_t reserved_8_63                : 56;
743         uint64_t iq_int                       : 8;  /**< Input queue interrupt bits */
744 #else
745         uint64_t iq_int                       : 8;
746         uint64_t reserved_8_63                : 56;
747 #endif
748         } s;
749         struct cvmx_pow_iq_int_s              cn52xx;
750         struct cvmx_pow_iq_int_s              cn52xxp1;
751         struct cvmx_pow_iq_int_s              cn56xx;
752         struct cvmx_pow_iq_int_s              cn56xxp1;
753         struct cvmx_pow_iq_int_s              cn63xx;
754         struct cvmx_pow_iq_int_s              cn63xxp1;
755 };
756 typedef union cvmx_pow_iq_int cvmx_pow_iq_int_t;
757
758 /**
759  * cvmx_pow_iq_int_en
760  *
761  * POW_IQ_INT_EN = POW Input Queue Interrupt Enable Register
762  *
763  * Contains the bits (1 per QOS level) that enable the input queue interrupt.
764  */
765 union cvmx_pow_iq_int_en
766 {
767         uint64_t u64;
768         struct cvmx_pow_iq_int_en_s
769         {
770 #if __BYTE_ORDER == __BIG_ENDIAN
771         uint64_t reserved_8_63                : 56;
772         uint64_t int_en                       : 8;  /**< Input queue interrupt enable bits */
773 #else
774         uint64_t int_en                       : 8;
775         uint64_t reserved_8_63                : 56;
776 #endif
777         } s;
778         struct cvmx_pow_iq_int_en_s           cn52xx;
779         struct cvmx_pow_iq_int_en_s           cn52xxp1;
780         struct cvmx_pow_iq_int_en_s           cn56xx;
781         struct cvmx_pow_iq_int_en_s           cn56xxp1;
782         struct cvmx_pow_iq_int_en_s           cn63xx;
783         struct cvmx_pow_iq_int_en_s           cn63xxp1;
784 };
785 typedef union cvmx_pow_iq_int_en cvmx_pow_iq_int_en_t;
786
787 /**
788  * cvmx_pow_iq_thr#
789  *
790  * POW_IQ_THRX = POW Input Queue Threshold Register (1 per QOS level)
791  *
792  * Threshold value for triggering input queue interrupts.
793  */
794 union cvmx_pow_iq_thrx
795 {
796         uint64_t u64;
797         struct cvmx_pow_iq_thrx_s
798         {
799 #if __BYTE_ORDER == __BIG_ENDIAN
800         uint64_t reserved_32_63               : 32;
801         uint64_t iq_thr                       : 32; /**< Input queue threshold for QOS level X */
802 #else
803         uint64_t iq_thr                       : 32;
804         uint64_t reserved_32_63               : 32;
805 #endif
806         } s;
807         struct cvmx_pow_iq_thrx_s             cn52xx;
808         struct cvmx_pow_iq_thrx_s             cn52xxp1;
809         struct cvmx_pow_iq_thrx_s             cn56xx;
810         struct cvmx_pow_iq_thrx_s             cn56xxp1;
811         struct cvmx_pow_iq_thrx_s             cn63xx;
812         struct cvmx_pow_iq_thrx_s             cn63xxp1;
813 };
814 typedef union cvmx_pow_iq_thrx cvmx_pow_iq_thrx_t;
815
816 /**
817  * cvmx_pow_nos_cnt
818  *
819  * POW_NOS_CNT = POW No-schedule Count Register
820  *
821  * Contains the number of work queue entries on the no-schedule list.
822  */
823 union cvmx_pow_nos_cnt
824 {
825         uint64_t u64;
826         struct cvmx_pow_nos_cnt_s
827         {
828 #if __BYTE_ORDER == __BIG_ENDIAN
829         uint64_t reserved_12_63               : 52;
830         uint64_t nos_cnt                      : 12; /**< # of work queue entries on the no-schedule list */
831 #else
832         uint64_t nos_cnt                      : 12;
833         uint64_t reserved_12_63               : 52;
834 #endif
835         } s;
836         struct cvmx_pow_nos_cnt_cn30xx
837         {
838 #if __BYTE_ORDER == __BIG_ENDIAN
839         uint64_t reserved_7_63                : 57;
840         uint64_t nos_cnt                      : 7;  /**< # of work queue entries on the no-schedule list */
841 #else
842         uint64_t nos_cnt                      : 7;
843         uint64_t reserved_7_63                : 57;
844 #endif
845         } cn30xx;
846         struct cvmx_pow_nos_cnt_cn31xx
847         {
848 #if __BYTE_ORDER == __BIG_ENDIAN
849         uint64_t reserved_9_63                : 55;
850         uint64_t nos_cnt                      : 9;  /**< # of work queue entries on the no-schedule list */
851 #else
852         uint64_t nos_cnt                      : 9;
853         uint64_t reserved_9_63                : 55;
854 #endif
855         } cn31xx;
856         struct cvmx_pow_nos_cnt_s             cn38xx;
857         struct cvmx_pow_nos_cnt_s             cn38xxp2;
858         struct cvmx_pow_nos_cnt_cn31xx        cn50xx;
859         struct cvmx_pow_nos_cnt_cn52xx
860         {
861 #if __BYTE_ORDER == __BIG_ENDIAN
862         uint64_t reserved_10_63               : 54;
863         uint64_t nos_cnt                      : 10; /**< # of work queue entries on the no-schedule list */
864 #else
865         uint64_t nos_cnt                      : 10;
866         uint64_t reserved_10_63               : 54;
867 #endif
868         } cn52xx;
869         struct cvmx_pow_nos_cnt_cn52xx        cn52xxp1;
870         struct cvmx_pow_nos_cnt_s             cn56xx;
871         struct cvmx_pow_nos_cnt_s             cn56xxp1;
872         struct cvmx_pow_nos_cnt_s             cn58xx;
873         struct cvmx_pow_nos_cnt_s             cn58xxp1;
874         struct cvmx_pow_nos_cnt_cn63xx
875         {
876 #if __BYTE_ORDER == __BIG_ENDIAN
877         uint64_t reserved_11_63               : 53;
878         uint64_t nos_cnt                      : 11; /**< # of work queue entries on the no-schedule list */
879 #else
880         uint64_t nos_cnt                      : 11;
881         uint64_t reserved_11_63               : 53;
882 #endif
883         } cn63xx;
884         struct cvmx_pow_nos_cnt_cn63xx        cn63xxp1;
885 };
886 typedef union cvmx_pow_nos_cnt cvmx_pow_nos_cnt_t;
887
888 /**
889  * cvmx_pow_nw_tim
890  *
891  * POW_NW_TIM = POW New Work Timer Period Register
892  *
893  * Sets the minimum period for a new work request timeout.  Period is specified in n-1 notation
894  * where the increment value is 1024 clock cycles.  Thus, a value of 0x0 in this register translates
895  * to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc...  Note: the
896  * maximum period for a new work request timeout is 2 times the minimum period.  Note: the new work
897  * request timeout counter is reset when this register is written.
898  *
899  * There are two new work request timeout cases:
900  *
901  * - WAIT bit clear.  The new work request can timeout if the timer expires before the pre-fetch
902  *   engine has reached the end of all work queues.  This can occur if the executable work queue
903  *   entry is deep in the queue and the pre-fetch engine is subject to many resets (i.e. high switch,
904  *   de-schedule, or new work load from other PP's).  Thus, it is possible for a PP to receive a work
905  *   response with the NO_WORK bit set even though there was at least one executable entry in the
906  *   work queues.  The other (and typical) scenario for receiving a NO_WORK response with the WAIT
907  *   bit clear is that the pre-fetch engine has reached the end of all work queues without finding
908  *   executable work.
909  *
910  * - WAIT bit set.  The new work request can timeout if the timer expires before the pre-fetch
911  *   engine has found executable work.  In this case, the only scenario where the PP will receive a
912  *   work response with the NO_WORK bit set is if the timer expires.  Note: it is still possible for
913  *   a PP to receive a NO_WORK response even though there was at least one executable entry in the
914  *   work queues.
915  *
916  * In either case, it's important to note that switches and de-schedules are higher priority
917  * operations that can cause the pre-fetch engine to reset.  Thus in a system with many switches or
918  * de-schedules occuring, it's possible for the new work timer to expire (resulting in NO_WORK
919  * responses) before the pre-fetch engine is able to get very deep into the work queues.
920  */
921 union cvmx_pow_nw_tim
922 {
923         uint64_t u64;
924         struct cvmx_pow_nw_tim_s
925         {
926 #if __BYTE_ORDER == __BIG_ENDIAN
927         uint64_t reserved_10_63               : 54;
928         uint64_t nw_tim                       : 10; /**< New work timer period */
929 #else
930         uint64_t nw_tim                       : 10;
931         uint64_t reserved_10_63               : 54;
932 #endif
933         } s;
934         struct cvmx_pow_nw_tim_s              cn30xx;
935         struct cvmx_pow_nw_tim_s              cn31xx;
936         struct cvmx_pow_nw_tim_s              cn38xx;
937         struct cvmx_pow_nw_tim_s              cn38xxp2;
938         struct cvmx_pow_nw_tim_s              cn50xx;
939         struct cvmx_pow_nw_tim_s              cn52xx;
940         struct cvmx_pow_nw_tim_s              cn52xxp1;
941         struct cvmx_pow_nw_tim_s              cn56xx;
942         struct cvmx_pow_nw_tim_s              cn56xxp1;
943         struct cvmx_pow_nw_tim_s              cn58xx;
944         struct cvmx_pow_nw_tim_s              cn58xxp1;
945         struct cvmx_pow_nw_tim_s              cn63xx;
946         struct cvmx_pow_nw_tim_s              cn63xxp1;
947 };
948 typedef union cvmx_pow_nw_tim cvmx_pow_nw_tim_t;
949
950 /**
951  * cvmx_pow_pf_rst_msk
952  *
953  * POW_PF_RST_MSK = POW Prefetch Reset Mask
954  *
955  * Resets the work prefetch engine when work is stored in an internal buffer (either when the add
956  * work arrives or when the work is reloaded from an external buffer) for an enabled QOS level
957  * (1 bit per QOS level).
958  */
959 union cvmx_pow_pf_rst_msk
960 {
961         uint64_t u64;
962         struct cvmx_pow_pf_rst_msk_s
963         {
964 #if __BYTE_ORDER == __BIG_ENDIAN
965         uint64_t reserved_8_63                : 56;
966         uint64_t rst_msk                      : 8;  /**< Prefetch engine reset mask */
967 #else
968         uint64_t rst_msk                      : 8;
969         uint64_t reserved_8_63                : 56;
970 #endif
971         } s;
972         struct cvmx_pow_pf_rst_msk_s          cn50xx;
973         struct cvmx_pow_pf_rst_msk_s          cn52xx;
974         struct cvmx_pow_pf_rst_msk_s          cn52xxp1;
975         struct cvmx_pow_pf_rst_msk_s          cn56xx;
976         struct cvmx_pow_pf_rst_msk_s          cn56xxp1;
977         struct cvmx_pow_pf_rst_msk_s          cn58xx;
978         struct cvmx_pow_pf_rst_msk_s          cn58xxp1;
979         struct cvmx_pow_pf_rst_msk_s          cn63xx;
980         struct cvmx_pow_pf_rst_msk_s          cn63xxp1;
981 };
982 typedef union cvmx_pow_pf_rst_msk cvmx_pow_pf_rst_msk_t;
983
984 /**
985  * cvmx_pow_pp_grp_msk#
986  *
987  * POW_PP_GRP_MSKX = POW PP Group Mask Register (1 per PP)
988  *
989  * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the PP's membership in
990  * the corresponding group.  A value of 0x0 will prevent the PP from receiving new work.  Note:
991  * disabled or non-existent PP's should have this field set to 0xffff (the reset value) in order to
992  * maximize POW performance.
993  *
994  * Also contains the QOS level priorities for each PP.  0x0 is highest priority, and 0x7 the lowest.
995  * Setting the priority to 0xf will prevent that PP from receiving work from that QOS level.
996  * Priority values 0x8 through 0xe are reserved and should not be used.  For a given PP, priorities
997  * should begin at 0x0 and remain contiguous throughout the range.
998  */
999 union cvmx_pow_pp_grp_mskx
1000 {
1001         uint64_t u64;
1002         struct cvmx_pow_pp_grp_mskx_s
1003         {
1004 #if __BYTE_ORDER == __BIG_ENDIAN
1005         uint64_t reserved_48_63               : 16;
1006         uint64_t qos7_pri                     : 4;  /**< PPX priority for QOS level 7 */
1007         uint64_t qos6_pri                     : 4;  /**< PPX priority for QOS level 6 */
1008         uint64_t qos5_pri                     : 4;  /**< PPX priority for QOS level 5 */
1009         uint64_t qos4_pri                     : 4;  /**< PPX priority for QOS level 4 */
1010         uint64_t qos3_pri                     : 4;  /**< PPX priority for QOS level 3 */
1011         uint64_t qos2_pri                     : 4;  /**< PPX priority for QOS level 2 */
1012         uint64_t qos1_pri                     : 4;  /**< PPX priority for QOS level 1 */
1013         uint64_t qos0_pri                     : 4;  /**< PPX priority for QOS level 0 */
1014         uint64_t grp_msk                      : 16; /**< PPX group mask */
1015 #else
1016         uint64_t grp_msk                      : 16;
1017         uint64_t qos0_pri                     : 4;
1018         uint64_t qos1_pri                     : 4;
1019         uint64_t qos2_pri                     : 4;
1020         uint64_t qos3_pri                     : 4;
1021         uint64_t qos4_pri                     : 4;
1022         uint64_t qos5_pri                     : 4;
1023         uint64_t qos6_pri                     : 4;
1024         uint64_t qos7_pri                     : 4;
1025         uint64_t reserved_48_63               : 16;
1026 #endif
1027         } s;
1028         struct cvmx_pow_pp_grp_mskx_cn30xx
1029         {
1030 #if __BYTE_ORDER == __BIG_ENDIAN
1031         uint64_t reserved_16_63               : 48;
1032         uint64_t grp_msk                      : 16; /**< PPX group mask */
1033 #else
1034         uint64_t grp_msk                      : 16;
1035         uint64_t reserved_16_63               : 48;
1036 #endif
1037         } cn30xx;
1038         struct cvmx_pow_pp_grp_mskx_cn30xx    cn31xx;
1039         struct cvmx_pow_pp_grp_mskx_cn30xx    cn38xx;
1040         struct cvmx_pow_pp_grp_mskx_cn30xx    cn38xxp2;
1041         struct cvmx_pow_pp_grp_mskx_s         cn50xx;
1042         struct cvmx_pow_pp_grp_mskx_s         cn52xx;
1043         struct cvmx_pow_pp_grp_mskx_s         cn52xxp1;
1044         struct cvmx_pow_pp_grp_mskx_s         cn56xx;
1045         struct cvmx_pow_pp_grp_mskx_s         cn56xxp1;
1046         struct cvmx_pow_pp_grp_mskx_s         cn58xx;
1047         struct cvmx_pow_pp_grp_mskx_s         cn58xxp1;
1048         struct cvmx_pow_pp_grp_mskx_s         cn63xx;
1049         struct cvmx_pow_pp_grp_mskx_s         cn63xxp1;
1050 };
1051 typedef union cvmx_pow_pp_grp_mskx cvmx_pow_pp_grp_mskx_t;
1052
1053 /**
1054  * cvmx_pow_qos_rnd#
1055  *
1056  * POW_QOS_RNDX = POW QOS Issue Round Register (4 rounds per register x 8 registers = 32 rounds)
1057  *
1058  * Contains the round definitions for issuing new work.  Each round consists of 8 bits with each bit
1059  * corresponding to a QOS level.  There are 4 rounds contained in each register for a total of 32
1060  * rounds.  The issue logic traverses through the rounds sequentially (lowest round to highest round)
1061  * in an attempt to find new work for each PP.  Within each round, the issue logic traverses through
1062  * the QOS levels sequentially (highest QOS to lowest QOS) skipping over each QOS level with a clear
1063  * bit in the round mask.  Note: setting a QOS level to all zeroes in all issue round registers will
1064  * prevent work from being issued from that QOS level.
1065  */
1066 union cvmx_pow_qos_rndx
1067 {
1068         uint64_t u64;
1069         struct cvmx_pow_qos_rndx_s
1070         {
1071 #if __BYTE_ORDER == __BIG_ENDIAN
1072         uint64_t reserved_32_63               : 32;
1073         uint64_t rnd_p3                       : 8;  /**< Round mask for round Xx4+3 */
1074         uint64_t rnd_p2                       : 8;  /**< Round mask for round Xx4+2 */
1075         uint64_t rnd_p1                       : 8;  /**< Round mask for round Xx4+1 */
1076         uint64_t rnd                          : 8;  /**< Round mask for round Xx4 */
1077 #else
1078         uint64_t rnd                          : 8;
1079         uint64_t rnd_p1                       : 8;
1080         uint64_t rnd_p2                       : 8;
1081         uint64_t rnd_p3                       : 8;
1082         uint64_t reserved_32_63               : 32;
1083 #endif
1084         } s;
1085         struct cvmx_pow_qos_rndx_s            cn30xx;
1086         struct cvmx_pow_qos_rndx_s            cn31xx;
1087         struct cvmx_pow_qos_rndx_s            cn38xx;
1088         struct cvmx_pow_qos_rndx_s            cn38xxp2;
1089         struct cvmx_pow_qos_rndx_s            cn50xx;
1090         struct cvmx_pow_qos_rndx_s            cn52xx;
1091         struct cvmx_pow_qos_rndx_s            cn52xxp1;
1092         struct cvmx_pow_qos_rndx_s            cn56xx;
1093         struct cvmx_pow_qos_rndx_s            cn56xxp1;
1094         struct cvmx_pow_qos_rndx_s            cn58xx;
1095         struct cvmx_pow_qos_rndx_s            cn58xxp1;
1096         struct cvmx_pow_qos_rndx_s            cn63xx;
1097         struct cvmx_pow_qos_rndx_s            cn63xxp1;
1098 };
1099 typedef union cvmx_pow_qos_rndx cvmx_pow_qos_rndx_t;
1100
1101 /**
1102  * cvmx_pow_qos_thr#
1103  *
1104  * POW_QOS_THRX = POW QOS Threshold Register (1 per QOS level)
1105  *
1106  * Contains the thresholds for allocating POW internal storage buffers.  If the number of remaining
1107  * free buffers drops below the minimum threshold (MIN_THR) or the number of allocated buffers for
1108  * this QOS level rises above the maximum threshold (MAX_THR), future incoming work queue entries
1109  * will be buffered externally rather than internally.  This register also contains a read-only count
1110  * of the current number of free buffers (FREE_CNT), the number of internal buffers currently
1111  * allocated to this QOS level (BUF_CNT), and the total number of buffers on the de-schedule list
1112  * (DES_CNT) (which is not the same as the total number of de-scheduled buffers).
1113  */
1114 union cvmx_pow_qos_thrx
1115 {
1116         uint64_t u64;
1117         struct cvmx_pow_qos_thrx_s
1118         {
1119 #if __BYTE_ORDER == __BIG_ENDIAN
1120         uint64_t reserved_60_63               : 4;
1121         uint64_t des_cnt                      : 12; /**< # of buffers on de-schedule list */
1122         uint64_t buf_cnt                      : 12; /**< # of internal buffers allocated to QOS level X */
1123         uint64_t free_cnt                     : 12; /**< # of total free buffers */
1124         uint64_t reserved_23_23               : 1;
1125         uint64_t max_thr                      : 11; /**< Max threshold for QOS level X */
1126         uint64_t reserved_11_11               : 1;
1127         uint64_t min_thr                      : 11; /**< Min threshold for QOS level X */
1128 #else
1129         uint64_t min_thr                      : 11;
1130         uint64_t reserved_11_11               : 1;
1131         uint64_t max_thr                      : 11;
1132         uint64_t reserved_23_23               : 1;
1133         uint64_t free_cnt                     : 12;
1134         uint64_t buf_cnt                      : 12;
1135         uint64_t des_cnt                      : 12;
1136         uint64_t reserved_60_63               : 4;
1137 #endif
1138         } s;
1139         struct cvmx_pow_qos_thrx_cn30xx
1140         {
1141 #if __BYTE_ORDER == __BIG_ENDIAN
1142         uint64_t reserved_55_63               : 9;
1143         uint64_t des_cnt                      : 7;  /**< # of buffers on de-schedule list */
1144         uint64_t reserved_43_47               : 5;
1145         uint64_t buf_cnt                      : 7;  /**< # of internal buffers allocated to QOS level X */
1146         uint64_t reserved_31_35               : 5;
1147         uint64_t free_cnt                     : 7;  /**< # of total free buffers */
1148         uint64_t reserved_18_23               : 6;
1149         uint64_t max_thr                      : 6;  /**< Max threshold for QOS level X */
1150         uint64_t reserved_6_11                : 6;
1151         uint64_t min_thr                      : 6;  /**< Min threshold for QOS level X */
1152 #else
1153         uint64_t min_thr                      : 6;
1154         uint64_t reserved_6_11                : 6;
1155         uint64_t max_thr                      : 6;
1156         uint64_t reserved_18_23               : 6;
1157         uint64_t free_cnt                     : 7;
1158         uint64_t reserved_31_35               : 5;
1159         uint64_t buf_cnt                      : 7;
1160         uint64_t reserved_43_47               : 5;
1161         uint64_t des_cnt                      : 7;
1162         uint64_t reserved_55_63               : 9;
1163 #endif
1164         } cn30xx;
1165         struct cvmx_pow_qos_thrx_cn31xx
1166         {
1167 #if __BYTE_ORDER == __BIG_ENDIAN
1168         uint64_t reserved_57_63               : 7;
1169         uint64_t des_cnt                      : 9;  /**< # of buffers on de-schedule list */
1170         uint64_t reserved_45_47               : 3;
1171         uint64_t buf_cnt                      : 9;  /**< # of internal buffers allocated to QOS level X */
1172         uint64_t reserved_33_35               : 3;
1173         uint64_t free_cnt                     : 9;  /**< # of total free buffers */
1174         uint64_t reserved_20_23               : 4;
1175         uint64_t max_thr                      : 8;  /**< Max threshold for QOS level X */
1176         uint64_t reserved_8_11                : 4;
1177         uint64_t min_thr                      : 8;  /**< Min threshold for QOS level X */
1178 #else
1179         uint64_t min_thr                      : 8;
1180         uint64_t reserved_8_11                : 4;
1181         uint64_t max_thr                      : 8;
1182         uint64_t reserved_20_23               : 4;
1183         uint64_t free_cnt                     : 9;
1184         uint64_t reserved_33_35               : 3;
1185         uint64_t buf_cnt                      : 9;
1186         uint64_t reserved_45_47               : 3;
1187         uint64_t des_cnt                      : 9;
1188         uint64_t reserved_57_63               : 7;
1189 #endif
1190         } cn31xx;
1191         struct cvmx_pow_qos_thrx_s            cn38xx;
1192         struct cvmx_pow_qos_thrx_s            cn38xxp2;
1193         struct cvmx_pow_qos_thrx_cn31xx       cn50xx;
1194         struct cvmx_pow_qos_thrx_cn52xx
1195         {
1196 #if __BYTE_ORDER == __BIG_ENDIAN
1197         uint64_t reserved_58_63               : 6;
1198         uint64_t des_cnt                      : 10; /**< # of buffers on de-schedule list */
1199         uint64_t reserved_46_47               : 2;
1200         uint64_t buf_cnt                      : 10; /**< # of internal buffers allocated to QOS level X */
1201         uint64_t reserved_34_35               : 2;
1202         uint64_t free_cnt                     : 10; /**< # of total free buffers */
1203         uint64_t reserved_21_23               : 3;
1204         uint64_t max_thr                      : 9;  /**< Max threshold for QOS level X */
1205         uint64_t reserved_9_11                : 3;
1206         uint64_t min_thr                      : 9;  /**< Min threshold for QOS level X */
1207 #else
1208         uint64_t min_thr                      : 9;
1209         uint64_t reserved_9_11                : 3;
1210         uint64_t max_thr                      : 9;
1211         uint64_t reserved_21_23               : 3;
1212         uint64_t free_cnt                     : 10;
1213         uint64_t reserved_34_35               : 2;
1214         uint64_t buf_cnt                      : 10;
1215         uint64_t reserved_46_47               : 2;
1216         uint64_t des_cnt                      : 10;
1217         uint64_t reserved_58_63               : 6;
1218 #endif
1219         } cn52xx;
1220         struct cvmx_pow_qos_thrx_cn52xx       cn52xxp1;
1221         struct cvmx_pow_qos_thrx_s            cn56xx;
1222         struct cvmx_pow_qos_thrx_s            cn56xxp1;
1223         struct cvmx_pow_qos_thrx_s            cn58xx;
1224         struct cvmx_pow_qos_thrx_s            cn58xxp1;
1225         struct cvmx_pow_qos_thrx_cn63xx
1226         {
1227 #if __BYTE_ORDER == __BIG_ENDIAN
1228         uint64_t reserved_59_63               : 5;
1229         uint64_t des_cnt                      : 11; /**< # of buffers on de-schedule list */
1230         uint64_t reserved_47_47               : 1;
1231         uint64_t buf_cnt                      : 11; /**< # of internal buffers allocated to QOS level X */
1232         uint64_t reserved_35_35               : 1;
1233         uint64_t free_cnt                     : 11; /**< # of total free buffers */
1234         uint64_t reserved_22_23               : 2;
1235         uint64_t max_thr                      : 10; /**< Max threshold for QOS level X */
1236         uint64_t reserved_10_11               : 2;
1237         uint64_t min_thr                      : 10; /**< Min threshold for QOS level X */
1238 #else
1239         uint64_t min_thr                      : 10;
1240         uint64_t reserved_10_11               : 2;
1241         uint64_t max_thr                      : 10;
1242         uint64_t reserved_22_23               : 2;
1243         uint64_t free_cnt                     : 11;
1244         uint64_t reserved_35_35               : 1;
1245         uint64_t buf_cnt                      : 11;
1246         uint64_t reserved_47_47               : 1;
1247         uint64_t des_cnt                      : 11;
1248         uint64_t reserved_59_63               : 5;
1249 #endif
1250         } cn63xx;
1251         struct cvmx_pow_qos_thrx_cn63xx       cn63xxp1;
1252 };
1253 typedef union cvmx_pow_qos_thrx cvmx_pow_qos_thrx_t;
1254
1255 /**
1256  * cvmx_pow_ts_pc
1257  *
1258  * POW_TS_PC = POW Tag Switch Performance Counter
1259  *
1260  * Counts the number of tag switch requests.  Write to clear.
1261  */
1262 union cvmx_pow_ts_pc
1263 {
1264         uint64_t u64;
1265         struct cvmx_pow_ts_pc_s
1266         {
1267 #if __BYTE_ORDER == __BIG_ENDIAN
1268         uint64_t reserved_32_63               : 32;
1269         uint64_t ts_pc                        : 32; /**< Tag switch performance counter */
1270 #else
1271         uint64_t ts_pc                        : 32;
1272         uint64_t reserved_32_63               : 32;
1273 #endif
1274         } s;
1275         struct cvmx_pow_ts_pc_s               cn30xx;
1276         struct cvmx_pow_ts_pc_s               cn31xx;
1277         struct cvmx_pow_ts_pc_s               cn38xx;
1278         struct cvmx_pow_ts_pc_s               cn38xxp2;
1279         struct cvmx_pow_ts_pc_s               cn50xx;
1280         struct cvmx_pow_ts_pc_s               cn52xx;
1281         struct cvmx_pow_ts_pc_s               cn52xxp1;
1282         struct cvmx_pow_ts_pc_s               cn56xx;
1283         struct cvmx_pow_ts_pc_s               cn56xxp1;
1284         struct cvmx_pow_ts_pc_s               cn58xx;
1285         struct cvmx_pow_ts_pc_s               cn58xxp1;
1286         struct cvmx_pow_ts_pc_s               cn63xx;
1287         struct cvmx_pow_ts_pc_s               cn63xxp1;
1288 };
1289 typedef union cvmx_pow_ts_pc cvmx_pow_ts_pc_t;
1290
1291 /**
1292  * cvmx_pow_wa_com_pc
1293  *
1294  * POW_WA_COM_PC = POW Work Add Combined Performance Counter
1295  *
1296  * Counts the number of add new work requests for all QOS levels.  Write to clear.
1297  */
1298 union cvmx_pow_wa_com_pc
1299 {
1300         uint64_t u64;
1301         struct cvmx_pow_wa_com_pc_s
1302         {
1303 #if __BYTE_ORDER == __BIG_ENDIAN
1304         uint64_t reserved_32_63               : 32;
1305         uint64_t wa_pc                        : 32; /**< Work add combined performance counter */
1306 #else
1307         uint64_t wa_pc                        : 32;
1308         uint64_t reserved_32_63               : 32;
1309 #endif
1310         } s;
1311         struct cvmx_pow_wa_com_pc_s           cn30xx;
1312         struct cvmx_pow_wa_com_pc_s           cn31xx;
1313         struct cvmx_pow_wa_com_pc_s           cn38xx;
1314         struct cvmx_pow_wa_com_pc_s           cn38xxp2;
1315         struct cvmx_pow_wa_com_pc_s           cn50xx;
1316         struct cvmx_pow_wa_com_pc_s           cn52xx;
1317         struct cvmx_pow_wa_com_pc_s           cn52xxp1;
1318         struct cvmx_pow_wa_com_pc_s           cn56xx;
1319         struct cvmx_pow_wa_com_pc_s           cn56xxp1;
1320         struct cvmx_pow_wa_com_pc_s           cn58xx;
1321         struct cvmx_pow_wa_com_pc_s           cn58xxp1;
1322         struct cvmx_pow_wa_com_pc_s           cn63xx;
1323         struct cvmx_pow_wa_com_pc_s           cn63xxp1;
1324 };
1325 typedef union cvmx_pow_wa_com_pc cvmx_pow_wa_com_pc_t;
1326
1327 /**
1328  * cvmx_pow_wa_pc#
1329  *
1330  * POW_WA_PCX = POW Work Add Performance Counter (1 per QOS level)
1331  *
1332  * Counts the number of add new work requests for each QOS level.  Write to clear.
1333  */
1334 union cvmx_pow_wa_pcx
1335 {
1336         uint64_t u64;
1337         struct cvmx_pow_wa_pcx_s
1338         {
1339 #if __BYTE_ORDER == __BIG_ENDIAN
1340         uint64_t reserved_32_63               : 32;
1341         uint64_t wa_pc                        : 32; /**< Work add performance counter for QOS level X */
1342 #else
1343         uint64_t wa_pc                        : 32;
1344         uint64_t reserved_32_63               : 32;
1345 #endif
1346         } s;
1347         struct cvmx_pow_wa_pcx_s              cn30xx;
1348         struct cvmx_pow_wa_pcx_s              cn31xx;
1349         struct cvmx_pow_wa_pcx_s              cn38xx;
1350         struct cvmx_pow_wa_pcx_s              cn38xxp2;
1351         struct cvmx_pow_wa_pcx_s              cn50xx;
1352         struct cvmx_pow_wa_pcx_s              cn52xx;
1353         struct cvmx_pow_wa_pcx_s              cn52xxp1;
1354         struct cvmx_pow_wa_pcx_s              cn56xx;
1355         struct cvmx_pow_wa_pcx_s              cn56xxp1;
1356         struct cvmx_pow_wa_pcx_s              cn58xx;
1357         struct cvmx_pow_wa_pcx_s              cn58xxp1;
1358         struct cvmx_pow_wa_pcx_s              cn63xx;
1359         struct cvmx_pow_wa_pcx_s              cn63xxp1;
1360 };
1361 typedef union cvmx_pow_wa_pcx cvmx_pow_wa_pcx_t;
1362
1363 /**
1364  * cvmx_pow_wq_int
1365  *
1366  * POW_WQ_INT = POW Work Queue Interrupt Register
1367  *
1368  * Contains the bits (1 per group) that set work queue interrupts and are used to clear these
1369  * interrupts.  Also contains the input queue interrupt temporary disable bits (1 per group).  For
1370  * more information regarding this register, see the interrupt section.
1371  */
1372 union cvmx_pow_wq_int
1373 {
1374         uint64_t u64;
1375         struct cvmx_pow_wq_int_s
1376         {
1377 #if __BYTE_ORDER == __BIG_ENDIAN
1378         uint64_t reserved_32_63               : 32;
1379         uint64_t iq_dis                       : 16; /**< Input queue interrupt temporary disable mask
1380                                                          Corresponding WQ_INT<*> bit cannot be set due to
1381                                                          IQ_CNT/IQ_THR check when this bit is set.
1382                                                          Corresponding IQ_DIS bit is cleared by HW whenever:
1383                                                           - POW_WQ_INT_CNT*[IQ_CNT] is zero, or
1384                                                           - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic
1385                                                             counter POW_WQ_INT_PC[PC]==0 */
1386         uint64_t wq_int                       : 16; /**< Work queue interrupt bits
1387                                                          Corresponding WQ_INT bit is set by HW whenever:
1388                                                           - POW_WQ_INT_CNT*[IQ_CNT] >=
1389                                                             POW_WQ_INT_THR*[IQ_THR] and the threshold
1390                                                             interrupt is not disabled.
1391                                                             IQ_DIS<*>==1 disables the interrupt.
1392                                                             POW_WQ_INT_THR*[IQ_THR]==0 disables the int.
1393                                                           - POW_WQ_INT_CNT*[DS_CNT] >=
1394                                                             POW_WQ_INT_THR*[DS_THR] and the threshold
1395                                                             interrupt is not disabled
1396                                                             POW_WQ_INT_THR*[DS_THR]==0 disables the int.
1397                                                           - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic
1398                                                             counter POW_WQ_INT_PC[PC]==0 and
1399                                                             POW_WQ_INT_THR*[TC_EN]==1 and at least one of:
1400                                                             - POW_WQ_INT_CNT*[IQ_CNT] > 0
1401                                                             - POW_WQ_INT_CNT*[DS_CNT] > 0 */
1402 #else
1403         uint64_t wq_int                       : 16;
1404         uint64_t iq_dis                       : 16;
1405         uint64_t reserved_32_63               : 32;
1406 #endif
1407         } s;
1408         struct cvmx_pow_wq_int_s              cn30xx;
1409         struct cvmx_pow_wq_int_s              cn31xx;
1410         struct cvmx_pow_wq_int_s              cn38xx;
1411         struct cvmx_pow_wq_int_s              cn38xxp2;
1412         struct cvmx_pow_wq_int_s              cn50xx;
1413         struct cvmx_pow_wq_int_s              cn52xx;
1414         struct cvmx_pow_wq_int_s              cn52xxp1;
1415         struct cvmx_pow_wq_int_s              cn56xx;
1416         struct cvmx_pow_wq_int_s              cn56xxp1;
1417         struct cvmx_pow_wq_int_s              cn58xx;
1418         struct cvmx_pow_wq_int_s              cn58xxp1;
1419         struct cvmx_pow_wq_int_s              cn63xx;
1420         struct cvmx_pow_wq_int_s              cn63xxp1;
1421 };
1422 typedef union cvmx_pow_wq_int cvmx_pow_wq_int_t;
1423
1424 /**
1425  * cvmx_pow_wq_int_cnt#
1426  *
1427  * POW_WQ_INT_CNTX = POW Work Queue Interrupt Count Register (1 per group)
1428  *
1429  * Contains a read-only copy of the counts used to trigger work queue interrupts.  For more
1430  * information regarding this register, see the interrupt section.
1431  */
1432 union cvmx_pow_wq_int_cntx
1433 {
1434         uint64_t u64;
1435         struct cvmx_pow_wq_int_cntx_s
1436         {
1437 #if __BYTE_ORDER == __BIG_ENDIAN
1438         uint64_t reserved_28_63               : 36;
1439         uint64_t tc_cnt                       : 4;  /**< Time counter current value for group X
1440                                                          HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
1441                                                           - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
1442                                                             corresponding POW_WQ_INT_CNT*[DS_CNT]==0
1443                                                           - corresponding POW_WQ_INT[WQ_INT<*>] is written
1444                                                             with a 1 by SW
1445                                                           - corresponding POW_WQ_INT[IQ_DIS<*>] is written
1446                                                             with a 1 by SW
1447                                                           - corresponding POW_WQ_INT_THR* is written by SW
1448                                                           - TC_CNT==1 and periodic counter
1449                                                             POW_WQ_INT_PC[PC]==0
1450                                                          Otherwise, HW decrements TC_CNT whenever the
1451                                                          periodic counter POW_WQ_INT_PC[PC]==0.
1452                                                          TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
1453         uint64_t ds_cnt                       : 12; /**< De-schedule executable count for group X */
1454         uint64_t iq_cnt                       : 12; /**< Input queue executable count for group X */
1455 #else
1456         uint64_t iq_cnt                       : 12;
1457         uint64_t ds_cnt                       : 12;
1458         uint64_t tc_cnt                       : 4;
1459         uint64_t reserved_28_63               : 36;
1460 #endif
1461         } s;
1462         struct cvmx_pow_wq_int_cntx_cn30xx
1463         {
1464 #if __BYTE_ORDER == __BIG_ENDIAN
1465         uint64_t reserved_28_63               : 36;
1466         uint64_t tc_cnt                       : 4;  /**< Time counter current value for group X
1467                                                          HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
1468                                                           - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
1469                                                             corresponding POW_WQ_INT_CNT*[DS_CNT]==0
1470                                                           - corresponding POW_WQ_INT[WQ_INT<*>] is written
1471                                                             with a 1 by SW
1472                                                           - corresponding POW_WQ_INT[IQ_DIS<*>] is written
1473                                                             with a 1 by SW
1474                                                           - corresponding POW_WQ_INT_THR* is written by SW
1475                                                           - TC_CNT==1 and periodic counter
1476                                                             POW_WQ_INT_PC[PC]==0
1477                                                          Otherwise, HW decrements TC_CNT whenever the
1478                                                          periodic counter POW_WQ_INT_PC[PC]==0.
1479                                                          TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
1480         uint64_t reserved_19_23               : 5;
1481         uint64_t ds_cnt                       : 7;  /**< De-schedule executable count for group X */
1482         uint64_t reserved_7_11                : 5;
1483         uint64_t iq_cnt                       : 7;  /**< Input queue executable count for group X */
1484 #else
1485         uint64_t iq_cnt                       : 7;
1486         uint64_t reserved_7_11                : 5;
1487         uint64_t ds_cnt                       : 7;
1488         uint64_t reserved_19_23               : 5;
1489         uint64_t tc_cnt                       : 4;
1490         uint64_t reserved_28_63               : 36;
1491 #endif
1492         } cn30xx;
1493         struct cvmx_pow_wq_int_cntx_cn31xx
1494         {
1495 #if __BYTE_ORDER == __BIG_ENDIAN
1496         uint64_t reserved_28_63               : 36;
1497         uint64_t tc_cnt                       : 4;  /**< Time counter current value for group X
1498                                                          HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
1499                                                           - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
1500                                                             corresponding POW_WQ_INT_CNT*[DS_CNT]==0
1501                                                           - corresponding POW_WQ_INT[WQ_INT<*>] is written
1502                                                             with a 1 by SW
1503                                                           - corresponding POW_WQ_INT[IQ_DIS<*>] is written
1504                                                             with a 1 by SW
1505                                                           - corresponding POW_WQ_INT_THR* is written by SW
1506                                                           - TC_CNT==1 and periodic counter
1507                                                             POW_WQ_INT_PC[PC]==0
1508                                                          Otherwise, HW decrements TC_CNT whenever the
1509                                                          periodic counter POW_WQ_INT_PC[PC]==0.
1510                                                          TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
1511         uint64_t reserved_21_23               : 3;
1512         uint64_t ds_cnt                       : 9;  /**< De-schedule executable count for group X */
1513         uint64_t reserved_9_11                : 3;
1514         uint64_t iq_cnt                       : 9;  /**< Input queue executable count for group X */
1515 #else
1516         uint64_t iq_cnt                       : 9;
1517         uint64_t reserved_9_11                : 3;
1518         uint64_t ds_cnt                       : 9;
1519         uint64_t reserved_21_23               : 3;
1520         uint64_t tc_cnt                       : 4;
1521         uint64_t reserved_28_63               : 36;
1522 #endif
1523         } cn31xx;
1524         struct cvmx_pow_wq_int_cntx_s         cn38xx;
1525         struct cvmx_pow_wq_int_cntx_s         cn38xxp2;
1526         struct cvmx_pow_wq_int_cntx_cn31xx    cn50xx;
1527         struct cvmx_pow_wq_int_cntx_cn52xx
1528         {
1529 #if __BYTE_ORDER == __BIG_ENDIAN
1530         uint64_t reserved_28_63               : 36;
1531         uint64_t tc_cnt                       : 4;  /**< Time counter current value for group X
1532                                                          HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
1533                                                           - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
1534                                                             corresponding POW_WQ_INT_CNT*[DS_CNT]==0
1535                                                           - corresponding POW_WQ_INT[WQ_INT<*>] is written
1536                                                             with a 1 by SW
1537                                                           - corresponding POW_WQ_INT[IQ_DIS<*>] is written
1538                                                             with a 1 by SW
1539                                                           - corresponding POW_WQ_INT_THR* is written by SW
1540                                                           - TC_CNT==1 and periodic counter
1541                                                             POW_WQ_INT_PC[PC]==0
1542                                                          Otherwise, HW decrements TC_CNT whenever the
1543                                                          periodic counter POW_WQ_INT_PC[PC]==0.
1544                                                          TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
1545         uint64_t reserved_22_23               : 2;
1546         uint64_t ds_cnt                       : 10; /**< De-schedule executable count for group X */
1547         uint64_t reserved_10_11               : 2;
1548         uint64_t iq_cnt                       : 10; /**< Input queue executable count for group X */
1549 #else
1550         uint64_t iq_cnt                       : 10;
1551         uint64_t reserved_10_11               : 2;
1552         uint64_t ds_cnt                       : 10;
1553         uint64_t reserved_22_23               : 2;
1554         uint64_t tc_cnt                       : 4;
1555         uint64_t reserved_28_63               : 36;
1556 #endif
1557         } cn52xx;
1558         struct cvmx_pow_wq_int_cntx_cn52xx    cn52xxp1;
1559         struct cvmx_pow_wq_int_cntx_s         cn56xx;
1560         struct cvmx_pow_wq_int_cntx_s         cn56xxp1;
1561         struct cvmx_pow_wq_int_cntx_s         cn58xx;
1562         struct cvmx_pow_wq_int_cntx_s         cn58xxp1;
1563         struct cvmx_pow_wq_int_cntx_cn63xx
1564         {
1565 #if __BYTE_ORDER == __BIG_ENDIAN
1566         uint64_t reserved_28_63               : 36;
1567         uint64_t tc_cnt                       : 4;  /**< Time counter current value for group X
1568                                                          HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
1569                                                           - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
1570                                                             corresponding POW_WQ_INT_CNT*[DS_CNT]==0
1571                                                           - corresponding POW_WQ_INT[WQ_INT<*>] is written
1572                                                             with a 1 by SW
1573                                                           - corresponding POW_WQ_INT[IQ_DIS<*>] is written
1574                                                             with a 1 by SW
1575                                                           - corresponding POW_WQ_INT_THR* is written by SW
1576                                                           - TC_CNT==1 and periodic counter
1577                                                             POW_WQ_INT_PC[PC]==0
1578                                                          Otherwise, HW decrements TC_CNT whenever the
1579                                                          periodic counter POW_WQ_INT_PC[PC]==0.
1580                                                          TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
1581         uint64_t reserved_23_23               : 1;
1582         uint64_t ds_cnt                       : 11; /**< De-schedule executable count for group X */
1583         uint64_t reserved_11_11               : 1;
1584         uint64_t iq_cnt                       : 11; /**< Input queue executable count for group X */
1585 #else
1586         uint64_t iq_cnt                       : 11;
1587         uint64_t reserved_11_11               : 1;
1588         uint64_t ds_cnt                       : 11;
1589         uint64_t reserved_23_23               : 1;
1590         uint64_t tc_cnt                       : 4;
1591         uint64_t reserved_28_63               : 36;
1592 #endif
1593         } cn63xx;
1594         struct cvmx_pow_wq_int_cntx_cn63xx    cn63xxp1;
1595 };
1596 typedef union cvmx_pow_wq_int_cntx cvmx_pow_wq_int_cntx_t;
1597
1598 /**
1599  * cvmx_pow_wq_int_pc
1600  *
1601  * POW_WQ_INT_PC = POW Work Queue Interrupt Periodic Counter Register
1602  *
1603  * Contains the threshold value for the work queue interrupt periodic counter and also a read-only
1604  * copy of the periodic counter.  For more information regarding this register, see the interrupt
1605  * section.
1606  */
1607 union cvmx_pow_wq_int_pc
1608 {
1609         uint64_t u64;
1610         struct cvmx_pow_wq_int_pc_s
1611         {
1612 #if __BYTE_ORDER == __BIG_ENDIAN
1613         uint64_t reserved_60_63               : 4;
1614         uint64_t pc                           : 28; /**< Work queue interrupt periodic counter */
1615         uint64_t reserved_28_31               : 4;
1616         uint64_t pc_thr                       : 20; /**< Work queue interrupt periodic counter threshold */
1617         uint64_t reserved_0_7                 : 8;
1618 #else
1619         uint64_t reserved_0_7                 : 8;
1620         uint64_t pc_thr                       : 20;
1621         uint64_t reserved_28_31               : 4;
1622         uint64_t pc                           : 28;
1623         uint64_t reserved_60_63               : 4;
1624 #endif
1625         } s;
1626         struct cvmx_pow_wq_int_pc_s           cn30xx;
1627         struct cvmx_pow_wq_int_pc_s           cn31xx;
1628         struct cvmx_pow_wq_int_pc_s           cn38xx;
1629         struct cvmx_pow_wq_int_pc_s           cn38xxp2;
1630         struct cvmx_pow_wq_int_pc_s           cn50xx;
1631         struct cvmx_pow_wq_int_pc_s           cn52xx;
1632         struct cvmx_pow_wq_int_pc_s           cn52xxp1;
1633         struct cvmx_pow_wq_int_pc_s           cn56xx;
1634         struct cvmx_pow_wq_int_pc_s           cn56xxp1;
1635         struct cvmx_pow_wq_int_pc_s           cn58xx;
1636         struct cvmx_pow_wq_int_pc_s           cn58xxp1;
1637         struct cvmx_pow_wq_int_pc_s           cn63xx;
1638         struct cvmx_pow_wq_int_pc_s           cn63xxp1;
1639 };
1640 typedef union cvmx_pow_wq_int_pc cvmx_pow_wq_int_pc_t;
1641
1642 /**
1643  * cvmx_pow_wq_int_thr#
1644  *
1645  * POW_WQ_INT_THRX = POW Work Queue Interrupt Threshold Register (1 per group)
1646  *
1647  * Contains the thresholds for enabling and setting work queue interrupts.  For more information
1648  * regarding this register, see the interrupt section.
1649  *
1650  * Note: Up to 8 of the POW's internal storage buffers can be allocated for hardware use and are
1651  * therefore not available for incoming work queue entries.  Additionally, any PP that is not in the
1652  * NULL_NULL state consumes a buffer.  Thus in a 6 PP system, it is not advisable to set either
1653  * IQ_THR or DS_THR to greater than 1024 - 8 - 6 = 1010.  Doing so may prevent the interrupt from
1654  * ever triggering.
1655  */
1656 union cvmx_pow_wq_int_thrx
1657 {
1658         uint64_t u64;
1659         struct cvmx_pow_wq_int_thrx_s
1660         {
1661 #if __BYTE_ORDER == __BIG_ENDIAN
1662         uint64_t reserved_29_63               : 35;
1663         uint64_t tc_en                        : 1;  /**< Time counter interrupt enable for group X
1664                                                          TC_EN must be zero when TC_THR==0 */
1665         uint64_t tc_thr                       : 4;  /**< Time counter interrupt threshold for group X
1666                                                          When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
1667         uint64_t reserved_23_23               : 1;
1668         uint64_t ds_thr                       : 11; /**< De-schedule count threshold for group X
1669                                                          DS_THR==0 disables the threshold interrupt */
1670         uint64_t reserved_11_11               : 1;
1671         uint64_t iq_thr                       : 11; /**< Input queue count threshold for group X
1672                                                          IQ_THR==0 disables the threshold interrupt */
1673 #else
1674         uint64_t iq_thr                       : 11;
1675         uint64_t reserved_11_11               : 1;
1676         uint64_t ds_thr                       : 11;
1677         uint64_t reserved_23_23               : 1;
1678         uint64_t tc_thr                       : 4;
1679         uint64_t tc_en                        : 1;
1680         uint64_t reserved_29_63               : 35;
1681 #endif
1682         } s;
1683         struct cvmx_pow_wq_int_thrx_cn30xx
1684         {
1685 #if __BYTE_ORDER == __BIG_ENDIAN
1686         uint64_t reserved_29_63               : 35;
1687         uint64_t tc_en                        : 1;  /**< Time counter interrupt enable for group X
1688                                                          TC_EN must be zero when TC_THR==0 */
1689         uint64_t tc_thr                       : 4;  /**< Time counter interrupt threshold for group X
1690                                                          When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
1691         uint64_t reserved_18_23               : 6;
1692         uint64_t ds_thr                       : 6;  /**< De-schedule count threshold for group X
1693                                                          DS_THR==0 disables the threshold interrupt */
1694         uint64_t reserved_6_11                : 6;
1695         uint64_t iq_thr                       : 6;  /**< Input queue count threshold for group X
1696                                                          IQ_THR==0 disables the threshold interrupt */
1697 #else
1698         uint64_t iq_thr                       : 6;
1699         uint64_t reserved_6_11                : 6;
1700         uint64_t ds_thr                       : 6;
1701         uint64_t reserved_18_23               : 6;
1702         uint64_t tc_thr                       : 4;
1703         uint64_t tc_en                        : 1;
1704         uint64_t reserved_29_63               : 35;
1705 #endif
1706         } cn30xx;
1707         struct cvmx_pow_wq_int_thrx_cn31xx
1708         {
1709 #if __BYTE_ORDER == __BIG_ENDIAN
1710         uint64_t reserved_29_63               : 35;
1711         uint64_t tc_en                        : 1;  /**< Time counter interrupt enable for group X
1712                                                          TC_EN must be zero when TC_THR==0 */
1713         uint64_t tc_thr                       : 4;  /**< Time counter interrupt threshold for group X
1714                                                          When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
1715         uint64_t reserved_20_23               : 4;
1716         uint64_t ds_thr                       : 8;  /**< De-schedule count threshold for group X
1717                                                          DS_THR==0 disables the threshold interrupt */
1718         uint64_t reserved_8_11                : 4;
1719         uint64_t iq_thr                       : 8;  /**< Input queue count threshold for group X
1720                                                          IQ_THR==0 disables the threshold interrupt */
1721 #else
1722         uint64_t iq_thr                       : 8;
1723         uint64_t reserved_8_11                : 4;
1724         uint64_t ds_thr                       : 8;
1725         uint64_t reserved_20_23               : 4;
1726         uint64_t tc_thr                       : 4;
1727         uint64_t tc_en                        : 1;
1728         uint64_t reserved_29_63               : 35;
1729 #endif
1730         } cn31xx;
1731         struct cvmx_pow_wq_int_thrx_s         cn38xx;
1732         struct cvmx_pow_wq_int_thrx_s         cn38xxp2;
1733         struct cvmx_pow_wq_int_thrx_cn31xx    cn50xx;
1734         struct cvmx_pow_wq_int_thrx_cn52xx
1735         {
1736 #if __BYTE_ORDER == __BIG_ENDIAN
1737         uint64_t reserved_29_63               : 35;
1738         uint64_t tc_en                        : 1;  /**< Time counter interrupt enable for group X
1739                                                          TC_EN must be zero when TC_THR==0 */
1740         uint64_t tc_thr                       : 4;  /**< Time counter interrupt threshold for group X
1741                                                          When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
1742         uint64_t reserved_21_23               : 3;
1743         uint64_t ds_thr                       : 9;  /**< De-schedule count threshold for group X
1744                                                          DS_THR==0 disables the threshold interrupt */
1745         uint64_t reserved_9_11                : 3;
1746         uint64_t iq_thr                       : 9;  /**< Input queue count threshold for group X
1747                                                          IQ_THR==0 disables the threshold interrupt */
1748 #else
1749         uint64_t iq_thr                       : 9;
1750         uint64_t reserved_9_11                : 3;
1751         uint64_t ds_thr                       : 9;
1752         uint64_t reserved_21_23               : 3;
1753         uint64_t tc_thr                       : 4;
1754         uint64_t tc_en                        : 1;
1755         uint64_t reserved_29_63               : 35;
1756 #endif
1757         } cn52xx;
1758         struct cvmx_pow_wq_int_thrx_cn52xx    cn52xxp1;
1759         struct cvmx_pow_wq_int_thrx_s         cn56xx;
1760         struct cvmx_pow_wq_int_thrx_s         cn56xxp1;
1761         struct cvmx_pow_wq_int_thrx_s         cn58xx;
1762         struct cvmx_pow_wq_int_thrx_s         cn58xxp1;
1763         struct cvmx_pow_wq_int_thrx_cn63xx
1764         {
1765 #if __BYTE_ORDER == __BIG_ENDIAN
1766         uint64_t reserved_29_63               : 35;
1767         uint64_t tc_en                        : 1;  /**< Time counter interrupt enable for group X
1768                                                          TC_EN must be zero when TC_THR==0 */
1769         uint64_t tc_thr                       : 4;  /**< Time counter interrupt threshold for group X
1770                                                          When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
1771         uint64_t reserved_22_23               : 2;
1772         uint64_t ds_thr                       : 10; /**< De-schedule count threshold for group X
1773                                                          DS_THR==0 disables the threshold interrupt */
1774         uint64_t reserved_10_11               : 2;
1775         uint64_t iq_thr                       : 10; /**< Input queue count threshold for group X
1776                                                          IQ_THR==0 disables the threshold interrupt */
1777 #else
1778         uint64_t iq_thr                       : 10;
1779         uint64_t reserved_10_11               : 2;
1780         uint64_t ds_thr                       : 10;
1781         uint64_t reserved_22_23               : 2;
1782         uint64_t tc_thr                       : 4;
1783         uint64_t tc_en                        : 1;
1784         uint64_t reserved_29_63               : 35;
1785 #endif
1786         } cn63xx;
1787         struct cvmx_pow_wq_int_thrx_cn63xx    cn63xxp1;
1788 };
1789 typedef union cvmx_pow_wq_int_thrx cvmx_pow_wq_int_thrx_t;
1790
1791 /**
1792  * cvmx_pow_ws_pc#
1793  *
1794  * POW_WS_PCX = POW Work Schedule Performance Counter (1 per group)
1795  *
1796  * Counts the number of work schedules for each group.  Write to clear.
1797  */
1798 union cvmx_pow_ws_pcx
1799 {
1800         uint64_t u64;
1801         struct cvmx_pow_ws_pcx_s
1802         {
1803 #if __BYTE_ORDER == __BIG_ENDIAN
1804         uint64_t reserved_32_63               : 32;
1805         uint64_t ws_pc                        : 32; /**< Work schedule performance counter for group X */
1806 #else
1807         uint64_t ws_pc                        : 32;
1808         uint64_t reserved_32_63               : 32;
1809 #endif
1810         } s;
1811         struct cvmx_pow_ws_pcx_s              cn30xx;
1812         struct cvmx_pow_ws_pcx_s              cn31xx;
1813         struct cvmx_pow_ws_pcx_s              cn38xx;
1814         struct cvmx_pow_ws_pcx_s              cn38xxp2;
1815         struct cvmx_pow_ws_pcx_s              cn50xx;
1816         struct cvmx_pow_ws_pcx_s              cn52xx;
1817         struct cvmx_pow_ws_pcx_s              cn52xxp1;
1818         struct cvmx_pow_ws_pcx_s              cn56xx;
1819         struct cvmx_pow_ws_pcx_s              cn56xxp1;
1820         struct cvmx_pow_ws_pcx_s              cn58xx;
1821         struct cvmx_pow_ws_pcx_s              cn58xxp1;
1822         struct cvmx_pow_ws_pcx_s              cn63xx;
1823         struct cvmx_pow_ws_pcx_s              cn63xxp1;
1824 };
1825 typedef union cvmx_pow_ws_pcx cvmx_pow_ws_pcx_t;
1826
1827 #endif