cvmx-csr-typedefs.h revision 210284
1/***********************license start***************
2 *  Copyright (c) 2003-2009 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 *  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
24 *  AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS
25 *  OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
26 *  RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
27 *  REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
28 *  DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES
29 *  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR
30 *  PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET
31 *  POSSESSION OR CORRESPONDENCE TO DESCRIPTION.  THE ENTIRE RISK ARISING OUT
32 *  OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
33 *
34 *
35 *  For any questions regarding licensing please contact marketing@caviumnetworks.com
36 *
37 ***********************license end**************************************/
38
39/**
40 * @file
41 *
42 * Configuration and status register (CSR) address and type definitions for
43 * Octeon. Include cvmx-csr.h instead of this file directly.
44 *
45 * This file is auto generated. Do not edit.
46 *
47 * <hr>$Revision: 41586 $<hr>
48 *
49 */
50#ifndef __CVMX_CSR_TYPEDEFS_H__
51#define __CVMX_CSR_TYPEDEFS_H__
52
53
54/**
55 * cvmx_agl_gmx_bad_reg
56 *
57 * AGL_GMX_BAD_REG = A collection of things that have gone very, very wrong
58 *
59 *
60 * Notes:
61 * OUT_OVR[0], OVRFLW, TXPOP, TXPSH    will be reset when MIX0_CTL[RESET] is set to 1.
62 * OUT_OVR[1], OVRFLW1, TXPOP1, TXPSH1 will be reset when MIX1_CTL[RESET] is set to 1.
63 * LOSTSTAT, STATOVR, STATOVR will bee reset when both MIX0/1_CTL[RESET] are set to 1.
64 */
65typedef union
66{
67    uint64_t u64;
68    struct cvmx_agl_gmx_bad_reg_s
69    {
70#if __BYTE_ORDER == __BIG_ENDIAN
71        uint64_t reserved_38_63          : 26;
72        uint64_t txpsh1                  : 1;       /**< TX FIFO overflow (MII1) */
73        uint64_t txpop1                  : 1;       /**< TX FIFO underflow (MII1) */
74        uint64_t ovrflw1                 : 1;       /**< RX FIFO overflow (MII1) */
75        uint64_t txpsh                   : 1;       /**< TX FIFO overflow */
76        uint64_t txpop                   : 1;       /**< TX FIFO underflow */
77        uint64_t ovrflw                  : 1;       /**< RX FIFO overflow */
78        uint64_t reserved_27_31          : 5;
79        uint64_t statovr                 : 1;       /**< TX Statistics overflow */
80        uint64_t reserved_23_25          : 3;
81        uint64_t loststat                : 1;       /**< TX Statistics data was over-written
82                                                         TX Stats are corrupted */
83        uint64_t reserved_4_21           : 18;
84        uint64_t out_ovr                 : 2;       /**< Outbound data FIFO overflow */
85        uint64_t reserved_0_1            : 2;
86#else
87        uint64_t reserved_0_1            : 2;
88        uint64_t out_ovr                 : 2;
89        uint64_t reserved_4_21           : 18;
90        uint64_t loststat                : 1;
91        uint64_t reserved_23_25          : 3;
92        uint64_t statovr                 : 1;
93        uint64_t reserved_27_31          : 5;
94        uint64_t ovrflw                  : 1;
95        uint64_t txpop                   : 1;
96        uint64_t txpsh                   : 1;
97        uint64_t ovrflw1                 : 1;
98        uint64_t txpop1                  : 1;
99        uint64_t txpsh1                  : 1;
100        uint64_t reserved_38_63          : 26;
101#endif
102    } s;
103    struct cvmx_agl_gmx_bad_reg_s        cn52xx;
104    struct cvmx_agl_gmx_bad_reg_s        cn52xxp1;
105    struct cvmx_agl_gmx_bad_reg_cn56xx
106    {
107#if __BYTE_ORDER == __BIG_ENDIAN
108        uint64_t reserved_35_63          : 29;
109        uint64_t txpsh                   : 1;       /**< TX FIFO overflow */
110        uint64_t txpop                   : 1;       /**< TX FIFO underflow */
111        uint64_t ovrflw                  : 1;       /**< RX FIFO overflow */
112        uint64_t reserved_27_31          : 5;
113        uint64_t statovr                 : 1;       /**< TX Statistics overflow */
114        uint64_t reserved_23_25          : 3;
115        uint64_t loststat                : 1;       /**< TX Statistics data was over-written
116                                                         TX Stats are corrupted */
117        uint64_t reserved_3_21           : 19;
118        uint64_t out_ovr                 : 1;       /**< Outbound data FIFO overflow */
119        uint64_t reserved_0_1            : 2;
120#else
121        uint64_t reserved_0_1            : 2;
122        uint64_t out_ovr                 : 1;
123        uint64_t reserved_3_21           : 19;
124        uint64_t loststat                : 1;
125        uint64_t reserved_23_25          : 3;
126        uint64_t statovr                 : 1;
127        uint64_t reserved_27_31          : 5;
128        uint64_t ovrflw                  : 1;
129        uint64_t txpop                   : 1;
130        uint64_t txpsh                   : 1;
131        uint64_t reserved_35_63          : 29;
132#endif
133    } cn56xx;
134    struct cvmx_agl_gmx_bad_reg_cn56xx   cn56xxp1;
135} cvmx_agl_gmx_bad_reg_t;
136
137
138/**
139 * cvmx_agl_gmx_bist
140 *
141 * AGL_GMX_BIST = GMX BIST Results
142 *
143 *
144 * Notes:
145 * Not reset when MIX*_CTL[RESET] is set to 1.
146 *
147 */
148typedef union
149{
150    uint64_t u64;
151    struct cvmx_agl_gmx_bist_s
152    {
153#if __BYTE_ORDER == __BIG_ENDIAN
154        uint64_t reserved_10_63          : 54;
155        uint64_t status                  : 10;      /**< BIST Results.
156                                                          HW sets a bit in BIST for for memory that fails
157                                                         - 0: gmx#.inb.drf64x78m1_bist
158                                                         - 1: gmx#.outb.fif.drf64x71m1_bist
159                                                         - 2: gmx#.csr.gmi0.srf8x64m1_bist
160                                                         - 3: 0
161                                                         - 4: 0
162                                                         - 5: 0
163                                                         - 6: gmx#.csr.drf20x80m1_bist
164                                                         - 7: gmx#.outb.stat.drf16x27m1_bist
165                                                         - 8: gmx#.outb.stat.drf40x64m1_bist
166                                                         - 9: 0 */
167#else
168        uint64_t status                  : 10;
169        uint64_t reserved_10_63          : 54;
170#endif
171    } s;
172    struct cvmx_agl_gmx_bist_s           cn52xx;
173    struct cvmx_agl_gmx_bist_s           cn52xxp1;
174    struct cvmx_agl_gmx_bist_s           cn56xx;
175    struct cvmx_agl_gmx_bist_s           cn56xxp1;
176} cvmx_agl_gmx_bist_t;
177
178
179/**
180 * cvmx_agl_gmx_drv_ctl
181 *
182 * AGL_GMX_DRV_CTL = GMX Drive Control
183 *
184 *
185 * Notes:
186 * NCTL, PCTL, BYP_EN    will be reset when MIX0_CTL[RESET] is set to 1.
187 * NCTL1, PCTL1, BYP_EN1 will be reset when MIX1_CTL[RESET] is set to 1.
188 */
189typedef union
190{
191    uint64_t u64;
192    struct cvmx_agl_gmx_drv_ctl_s
193    {
194#if __BYTE_ORDER == __BIG_ENDIAN
195        uint64_t reserved_49_63          : 15;
196        uint64_t byp_en1                 : 1;       /**< Compensation Controller Bypass Enable (MII1) */
197        uint64_t reserved_45_47          : 3;
198        uint64_t pctl1                   : 5;       /**< AGL PCTL (MII1) */
199        uint64_t reserved_37_39          : 3;
200        uint64_t nctl1                   : 5;       /**< AGL NCTL (MII1) */
201        uint64_t reserved_17_31          : 15;
202        uint64_t byp_en                  : 1;       /**< Compensation Controller Bypass Enable */
203        uint64_t reserved_13_15          : 3;
204        uint64_t pctl                    : 5;       /**< AGL PCTL */
205        uint64_t reserved_5_7            : 3;
206        uint64_t nctl                    : 5;       /**< AGL NCTL */
207#else
208        uint64_t nctl                    : 5;
209        uint64_t reserved_5_7            : 3;
210        uint64_t pctl                    : 5;
211        uint64_t reserved_13_15          : 3;
212        uint64_t byp_en                  : 1;
213        uint64_t reserved_17_31          : 15;
214        uint64_t nctl1                   : 5;
215        uint64_t reserved_37_39          : 3;
216        uint64_t pctl1                   : 5;
217        uint64_t reserved_45_47          : 3;
218        uint64_t byp_en1                 : 1;
219        uint64_t reserved_49_63          : 15;
220#endif
221    } s;
222    struct cvmx_agl_gmx_drv_ctl_s        cn52xx;
223    struct cvmx_agl_gmx_drv_ctl_s        cn52xxp1;
224    struct cvmx_agl_gmx_drv_ctl_cn56xx
225    {
226#if __BYTE_ORDER == __BIG_ENDIAN
227        uint64_t reserved_17_63          : 47;
228        uint64_t byp_en                  : 1;       /**< Compensation Controller Bypass Enable */
229        uint64_t reserved_13_15          : 3;
230        uint64_t pctl                    : 5;       /**< AGL PCTL */
231        uint64_t reserved_5_7            : 3;
232        uint64_t nctl                    : 5;       /**< AGL NCTL */
233#else
234        uint64_t nctl                    : 5;
235        uint64_t reserved_5_7            : 3;
236        uint64_t pctl                    : 5;
237        uint64_t reserved_13_15          : 3;
238        uint64_t byp_en                  : 1;
239        uint64_t reserved_17_63          : 47;
240#endif
241    } cn56xx;
242    struct cvmx_agl_gmx_drv_ctl_cn56xx   cn56xxp1;
243} cvmx_agl_gmx_drv_ctl_t;
244
245
246/**
247 * cvmx_agl_gmx_inf_mode
248 *
249 * AGL_GMX_INF_MODE = Interface Mode
250 *
251 *
252 * Notes:
253 * Not reset when MIX*_CTL[RESET] is set to 1.
254 *
255 */
256typedef union
257{
258    uint64_t u64;
259    struct cvmx_agl_gmx_inf_mode_s
260    {
261#if __BYTE_ORDER == __BIG_ENDIAN
262        uint64_t reserved_2_63           : 62;
263        uint64_t en                      : 1;       /**< Interface Enable */
264        uint64_t reserved_0_0            : 1;
265#else
266        uint64_t reserved_0_0            : 1;
267        uint64_t en                      : 1;
268        uint64_t reserved_2_63           : 62;
269#endif
270    } s;
271    struct cvmx_agl_gmx_inf_mode_s       cn52xx;
272    struct cvmx_agl_gmx_inf_mode_s       cn52xxp1;
273    struct cvmx_agl_gmx_inf_mode_s       cn56xx;
274    struct cvmx_agl_gmx_inf_mode_s       cn56xxp1;
275} cvmx_agl_gmx_inf_mode_t;
276
277
278/**
279 * cvmx_agl_gmx_prt#_cfg
280 *
281 * AGL_GMX_PRT_CFG = Port description
282 *
283 *
284 * Notes:
285 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
286 *
287 */
288typedef union
289{
290    uint64_t u64;
291    struct cvmx_agl_gmx_prtx_cfg_s
292    {
293#if __BYTE_ORDER == __BIG_ENDIAN
294        uint64_t reserved_6_63           : 58;
295        uint64_t tx_en                   : 1;       /**< Port enable.  Must be set for Octane to send
296                                                         RMGII traffic.   When this bit clear on a given
297                                                         port, then all MII cycles will appear as
298                                                         inter-frame cycles. */
299        uint64_t rx_en                   : 1;       /**< Port enable.  Must be set for Octane to receive
300                                                         RMGII traffic.  When this bit clear on a given
301                                                         port, then the all MII cycles will appear as
302                                                         inter-frame cycles. */
303        uint64_t slottime                : 1;       /**< Slot Time for Half-Duplex operation
304                                                         0 = 512 bitimes (10/100Mbs operation)
305                                                         1 = Reserved */
306        uint64_t duplex                  : 1;       /**< Duplex
307                                                         0 = Half Duplex (collisions/extentions/bursts)
308                                                         1 = Full Duplex */
309        uint64_t speed                   : 1;       /**< Link Speed
310                                                         0 = 10/100Mbs operation
311                                                         1 = Reserved */
312        uint64_t en                      : 1;       /**< Link Enable
313                                                         When EN is clear, packets will not be received
314                                                         or transmitted (including PAUSE and JAM packets).
315                                                         If EN is cleared while a packet is currently
316                                                         being received or transmitted, the packet will
317                                                         be allowed to complete before the bus is idled.
318                                                         On the RX side, subsequent packets in a burst
319                                                         will be ignored. */
320#else
321        uint64_t en                      : 1;
322        uint64_t speed                   : 1;
323        uint64_t duplex                  : 1;
324        uint64_t slottime                : 1;
325        uint64_t rx_en                   : 1;
326        uint64_t tx_en                   : 1;
327        uint64_t reserved_6_63           : 58;
328#endif
329    } s;
330    struct cvmx_agl_gmx_prtx_cfg_s       cn52xx;
331    struct cvmx_agl_gmx_prtx_cfg_s       cn52xxp1;
332    struct cvmx_agl_gmx_prtx_cfg_s       cn56xx;
333    struct cvmx_agl_gmx_prtx_cfg_s       cn56xxp1;
334} cvmx_agl_gmx_prtx_cfg_t;
335
336
337/**
338 * cvmx_agl_gmx_rx#_adr_cam0
339 *
340 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
341 *
342 *
343 * Notes:
344 * Not reset when MIX*_CTL[RESET] is set to 1.
345 *
346 */
347typedef union
348{
349    uint64_t u64;
350    struct cvmx_agl_gmx_rxx_adr_cam0_s
351    {
352#if __BYTE_ORDER == __BIG_ENDIAN
353        uint64_t adr                     : 64;      /**< The DMAC address to match on
354                                                         Each entry contributes 8bits to one of 8 matchers
355                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
356                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
357                                                         The CAM matches against unicst or multicst DMAC
358                                                         addresses. */
359#else
360        uint64_t adr                     : 64;
361#endif
362    } s;
363    struct cvmx_agl_gmx_rxx_adr_cam0_s   cn52xx;
364    struct cvmx_agl_gmx_rxx_adr_cam0_s   cn52xxp1;
365    struct cvmx_agl_gmx_rxx_adr_cam0_s   cn56xx;
366    struct cvmx_agl_gmx_rxx_adr_cam0_s   cn56xxp1;
367} cvmx_agl_gmx_rxx_adr_cam0_t;
368
369
370/**
371 * cvmx_agl_gmx_rx#_adr_cam1
372 *
373 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
374 *
375 *
376 * Notes:
377 * Not reset when MIX*_CTL[RESET] is set to 1.
378 *
379 */
380typedef union
381{
382    uint64_t u64;
383    struct cvmx_agl_gmx_rxx_adr_cam1_s
384    {
385#if __BYTE_ORDER == __BIG_ENDIAN
386        uint64_t adr                     : 64;      /**< The DMAC address to match on
387                                                         Each entry contributes 8bits to one of 8 matchers
388                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
389                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
390                                                         The CAM matches against unicst or multicst DMAC
391                                                         addresses. */
392#else
393        uint64_t adr                     : 64;
394#endif
395    } s;
396    struct cvmx_agl_gmx_rxx_adr_cam1_s   cn52xx;
397    struct cvmx_agl_gmx_rxx_adr_cam1_s   cn52xxp1;
398    struct cvmx_agl_gmx_rxx_adr_cam1_s   cn56xx;
399    struct cvmx_agl_gmx_rxx_adr_cam1_s   cn56xxp1;
400} cvmx_agl_gmx_rxx_adr_cam1_t;
401
402
403/**
404 * cvmx_agl_gmx_rx#_adr_cam2
405 *
406 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
407 *
408 *
409 * Notes:
410 * Not reset when MIX*_CTL[RESET] is set to 1.
411 *
412 */
413typedef union
414{
415    uint64_t u64;
416    struct cvmx_agl_gmx_rxx_adr_cam2_s
417    {
418#if __BYTE_ORDER == __BIG_ENDIAN
419        uint64_t adr                     : 64;      /**< The DMAC address to match on
420                                                         Each entry contributes 8bits to one of 8 matchers
421                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
422                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
423                                                         The CAM matches against unicst or multicst DMAC
424                                                         addresses. */
425#else
426        uint64_t adr                     : 64;
427#endif
428    } s;
429    struct cvmx_agl_gmx_rxx_adr_cam2_s   cn52xx;
430    struct cvmx_agl_gmx_rxx_adr_cam2_s   cn52xxp1;
431    struct cvmx_agl_gmx_rxx_adr_cam2_s   cn56xx;
432    struct cvmx_agl_gmx_rxx_adr_cam2_s   cn56xxp1;
433} cvmx_agl_gmx_rxx_adr_cam2_t;
434
435
436/**
437 * cvmx_agl_gmx_rx#_adr_cam3
438 *
439 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
440 *
441 *
442 * Notes:
443 * Not reset when MIX*_CTL[RESET] is set to 1.
444 *
445 */
446typedef union
447{
448    uint64_t u64;
449    struct cvmx_agl_gmx_rxx_adr_cam3_s
450    {
451#if __BYTE_ORDER == __BIG_ENDIAN
452        uint64_t adr                     : 64;      /**< The DMAC address to match on
453                                                         Each entry contributes 8bits to one of 8 matchers
454                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
455                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
456                                                         The CAM matches against unicst or multicst DMAC
457                                                         addresses. */
458#else
459        uint64_t adr                     : 64;
460#endif
461    } s;
462    struct cvmx_agl_gmx_rxx_adr_cam3_s   cn52xx;
463    struct cvmx_agl_gmx_rxx_adr_cam3_s   cn52xxp1;
464    struct cvmx_agl_gmx_rxx_adr_cam3_s   cn56xx;
465    struct cvmx_agl_gmx_rxx_adr_cam3_s   cn56xxp1;
466} cvmx_agl_gmx_rxx_adr_cam3_t;
467
468
469/**
470 * cvmx_agl_gmx_rx#_adr_cam4
471 *
472 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
473 *
474 *
475 * Notes:
476 * Not reset when MIX*_CTL[RESET] is set to 1.
477 *
478 */
479typedef union
480{
481    uint64_t u64;
482    struct cvmx_agl_gmx_rxx_adr_cam4_s
483    {
484#if __BYTE_ORDER == __BIG_ENDIAN
485        uint64_t adr                     : 64;      /**< The DMAC address to match on
486                                                         Each entry contributes 8bits to one of 8 matchers
487                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
488                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
489                                                         The CAM matches against unicst or multicst DMAC
490                                                         addresses. */
491#else
492        uint64_t adr                     : 64;
493#endif
494    } s;
495    struct cvmx_agl_gmx_rxx_adr_cam4_s   cn52xx;
496    struct cvmx_agl_gmx_rxx_adr_cam4_s   cn52xxp1;
497    struct cvmx_agl_gmx_rxx_adr_cam4_s   cn56xx;
498    struct cvmx_agl_gmx_rxx_adr_cam4_s   cn56xxp1;
499} cvmx_agl_gmx_rxx_adr_cam4_t;
500
501
502/**
503 * cvmx_agl_gmx_rx#_adr_cam5
504 *
505 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
506 *
507 *
508 * Notes:
509 * Not reset when MIX*_CTL[RESET] is set to 1.
510 *
511 */
512typedef union
513{
514    uint64_t u64;
515    struct cvmx_agl_gmx_rxx_adr_cam5_s
516    {
517#if __BYTE_ORDER == __BIG_ENDIAN
518        uint64_t adr                     : 64;      /**< The DMAC address to match on
519                                                         Each entry contributes 8bits to one of 8 matchers
520                                                         Write transactions to AGL_GMX_RX_ADR_CAM will not
521                                                         change the CSR when AGL_GMX_PRT_CFG[EN] is enabled
522                                                         The CAM matches against unicst or multicst DMAC
523                                                         addresses. */
524#else
525        uint64_t adr                     : 64;
526#endif
527    } s;
528    struct cvmx_agl_gmx_rxx_adr_cam5_s   cn52xx;
529    struct cvmx_agl_gmx_rxx_adr_cam5_s   cn52xxp1;
530    struct cvmx_agl_gmx_rxx_adr_cam5_s   cn56xx;
531    struct cvmx_agl_gmx_rxx_adr_cam5_s   cn56xxp1;
532} cvmx_agl_gmx_rxx_adr_cam5_t;
533
534
535/**
536 * cvmx_agl_gmx_rx#_adr_cam_en
537 *
538 * AGL_GMX_RX_ADR_CAM_EN = Address Filtering Control Enable
539 *
540 *
541 * Notes:
542 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
543 *
544 */
545typedef union
546{
547    uint64_t u64;
548    struct cvmx_agl_gmx_rxx_adr_cam_en_s
549    {
550#if __BYTE_ORDER == __BIG_ENDIAN
551        uint64_t reserved_8_63           : 56;
552        uint64_t en                      : 8;       /**< CAM Entry Enables */
553#else
554        uint64_t en                      : 8;
555        uint64_t reserved_8_63           : 56;
556#endif
557    } s;
558    struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xx;
559    struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xxp1;
560    struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xx;
561    struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xxp1;
562} cvmx_agl_gmx_rxx_adr_cam_en_t;
563
564
565/**
566 * cvmx_agl_gmx_rx#_adr_ctl
567 *
568 * AGL_GMX_RX_ADR_CTL = Address Filtering Control
569 *
570 *
571 * Notes:
572 * * ALGORITHM
573 *   Here is some pseudo code that represents the address filter behavior.
574 *
575 *      @verbatim
576 *      bool dmac_addr_filter(uint8 prt, uint48 dmac) [
577 *        ASSERT(prt >= 0 && prt <= 3);
578 *        if (is_bcst(dmac))                               // broadcast accept
579 *          return (AGL_GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT);
580 *        if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 1)   // multicast reject
581 *          return REJECT;
582 *        if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 2)   // multicast accept
583 *          return ACCEPT;
584 *
585 *        cam_hit = 0;
586 *
587 *        for (i=0; i<8; i++) [
588 *          if (AGL_GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0)
589 *            continue;
590 *          uint48 unswizzled_mac_adr = 0x0;
591 *          for (j=5; j>=0; j--) [
592 *             unswizzled_mac_adr = (unswizzled_mac_adr << 8) | AGL_GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>];
593 *          ]
594 *          if (unswizzled_mac_adr == dmac) [
595 *            cam_hit = 1;
596 *            break;
597 *          ]
598 *        ]
599 *
600 *        if (cam_hit)
601 *          return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT);
602 *        else
603 *          return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT);
604 *      ]
605 *      @endverbatim
606 *
607 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
608 */
609typedef union
610{
611    uint64_t u64;
612    struct cvmx_agl_gmx_rxx_adr_ctl_s
613    {
614#if __BYTE_ORDER == __BIG_ENDIAN
615        uint64_t reserved_4_63           : 60;
616        uint64_t cam_mode                : 1;       /**< Allow or deny DMAC address filter
617                                                         0 = reject the packet on DMAC address match
618                                                         1 = accept the packet on DMAC address match */
619        uint64_t mcst                    : 2;       /**< Multicast Mode
620                                                         0 = Use the Address Filter CAM
621                                                         1 = Force reject all multicast packets
622                                                         2 = Force accept all multicast packets
623                                                         3 = Reserved */
624        uint64_t bcst                    : 1;       /**< Accept All Broadcast Packets */
625#else
626        uint64_t bcst                    : 1;
627        uint64_t mcst                    : 2;
628        uint64_t cam_mode                : 1;
629        uint64_t reserved_4_63           : 60;
630#endif
631    } s;
632    struct cvmx_agl_gmx_rxx_adr_ctl_s    cn52xx;
633    struct cvmx_agl_gmx_rxx_adr_ctl_s    cn52xxp1;
634    struct cvmx_agl_gmx_rxx_adr_ctl_s    cn56xx;
635    struct cvmx_agl_gmx_rxx_adr_ctl_s    cn56xxp1;
636} cvmx_agl_gmx_rxx_adr_ctl_t;
637
638
639/**
640 * cvmx_agl_gmx_rx#_decision
641 *
642 * AGL_GMX_RX_DECISION = The byte count to decide when to accept or filter a packet
643 *
644 *
645 * Notes:
646 * As each byte in a packet is received by GMX, the L2 byte count is compared
647 * against the AGL_GMX_RX_DECISION[CNT].  The L2 byte count is the number of bytes
648 * from the beginning of the L2 header (DMAC).  In normal operation, the L2
649 * header begins after the PREAMBLE+SFD (AGL_GMX_RX_FRM_CTL[PRE_CHK]=1) and any
650 * optional UDD skip data (AGL_GMX_RX_UDD_SKP[LEN]).
651 *
652 * When AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
653 * packet and would require UDD skip length to account for them.
654 *
655 *                                                 L2 Size
656 * Port Mode             <=AGL_GMX_RX_DECISION bytes (default=24)  >AGL_GMX_RX_DECISION bytes (default=24)
657 *
658 * MII/Full Duplex       accept packet                             apply filters
659 *                       no filtering is applied                   accept packet based on DMAC and PAUSE packet filters
660 *
661 * MII/Half Duplex       drop packet                               apply filters
662 *                       packet is unconditionally dropped         accept packet based on DMAC
663 *
664 * where l2_size = MAX(0, total_packet_size - AGL_GMX_RX_UDD_SKP[LEN] - ((AGL_GMX_RX_FRM_CTL[PRE_CHK]==1)*8)
665 *
666 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
667 */
668typedef union
669{
670    uint64_t u64;
671    struct cvmx_agl_gmx_rxx_decision_s
672    {
673#if __BYTE_ORDER == __BIG_ENDIAN
674        uint64_t reserved_5_63           : 59;
675        uint64_t cnt                     : 5;       /**< The byte count to decide when to accept or filter
676                                                         a packet. */
677#else
678        uint64_t cnt                     : 5;
679        uint64_t reserved_5_63           : 59;
680#endif
681    } s;
682    struct cvmx_agl_gmx_rxx_decision_s   cn52xx;
683    struct cvmx_agl_gmx_rxx_decision_s   cn52xxp1;
684    struct cvmx_agl_gmx_rxx_decision_s   cn56xx;
685    struct cvmx_agl_gmx_rxx_decision_s   cn56xxp1;
686} cvmx_agl_gmx_rxx_decision_t;
687
688
689/**
690 * cvmx_agl_gmx_rx#_frm_chk
691 *
692 * AGL_GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame
693 *
694 *
695 * Notes:
696 * If AGL_GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW.
697 *
698 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
699 */
700typedef union
701{
702    uint64_t u64;
703    struct cvmx_agl_gmx_rxx_frm_chk_s
704    {
705#if __BYTE_ORDER == __BIG_ENDIAN
706        uint64_t reserved_9_63           : 55;
707        uint64_t skperr                  : 1;       /**< Skipper error */
708        uint64_t rcverr                  : 1;       /**< Frame was received with MII Data reception error */
709        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
710        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
711        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
712        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
713        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
714        uint64_t reserved_1_1            : 1;
715        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
716#else
717        uint64_t minerr                  : 1;
718        uint64_t reserved_1_1            : 1;
719        uint64_t maxerr                  : 1;
720        uint64_t jabber                  : 1;
721        uint64_t fcserr                  : 1;
722        uint64_t alnerr                  : 1;
723        uint64_t lenerr                  : 1;
724        uint64_t rcverr                  : 1;
725        uint64_t skperr                  : 1;
726        uint64_t reserved_9_63           : 55;
727#endif
728    } s;
729    struct cvmx_agl_gmx_rxx_frm_chk_s    cn52xx;
730    struct cvmx_agl_gmx_rxx_frm_chk_s    cn52xxp1;
731    struct cvmx_agl_gmx_rxx_frm_chk_s    cn56xx;
732    struct cvmx_agl_gmx_rxx_frm_chk_s    cn56xxp1;
733} cvmx_agl_gmx_rxx_frm_chk_t;
734
735
736/**
737 * cvmx_agl_gmx_rx#_frm_ctl
738 *
739 * AGL_GMX_RX_FRM_CTL = Frame Control
740 *
741 *
742 * Notes:
743 * * PRE_CHK
744 *   When set, the MII state expects a typical frame consisting of
745 *   INTER_FRAME=>PREAMBLE(x7)=>SFD(x1)=>DAT.  The state machine watches for
746 *   this exact sequence in order to recognize a valid frame and push frame
747 *   data into the Octane.  There must be exactly 7 PREAMBLE cycles followed by
748 *   the single SFD cycle for the frame to be accepted.
749 *
750 *   When a problem does occur within the PREAMBLE seqeunce, the frame is
751 *   marked as bad and not sent into the core.  The AGL_GMX_RX_INT_REG[PCTERR]
752 *   interrupt is also raised.
753 *
754 * * PRE_STRP
755 *   When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP
756 *   determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
757 *   core as part of the packet.
758 *
759 *   In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
760 *   size when checking against the MIN and MAX bounds.  Furthermore, the bytes
761 *   are skipped when locating the start of the L2 header for DMAC and Control
762 *   frame recognition.
763 *
764 * * CTL_BCK/CTL_DRP
765 *   These bits control how the HW handles incoming PAUSE packets.  Here are
766 *   the most common modes of operation:
767 *     CTL_BCK=1,CTL_DRP=1   - HW does it all
768 *     CTL_BCK=0,CTL_DRP=0   - SW sees all pause frames
769 *     CTL_BCK=0,CTL_DRP=1   - all pause frames are completely ignored
770 *
771 *   These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode.
772 *   Since PAUSE packets only apply to fulldup operation, any PAUSE packet
773 *   would constitute an exception which should be handled by the processing
774 *   cores.  PAUSE packets should not be forwarded.
775 *
776 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
777 */
778typedef union
779{
780    uint64_t u64;
781    struct cvmx_agl_gmx_rxx_frm_ctl_s
782    {
783#if __BYTE_ORDER == __BIG_ENDIAN
784        uint64_t reserved_10_63          : 54;
785        uint64_t pre_align               : 1;       /**< When set, PREAMBLE parser aligns the the SFD byte
786                                                         regardless of the number of previous PREAMBLE
787                                                         nibbles.  In this mode, PREAMBLE can be consumed
788                                                         by the HW so when PRE_ALIGN is set, PRE_FREE,
789                                                         PRE_STRP must be set for correct operation.
790                                                         PRE_CHK must be set to enable this and all
791                                                         PREAMBLE features. */
792        uint64_t pad_len                 : 1;       /**< When set, disables the length check for non-min
793                                                         sized pkts with padding in the client data */
794        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts */
795        uint64_t pre_free                : 1;       /**< When set, PREAMBLE checking is  less strict.
796                                                         0 - 254 cycles of PREAMBLE followed by SFD
797                                                         PRE_FREE must be set if PRE_ALIGN is set.
798                                                         PRE_CHK must be set to enable this and all
799                                                         PREAMBLE features. */
800        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
801        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
802                                                         Multicast address */
803        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
804        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
805        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
806                                                         0=PREAMBLE+SFD is sent to core as part of frame
807                                                         1=PREAMBLE+SFD is dropped
808                                                         PRE_STRP must be set if PRE_ALIGN is set.
809                                                         PRE_CHK must be set to enable this and all
810                                                         PREAMBLE features. */
811        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
812                                                         to begin every frame.  GMX checks that the
813                                                         PREAMBLE is sent correctly */
814#else
815        uint64_t pre_chk                 : 1;
816        uint64_t pre_strp                : 1;
817        uint64_t ctl_drp                 : 1;
818        uint64_t ctl_bck                 : 1;
819        uint64_t ctl_mcst                : 1;
820        uint64_t ctl_smac                : 1;
821        uint64_t pre_free                : 1;
822        uint64_t vlan_len                : 1;
823        uint64_t pad_len                 : 1;
824        uint64_t pre_align               : 1;
825        uint64_t reserved_10_63          : 54;
826#endif
827    } s;
828    struct cvmx_agl_gmx_rxx_frm_ctl_s    cn52xx;
829    struct cvmx_agl_gmx_rxx_frm_ctl_s    cn52xxp1;
830    struct cvmx_agl_gmx_rxx_frm_ctl_s    cn56xx;
831    struct cvmx_agl_gmx_rxx_frm_ctl_s    cn56xxp1;
832} cvmx_agl_gmx_rxx_frm_ctl_t;
833
834
835/**
836 * cvmx_agl_gmx_rx#_frm_max
837 *
838 * AGL_GMX_RX_FRM_MAX = Frame Max length
839 *
840 *
841 * Notes:
842 * When changing the LEN field, be sure that LEN does not exceed
843 * AGL_GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that
844 * are within the maximum length parameter to be rejected because they exceed
845 * the AGL_GMX_RX_JABBER[CNT] limit.
846 *
847 * Notes:
848 *
849 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
850 */
851typedef union
852{
853    uint64_t u64;
854    struct cvmx_agl_gmx_rxx_frm_max_s
855    {
856#if __BYTE_ORDER == __BIG_ENDIAN
857        uint64_t reserved_16_63          : 48;
858        uint64_t len                     : 16;      /**< Byte count for Max-sized frame check
859                                                         Failing packets set the MAXERR interrupt and are
860                                                         optionally sent with opcode==MAXERR
861                                                         LEN <= AGL_GMX_RX_JABBER[CNT] */
862#else
863        uint64_t len                     : 16;
864        uint64_t reserved_16_63          : 48;
865#endif
866    } s;
867    struct cvmx_agl_gmx_rxx_frm_max_s    cn52xx;
868    struct cvmx_agl_gmx_rxx_frm_max_s    cn52xxp1;
869    struct cvmx_agl_gmx_rxx_frm_max_s    cn56xx;
870    struct cvmx_agl_gmx_rxx_frm_max_s    cn56xxp1;
871} cvmx_agl_gmx_rxx_frm_max_t;
872
873
874/**
875 * cvmx_agl_gmx_rx#_frm_min
876 *
877 * AGL_GMX_RX_FRM_MIN = Frame Min length
878 *
879 *
880 * Notes:
881 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
882 *
883 */
884typedef union
885{
886    uint64_t u64;
887    struct cvmx_agl_gmx_rxx_frm_min_s
888    {
889#if __BYTE_ORDER == __BIG_ENDIAN
890        uint64_t reserved_16_63          : 48;
891        uint64_t len                     : 16;      /**< Byte count for Min-sized frame check
892                                                         Failing packets set the MINERR interrupt and are
893                                                         optionally sent with opcode==MINERR */
894#else
895        uint64_t len                     : 16;
896        uint64_t reserved_16_63          : 48;
897#endif
898    } s;
899    struct cvmx_agl_gmx_rxx_frm_min_s    cn52xx;
900    struct cvmx_agl_gmx_rxx_frm_min_s    cn52xxp1;
901    struct cvmx_agl_gmx_rxx_frm_min_s    cn56xx;
902    struct cvmx_agl_gmx_rxx_frm_min_s    cn56xxp1;
903} cvmx_agl_gmx_rxx_frm_min_t;
904
905
906/**
907 * cvmx_agl_gmx_rx#_ifg
908 *
909 * AGL_GMX_RX_IFG = RX Min IFG
910 *
911 *
912 * Notes:
913 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
914 *
915 */
916typedef union
917{
918    uint64_t u64;
919    struct cvmx_agl_gmx_rxx_ifg_s
920    {
921#if __BYTE_ORDER == __BIG_ENDIAN
922        uint64_t reserved_4_63           : 60;
923        uint64_t ifg                     : 4;       /**< Min IFG between packets used to determine IFGERR */
924#else
925        uint64_t ifg                     : 4;
926        uint64_t reserved_4_63           : 60;
927#endif
928    } s;
929    struct cvmx_agl_gmx_rxx_ifg_s        cn52xx;
930    struct cvmx_agl_gmx_rxx_ifg_s        cn52xxp1;
931    struct cvmx_agl_gmx_rxx_ifg_s        cn56xx;
932    struct cvmx_agl_gmx_rxx_ifg_s        cn56xxp1;
933} cvmx_agl_gmx_rxx_ifg_t;
934
935
936/**
937 * cvmx_agl_gmx_rx#_int_en
938 *
939 * AGL_GMX_RX_INT_EN = Interrupt Enable
940 *
941 *
942 * Notes:
943 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
944 *
945 */
946typedef union
947{
948    uint64_t u64;
949    struct cvmx_agl_gmx_rxx_int_en_s
950    {
951#if __BYTE_ORDER == __BIG_ENDIAN
952        uint64_t reserved_20_63          : 44;
953        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
954        uint64_t reserved_16_18          : 3;
955        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation */
956        uint64_t coldet                  : 1;       /**< Collision Detection */
957        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
958        uint64_t rsverr                  : 1;       /**< MII reserved opcodes */
959        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
960        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow */
961        uint64_t reserved_9_9            : 1;
962        uint64_t skperr                  : 1;       /**< Skipper error */
963        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
964        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
965        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
966        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
967        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
968        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
969        uint64_t reserved_1_1            : 1;
970        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
971#else
972        uint64_t minerr                  : 1;
973        uint64_t reserved_1_1            : 1;
974        uint64_t maxerr                  : 1;
975        uint64_t jabber                  : 1;
976        uint64_t fcserr                  : 1;
977        uint64_t alnerr                  : 1;
978        uint64_t lenerr                  : 1;
979        uint64_t rcverr                  : 1;
980        uint64_t skperr                  : 1;
981        uint64_t reserved_9_9            : 1;
982        uint64_t ovrerr                  : 1;
983        uint64_t pcterr                  : 1;
984        uint64_t rsverr                  : 1;
985        uint64_t falerr                  : 1;
986        uint64_t coldet                  : 1;
987        uint64_t ifgerr                  : 1;
988        uint64_t reserved_16_18          : 3;
989        uint64_t pause_drp               : 1;
990        uint64_t reserved_20_63          : 44;
991#endif
992    } s;
993    struct cvmx_agl_gmx_rxx_int_en_s     cn52xx;
994    struct cvmx_agl_gmx_rxx_int_en_s     cn52xxp1;
995    struct cvmx_agl_gmx_rxx_int_en_s     cn56xx;
996    struct cvmx_agl_gmx_rxx_int_en_s     cn56xxp1;
997} cvmx_agl_gmx_rxx_int_en_t;
998
999
1000/**
1001 * cvmx_agl_gmx_rx#_int_reg
1002 *
1003 * AGL_GMX_RX_INT_REG = Interrupt Register
1004 *
1005 *
1006 * Notes:
1007 * (1) exceptions will only be raised to the control processor if the
1008 *     corresponding bit in the AGL_GMX_RX_INT_EN register is set.
1009 *
1010 * (2) exception conditions 10:0 can also set the rcv/opcode in the received
1011 *     packet's workQ entry.  The AGL_GMX_RX_FRM_CHK register provides a bit mask
1012 *     for configuring which conditions set the error.
1013 *
1014 * (3) in half duplex operation, the expectation is that collisions will appear
1015 *     as MINERRs.
1016 *
1017 * (4) JABBER - An RX Jabber error indicates that a packet was received which
1018 *              is longer than the maximum allowed packet as defined by the
1019 *              system.  GMX will truncate the packet at the JABBER count.
1020 *              Failure to do so could lead to system instabilty.
1021 *
1022 * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS >
1023 *              AGL_GMX_RX_FRM_MAX.  For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS
1024 *              > AGL_GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED.
1025 *
1026 * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < AGL_GMX_RX_FRM_MIN.
1027 *
1028 * (8) ALNERR - Indicates that the packet received was not an integer number of
1029 *              bytes.  If FCS checking is enabled, ALNERR will only assert if
1030 *              the FCS is bad.  If FCS checking is disabled, ALNERR will
1031 *              assert in all non-integer frame cases.
1032 *
1033 * (9) Collisions - Collisions can only occur in half-duplex mode.  A collision
1034 *                  is assumed by the receiver when the received
1035 *                  frame < AGL_GMX_RX_FRM_MIN - this is normally a MINERR
1036 *
1037 * (A) LENERR - Length errors occur when the received packet does not match the
1038 *              length field.  LENERR is only checked for packets between 64
1039 *              and 1500 bytes.  For untagged frames, the length must exact
1040 *              match.  For tagged frames the length or length+4 must match.
1041 *
1042 * (B) PCTERR - checks that the frame transtions from PREAMBLE=>SFD=>DATA.
1043 *              Does not check the number of PREAMBLE cycles.
1044 *
1045 * (C) OVRERR - Not to be included in the HRM
1046 *
1047 *              OVRERR is an architectural assertion check internal to GMX to
1048 *              make sure no assumption was violated.  In a correctly operating
1049 *              system, this interrupt can never fire.
1050 *
1051 *              GMX has an internal arbiter which selects which of 4 ports to
1052 *              buffer in the main RX FIFO.  If we normally buffer 8 bytes,
1053 *              then each port will typically push a tick every 8 cycles - if
1054 *              the packet interface is going as fast as possible.  If there
1055 *              are four ports, they push every two cycles.  So that's the
1056 *              assumption.  That the inbound module will always be able to
1057 *              consume the tick before another is produced.  If that doesn't
1058 *              happen - that's when OVRERR will assert.
1059 *
1060 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1061 */
1062typedef union
1063{
1064    uint64_t u64;
1065    struct cvmx_agl_gmx_rxx_int_reg_s
1066    {
1067#if __BYTE_ORDER == __BIG_ENDIAN
1068        uint64_t reserved_20_63          : 44;
1069        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
1070        uint64_t reserved_16_18          : 3;
1071        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
1072                                                         Does not necessarily indicate a failure */
1073        uint64_t coldet                  : 1;       /**< Collision Detection */
1074        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
1075        uint64_t rsverr                  : 1;       /**< MII reserved opcodes */
1076        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
1077        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
1078                                                         This interrupt should never assert */
1079        uint64_t reserved_9_9            : 1;
1080        uint64_t skperr                  : 1;       /**< Skipper error */
1081        uint64_t rcverr                  : 1;       /**< Frame was received with MII Data reception error */
1082        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
1083        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
1084        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
1085        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
1086        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
1087        uint64_t reserved_1_1            : 1;
1088        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
1089#else
1090        uint64_t minerr                  : 1;
1091        uint64_t reserved_1_1            : 1;
1092        uint64_t maxerr                  : 1;
1093        uint64_t jabber                  : 1;
1094        uint64_t fcserr                  : 1;
1095        uint64_t alnerr                  : 1;
1096        uint64_t lenerr                  : 1;
1097        uint64_t rcverr                  : 1;
1098        uint64_t skperr                  : 1;
1099        uint64_t reserved_9_9            : 1;
1100        uint64_t ovrerr                  : 1;
1101        uint64_t pcterr                  : 1;
1102        uint64_t rsverr                  : 1;
1103        uint64_t falerr                  : 1;
1104        uint64_t coldet                  : 1;
1105        uint64_t ifgerr                  : 1;
1106        uint64_t reserved_16_18          : 3;
1107        uint64_t pause_drp               : 1;
1108        uint64_t reserved_20_63          : 44;
1109#endif
1110    } s;
1111    struct cvmx_agl_gmx_rxx_int_reg_s    cn52xx;
1112    struct cvmx_agl_gmx_rxx_int_reg_s    cn52xxp1;
1113    struct cvmx_agl_gmx_rxx_int_reg_s    cn56xx;
1114    struct cvmx_agl_gmx_rxx_int_reg_s    cn56xxp1;
1115} cvmx_agl_gmx_rxx_int_reg_t;
1116
1117
1118/**
1119 * cvmx_agl_gmx_rx#_jabber
1120 *
1121 * AGL_GMX_RX_JABBER = The max size packet after which GMX will truncate
1122 *
1123 *
1124 * Notes:
1125 * CNT must be 8-byte aligned such that CNT[2:0] == 0
1126 *
1127 *   The packet that will be sent to the packet input logic will have an
1128 *   additionl 8 bytes if AGL_GMX_RX_FRM_CTL[PRE_CHK] is set and
1129 *   AGL_GMX_RX_FRM_CTL[PRE_STRP] is clear.  The max packet that will be sent is
1130 *   defined as...
1131 *
1132 *        max_sized_packet = AGL_GMX_RX_JABBER[CNT]+((AGL_GMX_RX_FRM_CTL[PRE_CHK] & !AGL_GMX_RX_FRM_CTL[PRE_STRP])*8)
1133 *
1134 *   Be sure the CNT field value is at least as large as the
1135 *   AGL_GMX_RX_FRM_MAX[LEN] value. Failure to meet this constraint will cause
1136 *   packets that are within the AGL_GMX_RX_FRM_MAX[LEN] length to be rejected
1137 *   because they exceed the CNT limit.
1138 *
1139 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1140 */
1141typedef union
1142{
1143    uint64_t u64;
1144    struct cvmx_agl_gmx_rxx_jabber_s
1145    {
1146#if __BYTE_ORDER == __BIG_ENDIAN
1147        uint64_t reserved_16_63          : 48;
1148        uint64_t cnt                     : 16;      /**< Byte count for jabber check
1149                                                         Failing packets set the JABBER interrupt and are
1150                                                         optionally sent with opcode==JABBER
1151                                                         GMX will truncate the packet to CNT bytes
1152                                                         CNT >= AGL_GMX_RX_FRM_MAX[LEN] */
1153#else
1154        uint64_t cnt                     : 16;
1155        uint64_t reserved_16_63          : 48;
1156#endif
1157    } s;
1158    struct cvmx_agl_gmx_rxx_jabber_s     cn52xx;
1159    struct cvmx_agl_gmx_rxx_jabber_s     cn52xxp1;
1160    struct cvmx_agl_gmx_rxx_jabber_s     cn56xx;
1161    struct cvmx_agl_gmx_rxx_jabber_s     cn56xxp1;
1162} cvmx_agl_gmx_rxx_jabber_t;
1163
1164
1165/**
1166 * cvmx_agl_gmx_rx#_pause_drop_time
1167 *
1168 * AGL_GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition
1169 *
1170 *
1171 * Notes:
1172 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1173 *
1174 */
1175typedef union
1176{
1177    uint64_t u64;
1178    struct cvmx_agl_gmx_rxx_pause_drop_time_s
1179    {
1180#if __BYTE_ORDER == __BIG_ENDIAN
1181        uint64_t reserved_16_63          : 48;
1182        uint64_t status                  : 16;      /**< Time extracted from the dropped PAUSE packet */
1183#else
1184        uint64_t status                  : 16;
1185        uint64_t reserved_16_63          : 48;
1186#endif
1187    } s;
1188    struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xx;
1189    struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xxp1;
1190    struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xx;
1191    struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xxp1;
1192} cvmx_agl_gmx_rxx_pause_drop_time_t;
1193
1194
1195/**
1196 * cvmx_agl_gmx_rx#_stats_ctl
1197 *
1198 * AGL_GMX_RX_STATS_CTL = RX Stats Control register
1199 *
1200 *
1201 * Notes:
1202 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1203 *
1204 */
1205typedef union
1206{
1207    uint64_t u64;
1208    struct cvmx_agl_gmx_rxx_stats_ctl_s
1209    {
1210#if __BYTE_ORDER == __BIG_ENDIAN
1211        uint64_t reserved_1_63           : 63;
1212        uint64_t rd_clr                  : 1;       /**< RX Stats registers will clear on reads */
1213#else
1214        uint64_t rd_clr                  : 1;
1215        uint64_t reserved_1_63           : 63;
1216#endif
1217    } s;
1218    struct cvmx_agl_gmx_rxx_stats_ctl_s  cn52xx;
1219    struct cvmx_agl_gmx_rxx_stats_ctl_s  cn52xxp1;
1220    struct cvmx_agl_gmx_rxx_stats_ctl_s  cn56xx;
1221    struct cvmx_agl_gmx_rxx_stats_ctl_s  cn56xxp1;
1222} cvmx_agl_gmx_rxx_stats_ctl_t;
1223
1224
1225/**
1226 * cvmx_agl_gmx_rx#_stats_octs
1227 *
1228 * Notes:
1229 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1230 * - Counters will wrap
1231 * - Not reset when MIX*_CTL[RESET] is set to 1.
1232 */
1233typedef union
1234{
1235    uint64_t u64;
1236    struct cvmx_agl_gmx_rxx_stats_octs_s
1237    {
1238#if __BYTE_ORDER == __BIG_ENDIAN
1239        uint64_t reserved_48_63          : 16;
1240        uint64_t cnt                     : 48;      /**< Octet count of received good packets */
1241#else
1242        uint64_t cnt                     : 48;
1243        uint64_t reserved_48_63          : 16;
1244#endif
1245    } s;
1246    struct cvmx_agl_gmx_rxx_stats_octs_s cn52xx;
1247    struct cvmx_agl_gmx_rxx_stats_octs_s cn52xxp1;
1248    struct cvmx_agl_gmx_rxx_stats_octs_s cn56xx;
1249    struct cvmx_agl_gmx_rxx_stats_octs_s cn56xxp1;
1250} cvmx_agl_gmx_rxx_stats_octs_t;
1251
1252
1253/**
1254 * cvmx_agl_gmx_rx#_stats_octs_ctl
1255 *
1256 * Notes:
1257 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1258 * - Counters will wrap
1259 * - Not reset when MIX*_CTL[RESET] is set to 1.
1260 */
1261typedef union
1262{
1263    uint64_t u64;
1264    struct cvmx_agl_gmx_rxx_stats_octs_ctl_s
1265    {
1266#if __BYTE_ORDER == __BIG_ENDIAN
1267        uint64_t reserved_48_63          : 16;
1268        uint64_t cnt                     : 48;      /**< Octet count of received pause packets */
1269#else
1270        uint64_t cnt                     : 48;
1271        uint64_t reserved_48_63          : 16;
1272#endif
1273    } s;
1274    struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xx;
1275    struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xxp1;
1276    struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xx;
1277    struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xxp1;
1278} cvmx_agl_gmx_rxx_stats_octs_ctl_t;
1279
1280
1281/**
1282 * cvmx_agl_gmx_rx#_stats_octs_dmac
1283 *
1284 * Notes:
1285 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1286 * - Counters will wrap
1287 * - Not reset when MIX*_CTL[RESET] is set to 1.
1288 */
1289typedef union
1290{
1291    uint64_t u64;
1292    struct cvmx_agl_gmx_rxx_stats_octs_dmac_s
1293    {
1294#if __BYTE_ORDER == __BIG_ENDIAN
1295        uint64_t reserved_48_63          : 16;
1296        uint64_t cnt                     : 48;      /**< Octet count of filtered dmac packets */
1297#else
1298        uint64_t cnt                     : 48;
1299        uint64_t reserved_48_63          : 16;
1300#endif
1301    } s;
1302    struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xx;
1303    struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xxp1;
1304    struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xx;
1305    struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xxp1;
1306} cvmx_agl_gmx_rxx_stats_octs_dmac_t;
1307
1308
1309/**
1310 * cvmx_agl_gmx_rx#_stats_octs_drp
1311 *
1312 * Notes:
1313 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1314 * - Counters will wrap
1315 * - Not reset when MIX*_CTL[RESET] is set to 1.
1316 */
1317typedef union
1318{
1319    uint64_t u64;
1320    struct cvmx_agl_gmx_rxx_stats_octs_drp_s
1321    {
1322#if __BYTE_ORDER == __BIG_ENDIAN
1323        uint64_t reserved_48_63          : 16;
1324        uint64_t cnt                     : 48;      /**< Octet count of dropped packets */
1325#else
1326        uint64_t cnt                     : 48;
1327        uint64_t reserved_48_63          : 16;
1328#endif
1329    } s;
1330    struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xx;
1331    struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xxp1;
1332    struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xx;
1333    struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xxp1;
1334} cvmx_agl_gmx_rxx_stats_octs_drp_t;
1335
1336
1337/**
1338 * cvmx_agl_gmx_rx#_stats_pkts
1339 *
1340 * AGL_GMX_RX_STATS_PKTS
1341 *
1342 * Count of good received packets - packets that are not recognized as PAUSE
1343 * packets, dropped due the DMAC filter, dropped due FIFO full status, or
1344 * have any other OPCODE (FCS, Length, etc).
1345 *
1346 * Notes:
1347 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1348 * - Counters will wrap
1349 * - Not reset when MIX*_CTL[RESET] is set to 1.
1350 */
1351typedef union
1352{
1353    uint64_t u64;
1354    struct cvmx_agl_gmx_rxx_stats_pkts_s
1355    {
1356#if __BYTE_ORDER == __BIG_ENDIAN
1357        uint64_t reserved_32_63          : 32;
1358        uint64_t cnt                     : 32;      /**< Count of received good packets */
1359#else
1360        uint64_t cnt                     : 32;
1361        uint64_t reserved_32_63          : 32;
1362#endif
1363    } s;
1364    struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xx;
1365    struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xxp1;
1366    struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xx;
1367    struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xxp1;
1368} cvmx_agl_gmx_rxx_stats_pkts_t;
1369
1370
1371/**
1372 * cvmx_agl_gmx_rx#_stats_pkts_bad
1373 *
1374 * AGL_GMX_RX_STATS_PKTS_BAD
1375 *
1376 * Count of all packets received with some error that were not dropped
1377 * either due to the dmac filter or lack of room in the receive FIFO.
1378 *
1379 * Notes:
1380 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1381 * - Counters will wrap
1382 * - Not reset when MIX*_CTL[RESET] is set to 1.
1383 */
1384typedef union
1385{
1386    uint64_t u64;
1387    struct cvmx_agl_gmx_rxx_stats_pkts_bad_s
1388    {
1389#if __BYTE_ORDER == __BIG_ENDIAN
1390        uint64_t reserved_32_63          : 32;
1391        uint64_t cnt                     : 32;      /**< Count of bad packets */
1392#else
1393        uint64_t cnt                     : 32;
1394        uint64_t reserved_32_63          : 32;
1395#endif
1396    } s;
1397    struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xx;
1398    struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xxp1;
1399    struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xx;
1400    struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xxp1;
1401} cvmx_agl_gmx_rxx_stats_pkts_bad_t;
1402
1403
1404/**
1405 * cvmx_agl_gmx_rx#_stats_pkts_ctl
1406 *
1407 * AGL_GMX_RX_STATS_PKTS_CTL
1408 *
1409 * Count of all packets received that were recognized as Flow Control or
1410 * PAUSE packets.  PAUSE packets with any kind of error are counted in
1411 * AGL_GMX_RX_STATS_PKTS_BAD.  Pause packets can be optionally dropped or
1412 * forwarded based on the AGL_GMX_RX_FRM_CTL[CTL_DRP] bit.  This count
1413 * increments regardless of whether the packet is dropped.  Pause packets
1414 * will never be counted in AGL_GMX_RX_STATS_PKTS.  Packets dropped due the dmac
1415 * filter will be counted in AGL_GMX_RX_STATS_PKTS_DMAC and not here.
1416 *
1417 * Notes:
1418 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1419 * - Counters will wrap
1420 * - Not reset when MIX*_CTL[RESET] is set to 1.
1421 */
1422typedef union
1423{
1424    uint64_t u64;
1425    struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s
1426    {
1427#if __BYTE_ORDER == __BIG_ENDIAN
1428        uint64_t reserved_32_63          : 32;
1429        uint64_t cnt                     : 32;      /**< Count of received pause packets */
1430#else
1431        uint64_t cnt                     : 32;
1432        uint64_t reserved_32_63          : 32;
1433#endif
1434    } s;
1435    struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xx;
1436    struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xxp1;
1437    struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xx;
1438    struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xxp1;
1439} cvmx_agl_gmx_rxx_stats_pkts_ctl_t;
1440
1441
1442/**
1443 * cvmx_agl_gmx_rx#_stats_pkts_dmac
1444 *
1445 * AGL_GMX_RX_STATS_PKTS_DMAC
1446 *
1447 * Count of all packets received that were dropped by the dmac filter.
1448 * Packets that match the DMAC will be dropped and counted here regardless
1449 * of if they were bad packets.  These packets will never be counted in
1450 * AGL_GMX_RX_STATS_PKTS.
1451 *
1452 * Some packets that were not able to satisify the DECISION_CNT may not
1453 * actually be dropped by Octeon, but they will be counted here as if they
1454 * were dropped.
1455 *
1456 * Notes:
1457 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1458 * - Counters will wrap
1459 * - Not reset when MIX*_CTL[RESET] is set to 1.
1460 */
1461typedef union
1462{
1463    uint64_t u64;
1464    struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s
1465    {
1466#if __BYTE_ORDER == __BIG_ENDIAN
1467        uint64_t reserved_32_63          : 32;
1468        uint64_t cnt                     : 32;      /**< Count of filtered dmac packets */
1469#else
1470        uint64_t cnt                     : 32;
1471        uint64_t reserved_32_63          : 32;
1472#endif
1473    } s;
1474    struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xx;
1475    struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xxp1;
1476    struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xx;
1477    struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xxp1;
1478} cvmx_agl_gmx_rxx_stats_pkts_dmac_t;
1479
1480
1481/**
1482 * cvmx_agl_gmx_rx#_stats_pkts_drp
1483 *
1484 * AGL_GMX_RX_STATS_PKTS_DRP
1485 *
1486 * Count of all packets received that were dropped due to a full receive
1487 * FIFO.  This counts good and bad packets received - all packets dropped by
1488 * the FIFO.  It does not count packets dropped by the dmac or pause packet
1489 * filters.
1490 *
1491 * Notes:
1492 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1493 * - Counters will wrap
1494 * - Not reset when MIX*_CTL[RESET] is set to 1.
1495 */
1496typedef union
1497{
1498    uint64_t u64;
1499    struct cvmx_agl_gmx_rxx_stats_pkts_drp_s
1500    {
1501#if __BYTE_ORDER == __BIG_ENDIAN
1502        uint64_t reserved_32_63          : 32;
1503        uint64_t cnt                     : 32;      /**< Count of dropped packets */
1504#else
1505        uint64_t cnt                     : 32;
1506        uint64_t reserved_32_63          : 32;
1507#endif
1508    } s;
1509    struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xx;
1510    struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xxp1;
1511    struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xx;
1512    struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xxp1;
1513} cvmx_agl_gmx_rxx_stats_pkts_drp_t;
1514
1515
1516/**
1517 * cvmx_agl_gmx_rx#_udd_skp
1518 *
1519 * AGL_GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data
1520 *
1521 *
1522 * Notes:
1523 * (1) The skip bytes are part of the packet and will be sent down the NCB
1524 *     packet interface and will be handled by PKI.
1525 *
1526 * (2) The system can determine if the UDD bytes are included in the FCS check
1527 *     by using the FCSSEL field - if the FCS check is enabled.
1528 *
1529 * (3) Assume that the preamble/sfd is always at the start of the frame - even
1530 *     before UDD bytes.  In most cases, there will be no preamble in these
1531 *     cases since it will be MII to MII communication without a PHY
1532 *     involved.
1533 *
1534 * (4) We can still do address filtering and control packet filtering is the
1535 *     user desires.
1536 *
1537 * (5) UDD_SKP must be 0 in half-duplex operation unless
1538 *     AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear.  If AGL_GMX_RX_FRM_CTL[PRE_CHK] is set,
1539 *     then UDD_SKP will normally be 8.
1540 *
1541 * (6) In all cases, the UDD bytes will be sent down the packet interface as
1542 *     part of the packet.  The UDD bytes are never stripped from the actual
1543 *     packet.
1544 *
1545 * (7) If LEN != 0, then AGL_GMX_RX_FRM_CHK[LENERR] will be disabled and AGL_GMX_RX_INT_REG[LENERR] will be zero
1546 *
1547 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1548 */
1549typedef union
1550{
1551    uint64_t u64;
1552    struct cvmx_agl_gmx_rxx_udd_skp_s
1553    {
1554#if __BYTE_ORDER == __BIG_ENDIAN
1555        uint64_t reserved_9_63           : 55;
1556        uint64_t fcssel                  : 1;       /**< Include the skip bytes in the FCS calculation
1557                                                         0 = all skip bytes are included in FCS
1558                                                         1 = the skip bytes are not included in FCS */
1559        uint64_t reserved_7_7            : 1;
1560        uint64_t len                     : 7;       /**< Amount of User-defined data before the start of
1561                                                         the L2 data.  Zero means L2 comes first.
1562                                                         Max value is 64. */
1563#else
1564        uint64_t len                     : 7;
1565        uint64_t reserved_7_7            : 1;
1566        uint64_t fcssel                  : 1;
1567        uint64_t reserved_9_63           : 55;
1568#endif
1569    } s;
1570    struct cvmx_agl_gmx_rxx_udd_skp_s    cn52xx;
1571    struct cvmx_agl_gmx_rxx_udd_skp_s    cn52xxp1;
1572    struct cvmx_agl_gmx_rxx_udd_skp_s    cn56xx;
1573    struct cvmx_agl_gmx_rxx_udd_skp_s    cn56xxp1;
1574} cvmx_agl_gmx_rxx_udd_skp_t;
1575
1576
1577/**
1578 * cvmx_agl_gmx_rx_bp_drop#
1579 *
1580 * AGL_GMX_RX_BP_DROP = FIFO mark for packet drop
1581 *
1582 *
1583 * Notes:
1584 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1585 *
1586 */
1587typedef union
1588{
1589    uint64_t u64;
1590    struct cvmx_agl_gmx_rx_bp_dropx_s
1591    {
1592#if __BYTE_ORDER == __BIG_ENDIAN
1593        uint64_t reserved_6_63           : 58;
1594        uint64_t mark                    : 6;       /**< Number of 8B ticks to reserve in the RX FIFO.
1595                                                         When the FIFO exceeds this count, packets will
1596                                                         be dropped and not buffered.
1597                                                         MARK should typically be programmed to 2.
1598                                                         Failure to program correctly can lead to system
1599                                                         instability. */
1600#else
1601        uint64_t mark                    : 6;
1602        uint64_t reserved_6_63           : 58;
1603#endif
1604    } s;
1605    struct cvmx_agl_gmx_rx_bp_dropx_s    cn52xx;
1606    struct cvmx_agl_gmx_rx_bp_dropx_s    cn52xxp1;
1607    struct cvmx_agl_gmx_rx_bp_dropx_s    cn56xx;
1608    struct cvmx_agl_gmx_rx_bp_dropx_s    cn56xxp1;
1609} cvmx_agl_gmx_rx_bp_dropx_t;
1610
1611
1612/**
1613 * cvmx_agl_gmx_rx_bp_off#
1614 *
1615 * AGL_GMX_RX_BP_OFF = Lowater mark for packet drop
1616 *
1617 *
1618 * Notes:
1619 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1620 *
1621 */
1622typedef union
1623{
1624    uint64_t u64;
1625    struct cvmx_agl_gmx_rx_bp_offx_s
1626    {
1627#if __BYTE_ORDER == __BIG_ENDIAN
1628        uint64_t reserved_6_63           : 58;
1629        uint64_t mark                    : 6;       /**< Water mark (8B ticks) to deassert backpressure */
1630#else
1631        uint64_t mark                    : 6;
1632        uint64_t reserved_6_63           : 58;
1633#endif
1634    } s;
1635    struct cvmx_agl_gmx_rx_bp_offx_s     cn52xx;
1636    struct cvmx_agl_gmx_rx_bp_offx_s     cn52xxp1;
1637    struct cvmx_agl_gmx_rx_bp_offx_s     cn56xx;
1638    struct cvmx_agl_gmx_rx_bp_offx_s     cn56xxp1;
1639} cvmx_agl_gmx_rx_bp_offx_t;
1640
1641
1642/**
1643 * cvmx_agl_gmx_rx_bp_on#
1644 *
1645 * AGL_GMX_RX_BP_ON = Hiwater mark for port/interface backpressure
1646 *
1647 *
1648 * Notes:
1649 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1650 *
1651 */
1652typedef union
1653{
1654    uint64_t u64;
1655    struct cvmx_agl_gmx_rx_bp_onx_s
1656    {
1657#if __BYTE_ORDER == __BIG_ENDIAN
1658        uint64_t reserved_9_63           : 55;
1659        uint64_t mark                    : 9;       /**< Hiwater mark (8B ticks) for backpressure. */
1660#else
1661        uint64_t mark                    : 9;
1662        uint64_t reserved_9_63           : 55;
1663#endif
1664    } s;
1665    struct cvmx_agl_gmx_rx_bp_onx_s      cn52xx;
1666    struct cvmx_agl_gmx_rx_bp_onx_s      cn52xxp1;
1667    struct cvmx_agl_gmx_rx_bp_onx_s      cn56xx;
1668    struct cvmx_agl_gmx_rx_bp_onx_s      cn56xxp1;
1669} cvmx_agl_gmx_rx_bp_onx_t;
1670
1671
1672/**
1673 * cvmx_agl_gmx_rx_prt_info
1674 *
1675 * AGL_GMX_RX_PRT_INFO = state information for the ports
1676 *
1677 *
1678 * Notes:
1679 * COMMIT[0], DROP[0] will be reset when MIX0_CTL[RESET] is set to 1.
1680 * COMMIT[1], DROP[1] will be reset when MIX1_CTL[RESET] is set to 1.
1681 */
1682typedef union
1683{
1684    uint64_t u64;
1685    struct cvmx_agl_gmx_rx_prt_info_s
1686    {
1687#if __BYTE_ORDER == __BIG_ENDIAN
1688        uint64_t reserved_18_63          : 46;
1689        uint64_t drop                    : 2;       /**< Port indication that data was dropped */
1690        uint64_t reserved_2_15           : 14;
1691        uint64_t commit                  : 2;       /**< Port indication that SOP was accepted */
1692#else
1693        uint64_t commit                  : 2;
1694        uint64_t reserved_2_15           : 14;
1695        uint64_t drop                    : 2;
1696        uint64_t reserved_18_63          : 46;
1697#endif
1698    } s;
1699    struct cvmx_agl_gmx_rx_prt_info_s    cn52xx;
1700    struct cvmx_agl_gmx_rx_prt_info_s    cn52xxp1;
1701    struct cvmx_agl_gmx_rx_prt_info_cn56xx
1702    {
1703#if __BYTE_ORDER == __BIG_ENDIAN
1704        uint64_t reserved_17_63          : 47;
1705        uint64_t drop                    : 1;       /**< Port indication that data was dropped */
1706        uint64_t reserved_1_15           : 15;
1707        uint64_t commit                  : 1;       /**< Port indication that SOP was accepted */
1708#else
1709        uint64_t commit                  : 1;
1710        uint64_t reserved_1_15           : 15;
1711        uint64_t drop                    : 1;
1712        uint64_t reserved_17_63          : 47;
1713#endif
1714    } cn56xx;
1715    struct cvmx_agl_gmx_rx_prt_info_cn56xx cn56xxp1;
1716} cvmx_agl_gmx_rx_prt_info_t;
1717
1718
1719/**
1720 * cvmx_agl_gmx_rx_tx_status
1721 *
1722 * AGL_GMX_RX_TX_STATUS = GMX RX/TX Status
1723 *
1724 *
1725 * Notes:
1726 * RX[0], TX[0] will be reset when MIX0_CTL[RESET] is set to 1.
1727 * RX[1], TX[1] will be reset when MIX1_CTL[RESET] is set to 1.
1728 */
1729typedef union
1730{
1731    uint64_t u64;
1732    struct cvmx_agl_gmx_rx_tx_status_s
1733    {
1734#if __BYTE_ORDER == __BIG_ENDIAN
1735        uint64_t reserved_6_63           : 58;
1736        uint64_t tx                      : 2;       /**< Transmit data since last read */
1737        uint64_t reserved_2_3            : 2;
1738        uint64_t rx                      : 2;       /**< Receive data since last read */
1739#else
1740        uint64_t rx                      : 2;
1741        uint64_t reserved_2_3            : 2;
1742        uint64_t tx                      : 2;
1743        uint64_t reserved_6_63           : 58;
1744#endif
1745    } s;
1746    struct cvmx_agl_gmx_rx_tx_status_s   cn52xx;
1747    struct cvmx_agl_gmx_rx_tx_status_s   cn52xxp1;
1748    struct cvmx_agl_gmx_rx_tx_status_cn56xx
1749    {
1750#if __BYTE_ORDER == __BIG_ENDIAN
1751        uint64_t reserved_5_63           : 59;
1752        uint64_t tx                      : 1;       /**< Transmit data since last read */
1753        uint64_t reserved_1_3            : 3;
1754        uint64_t rx                      : 1;       /**< Receive data since last read */
1755#else
1756        uint64_t rx                      : 1;
1757        uint64_t reserved_1_3            : 3;
1758        uint64_t tx                      : 1;
1759        uint64_t reserved_5_63           : 59;
1760#endif
1761    } cn56xx;
1762    struct cvmx_agl_gmx_rx_tx_status_cn56xx cn56xxp1;
1763} cvmx_agl_gmx_rx_tx_status_t;
1764
1765
1766/**
1767 * cvmx_agl_gmx_smac#
1768 *
1769 * AGL_GMX_SMAC = MII SMAC
1770 *
1771 *
1772 * Notes:
1773 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1774 *
1775 */
1776typedef union
1777{
1778    uint64_t u64;
1779    struct cvmx_agl_gmx_smacx_s
1780    {
1781#if __BYTE_ORDER == __BIG_ENDIAN
1782        uint64_t reserved_48_63          : 16;
1783        uint64_t smac                    : 48;      /**< The SMAC field is used for generating and
1784                                                         accepting Control Pause packets */
1785#else
1786        uint64_t smac                    : 48;
1787        uint64_t reserved_48_63          : 16;
1788#endif
1789    } s;
1790    struct cvmx_agl_gmx_smacx_s          cn52xx;
1791    struct cvmx_agl_gmx_smacx_s          cn52xxp1;
1792    struct cvmx_agl_gmx_smacx_s          cn56xx;
1793    struct cvmx_agl_gmx_smacx_s          cn56xxp1;
1794} cvmx_agl_gmx_smacx_t;
1795
1796
1797/**
1798 * cvmx_agl_gmx_stat_bp
1799 *
1800 * AGL_GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation
1801 *
1802 *
1803 * Notes:
1804 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
1805 *
1806 */
1807typedef union
1808{
1809    uint64_t u64;
1810    struct cvmx_agl_gmx_stat_bp_s
1811    {
1812#if __BYTE_ORDER == __BIG_ENDIAN
1813        uint64_t reserved_17_63          : 47;
1814        uint64_t bp                      : 1;       /**< Current BP state */
1815        uint64_t cnt                     : 16;      /**< Number of cycles that BP has been asserted
1816                                                         Saturating counter */
1817#else
1818        uint64_t cnt                     : 16;
1819        uint64_t bp                      : 1;
1820        uint64_t reserved_17_63          : 47;
1821#endif
1822    } s;
1823    struct cvmx_agl_gmx_stat_bp_s        cn52xx;
1824    struct cvmx_agl_gmx_stat_bp_s        cn52xxp1;
1825    struct cvmx_agl_gmx_stat_bp_s        cn56xx;
1826    struct cvmx_agl_gmx_stat_bp_s        cn56xxp1;
1827} cvmx_agl_gmx_stat_bp_t;
1828
1829
1830/**
1831 * cvmx_agl_gmx_tx#_append
1832 *
1833 * AGL_GMX_TX_APPEND = MII TX Append Control
1834 *
1835 *
1836 * Notes:
1837 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1838 *
1839 */
1840typedef union
1841{
1842    uint64_t u64;
1843    struct cvmx_agl_gmx_txx_append_s
1844    {
1845#if __BYTE_ORDER == __BIG_ENDIAN
1846        uint64_t reserved_4_63           : 60;
1847        uint64_t force_fcs               : 1;       /**< Append the Ethernet FCS on each pause packet
1848                                                         when FCS is clear.  Pause packets are normally
1849                                                         padded to 60 bytes.  If
1850                                                         AGL_GMX_TX_MIN_PKT[MIN_SIZE] exceeds 59, then
1851                                                         FORCE_FCS will not be used. */
1852        uint64_t fcs                     : 1;       /**< Append the Ethernet FCS on each packet */
1853        uint64_t pad                     : 1;       /**< Append PAD bytes such that min sized */
1854        uint64_t preamble                : 1;       /**< Prepend the Ethernet preamble on each transfer */
1855#else
1856        uint64_t preamble                : 1;
1857        uint64_t pad                     : 1;
1858        uint64_t fcs                     : 1;
1859        uint64_t force_fcs               : 1;
1860        uint64_t reserved_4_63           : 60;
1861#endif
1862    } s;
1863    struct cvmx_agl_gmx_txx_append_s     cn52xx;
1864    struct cvmx_agl_gmx_txx_append_s     cn52xxp1;
1865    struct cvmx_agl_gmx_txx_append_s     cn56xx;
1866    struct cvmx_agl_gmx_txx_append_s     cn56xxp1;
1867} cvmx_agl_gmx_txx_append_t;
1868
1869
1870/**
1871 * cvmx_agl_gmx_tx#_ctl
1872 *
1873 * AGL_GMX_TX_CTL = TX Control register
1874 *
1875 *
1876 * Notes:
1877 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1878 *
1879 */
1880typedef union
1881{
1882    uint64_t u64;
1883    struct cvmx_agl_gmx_txx_ctl_s
1884    {
1885#if __BYTE_ORDER == __BIG_ENDIAN
1886        uint64_t reserved_2_63           : 62;
1887        uint64_t xsdef_en                : 1;       /**< Enables the excessive deferral check for stats
1888                                                         and interrupts */
1889        uint64_t xscol_en                : 1;       /**< Enables the excessive collision check for stats
1890                                                         and interrupts */
1891#else
1892        uint64_t xscol_en                : 1;
1893        uint64_t xsdef_en                : 1;
1894        uint64_t reserved_2_63           : 62;
1895#endif
1896    } s;
1897    struct cvmx_agl_gmx_txx_ctl_s        cn52xx;
1898    struct cvmx_agl_gmx_txx_ctl_s        cn52xxp1;
1899    struct cvmx_agl_gmx_txx_ctl_s        cn56xx;
1900    struct cvmx_agl_gmx_txx_ctl_s        cn56xxp1;
1901} cvmx_agl_gmx_txx_ctl_t;
1902
1903
1904/**
1905 * cvmx_agl_gmx_tx#_min_pkt
1906 *
1907 * AGL_GMX_TX_MIN_PKT = MII TX Min Size Packet (PAD upto min size)
1908 *
1909 *
1910 * Notes:
1911 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1912 *
1913 */
1914typedef union
1915{
1916    uint64_t u64;
1917    struct cvmx_agl_gmx_txx_min_pkt_s
1918    {
1919#if __BYTE_ORDER == __BIG_ENDIAN
1920        uint64_t reserved_8_63           : 56;
1921        uint64_t min_size                : 8;       /**< Min frame in bytes before the FCS is applied
1922                                                         Padding is only appened when
1923                                                         AGL_GMX_TX_APPEND[PAD] for the coresponding MII
1924                                                         port is set. Packets will be padded to
1925                                                         MIN_SIZE+1 The reset value will pad to 60 bytes. */
1926#else
1927        uint64_t min_size                : 8;
1928        uint64_t reserved_8_63           : 56;
1929#endif
1930    } s;
1931    struct cvmx_agl_gmx_txx_min_pkt_s    cn52xx;
1932    struct cvmx_agl_gmx_txx_min_pkt_s    cn52xxp1;
1933    struct cvmx_agl_gmx_txx_min_pkt_s    cn56xx;
1934    struct cvmx_agl_gmx_txx_min_pkt_s    cn56xxp1;
1935} cvmx_agl_gmx_txx_min_pkt_t;
1936
1937
1938/**
1939 * cvmx_agl_gmx_tx#_pause_pkt_interval
1940 *
1941 * AGL_GMX_TX_PAUSE_PKT_INTERVAL = MII TX Pause Packet transmission interval - how often PAUSE packets will be sent
1942 *
1943 *
1944 * Notes:
1945 * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
1946 * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
1947 * designer.  It is suggested that TIME be much greater than INTERVAL and
1948 * AGL_GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
1949 * count and then when the backpressure condition is lifted, a PAUSE packet
1950 * with TIME==0 will be sent indicating that Octane is ready for additional
1951 * data.
1952 *
1953 * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
1954 * suggested that TIME and INTERVAL are programmed such that they satisify the
1955 * following rule...
1956 *
1957 *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
1958 *
1959 * where largest_pkt_size is that largest packet that the system can send
1960 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
1961 * of the PAUSE packet (normally 64B).
1962 *
1963 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1964 */
1965typedef union
1966{
1967    uint64_t u64;
1968    struct cvmx_agl_gmx_txx_pause_pkt_interval_s
1969    {
1970#if __BYTE_ORDER == __BIG_ENDIAN
1971        uint64_t reserved_16_63          : 48;
1972        uint64_t interval                : 16;      /**< Arbitrate for a pause packet every (INTERVAL*512)
1973                                                         bit-times.
1974                                                         Normally, 0 < INTERVAL < AGL_GMX_TX_PAUSE_PKT_TIME
1975                                                         INTERVAL=0, will only send a single PAUSE packet
1976                                                         for each backpressure event */
1977#else
1978        uint64_t interval                : 16;
1979        uint64_t reserved_16_63          : 48;
1980#endif
1981    } s;
1982    struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xx;
1983    struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xxp1;
1984    struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xx;
1985    struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xxp1;
1986} cvmx_agl_gmx_txx_pause_pkt_interval_t;
1987
1988
1989/**
1990 * cvmx_agl_gmx_tx#_pause_pkt_time
1991 *
1992 * AGL_GMX_TX_PAUSE_PKT_TIME = MII TX Pause Packet pause_time field
1993 *
1994 *
1995 * Notes:
1996 * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
1997 * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
1998 * designer.  It is suggested that TIME be much greater than INTERVAL and
1999 * AGL_GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
2000 * count and then when the backpressure condition is lifted, a PAUSE packet
2001 * with TIME==0 will be sent indicating that Octane is ready for additional
2002 * data.
2003 *
2004 * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
2005 * suggested that TIME and INTERVAL are programmed such that they satisify the
2006 * following rule...
2007 *
2008 *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
2009 *
2010 * where largest_pkt_size is that largest packet that the system can send
2011 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
2012 * of the PAUSE packet (normally 64B).
2013 *
2014 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2015 */
2016typedef union
2017{
2018    uint64_t u64;
2019    struct cvmx_agl_gmx_txx_pause_pkt_time_s
2020    {
2021#if __BYTE_ORDER == __BIG_ENDIAN
2022        uint64_t reserved_16_63          : 48;
2023        uint64_t time                    : 16;      /**< The pause_time field placed is outbnd pause pkts
2024                                                         pause_time is in 512 bit-times
2025                                                         Normally, TIME > AGL_GMX_TX_PAUSE_PKT_INTERVAL */
2026#else
2027        uint64_t time                    : 16;
2028        uint64_t reserved_16_63          : 48;
2029#endif
2030    } s;
2031    struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xx;
2032    struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xxp1;
2033    struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xx;
2034    struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xxp1;
2035} cvmx_agl_gmx_txx_pause_pkt_time_t;
2036
2037
2038/**
2039 * cvmx_agl_gmx_tx#_pause_togo
2040 *
2041 * AGL_GMX_TX_PAUSE_TOGO = MII TX Amount of time remaining to backpressure
2042 *
2043 *
2044 * Notes:
2045 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2046 *
2047 */
2048typedef union
2049{
2050    uint64_t u64;
2051    struct cvmx_agl_gmx_txx_pause_togo_s
2052    {
2053#if __BYTE_ORDER == __BIG_ENDIAN
2054        uint64_t reserved_16_63          : 48;
2055        uint64_t time                    : 16;      /**< Amount of time remaining to backpressure */
2056#else
2057        uint64_t time                    : 16;
2058        uint64_t reserved_16_63          : 48;
2059#endif
2060    } s;
2061    struct cvmx_agl_gmx_txx_pause_togo_s cn52xx;
2062    struct cvmx_agl_gmx_txx_pause_togo_s cn52xxp1;
2063    struct cvmx_agl_gmx_txx_pause_togo_s cn56xx;
2064    struct cvmx_agl_gmx_txx_pause_togo_s cn56xxp1;
2065} cvmx_agl_gmx_txx_pause_togo_t;
2066
2067
2068/**
2069 * cvmx_agl_gmx_tx#_pause_zero
2070 *
2071 * AGL_GMX_TX_PAUSE_ZERO = MII TX Amount of time remaining to backpressure
2072 *
2073 *
2074 * Notes:
2075 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2076 *
2077 */
2078typedef union
2079{
2080    uint64_t u64;
2081    struct cvmx_agl_gmx_txx_pause_zero_s
2082    {
2083#if __BYTE_ORDER == __BIG_ENDIAN
2084        uint64_t reserved_1_63           : 63;
2085        uint64_t send                    : 1;       /**< When backpressure condition clear, send PAUSE
2086                                                         packet with pause_time of zero to enable the
2087                                                         channel */
2088#else
2089        uint64_t send                    : 1;
2090        uint64_t reserved_1_63           : 63;
2091#endif
2092    } s;
2093    struct cvmx_agl_gmx_txx_pause_zero_s cn52xx;
2094    struct cvmx_agl_gmx_txx_pause_zero_s cn52xxp1;
2095    struct cvmx_agl_gmx_txx_pause_zero_s cn56xx;
2096    struct cvmx_agl_gmx_txx_pause_zero_s cn56xxp1;
2097} cvmx_agl_gmx_txx_pause_zero_t;
2098
2099
2100/**
2101 * cvmx_agl_gmx_tx#_soft_pause
2102 *
2103 * AGL_GMX_TX_SOFT_PAUSE = MII TX Software Pause
2104 *
2105 *
2106 * Notes:
2107 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2108 *
2109 */
2110typedef union
2111{
2112    uint64_t u64;
2113    struct cvmx_agl_gmx_txx_soft_pause_s
2114    {
2115#if __BYTE_ORDER == __BIG_ENDIAN
2116        uint64_t reserved_16_63          : 48;
2117        uint64_t time                    : 16;      /**< Back off the TX bus for (TIME*512) bit-times
2118                                                         for full-duplex operation only */
2119#else
2120        uint64_t time                    : 16;
2121        uint64_t reserved_16_63          : 48;
2122#endif
2123    } s;
2124    struct cvmx_agl_gmx_txx_soft_pause_s cn52xx;
2125    struct cvmx_agl_gmx_txx_soft_pause_s cn52xxp1;
2126    struct cvmx_agl_gmx_txx_soft_pause_s cn56xx;
2127    struct cvmx_agl_gmx_txx_soft_pause_s cn56xxp1;
2128} cvmx_agl_gmx_txx_soft_pause_t;
2129
2130
2131/**
2132 * cvmx_agl_gmx_tx#_stat0
2133 *
2134 * AGL_GMX_TX_STAT0 = AGL_GMX_TX_STATS_XSDEF / AGL_GMX_TX_STATS_XSCOL
2135 *
2136 *
2137 * Notes:
2138 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2139 * - Counters will wrap
2140 * - Not reset when MIX*_CTL[RESET] is set to 1.
2141 */
2142typedef union
2143{
2144    uint64_t u64;
2145    struct cvmx_agl_gmx_txx_stat0_s
2146    {
2147#if __BYTE_ORDER == __BIG_ENDIAN
2148        uint64_t xsdef                   : 32;      /**< Number of packets dropped (never successfully
2149                                                         sent) due to excessive deferal */
2150        uint64_t xscol                   : 32;      /**< Number of packets dropped (never successfully
2151                                                         sent) due to excessive collision.  Defined by
2152                                                         AGL_GMX_TX_COL_ATTEMPT[LIMIT]. */
2153#else
2154        uint64_t xscol                   : 32;
2155        uint64_t xsdef                   : 32;
2156#endif
2157    } s;
2158    struct cvmx_agl_gmx_txx_stat0_s      cn52xx;
2159    struct cvmx_agl_gmx_txx_stat0_s      cn52xxp1;
2160    struct cvmx_agl_gmx_txx_stat0_s      cn56xx;
2161    struct cvmx_agl_gmx_txx_stat0_s      cn56xxp1;
2162} cvmx_agl_gmx_txx_stat0_t;
2163
2164
2165/**
2166 * cvmx_agl_gmx_tx#_stat1
2167 *
2168 * AGL_GMX_TX_STAT1 = AGL_GMX_TX_STATS_SCOL  / AGL_GMX_TX_STATS_MCOL
2169 *
2170 *
2171 * Notes:
2172 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2173 * - Counters will wrap
2174 * - Not reset when MIX*_CTL[RESET] is set to 1.
2175 */
2176typedef union
2177{
2178    uint64_t u64;
2179    struct cvmx_agl_gmx_txx_stat1_s
2180    {
2181#if __BYTE_ORDER == __BIG_ENDIAN
2182        uint64_t scol                    : 32;      /**< Number of packets sent with a single collision */
2183        uint64_t mcol                    : 32;      /**< Number of packets sent with multiple collisions
2184                                                         but < AGL_GMX_TX_COL_ATTEMPT[LIMIT]. */
2185#else
2186        uint64_t mcol                    : 32;
2187        uint64_t scol                    : 32;
2188#endif
2189    } s;
2190    struct cvmx_agl_gmx_txx_stat1_s      cn52xx;
2191    struct cvmx_agl_gmx_txx_stat1_s      cn52xxp1;
2192    struct cvmx_agl_gmx_txx_stat1_s      cn56xx;
2193    struct cvmx_agl_gmx_txx_stat1_s      cn56xxp1;
2194} cvmx_agl_gmx_txx_stat1_t;
2195
2196
2197/**
2198 * cvmx_agl_gmx_tx#_stat2
2199 *
2200 * AGL_GMX_TX_STAT2 = AGL_GMX_TX_STATS_OCTS
2201 *
2202 *
2203 * Notes:
2204 * - Octect counts are the sum of all data transmitted on the wire including
2205 *   packet data, pad bytes, fcs bytes, pause bytes, and jam bytes.  The octect
2206 *   counts do not include PREAMBLE byte or EXTEND cycles.
2207 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2208 * - Counters will wrap
2209 * - Not reset when MIX*_CTL[RESET] is set to 1.
2210 */
2211typedef union
2212{
2213    uint64_t u64;
2214    struct cvmx_agl_gmx_txx_stat2_s
2215    {
2216#if __BYTE_ORDER == __BIG_ENDIAN
2217        uint64_t reserved_48_63          : 16;
2218        uint64_t octs                    : 48;      /**< Number of total octets sent on the interface.
2219                                                         Does not count octets from frames that were
2220                                                         truncated due to collisions in halfdup mode. */
2221#else
2222        uint64_t octs                    : 48;
2223        uint64_t reserved_48_63          : 16;
2224#endif
2225    } s;
2226    struct cvmx_agl_gmx_txx_stat2_s      cn52xx;
2227    struct cvmx_agl_gmx_txx_stat2_s      cn52xxp1;
2228    struct cvmx_agl_gmx_txx_stat2_s      cn56xx;
2229    struct cvmx_agl_gmx_txx_stat2_s      cn56xxp1;
2230} cvmx_agl_gmx_txx_stat2_t;
2231
2232
2233/**
2234 * cvmx_agl_gmx_tx#_stat3
2235 *
2236 * AGL_GMX_TX_STAT3 = AGL_GMX_TX_STATS_PKTS
2237 *
2238 *
2239 * Notes:
2240 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2241 * - Counters will wrap
2242 * - Not reset when MIX*_CTL[RESET] is set to 1.
2243 */
2244typedef union
2245{
2246    uint64_t u64;
2247    struct cvmx_agl_gmx_txx_stat3_s
2248    {
2249#if __BYTE_ORDER == __BIG_ENDIAN
2250        uint64_t reserved_32_63          : 32;
2251        uint64_t pkts                    : 32;      /**< Number of total frames sent on the interface.
2252                                                         Does not count frames that were truncated due to
2253                                                          collisions in halfdup mode. */
2254#else
2255        uint64_t pkts                    : 32;
2256        uint64_t reserved_32_63          : 32;
2257#endif
2258    } s;
2259    struct cvmx_agl_gmx_txx_stat3_s      cn52xx;
2260    struct cvmx_agl_gmx_txx_stat3_s      cn52xxp1;
2261    struct cvmx_agl_gmx_txx_stat3_s      cn56xx;
2262    struct cvmx_agl_gmx_txx_stat3_s      cn56xxp1;
2263} cvmx_agl_gmx_txx_stat3_t;
2264
2265
2266/**
2267 * cvmx_agl_gmx_tx#_stat4
2268 *
2269 * AGL_GMX_TX_STAT4 = AGL_GMX_TX_STATS_HIST1 (64) / AGL_GMX_TX_STATS_HIST0 (<64)
2270 *
2271 *
2272 * Notes:
2273 * - Packet length is the sum of all data transmitted on the wire for the given
2274 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2275 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
2276 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2277 * - Counters will wrap
2278 * - Not reset when MIX*_CTL[RESET] is set to 1.
2279 */
2280typedef union
2281{
2282    uint64_t u64;
2283    struct cvmx_agl_gmx_txx_stat4_s
2284    {
2285#if __BYTE_ORDER == __BIG_ENDIAN
2286        uint64_t hist1                   : 32;      /**< Number of packets sent with an octet count of 64. */
2287        uint64_t hist0                   : 32;      /**< Number of packets sent with an octet count
2288                                                         of < 64. */
2289#else
2290        uint64_t hist0                   : 32;
2291        uint64_t hist1                   : 32;
2292#endif
2293    } s;
2294    struct cvmx_agl_gmx_txx_stat4_s      cn52xx;
2295    struct cvmx_agl_gmx_txx_stat4_s      cn52xxp1;
2296    struct cvmx_agl_gmx_txx_stat4_s      cn56xx;
2297    struct cvmx_agl_gmx_txx_stat4_s      cn56xxp1;
2298} cvmx_agl_gmx_txx_stat4_t;
2299
2300
2301/**
2302 * cvmx_agl_gmx_tx#_stat5
2303 *
2304 * AGL_GMX_TX_STAT5 = AGL_GMX_TX_STATS_HIST3 (128- 255) / AGL_GMX_TX_STATS_HIST2 (65- 127)
2305 *
2306 *
2307 * Notes:
2308 * - Packet length is the sum of all data transmitted on the wire for the given
2309 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2310 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
2311 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2312 * - Counters will wrap
2313 * - Not reset when MIX*_CTL[RESET] is set to 1.
2314 */
2315typedef union
2316{
2317    uint64_t u64;
2318    struct cvmx_agl_gmx_txx_stat5_s
2319    {
2320#if __BYTE_ORDER == __BIG_ENDIAN
2321        uint64_t hist3                   : 32;      /**< Number of packets sent with an octet count of
2322                                                         128 - 255. */
2323        uint64_t hist2                   : 32;      /**< Number of packets sent with an octet count of
2324                                                         65 - 127. */
2325#else
2326        uint64_t hist2                   : 32;
2327        uint64_t hist3                   : 32;
2328#endif
2329    } s;
2330    struct cvmx_agl_gmx_txx_stat5_s      cn52xx;
2331    struct cvmx_agl_gmx_txx_stat5_s      cn52xxp1;
2332    struct cvmx_agl_gmx_txx_stat5_s      cn56xx;
2333    struct cvmx_agl_gmx_txx_stat5_s      cn56xxp1;
2334} cvmx_agl_gmx_txx_stat5_t;
2335
2336
2337/**
2338 * cvmx_agl_gmx_tx#_stat6
2339 *
2340 * AGL_GMX_TX_STAT6 = AGL_GMX_TX_STATS_HIST5 (512-1023) / AGL_GMX_TX_STATS_HIST4 (256-511)
2341 *
2342 *
2343 * Notes:
2344 * - Packet length is the sum of all data transmitted on the wire for the given
2345 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2346 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
2347 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2348 * - Counters will wrap
2349 * - Not reset when MIX*_CTL[RESET] is set to 1.
2350 */
2351typedef union
2352{
2353    uint64_t u64;
2354    struct cvmx_agl_gmx_txx_stat6_s
2355    {
2356#if __BYTE_ORDER == __BIG_ENDIAN
2357        uint64_t hist5                   : 32;      /**< Number of packets sent with an octet count of
2358                                                         512 - 1023. */
2359        uint64_t hist4                   : 32;      /**< Number of packets sent with an octet count of
2360                                                         256 - 511. */
2361#else
2362        uint64_t hist4                   : 32;
2363        uint64_t hist5                   : 32;
2364#endif
2365    } s;
2366    struct cvmx_agl_gmx_txx_stat6_s      cn52xx;
2367    struct cvmx_agl_gmx_txx_stat6_s      cn52xxp1;
2368    struct cvmx_agl_gmx_txx_stat6_s      cn56xx;
2369    struct cvmx_agl_gmx_txx_stat6_s      cn56xxp1;
2370} cvmx_agl_gmx_txx_stat6_t;
2371
2372
2373/**
2374 * cvmx_agl_gmx_tx#_stat7
2375 *
2376 * AGL_GMX_TX_STAT7 = AGL_GMX_TX_STATS_HIST7 (1024-1518) / AGL_GMX_TX_STATS_HIST6 (>1518)
2377 *
2378 *
2379 * Notes:
2380 * - Packet length is the sum of all data transmitted on the wire for the given
2381 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2382 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
2383 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2384 * - Counters will wrap
2385 * - Not reset when MIX*_CTL[RESET] is set to 1.
2386 */
2387typedef union
2388{
2389    uint64_t u64;
2390    struct cvmx_agl_gmx_txx_stat7_s
2391    {
2392#if __BYTE_ORDER == __BIG_ENDIAN
2393        uint64_t hist7                   : 32;      /**< Number of packets sent with an octet count
2394                                                         of > 1518. */
2395        uint64_t hist6                   : 32;      /**< Number of packets sent with an octet count of
2396                                                         1024 - 1518. */
2397#else
2398        uint64_t hist6                   : 32;
2399        uint64_t hist7                   : 32;
2400#endif
2401    } s;
2402    struct cvmx_agl_gmx_txx_stat7_s      cn52xx;
2403    struct cvmx_agl_gmx_txx_stat7_s      cn52xxp1;
2404    struct cvmx_agl_gmx_txx_stat7_s      cn56xx;
2405    struct cvmx_agl_gmx_txx_stat7_s      cn56xxp1;
2406} cvmx_agl_gmx_txx_stat7_t;
2407
2408
2409/**
2410 * cvmx_agl_gmx_tx#_stat8
2411 *
2412 * AGL_GMX_TX_STAT8 = AGL_GMX_TX_STATS_MCST  / AGL_GMX_TX_STATS_BCST
2413 *
2414 *
2415 * Notes:
2416 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2417 * - Counters will wrap
2418 * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the
2419 *   packet.  GMX assumes that the DMAC lies in the first 6 bytes of the packet
2420 *   as per the 802.3 frame definition.  If the system requires additional data
2421 *   before the L2 header, then the MCST and BCST counters may not reflect
2422 *   reality and should be ignored by software.
2423 * - Not reset when MIX*_CTL[RESET] is set to 1.
2424 */
2425typedef union
2426{
2427    uint64_t u64;
2428    struct cvmx_agl_gmx_txx_stat8_s
2429    {
2430#if __BYTE_ORDER == __BIG_ENDIAN
2431        uint64_t mcst                    : 32;      /**< Number of packets sent to multicast DMAC.
2432                                                         Does not include BCST packets. */
2433        uint64_t bcst                    : 32;      /**< Number of packets sent to broadcast DMAC.
2434                                                         Does not include MCST packets. */
2435#else
2436        uint64_t bcst                    : 32;
2437        uint64_t mcst                    : 32;
2438#endif
2439    } s;
2440    struct cvmx_agl_gmx_txx_stat8_s      cn52xx;
2441    struct cvmx_agl_gmx_txx_stat8_s      cn52xxp1;
2442    struct cvmx_agl_gmx_txx_stat8_s      cn56xx;
2443    struct cvmx_agl_gmx_txx_stat8_s      cn56xxp1;
2444} cvmx_agl_gmx_txx_stat8_t;
2445
2446
2447/**
2448 * cvmx_agl_gmx_tx#_stat9
2449 *
2450 * AGL_GMX_TX_STAT9 = AGL_GMX_TX_STATS_UNDFLW / AGL_GMX_TX_STATS_CTL
2451 *
2452 *
2453 * Notes:
2454 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2455 * - Counters will wrap
2456 * - Not reset when MIX*_CTL[RESET] is set to 1.
2457 */
2458typedef union
2459{
2460    uint64_t u64;
2461    struct cvmx_agl_gmx_txx_stat9_s
2462    {
2463#if __BYTE_ORDER == __BIG_ENDIAN
2464        uint64_t undflw                  : 32;      /**< Number of underflow packets */
2465        uint64_t ctl                     : 32;      /**< Number of Control packets (PAUSE flow control)
2466                                                         generated by GMX.  It does not include control
2467                                                         packets forwarded or generated by the PP's. */
2468#else
2469        uint64_t ctl                     : 32;
2470        uint64_t undflw                  : 32;
2471#endif
2472    } s;
2473    struct cvmx_agl_gmx_txx_stat9_s      cn52xx;
2474    struct cvmx_agl_gmx_txx_stat9_s      cn52xxp1;
2475    struct cvmx_agl_gmx_txx_stat9_s      cn56xx;
2476    struct cvmx_agl_gmx_txx_stat9_s      cn56xxp1;
2477} cvmx_agl_gmx_txx_stat9_t;
2478
2479
2480/**
2481 * cvmx_agl_gmx_tx#_stats_ctl
2482 *
2483 * AGL_GMX_TX_STATS_CTL = TX Stats Control register
2484 *
2485 *
2486 * Notes:
2487 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2488 *
2489 */
2490typedef union
2491{
2492    uint64_t u64;
2493    struct cvmx_agl_gmx_txx_stats_ctl_s
2494    {
2495#if __BYTE_ORDER == __BIG_ENDIAN
2496        uint64_t reserved_1_63           : 63;
2497        uint64_t rd_clr                  : 1;       /**< Stats registers will clear on reads */
2498#else
2499        uint64_t rd_clr                  : 1;
2500        uint64_t reserved_1_63           : 63;
2501#endif
2502    } s;
2503    struct cvmx_agl_gmx_txx_stats_ctl_s  cn52xx;
2504    struct cvmx_agl_gmx_txx_stats_ctl_s  cn52xxp1;
2505    struct cvmx_agl_gmx_txx_stats_ctl_s  cn56xx;
2506    struct cvmx_agl_gmx_txx_stats_ctl_s  cn56xxp1;
2507} cvmx_agl_gmx_txx_stats_ctl_t;
2508
2509
2510/**
2511 * cvmx_agl_gmx_tx#_thresh
2512 *
2513 * AGL_GMX_TX_THRESH = MII TX Threshold
2514 *
2515 *
2516 * Notes:
2517 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2518 *
2519 */
2520typedef union
2521{
2522    uint64_t u64;
2523    struct cvmx_agl_gmx_txx_thresh_s
2524    {
2525#if __BYTE_ORDER == __BIG_ENDIAN
2526        uint64_t reserved_6_63           : 58;
2527        uint64_t cnt                     : 6;       /**< Number of 16B ticks to accumulate in the TX FIFO
2528                                                         before sending on the MII interface
2529                                                         This register should be large enough to prevent
2530                                                         underflow on the MII interface and must never
2531                                                         be set below 4.  This register cannot exceed the
2532                                                         the TX FIFO depth which is 32 16B entries. */
2533#else
2534        uint64_t cnt                     : 6;
2535        uint64_t reserved_6_63           : 58;
2536#endif
2537    } s;
2538    struct cvmx_agl_gmx_txx_thresh_s     cn52xx;
2539    struct cvmx_agl_gmx_txx_thresh_s     cn52xxp1;
2540    struct cvmx_agl_gmx_txx_thresh_s     cn56xx;
2541    struct cvmx_agl_gmx_txx_thresh_s     cn56xxp1;
2542} cvmx_agl_gmx_txx_thresh_t;
2543
2544
2545/**
2546 * cvmx_agl_gmx_tx_bp
2547 *
2548 * AGL_GMX_TX_BP = MII TX BackPressure Register
2549 *
2550 *
2551 * Notes:
2552 * BP[0] will be reset when MIX0_CTL[RESET] is set to 1.
2553 * BP[1] will be reset when MIX1_CTL[RESET] is set to 1.
2554 */
2555typedef union
2556{
2557    uint64_t u64;
2558    struct cvmx_agl_gmx_tx_bp_s
2559    {
2560#if __BYTE_ORDER == __BIG_ENDIAN
2561        uint64_t reserved_2_63           : 62;
2562        uint64_t bp                      : 2;       /**< Port BackPressure status
2563                                                         0=Port is available
2564                                                         1=Port should be back pressured */
2565#else
2566        uint64_t bp                      : 2;
2567        uint64_t reserved_2_63           : 62;
2568#endif
2569    } s;
2570    struct cvmx_agl_gmx_tx_bp_s          cn52xx;
2571    struct cvmx_agl_gmx_tx_bp_s          cn52xxp1;
2572    struct cvmx_agl_gmx_tx_bp_cn56xx
2573    {
2574#if __BYTE_ORDER == __BIG_ENDIAN
2575        uint64_t reserved_1_63           : 63;
2576        uint64_t bp                      : 1;       /**< Port BackPressure status
2577                                                         0=Port is available
2578                                                         1=Port should be back pressured */
2579#else
2580        uint64_t bp                      : 1;
2581        uint64_t reserved_1_63           : 63;
2582#endif
2583    } cn56xx;
2584    struct cvmx_agl_gmx_tx_bp_cn56xx     cn56xxp1;
2585} cvmx_agl_gmx_tx_bp_t;
2586
2587
2588/**
2589 * cvmx_agl_gmx_tx_col_attempt
2590 *
2591 * AGL_GMX_TX_COL_ATTEMPT = MII TX collision attempts before dropping frame
2592 *
2593 *
2594 * Notes:
2595 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2596 *
2597 */
2598typedef union
2599{
2600    uint64_t u64;
2601    struct cvmx_agl_gmx_tx_col_attempt_s
2602    {
2603#if __BYTE_ORDER == __BIG_ENDIAN
2604        uint64_t reserved_5_63           : 59;
2605        uint64_t limit                   : 5;       /**< Collision Attempts */
2606#else
2607        uint64_t limit                   : 5;
2608        uint64_t reserved_5_63           : 59;
2609#endif
2610    } s;
2611    struct cvmx_agl_gmx_tx_col_attempt_s cn52xx;
2612    struct cvmx_agl_gmx_tx_col_attempt_s cn52xxp1;
2613    struct cvmx_agl_gmx_tx_col_attempt_s cn56xx;
2614    struct cvmx_agl_gmx_tx_col_attempt_s cn56xxp1;
2615} cvmx_agl_gmx_tx_col_attempt_t;
2616
2617
2618/**
2619 * cvmx_agl_gmx_tx_ifg
2620 *
2621 * Common
2622 *
2623 *
2624 * AGL_GMX_TX_IFG = MII TX Interframe Gap
2625 *
2626 * Notes:
2627 * Notes:
2628 * * Programming IFG1 and IFG2.
2629 *
2630 *   For half-duplex systems that require IEEE 802.3 compatibility, IFG1 must
2631 *   be in the range of 1-8, IFG2 must be in the range of 4-12, and the
2632 *   IFG1+IFG2 sum must be 12.
2633 *
2634 *   For full-duplex systems that require IEEE 802.3 compatibility, IFG1 must
2635 *   be in the range of 1-11, IFG2 must be in the range of 1-11, and the
2636 *   IFG1+IFG2 sum must be 12.
2637 *
2638 *   For all other systems, IFG1 and IFG2 can be any value in the range of
2639 *   1-15.  Allowing for a total possible IFG sum of 2-30.
2640 *
2641 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2642 */
2643typedef union
2644{
2645    uint64_t u64;
2646    struct cvmx_agl_gmx_tx_ifg_s
2647    {
2648#if __BYTE_ORDER == __BIG_ENDIAN
2649        uint64_t reserved_8_63           : 56;
2650        uint64_t ifg2                    : 4;       /**< 1/3 of the interframe gap timing
2651                                                         If CRS is detected during IFG2, then the
2652                                                         interFrameSpacing timer is not reset and a frame
2653                                                         is transmited once the timer expires. */
2654        uint64_t ifg1                    : 4;       /**< 2/3 of the interframe gap timing
2655                                                         If CRS is detected during IFG1, then the
2656                                                         interFrameSpacing timer is reset and a frame is
2657                                                         not transmited. */
2658#else
2659        uint64_t ifg1                    : 4;
2660        uint64_t ifg2                    : 4;
2661        uint64_t reserved_8_63           : 56;
2662#endif
2663    } s;
2664    struct cvmx_agl_gmx_tx_ifg_s         cn52xx;
2665    struct cvmx_agl_gmx_tx_ifg_s         cn52xxp1;
2666    struct cvmx_agl_gmx_tx_ifg_s         cn56xx;
2667    struct cvmx_agl_gmx_tx_ifg_s         cn56xxp1;
2668} cvmx_agl_gmx_tx_ifg_t;
2669
2670
2671/**
2672 * cvmx_agl_gmx_tx_int_en
2673 *
2674 * AGL_GMX_TX_INT_EN = Interrupt Enable
2675 *
2676 *
2677 * Notes:
2678 * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0] will be reset when MIX0_CTL[RESET] is set to 1.
2679 * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1] will be reset when MIX1_CTL[RESET] is set to 1.
2680 * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
2681 */
2682typedef union
2683{
2684    uint64_t u64;
2685    struct cvmx_agl_gmx_tx_int_en_s
2686    {
2687#if __BYTE_ORDER == __BIG_ENDIAN
2688        uint64_t reserved_18_63          : 46;
2689        uint64_t late_col                : 2;       /**< TX Late Collision */
2690        uint64_t reserved_14_15          : 2;
2691        uint64_t xsdef                   : 2;       /**< TX Excessive deferral (MII/halfdup mode only) */
2692        uint64_t reserved_10_11          : 2;
2693        uint64_t xscol                   : 2;       /**< TX Excessive collisions (MII/halfdup mode only) */
2694        uint64_t reserved_4_7            : 4;
2695        uint64_t undflw                  : 2;       /**< TX Underflow (MII mode only) */
2696        uint64_t reserved_1_1            : 1;
2697        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
2698#else
2699        uint64_t pko_nxa                 : 1;
2700        uint64_t reserved_1_1            : 1;
2701        uint64_t undflw                  : 2;
2702        uint64_t reserved_4_7            : 4;
2703        uint64_t xscol                   : 2;
2704        uint64_t reserved_10_11          : 2;
2705        uint64_t xsdef                   : 2;
2706        uint64_t reserved_14_15          : 2;
2707        uint64_t late_col                : 2;
2708        uint64_t reserved_18_63          : 46;
2709#endif
2710    } s;
2711    struct cvmx_agl_gmx_tx_int_en_s      cn52xx;
2712    struct cvmx_agl_gmx_tx_int_en_s      cn52xxp1;
2713    struct cvmx_agl_gmx_tx_int_en_cn56xx
2714    {
2715#if __BYTE_ORDER == __BIG_ENDIAN
2716        uint64_t reserved_17_63          : 47;
2717        uint64_t late_col                : 1;       /**< TX Late Collision */
2718        uint64_t reserved_13_15          : 3;
2719        uint64_t xsdef                   : 1;       /**< TX Excessive deferral (MII/halfdup mode only) */
2720        uint64_t reserved_9_11           : 3;
2721        uint64_t xscol                   : 1;       /**< TX Excessive collisions (MII/halfdup mode only) */
2722        uint64_t reserved_3_7            : 5;
2723        uint64_t undflw                  : 1;       /**< TX Underflow (MII mode only) */
2724        uint64_t reserved_1_1            : 1;
2725        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
2726#else
2727        uint64_t pko_nxa                 : 1;
2728        uint64_t reserved_1_1            : 1;
2729        uint64_t undflw                  : 1;
2730        uint64_t reserved_3_7            : 5;
2731        uint64_t xscol                   : 1;
2732        uint64_t reserved_9_11           : 3;
2733        uint64_t xsdef                   : 1;
2734        uint64_t reserved_13_15          : 3;
2735        uint64_t late_col                : 1;
2736        uint64_t reserved_17_63          : 47;
2737#endif
2738    } cn56xx;
2739    struct cvmx_agl_gmx_tx_int_en_cn56xx cn56xxp1;
2740} cvmx_agl_gmx_tx_int_en_t;
2741
2742
2743/**
2744 * cvmx_agl_gmx_tx_int_reg
2745 *
2746 * AGL_GMX_TX_INT_REG = Interrupt Register
2747 *
2748 *
2749 * Notes:
2750 * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0] will be reset when MIX0_CTL[RESET] is set to 1.
2751 * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1] will be reset when MIX1_CTL[RESET] is set to 1.
2752 * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
2753 */
2754typedef union
2755{
2756    uint64_t u64;
2757    struct cvmx_agl_gmx_tx_int_reg_s
2758    {
2759#if __BYTE_ORDER == __BIG_ENDIAN
2760        uint64_t reserved_18_63          : 46;
2761        uint64_t late_col                : 2;       /**< TX Late Collision */
2762        uint64_t reserved_14_15          : 2;
2763        uint64_t xsdef                   : 2;       /**< TX Excessive deferral (MII/halfdup mode only) */
2764        uint64_t reserved_10_11          : 2;
2765        uint64_t xscol                   : 2;       /**< TX Excessive collisions (MII/halfdup mode only) */
2766        uint64_t reserved_4_7            : 4;
2767        uint64_t undflw                  : 2;       /**< TX Underflow (MII mode only) */
2768        uint64_t reserved_1_1            : 1;
2769        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
2770#else
2771        uint64_t pko_nxa                 : 1;
2772        uint64_t reserved_1_1            : 1;
2773        uint64_t undflw                  : 2;
2774        uint64_t reserved_4_7            : 4;
2775        uint64_t xscol                   : 2;
2776        uint64_t reserved_10_11          : 2;
2777        uint64_t xsdef                   : 2;
2778        uint64_t reserved_14_15          : 2;
2779        uint64_t late_col                : 2;
2780        uint64_t reserved_18_63          : 46;
2781#endif
2782    } s;
2783    struct cvmx_agl_gmx_tx_int_reg_s     cn52xx;
2784    struct cvmx_agl_gmx_tx_int_reg_s     cn52xxp1;
2785    struct cvmx_agl_gmx_tx_int_reg_cn56xx
2786    {
2787#if __BYTE_ORDER == __BIG_ENDIAN
2788        uint64_t reserved_17_63          : 47;
2789        uint64_t late_col                : 1;       /**< TX Late Collision */
2790        uint64_t reserved_13_15          : 3;
2791        uint64_t xsdef                   : 1;       /**< TX Excessive deferral (MII/halfdup mode only) */
2792        uint64_t reserved_9_11           : 3;
2793        uint64_t xscol                   : 1;       /**< TX Excessive collisions (MII/halfdup mode only) */
2794        uint64_t reserved_3_7            : 5;
2795        uint64_t undflw                  : 1;       /**< TX Underflow (MII mode only) */
2796        uint64_t reserved_1_1            : 1;
2797        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
2798#else
2799        uint64_t pko_nxa                 : 1;
2800        uint64_t reserved_1_1            : 1;
2801        uint64_t undflw                  : 1;
2802        uint64_t reserved_3_7            : 5;
2803        uint64_t xscol                   : 1;
2804        uint64_t reserved_9_11           : 3;
2805        uint64_t xsdef                   : 1;
2806        uint64_t reserved_13_15          : 3;
2807        uint64_t late_col                : 1;
2808        uint64_t reserved_17_63          : 47;
2809#endif
2810    } cn56xx;
2811    struct cvmx_agl_gmx_tx_int_reg_cn56xx cn56xxp1;
2812} cvmx_agl_gmx_tx_int_reg_t;
2813
2814
2815/**
2816 * cvmx_agl_gmx_tx_jam
2817 *
2818 * AGL_GMX_TX_JAM = MII TX Jam Pattern
2819 *
2820 *
2821 * Notes:
2822 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2823 *
2824 */
2825typedef union
2826{
2827    uint64_t u64;
2828    struct cvmx_agl_gmx_tx_jam_s
2829    {
2830#if __BYTE_ORDER == __BIG_ENDIAN
2831        uint64_t reserved_8_63           : 56;
2832        uint64_t jam                     : 8;       /**< Jam pattern */
2833#else
2834        uint64_t jam                     : 8;
2835        uint64_t reserved_8_63           : 56;
2836#endif
2837    } s;
2838    struct cvmx_agl_gmx_tx_jam_s         cn52xx;
2839    struct cvmx_agl_gmx_tx_jam_s         cn52xxp1;
2840    struct cvmx_agl_gmx_tx_jam_s         cn56xx;
2841    struct cvmx_agl_gmx_tx_jam_s         cn56xxp1;
2842} cvmx_agl_gmx_tx_jam_t;
2843
2844
2845/**
2846 * cvmx_agl_gmx_tx_lfsr
2847 *
2848 * AGL_GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff
2849 *
2850 *
2851 * Notes:
2852 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2853 *
2854 */
2855typedef union
2856{
2857    uint64_t u64;
2858    struct cvmx_agl_gmx_tx_lfsr_s
2859    {
2860#if __BYTE_ORDER == __BIG_ENDIAN
2861        uint64_t reserved_16_63          : 48;
2862        uint64_t lfsr                    : 16;      /**< The current state of the LFSR used to feed random
2863                                                         numbers to compute truncated binary exponential
2864                                                         backoff. */
2865#else
2866        uint64_t lfsr                    : 16;
2867        uint64_t reserved_16_63          : 48;
2868#endif
2869    } s;
2870    struct cvmx_agl_gmx_tx_lfsr_s        cn52xx;
2871    struct cvmx_agl_gmx_tx_lfsr_s        cn52xxp1;
2872    struct cvmx_agl_gmx_tx_lfsr_s        cn56xx;
2873    struct cvmx_agl_gmx_tx_lfsr_s        cn56xxp1;
2874} cvmx_agl_gmx_tx_lfsr_t;
2875
2876
2877/**
2878 * cvmx_agl_gmx_tx_ovr_bp
2879 *
2880 * AGL_GMX_TX_OVR_BP = MII TX Override BackPressure
2881 *
2882 *
2883 * Notes:
2884 * IGN_FULL[0], BP[0], EN[0] will be reset when MIX0_CTL[RESET] is set to 1.
2885 * IGN_FULL[1], BP[1], EN[1] will be reset when MIX1_CTL[RESET] is set to 1.
2886 */
2887typedef union
2888{
2889    uint64_t u64;
2890    struct cvmx_agl_gmx_tx_ovr_bp_s
2891    {
2892#if __BYTE_ORDER == __BIG_ENDIAN
2893        uint64_t reserved_10_63          : 54;
2894        uint64_t en                      : 2;       /**< Per port Enable back pressure override */
2895        uint64_t reserved_6_7            : 2;
2896        uint64_t bp                      : 2;       /**< Port BackPressure status to use
2897                                                         0=Port is available
2898                                                         1=Port should be back pressured */
2899        uint64_t reserved_2_3            : 2;
2900        uint64_t ign_full                : 2;       /**< Ignore the RX FIFO full when computing BP */
2901#else
2902        uint64_t ign_full                : 2;
2903        uint64_t reserved_2_3            : 2;
2904        uint64_t bp                      : 2;
2905        uint64_t reserved_6_7            : 2;
2906        uint64_t en                      : 2;
2907        uint64_t reserved_10_63          : 54;
2908#endif
2909    } s;
2910    struct cvmx_agl_gmx_tx_ovr_bp_s      cn52xx;
2911    struct cvmx_agl_gmx_tx_ovr_bp_s      cn52xxp1;
2912    struct cvmx_agl_gmx_tx_ovr_bp_cn56xx
2913    {
2914#if __BYTE_ORDER == __BIG_ENDIAN
2915        uint64_t reserved_9_63           : 55;
2916        uint64_t en                      : 1;       /**< Per port Enable back pressure override */
2917        uint64_t reserved_5_7            : 3;
2918        uint64_t bp                      : 1;       /**< Port BackPressure status to use
2919                                                         0=Port is available
2920                                                         1=Port should be back pressured */
2921        uint64_t reserved_1_3            : 3;
2922        uint64_t ign_full                : 1;       /**< Ignore the RX FIFO full when computing BP */
2923#else
2924        uint64_t ign_full                : 1;
2925        uint64_t reserved_1_3            : 3;
2926        uint64_t bp                      : 1;
2927        uint64_t reserved_5_7            : 3;
2928        uint64_t en                      : 1;
2929        uint64_t reserved_9_63           : 55;
2930#endif
2931    } cn56xx;
2932    struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn56xxp1;
2933} cvmx_agl_gmx_tx_ovr_bp_t;
2934
2935
2936/**
2937 * cvmx_agl_gmx_tx_pause_pkt_dmac
2938 *
2939 * AGL_GMX_TX_PAUSE_PKT_DMAC = MII TX Pause Packet DMAC field
2940 *
2941 *
2942 * Notes:
2943 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2944 *
2945 */
2946typedef union
2947{
2948    uint64_t u64;
2949    struct cvmx_agl_gmx_tx_pause_pkt_dmac_s
2950    {
2951#if __BYTE_ORDER == __BIG_ENDIAN
2952        uint64_t reserved_48_63          : 16;
2953        uint64_t dmac                    : 48;      /**< The DMAC field placed is outbnd pause pkts */
2954#else
2955        uint64_t dmac                    : 48;
2956        uint64_t reserved_48_63          : 16;
2957#endif
2958    } s;
2959    struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xx;
2960    struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xxp1;
2961    struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xx;
2962    struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xxp1;
2963} cvmx_agl_gmx_tx_pause_pkt_dmac_t;
2964
2965
2966/**
2967 * cvmx_agl_gmx_tx_pause_pkt_type
2968 *
2969 * AGL_GMX_TX_PAUSE_PKT_TYPE = MII TX Pause Packet TYPE field
2970 *
2971 *
2972 * Notes:
2973 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2974 *
2975 */
2976typedef union
2977{
2978    uint64_t u64;
2979    struct cvmx_agl_gmx_tx_pause_pkt_type_s
2980    {
2981#if __BYTE_ORDER == __BIG_ENDIAN
2982        uint64_t reserved_16_63          : 48;
2983        uint64_t type                    : 16;      /**< The TYPE field placed is outbnd pause pkts */
2984#else
2985        uint64_t type                    : 16;
2986        uint64_t reserved_16_63          : 48;
2987#endif
2988    } s;
2989    struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xx;
2990    struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xxp1;
2991    struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xx;
2992    struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xxp1;
2993} cvmx_agl_gmx_tx_pause_pkt_type_t;
2994
2995
2996/**
2997 * cvmx_asx#_gmii_rx_clk_set
2998 *
2999 * ASX_GMII_RX_CLK_SET = GMII Clock delay setting
3000 *
3001 */
3002typedef union
3003{
3004    uint64_t u64;
3005    struct cvmx_asxx_gmii_rx_clk_set_s
3006    {
3007#if __BYTE_ORDER == __BIG_ENDIAN
3008        uint64_t reserved_5_63           : 59;
3009        uint64_t setting                 : 5;       /**< Setting to place on the RXCLK (GMII receive clk)
3010                                                         delay line.  The intrinsic delay can range from
3011                                                         50ps to 80ps per tap. */
3012#else
3013        uint64_t setting                 : 5;
3014        uint64_t reserved_5_63           : 59;
3015#endif
3016    } s;
3017    struct cvmx_asxx_gmii_rx_clk_set_s   cn30xx;
3018    struct cvmx_asxx_gmii_rx_clk_set_s   cn31xx;
3019    struct cvmx_asxx_gmii_rx_clk_set_s   cn50xx;
3020} cvmx_asxx_gmii_rx_clk_set_t;
3021
3022
3023/**
3024 * cvmx_asx#_gmii_rx_dat_set
3025 *
3026 * ASX_GMII_RX_DAT_SET = GMII Clock delay setting
3027 *
3028 */
3029typedef union
3030{
3031    uint64_t u64;
3032    struct cvmx_asxx_gmii_rx_dat_set_s
3033    {
3034#if __BYTE_ORDER == __BIG_ENDIAN
3035        uint64_t reserved_5_63           : 59;
3036        uint64_t setting                 : 5;       /**< Setting to place on the RXD (GMII receive data)
3037                                                         delay lines.  The intrinsic delay can range from
3038                                                         50ps to 80ps per tap. */
3039#else
3040        uint64_t setting                 : 5;
3041        uint64_t reserved_5_63           : 59;
3042#endif
3043    } s;
3044    struct cvmx_asxx_gmii_rx_dat_set_s   cn30xx;
3045    struct cvmx_asxx_gmii_rx_dat_set_s   cn31xx;
3046    struct cvmx_asxx_gmii_rx_dat_set_s   cn50xx;
3047} cvmx_asxx_gmii_rx_dat_set_t;
3048
3049
3050/**
3051 * cvmx_asx#_int_en
3052 *
3053 * ASX_INT_EN = Interrupt Enable
3054 *
3055 */
3056typedef union
3057{
3058    uint64_t u64;
3059    struct cvmx_asxx_int_en_s
3060    {
3061#if __BYTE_ORDER == __BIG_ENDIAN
3062        uint64_t reserved_12_63          : 52;
3063        uint64_t txpsh                   : 4;       /**< TX FIFO overflow on RMGII port */
3064        uint64_t txpop                   : 4;       /**< TX FIFO underflow on RMGII port */
3065        uint64_t ovrflw                  : 4;       /**< RX FIFO overflow on RMGII port */
3066#else
3067        uint64_t ovrflw                  : 4;
3068        uint64_t txpop                   : 4;
3069        uint64_t txpsh                   : 4;
3070        uint64_t reserved_12_63          : 52;
3071#endif
3072    } s;
3073    struct cvmx_asxx_int_en_cn30xx
3074    {
3075#if __BYTE_ORDER == __BIG_ENDIAN
3076        uint64_t reserved_11_63          : 53;
3077        uint64_t txpsh                   : 3;       /**< TX FIFO overflow on RMGII port */
3078        uint64_t reserved_7_7            : 1;
3079        uint64_t txpop                   : 3;       /**< TX FIFO underflow on RMGII port */
3080        uint64_t reserved_3_3            : 1;
3081        uint64_t ovrflw                  : 3;       /**< RX FIFO overflow on RMGII port */
3082#else
3083        uint64_t ovrflw                  : 3;
3084        uint64_t reserved_3_3            : 1;
3085        uint64_t txpop                   : 3;
3086        uint64_t reserved_7_7            : 1;
3087        uint64_t txpsh                   : 3;
3088        uint64_t reserved_11_63          : 53;
3089#endif
3090    } cn30xx;
3091    struct cvmx_asxx_int_en_cn30xx       cn31xx;
3092    struct cvmx_asxx_int_en_s            cn38xx;
3093    struct cvmx_asxx_int_en_s            cn38xxp2;
3094    struct cvmx_asxx_int_en_cn30xx       cn50xx;
3095    struct cvmx_asxx_int_en_s            cn58xx;
3096    struct cvmx_asxx_int_en_s            cn58xxp1;
3097} cvmx_asxx_int_en_t;
3098
3099
3100/**
3101 * cvmx_asx#_int_reg
3102 *
3103 * ASX_INT_REG = Interrupt Register
3104 *
3105 */
3106typedef union
3107{
3108    uint64_t u64;
3109    struct cvmx_asxx_int_reg_s
3110    {
3111#if __BYTE_ORDER == __BIG_ENDIAN
3112        uint64_t reserved_12_63          : 52;
3113        uint64_t txpsh                   : 4;       /**< TX FIFO overflow on RMGII port */
3114        uint64_t txpop                   : 4;       /**< TX FIFO underflow on RMGII port */
3115        uint64_t ovrflw                  : 4;       /**< RX FIFO overflow on RMGII port */
3116#else
3117        uint64_t ovrflw                  : 4;
3118        uint64_t txpop                   : 4;
3119        uint64_t txpsh                   : 4;
3120        uint64_t reserved_12_63          : 52;
3121#endif
3122    } s;
3123    struct cvmx_asxx_int_reg_cn30xx
3124    {
3125#if __BYTE_ORDER == __BIG_ENDIAN
3126        uint64_t reserved_11_63          : 53;
3127        uint64_t txpsh                   : 3;       /**< TX FIFO overflow on RMGII port */
3128        uint64_t reserved_7_7            : 1;
3129        uint64_t txpop                   : 3;       /**< TX FIFO underflow on RMGII port */
3130        uint64_t reserved_3_3            : 1;
3131        uint64_t ovrflw                  : 3;       /**< RX FIFO overflow on RMGII port */
3132#else
3133        uint64_t ovrflw                  : 3;
3134        uint64_t reserved_3_3            : 1;
3135        uint64_t txpop                   : 3;
3136        uint64_t reserved_7_7            : 1;
3137        uint64_t txpsh                   : 3;
3138        uint64_t reserved_11_63          : 53;
3139#endif
3140    } cn30xx;
3141    struct cvmx_asxx_int_reg_cn30xx      cn31xx;
3142    struct cvmx_asxx_int_reg_s           cn38xx;
3143    struct cvmx_asxx_int_reg_s           cn38xxp2;
3144    struct cvmx_asxx_int_reg_cn30xx      cn50xx;
3145    struct cvmx_asxx_int_reg_s           cn58xx;
3146    struct cvmx_asxx_int_reg_s           cn58xxp1;
3147} cvmx_asxx_int_reg_t;
3148
3149
3150/**
3151 * cvmx_asx#_mii_rx_dat_set
3152 *
3153 * ASX_MII_RX_DAT_SET = GMII Clock delay setting
3154 *
3155 */
3156typedef union
3157{
3158    uint64_t u64;
3159    struct cvmx_asxx_mii_rx_dat_set_s
3160    {
3161#if __BYTE_ORDER == __BIG_ENDIAN
3162        uint64_t reserved_5_63           : 59;
3163        uint64_t setting                 : 5;       /**< Setting to place on the RXD (MII receive data)
3164                                                         delay lines.  The intrinsic delay can range from
3165                                                         50ps to 80ps per tap. */
3166#else
3167        uint64_t setting                 : 5;
3168        uint64_t reserved_5_63           : 59;
3169#endif
3170    } s;
3171    struct cvmx_asxx_mii_rx_dat_set_s    cn30xx;
3172    struct cvmx_asxx_mii_rx_dat_set_s    cn50xx;
3173} cvmx_asxx_mii_rx_dat_set_t;
3174
3175
3176/**
3177 * cvmx_asx#_prt_loop
3178 *
3179 * ASX_PRT_LOOP = Internal Loopback mode - TX FIFO output goes into RX FIFO (and maybe pins)
3180 *
3181 */
3182typedef union
3183{
3184    uint64_t u64;
3185    struct cvmx_asxx_prt_loop_s
3186    {
3187#if __BYTE_ORDER == __BIG_ENDIAN
3188        uint64_t reserved_8_63           : 56;
3189        uint64_t ext_loop                : 4;       /**< External Loopback Enable
3190                                                         0 = No Loopback (TX FIFO is filled by RMGII)
3191                                                         1 = RX FIFO drives the TX FIFO
3192                                                             - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex)
3193                                                             - GMX_PRT_CFG[SPEED] must be 1  (GigE speed)
3194                                                             - core clock > 250MHZ
3195                                                             - rxc must not deviate from the +-50ppm
3196                                                             - if txc>rxc, idle cycle may drop over time */
3197        uint64_t int_loop                : 4;       /**< Internal Loopback Enable
3198                                                         0 = No Loopback (RX FIFO is filled by RMGII pins)
3199                                                         1 = TX FIFO drives the RX FIFO
3200                                                         Note, in internal loop-back mode, the RGMII link
3201                                                         status is not used (since there is no real PHY).
3202                                                         Software cannot use the inband status. */
3203#else
3204        uint64_t int_loop                : 4;
3205        uint64_t ext_loop                : 4;
3206        uint64_t reserved_8_63           : 56;
3207#endif
3208    } s;
3209    struct cvmx_asxx_prt_loop_cn30xx
3210    {
3211#if __BYTE_ORDER == __BIG_ENDIAN
3212        uint64_t reserved_7_63           : 57;
3213        uint64_t ext_loop                : 3;       /**< External Loopback Enable
3214                                                         0 = No Loopback (TX FIFO is filled by RMGII)
3215                                                         1 = RX FIFO drives the TX FIFO
3216                                                             - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex)
3217                                                             - GMX_PRT_CFG[SPEED] must be 1  (GigE speed)
3218                                                             - core clock > 250MHZ
3219                                                             - rxc must not deviate from the +-50ppm
3220                                                             - if txc>rxc, idle cycle may drop over time */
3221        uint64_t reserved_3_3            : 1;
3222        uint64_t int_loop                : 3;       /**< Internal Loopback Enable
3223                                                         0 = No Loopback (RX FIFO is filled by RMGII pins)
3224                                                         1 = TX FIFO drives the RX FIFO
3225                                                             - GMX_PRT_CFG[DUPLEX] must be 1 (FullDuplex)
3226                                                             - GMX_PRT_CFG[SPEED] must be 1  (GigE speed)
3227                                                             - GMX_TX_CLK[CLK_CNT] must be 1
3228                                                         Note, in internal loop-back mode, the RGMII link
3229                                                         status is not used (since there is no real PHY).
3230                                                         Software cannot use the inband status. */
3231#else
3232        uint64_t int_loop                : 3;
3233        uint64_t reserved_3_3            : 1;
3234        uint64_t ext_loop                : 3;
3235        uint64_t reserved_7_63           : 57;
3236#endif
3237    } cn30xx;
3238    struct cvmx_asxx_prt_loop_cn30xx     cn31xx;
3239    struct cvmx_asxx_prt_loop_s          cn38xx;
3240    struct cvmx_asxx_prt_loop_s          cn38xxp2;
3241    struct cvmx_asxx_prt_loop_cn30xx     cn50xx;
3242    struct cvmx_asxx_prt_loop_s          cn58xx;
3243    struct cvmx_asxx_prt_loop_s          cn58xxp1;
3244} cvmx_asxx_prt_loop_t;
3245
3246
3247/**
3248 * cvmx_asx#_rld_bypass
3249 *
3250 * ASX_RLD_BYPASS
3251 *
3252 */
3253typedef union
3254{
3255    uint64_t u64;
3256    struct cvmx_asxx_rld_bypass_s
3257    {
3258#if __BYTE_ORDER == __BIG_ENDIAN
3259        uint64_t reserved_1_63           : 63;
3260        uint64_t bypass                  : 1;       /**< When set, the rld_dll setting is bypassed with
3261                                                         ASX_RLD_BYPASS_SETTING */
3262#else
3263        uint64_t bypass                  : 1;
3264        uint64_t reserved_1_63           : 63;
3265#endif
3266    } s;
3267    struct cvmx_asxx_rld_bypass_s        cn38xx;
3268    struct cvmx_asxx_rld_bypass_s        cn38xxp2;
3269    struct cvmx_asxx_rld_bypass_s        cn58xx;
3270    struct cvmx_asxx_rld_bypass_s        cn58xxp1;
3271} cvmx_asxx_rld_bypass_t;
3272
3273
3274/**
3275 * cvmx_asx#_rld_bypass_setting
3276 *
3277 * ASX_RLD_BYPASS_SETTING
3278 *
3279 */
3280typedef union
3281{
3282    uint64_t u64;
3283    struct cvmx_asxx_rld_bypass_setting_s
3284    {
3285#if __BYTE_ORDER == __BIG_ENDIAN
3286        uint64_t reserved_5_63           : 59;
3287        uint64_t setting                 : 5;       /**< The rld_dll setting bypass value */
3288#else
3289        uint64_t setting                 : 5;
3290        uint64_t reserved_5_63           : 59;
3291#endif
3292    } s;
3293    struct cvmx_asxx_rld_bypass_setting_s cn38xx;
3294    struct cvmx_asxx_rld_bypass_setting_s cn38xxp2;
3295    struct cvmx_asxx_rld_bypass_setting_s cn58xx;
3296    struct cvmx_asxx_rld_bypass_setting_s cn58xxp1;
3297} cvmx_asxx_rld_bypass_setting_t;
3298
3299
3300/**
3301 * cvmx_asx#_rld_comp
3302 *
3303 * ASX_RLD_COMP
3304 *
3305 */
3306typedef union
3307{
3308    uint64_t u64;
3309    struct cvmx_asxx_rld_comp_s
3310    {
3311#if __BYTE_ORDER == __BIG_ENDIAN
3312        uint64_t reserved_9_63           : 55;
3313        uint64_t pctl                    : 5;       /**< PCTL Compensation Value
3314                                                         These bits reflect the computed compensation
3315                                                          values from the built-in compensation circuit. */
3316        uint64_t nctl                    : 4;       /**< These bits reflect the computed compensation
3317                                                         values from the built-in compensation circuit. */
3318#else
3319        uint64_t nctl                    : 4;
3320        uint64_t pctl                    : 5;
3321        uint64_t reserved_9_63           : 55;
3322#endif
3323    } s;
3324    struct cvmx_asxx_rld_comp_cn38xx
3325    {
3326#if __BYTE_ORDER == __BIG_ENDIAN
3327        uint64_t reserved_8_63           : 56;
3328        uint64_t pctl                    : 4;       /**< These bits reflect the computed compensation
3329                                                         values from the built-in compensation circuit. */
3330        uint64_t nctl                    : 4;       /**< These bits reflect the computed compensation
3331                                                         values from the built-in compensation circuit. */
3332#else
3333        uint64_t nctl                    : 4;
3334        uint64_t pctl                    : 4;
3335        uint64_t reserved_8_63           : 56;
3336#endif
3337    } cn38xx;
3338    struct cvmx_asxx_rld_comp_cn38xx     cn38xxp2;
3339    struct cvmx_asxx_rld_comp_s          cn58xx;
3340    struct cvmx_asxx_rld_comp_s          cn58xxp1;
3341} cvmx_asxx_rld_comp_t;
3342
3343
3344/**
3345 * cvmx_asx#_rld_data_drv
3346 *
3347 * ASX_RLD_DATA_DRV
3348 *
3349 */
3350typedef union
3351{
3352    uint64_t u64;
3353    struct cvmx_asxx_rld_data_drv_s
3354    {
3355#if __BYTE_ORDER == __BIG_ENDIAN
3356        uint64_t reserved_8_63           : 56;
3357        uint64_t pctl                    : 4;       /**< These bits specify a driving strength (positive
3358                                                         integer) for the RLD I/Os when the built-in
3359                                                         compensation circuit is bypassed. */
3360        uint64_t nctl                    : 4;       /**< These bits specify a driving strength (positive
3361                                                         integer) for the RLD I/Os when the built-in
3362                                                         compensation circuit is bypassed. */
3363#else
3364        uint64_t nctl                    : 4;
3365        uint64_t pctl                    : 4;
3366        uint64_t reserved_8_63           : 56;
3367#endif
3368    } s;
3369    struct cvmx_asxx_rld_data_drv_s      cn38xx;
3370    struct cvmx_asxx_rld_data_drv_s      cn38xxp2;
3371    struct cvmx_asxx_rld_data_drv_s      cn58xx;
3372    struct cvmx_asxx_rld_data_drv_s      cn58xxp1;
3373} cvmx_asxx_rld_data_drv_t;
3374
3375
3376/**
3377 * cvmx_asx#_rld_fcram_mode
3378 *
3379 * ASX_RLD_FCRAM_MODE
3380 *
3381 */
3382typedef union
3383{
3384    uint64_t u64;
3385    struct cvmx_asxx_rld_fcram_mode_s
3386    {
3387#if __BYTE_ORDER == __BIG_ENDIAN
3388        uint64_t reserved_1_63           : 63;
3389        uint64_t mode                    : 1;       /**< Memory Mode
3390                                                         - 0: RLDRAM
3391                                                         - 1: FCRAM */
3392#else
3393        uint64_t mode                    : 1;
3394        uint64_t reserved_1_63           : 63;
3395#endif
3396    } s;
3397    struct cvmx_asxx_rld_fcram_mode_s    cn38xx;
3398    struct cvmx_asxx_rld_fcram_mode_s    cn38xxp2;
3399} cvmx_asxx_rld_fcram_mode_t;
3400
3401
3402/**
3403 * cvmx_asx#_rld_nctl_strong
3404 *
3405 * ASX_RLD_NCTL_STRONG
3406 *
3407 */
3408typedef union
3409{
3410    uint64_t u64;
3411    struct cvmx_asxx_rld_nctl_strong_s
3412    {
3413#if __BYTE_ORDER == __BIG_ENDIAN
3414        uint64_t reserved_5_63           : 59;
3415        uint64_t nctl                    : 5;       /**< Duke's drive control */
3416#else
3417        uint64_t nctl                    : 5;
3418        uint64_t reserved_5_63           : 59;
3419#endif
3420    } s;
3421    struct cvmx_asxx_rld_nctl_strong_s   cn38xx;
3422    struct cvmx_asxx_rld_nctl_strong_s   cn38xxp2;
3423    struct cvmx_asxx_rld_nctl_strong_s   cn58xx;
3424    struct cvmx_asxx_rld_nctl_strong_s   cn58xxp1;
3425} cvmx_asxx_rld_nctl_strong_t;
3426
3427
3428/**
3429 * cvmx_asx#_rld_nctl_weak
3430 *
3431 * ASX_RLD_NCTL_WEAK
3432 *
3433 */
3434typedef union
3435{
3436    uint64_t u64;
3437    struct cvmx_asxx_rld_nctl_weak_s
3438    {
3439#if __BYTE_ORDER == __BIG_ENDIAN
3440        uint64_t reserved_5_63           : 59;
3441        uint64_t nctl                    : 5;       /**< UNUSED (not needed for O9N) */
3442#else
3443        uint64_t nctl                    : 5;
3444        uint64_t reserved_5_63           : 59;
3445#endif
3446    } s;
3447    struct cvmx_asxx_rld_nctl_weak_s     cn38xx;
3448    struct cvmx_asxx_rld_nctl_weak_s     cn38xxp2;
3449    struct cvmx_asxx_rld_nctl_weak_s     cn58xx;
3450    struct cvmx_asxx_rld_nctl_weak_s     cn58xxp1;
3451} cvmx_asxx_rld_nctl_weak_t;
3452
3453
3454/**
3455 * cvmx_asx#_rld_pctl_strong
3456 *
3457 * ASX_RLD_PCTL_STRONG
3458 *
3459 */
3460typedef union
3461{
3462    uint64_t u64;
3463    struct cvmx_asxx_rld_pctl_strong_s
3464    {
3465#if __BYTE_ORDER == __BIG_ENDIAN
3466        uint64_t reserved_5_63           : 59;
3467        uint64_t pctl                    : 5;       /**< Duke's drive control */
3468#else
3469        uint64_t pctl                    : 5;
3470        uint64_t reserved_5_63           : 59;
3471#endif
3472    } s;
3473    struct cvmx_asxx_rld_pctl_strong_s   cn38xx;
3474    struct cvmx_asxx_rld_pctl_strong_s   cn38xxp2;
3475    struct cvmx_asxx_rld_pctl_strong_s   cn58xx;
3476    struct cvmx_asxx_rld_pctl_strong_s   cn58xxp1;
3477} cvmx_asxx_rld_pctl_strong_t;
3478
3479
3480/**
3481 * cvmx_asx#_rld_pctl_weak
3482 *
3483 * ASX_RLD_PCTL_WEAK
3484 *
3485 */
3486typedef union
3487{
3488    uint64_t u64;
3489    struct cvmx_asxx_rld_pctl_weak_s
3490    {
3491#if __BYTE_ORDER == __BIG_ENDIAN
3492        uint64_t reserved_5_63           : 59;
3493        uint64_t pctl                    : 5;       /**< UNUSED (not needed for O9N) */
3494#else
3495        uint64_t pctl                    : 5;
3496        uint64_t reserved_5_63           : 59;
3497#endif
3498    } s;
3499    struct cvmx_asxx_rld_pctl_weak_s     cn38xx;
3500    struct cvmx_asxx_rld_pctl_weak_s     cn38xxp2;
3501    struct cvmx_asxx_rld_pctl_weak_s     cn58xx;
3502    struct cvmx_asxx_rld_pctl_weak_s     cn58xxp1;
3503} cvmx_asxx_rld_pctl_weak_t;
3504
3505
3506/**
3507 * cvmx_asx#_rld_setting
3508 *
3509 * ASX_RLD_SETTING
3510 *
3511 */
3512typedef union
3513{
3514    uint64_t u64;
3515    struct cvmx_asxx_rld_setting_s
3516    {
3517#if __BYTE_ORDER == __BIG_ENDIAN
3518        uint64_t reserved_13_63          : 51;
3519        uint64_t dfaset                  : 5;       /**< RLD ClkGen DLL Setting(debug)
3520                                                         ** NEW O9N ** */
3521        uint64_t dfalag                  : 1;       /**< RLD ClkGen DLL Lag Error(debug)
3522                                                         ** NEW O9N ** */
3523        uint64_t dfalead                 : 1;       /**< RLD ClkGen DLL Lead Error(debug)
3524                                                         ** NEW O9N ** */
3525        uint64_t dfalock                 : 1;       /**< RLD ClkGen DLL Lock acquisition(debug)
3526                                                         ** NEW O9N ** */
3527        uint64_t setting                 : 5;       /**< RLDCK90 DLL Setting(debug) */
3528#else
3529        uint64_t setting                 : 5;
3530        uint64_t dfalock                 : 1;
3531        uint64_t dfalead                 : 1;
3532        uint64_t dfalag                  : 1;
3533        uint64_t dfaset                  : 5;
3534        uint64_t reserved_13_63          : 51;
3535#endif
3536    } s;
3537    struct cvmx_asxx_rld_setting_cn38xx
3538    {
3539#if __BYTE_ORDER == __BIG_ENDIAN
3540        uint64_t reserved_5_63           : 59;
3541        uint64_t setting                 : 5;       /**< This is the read-only true rld dll_setting. */
3542#else
3543        uint64_t setting                 : 5;
3544        uint64_t reserved_5_63           : 59;
3545#endif
3546    } cn38xx;
3547    struct cvmx_asxx_rld_setting_cn38xx  cn38xxp2;
3548    struct cvmx_asxx_rld_setting_s       cn58xx;
3549    struct cvmx_asxx_rld_setting_s       cn58xxp1;
3550} cvmx_asxx_rld_setting_t;
3551
3552
3553/**
3554 * cvmx_asx#_rx_clk_set#
3555 *
3556 * ASX_RX_CLK_SET = RGMII Clock delay setting
3557 *
3558 *
3559 * Notes:
3560 * Setting to place on the open-loop RXC (RGMII receive clk)
3561 * delay line, which can delay the recieved clock. This
3562 * can be used if the board and/or transmitting device
3563 * has not otherwise delayed the clock.
3564 *
3565 * A value of SETTING=0 disables the delay line. The delay
3566 * line should be disabled unless the transmitter or board
3567 * does not delay the clock.
3568 *
3569 * Note that this delay line provides only a coarse control
3570 * over the delay. Generally, it can only reliably provide
3571 * a delay in the range 1.25-2.5ns, which may not be adequate
3572 * for some system applications.
3573 *
3574 * The open loop delay line selects
3575 * from among a series of tap positions. Each incremental
3576 * tap position adds a delay of 50ps to 135ps per tap, depending
3577 * on the chip, its temperature, and the voltage.
3578 * To achieve from 1.25-2.5ns of delay on the recieved
3579 * clock, a fixed value of SETTING=24 may work.
3580 * For more precision, we recommend the following settings
3581 * based on the chip voltage:
3582 *
3583 *    VDD           SETTING
3584 *  -----------------------------
3585 *    1.0             18
3586 *    1.05            19
3587 *    1.1             21
3588 *    1.15            22
3589 *    1.2             23
3590 *    1.25            24
3591 *    1.3             25
3592 */
3593typedef union
3594{
3595    uint64_t u64;
3596    struct cvmx_asxx_rx_clk_setx_s
3597    {
3598#if __BYTE_ORDER == __BIG_ENDIAN
3599        uint64_t reserved_5_63           : 59;
3600        uint64_t setting                 : 5;       /**< Setting to place on the open-loop RXC delay line */
3601#else
3602        uint64_t setting                 : 5;
3603        uint64_t reserved_5_63           : 59;
3604#endif
3605    } s;
3606    struct cvmx_asxx_rx_clk_setx_s       cn30xx;
3607    struct cvmx_asxx_rx_clk_setx_s       cn31xx;
3608    struct cvmx_asxx_rx_clk_setx_s       cn38xx;
3609    struct cvmx_asxx_rx_clk_setx_s       cn38xxp2;
3610    struct cvmx_asxx_rx_clk_setx_s       cn50xx;
3611    struct cvmx_asxx_rx_clk_setx_s       cn58xx;
3612    struct cvmx_asxx_rx_clk_setx_s       cn58xxp1;
3613} cvmx_asxx_rx_clk_setx_t;
3614
3615
3616/**
3617 * cvmx_asx#_rx_prt_en
3618 *
3619 * ASX_RX_PRT_EN = RGMII Port Enable
3620 *
3621 */
3622typedef union
3623{
3624    uint64_t u64;
3625    struct cvmx_asxx_rx_prt_en_s
3626    {
3627#if __BYTE_ORDER == __BIG_ENDIAN
3628        uint64_t reserved_4_63           : 60;
3629        uint64_t prt_en                  : 4;       /**< Port enable.  Must be set for Octane to receive
3630                                                         RMGII traffic.  When this bit clear on a given
3631                                                         port, then the all RGMII cycles will appear as
3632                                                         inter-frame cycles. */
3633#else
3634        uint64_t prt_en                  : 4;
3635        uint64_t reserved_4_63           : 60;
3636#endif
3637    } s;
3638    struct cvmx_asxx_rx_prt_en_cn30xx
3639    {
3640#if __BYTE_ORDER == __BIG_ENDIAN
3641        uint64_t reserved_3_63           : 61;
3642        uint64_t prt_en                  : 3;       /**< Port enable.  Must be set for Octane to receive
3643                                                         RMGII traffic.  When this bit clear on a given
3644                                                         port, then the all RGMII cycles will appear as
3645                                                         inter-frame cycles. */
3646#else
3647        uint64_t prt_en                  : 3;
3648        uint64_t reserved_3_63           : 61;
3649#endif
3650    } cn30xx;
3651    struct cvmx_asxx_rx_prt_en_cn30xx    cn31xx;
3652    struct cvmx_asxx_rx_prt_en_s         cn38xx;
3653    struct cvmx_asxx_rx_prt_en_s         cn38xxp2;
3654    struct cvmx_asxx_rx_prt_en_cn30xx    cn50xx;
3655    struct cvmx_asxx_rx_prt_en_s         cn58xx;
3656    struct cvmx_asxx_rx_prt_en_s         cn58xxp1;
3657} cvmx_asxx_rx_prt_en_t;
3658
3659
3660/**
3661 * cvmx_asx#_rx_wol
3662 *
3663 * ASX_RX_WOL = RGMII RX Wake on LAN status register
3664 *
3665 */
3666typedef union
3667{
3668    uint64_t u64;
3669    struct cvmx_asxx_rx_wol_s
3670    {
3671#if __BYTE_ORDER == __BIG_ENDIAN
3672        uint64_t reserved_2_63           : 62;
3673        uint64_t status                  : 1;       /**< Copy of PMCSR[15] - PME_status */
3674        uint64_t enable                  : 1;       /**< Copy of PMCSR[8]  - PME_enable */
3675#else
3676        uint64_t enable                  : 1;
3677        uint64_t status                  : 1;
3678        uint64_t reserved_2_63           : 62;
3679#endif
3680    } s;
3681    struct cvmx_asxx_rx_wol_s            cn38xx;
3682    struct cvmx_asxx_rx_wol_s            cn38xxp2;
3683} cvmx_asxx_rx_wol_t;
3684
3685
3686/**
3687 * cvmx_asx#_rx_wol_msk
3688 *
3689 * ASX_RX_WOL_MSK = RGMII RX Wake on LAN byte mask
3690 *
3691 */
3692typedef union
3693{
3694    uint64_t u64;
3695    struct cvmx_asxx_rx_wol_msk_s
3696    {
3697#if __BYTE_ORDER == __BIG_ENDIAN
3698        uint64_t msk                     : 64;      /**< Bytes to include in the CRC signature */
3699#else
3700        uint64_t msk                     : 64;
3701#endif
3702    } s;
3703    struct cvmx_asxx_rx_wol_msk_s        cn38xx;
3704    struct cvmx_asxx_rx_wol_msk_s        cn38xxp2;
3705} cvmx_asxx_rx_wol_msk_t;
3706
3707
3708/**
3709 * cvmx_asx#_rx_wol_powok
3710 *
3711 * ASX_RX_WOL_POWOK = RGMII RX Wake on LAN Power OK
3712 *
3713 */
3714typedef union
3715{
3716    uint64_t u64;
3717    struct cvmx_asxx_rx_wol_powok_s
3718    {
3719#if __BYTE_ORDER == __BIG_ENDIAN
3720        uint64_t reserved_1_63           : 63;
3721        uint64_t powerok                 : 1;       /**< Power OK */
3722#else
3723        uint64_t powerok                 : 1;
3724        uint64_t reserved_1_63           : 63;
3725#endif
3726    } s;
3727    struct cvmx_asxx_rx_wol_powok_s      cn38xx;
3728    struct cvmx_asxx_rx_wol_powok_s      cn38xxp2;
3729} cvmx_asxx_rx_wol_powok_t;
3730
3731
3732/**
3733 * cvmx_asx#_rx_wol_sig
3734 *
3735 * ASX_RX_WOL_SIG = RGMII RX Wake on LAN CRC signature
3736 *
3737 */
3738typedef union
3739{
3740    uint64_t u64;
3741    struct cvmx_asxx_rx_wol_sig_s
3742    {
3743#if __BYTE_ORDER == __BIG_ENDIAN
3744        uint64_t reserved_32_63          : 32;
3745        uint64_t sig                     : 32;      /**< CRC signature */
3746#else
3747        uint64_t sig                     : 32;
3748        uint64_t reserved_32_63          : 32;
3749#endif
3750    } s;
3751    struct cvmx_asxx_rx_wol_sig_s        cn38xx;
3752    struct cvmx_asxx_rx_wol_sig_s        cn38xxp2;
3753} cvmx_asxx_rx_wol_sig_t;
3754
3755
3756/**
3757 * cvmx_asx#_tx_clk_set#
3758 *
3759 * ASX_TX_CLK_SET = RGMII Clock delay setting
3760 *
3761 *
3762 * Notes:
3763 * Setting to place on the open-loop TXC (RGMII transmit clk)
3764 * delay line, which can delay the transmited clock. This
3765 * can be used if the board and/or transmitting device
3766 * has not otherwise delayed the clock.
3767 *
3768 * A value of SETTING=0 disables the delay line. The delay
3769 * line should be disabled unless the transmitter or board
3770 * does not delay the clock.
3771 *
3772 * Note that this delay line provides only a coarse control
3773 * over the delay. Generally, it can only reliably provide
3774 * a delay in the range 1.25-2.5ns, which may not be adequate
3775 * for some system applications.
3776 *
3777 * The open loop delay line selects
3778 * from among a series of tap positions. Each incremental
3779 * tap position adds a delay of 50ps to 135ps per tap, depending
3780 * on the chip, its temperature, and the voltage.
3781 * To achieve from 1.25-2.5ns of delay on the recieved
3782 * clock, a fixed value of SETTING=24 may work.
3783 * For more precision, we recommend the following settings
3784 * based on the chip voltage:
3785 *
3786 *    VDD           SETTING
3787 *  -----------------------------
3788 *    1.0             18
3789 *    1.05            19
3790 *    1.1             21
3791 *    1.15            22
3792 *    1.2             23
3793 *    1.25            24
3794 *    1.3             25
3795 */
3796typedef union
3797{
3798    uint64_t u64;
3799    struct cvmx_asxx_tx_clk_setx_s
3800    {
3801#if __BYTE_ORDER == __BIG_ENDIAN
3802        uint64_t reserved_5_63           : 59;
3803        uint64_t setting                 : 5;       /**< Setting to place on the open-loop TXC delay line */
3804#else
3805        uint64_t setting                 : 5;
3806        uint64_t reserved_5_63           : 59;
3807#endif
3808    } s;
3809    struct cvmx_asxx_tx_clk_setx_s       cn30xx;
3810    struct cvmx_asxx_tx_clk_setx_s       cn31xx;
3811    struct cvmx_asxx_tx_clk_setx_s       cn38xx;
3812    struct cvmx_asxx_tx_clk_setx_s       cn38xxp2;
3813    struct cvmx_asxx_tx_clk_setx_s       cn50xx;
3814    struct cvmx_asxx_tx_clk_setx_s       cn58xx;
3815    struct cvmx_asxx_tx_clk_setx_s       cn58xxp1;
3816} cvmx_asxx_tx_clk_setx_t;
3817
3818
3819/**
3820 * cvmx_asx#_tx_comp_byp
3821 *
3822 * ASX_TX_COMP_BYP = RGMII Clock delay setting
3823 *
3824 */
3825typedef union
3826{
3827    uint64_t u64;
3828    struct cvmx_asxx_tx_comp_byp_s
3829    {
3830#if __BYTE_ORDER == __BIG_ENDIAN
3831        uint64_t reserved_0_63           : 64;
3832#else
3833        uint64_t reserved_0_63           : 64;
3834#endif
3835    } s;
3836    struct cvmx_asxx_tx_comp_byp_cn30xx
3837    {
3838#if __BYTE_ORDER == __BIG_ENDIAN
3839        uint64_t reserved_9_63           : 55;
3840        uint64_t bypass                  : 1;       /**< Compensation bypass */
3841        uint64_t pctl                    : 4;       /**< PCTL Compensation Value (see Duke) */
3842        uint64_t nctl                    : 4;       /**< NCTL Compensation Value (see Duke) */
3843#else
3844        uint64_t nctl                    : 4;
3845        uint64_t pctl                    : 4;
3846        uint64_t bypass                  : 1;
3847        uint64_t reserved_9_63           : 55;
3848#endif
3849    } cn30xx;
3850    struct cvmx_asxx_tx_comp_byp_cn30xx  cn31xx;
3851    struct cvmx_asxx_tx_comp_byp_cn38xx
3852    {
3853#if __BYTE_ORDER == __BIG_ENDIAN
3854        uint64_t reserved_8_63           : 56;
3855        uint64_t pctl                    : 4;       /**< PCTL Compensation Value (see Duke) */
3856        uint64_t nctl                    : 4;       /**< NCTL Compensation Value (see Duke) */
3857#else
3858        uint64_t nctl                    : 4;
3859        uint64_t pctl                    : 4;
3860        uint64_t reserved_8_63           : 56;
3861#endif
3862    } cn38xx;
3863    struct cvmx_asxx_tx_comp_byp_cn38xx  cn38xxp2;
3864    struct cvmx_asxx_tx_comp_byp_cn50xx
3865    {
3866#if __BYTE_ORDER == __BIG_ENDIAN
3867        uint64_t reserved_17_63          : 47;
3868        uint64_t bypass                  : 1;       /**< Compensation bypass */
3869        uint64_t reserved_13_15          : 3;
3870        uint64_t pctl                    : 5;       /**< PCTL Compensation Value (see Duke) */
3871        uint64_t reserved_5_7            : 3;
3872        uint64_t nctl                    : 5;       /**< NCTL Compensation Value (see Duke) */
3873#else
3874        uint64_t nctl                    : 5;
3875        uint64_t reserved_5_7            : 3;
3876        uint64_t pctl                    : 5;
3877        uint64_t reserved_13_15          : 3;
3878        uint64_t bypass                  : 1;
3879        uint64_t reserved_17_63          : 47;
3880#endif
3881    } cn50xx;
3882    struct cvmx_asxx_tx_comp_byp_cn58xx
3883    {
3884#if __BYTE_ORDER == __BIG_ENDIAN
3885        uint64_t reserved_13_63          : 51;
3886        uint64_t pctl                    : 5;       /**< PCTL Compensation Value (see Duke) */
3887        uint64_t reserved_5_7            : 3;
3888        uint64_t nctl                    : 5;       /**< NCTL Compensation Value (see Duke) */
3889#else
3890        uint64_t nctl                    : 5;
3891        uint64_t reserved_5_7            : 3;
3892        uint64_t pctl                    : 5;
3893        uint64_t reserved_13_63          : 51;
3894#endif
3895    } cn58xx;
3896    struct cvmx_asxx_tx_comp_byp_cn58xx  cn58xxp1;
3897} cvmx_asxx_tx_comp_byp_t;
3898
3899
3900/**
3901 * cvmx_asx#_tx_hi_water#
3902 *
3903 * ASX_TX_HI_WATER = RGMII TX FIFO Hi WaterMark
3904 *
3905 */
3906typedef union
3907{
3908    uint64_t u64;
3909    struct cvmx_asxx_tx_hi_waterx_s
3910    {
3911#if __BYTE_ORDER == __BIG_ENDIAN
3912        uint64_t reserved_4_63           : 60;
3913        uint64_t mark                    : 4;       /**< TX FIFO HiWatermark to stall GMX
3914                                                         Value of 0 maps to 16
3915                                                         Reset value changed from 10 in pass1
3916                                                         Pass1 settings (assuming 125 tclk)
3917                                                         - 325-375: 12
3918                                                         - 375-437: 11
3919                                                         - 437-550: 10
3920                                                         - 550-687:  9 */
3921#else
3922        uint64_t mark                    : 4;
3923        uint64_t reserved_4_63           : 60;
3924#endif
3925    } s;
3926    struct cvmx_asxx_tx_hi_waterx_cn30xx
3927    {
3928#if __BYTE_ORDER == __BIG_ENDIAN
3929        uint64_t reserved_3_63           : 61;
3930        uint64_t mark                    : 3;       /**< TX FIFO HiWatermark to stall GMX
3931                                                         Value 0 maps to 8. */
3932#else
3933        uint64_t mark                    : 3;
3934        uint64_t reserved_3_63           : 61;
3935#endif
3936    } cn30xx;
3937    struct cvmx_asxx_tx_hi_waterx_cn30xx cn31xx;
3938    struct cvmx_asxx_tx_hi_waterx_s      cn38xx;
3939    struct cvmx_asxx_tx_hi_waterx_s      cn38xxp2;
3940    struct cvmx_asxx_tx_hi_waterx_cn30xx cn50xx;
3941    struct cvmx_asxx_tx_hi_waterx_s      cn58xx;
3942    struct cvmx_asxx_tx_hi_waterx_s      cn58xxp1;
3943} cvmx_asxx_tx_hi_waterx_t;
3944
3945
3946/**
3947 * cvmx_asx#_tx_prt_en
3948 *
3949 * ASX_TX_PRT_EN = RGMII Port Enable
3950 *
3951 */
3952typedef union
3953{
3954    uint64_t u64;
3955    struct cvmx_asxx_tx_prt_en_s
3956    {
3957#if __BYTE_ORDER == __BIG_ENDIAN
3958        uint64_t reserved_4_63           : 60;
3959        uint64_t prt_en                  : 4;       /**< Port enable.  Must be set for Octane to send
3960                                                         RMGII traffic.   When this bit clear on a given
3961                                                         port, then all RGMII cycles will appear as
3962                                                         inter-frame cycles. */
3963#else
3964        uint64_t prt_en                  : 4;
3965        uint64_t reserved_4_63           : 60;
3966#endif
3967    } s;
3968    struct cvmx_asxx_tx_prt_en_cn30xx
3969    {
3970#if __BYTE_ORDER == __BIG_ENDIAN
3971        uint64_t reserved_3_63           : 61;
3972        uint64_t prt_en                  : 3;       /**< Port enable.  Must be set for Octane to send
3973                                                         RMGII traffic.   When this bit clear on a given
3974                                                         port, then all RGMII cycles will appear as
3975                                                         inter-frame cycles. */
3976#else
3977        uint64_t prt_en                  : 3;
3978        uint64_t reserved_3_63           : 61;
3979#endif
3980    } cn30xx;
3981    struct cvmx_asxx_tx_prt_en_cn30xx    cn31xx;
3982    struct cvmx_asxx_tx_prt_en_s         cn38xx;
3983    struct cvmx_asxx_tx_prt_en_s         cn38xxp2;
3984    struct cvmx_asxx_tx_prt_en_cn30xx    cn50xx;
3985    struct cvmx_asxx_tx_prt_en_s         cn58xx;
3986    struct cvmx_asxx_tx_prt_en_s         cn58xxp1;
3987} cvmx_asxx_tx_prt_en_t;
3988
3989
3990/**
3991 * cvmx_asx0_dbg_data_drv
3992 *
3993 * ASX_DBG_DATA_DRV
3994 *
3995 */
3996typedef union
3997{
3998    uint64_t u64;
3999    struct cvmx_asx0_dbg_data_drv_s
4000    {
4001#if __BYTE_ORDER == __BIG_ENDIAN
4002        uint64_t reserved_9_63           : 55;
4003        uint64_t pctl                    : 5;       /**< These bits control the driving strength of the dbg
4004                                                         interface. */
4005        uint64_t nctl                    : 4;       /**< These bits control the driving strength of the dbg
4006                                                         interface. */
4007#else
4008        uint64_t nctl                    : 4;
4009        uint64_t pctl                    : 5;
4010        uint64_t reserved_9_63           : 55;
4011#endif
4012    } s;
4013    struct cvmx_asx0_dbg_data_drv_cn38xx
4014    {
4015#if __BYTE_ORDER == __BIG_ENDIAN
4016        uint64_t reserved_8_63           : 56;
4017        uint64_t pctl                    : 4;       /**< These bits control the driving strength of the dbg
4018                                                         interface. */
4019        uint64_t nctl                    : 4;       /**< These bits control the driving strength of the dbg
4020                                                         interface. */
4021#else
4022        uint64_t nctl                    : 4;
4023        uint64_t pctl                    : 4;
4024        uint64_t reserved_8_63           : 56;
4025#endif
4026    } cn38xx;
4027    struct cvmx_asx0_dbg_data_drv_cn38xx cn38xxp2;
4028    struct cvmx_asx0_dbg_data_drv_s      cn58xx;
4029    struct cvmx_asx0_dbg_data_drv_s      cn58xxp1;
4030} cvmx_asx0_dbg_data_drv_t;
4031
4032
4033/**
4034 * cvmx_asx0_dbg_data_enable
4035 *
4036 * ASX_DBG_DATA_ENABLE
4037 *
4038 */
4039typedef union
4040{
4041    uint64_t u64;
4042    struct cvmx_asx0_dbg_data_enable_s
4043    {
4044#if __BYTE_ORDER == __BIG_ENDIAN
4045        uint64_t reserved_1_63           : 63;
4046        uint64_t en                      : 1;       /**< A 1->0 transistion, turns the dbg interface OFF. */
4047#else
4048        uint64_t en                      : 1;
4049        uint64_t reserved_1_63           : 63;
4050#endif
4051    } s;
4052    struct cvmx_asx0_dbg_data_enable_s   cn38xx;
4053    struct cvmx_asx0_dbg_data_enable_s   cn38xxp2;
4054    struct cvmx_asx0_dbg_data_enable_s   cn58xx;
4055    struct cvmx_asx0_dbg_data_enable_s   cn58xxp1;
4056} cvmx_asx0_dbg_data_enable_t;
4057
4058
4059/**
4060 * cvmx_ciu_bist
4061 */
4062typedef union
4063{
4064    uint64_t u64;
4065    struct cvmx_ciu_bist_s
4066    {
4067#if __BYTE_ORDER == __BIG_ENDIAN
4068        uint64_t reserved_4_63           : 60;
4069        uint64_t bist                    : 4;       /**< BIST Results.
4070                                                         HW sets a bit in BIST for for memory that fails
4071                                                         BIST. */
4072#else
4073        uint64_t bist                    : 4;
4074        uint64_t reserved_4_63           : 60;
4075#endif
4076    } s;
4077    struct cvmx_ciu_bist_s               cn30xx;
4078    struct cvmx_ciu_bist_s               cn31xx;
4079    struct cvmx_ciu_bist_s               cn38xx;
4080    struct cvmx_ciu_bist_s               cn38xxp2;
4081    struct cvmx_ciu_bist_cn50xx
4082    {
4083#if __BYTE_ORDER == __BIG_ENDIAN
4084        uint64_t reserved_2_63           : 62;
4085        uint64_t bist                    : 2;       /**< BIST Results.
4086                                                         HW sets a bit in BIST for for memory that fails
4087                                                         BIST. */
4088#else
4089        uint64_t bist                    : 2;
4090        uint64_t reserved_2_63           : 62;
4091#endif
4092    } cn50xx;
4093    struct cvmx_ciu_bist_cn52xx
4094    {
4095#if __BYTE_ORDER == __BIG_ENDIAN
4096        uint64_t reserved_3_63           : 61;
4097        uint64_t bist                    : 3;       /**< BIST Results.
4098                                                         HW sets a bit in BIST for for memory that fails
4099                                                         BIST. */
4100#else
4101        uint64_t bist                    : 3;
4102        uint64_t reserved_3_63           : 61;
4103#endif
4104    } cn52xx;
4105    struct cvmx_ciu_bist_cn52xx          cn52xxp1;
4106    struct cvmx_ciu_bist_s               cn56xx;
4107    struct cvmx_ciu_bist_s               cn56xxp1;
4108    struct cvmx_ciu_bist_s               cn58xx;
4109    struct cvmx_ciu_bist_s               cn58xxp1;
4110} cvmx_ciu_bist_t;
4111
4112
4113/**
4114 * cvmx_ciu_dint
4115 */
4116typedef union
4117{
4118    uint64_t u64;
4119    struct cvmx_ciu_dint_s
4120    {
4121#if __BYTE_ORDER == __BIG_ENDIAN
4122        uint64_t reserved_16_63          : 48;
4123        uint64_t dint                    : 16;      /**< Send DINT pulse to PP vector */
4124#else
4125        uint64_t dint                    : 16;
4126        uint64_t reserved_16_63          : 48;
4127#endif
4128    } s;
4129    struct cvmx_ciu_dint_cn30xx
4130    {
4131#if __BYTE_ORDER == __BIG_ENDIAN
4132        uint64_t reserved_1_63           : 63;
4133        uint64_t dint                    : 1;       /**< Send DINT pulse to PP vector */
4134#else
4135        uint64_t dint                    : 1;
4136        uint64_t reserved_1_63           : 63;
4137#endif
4138    } cn30xx;
4139    struct cvmx_ciu_dint_cn31xx
4140    {
4141#if __BYTE_ORDER == __BIG_ENDIAN
4142        uint64_t reserved_2_63           : 62;
4143        uint64_t dint                    : 2;       /**< Send DINT pulse to PP vector */
4144#else
4145        uint64_t dint                    : 2;
4146        uint64_t reserved_2_63           : 62;
4147#endif
4148    } cn31xx;
4149    struct cvmx_ciu_dint_s               cn38xx;
4150    struct cvmx_ciu_dint_s               cn38xxp2;
4151    struct cvmx_ciu_dint_cn31xx          cn50xx;
4152    struct cvmx_ciu_dint_cn52xx
4153    {
4154#if __BYTE_ORDER == __BIG_ENDIAN
4155        uint64_t reserved_4_63           : 60;
4156        uint64_t dint                    : 4;       /**< Send DINT pulse to PP vector */
4157#else
4158        uint64_t dint                    : 4;
4159        uint64_t reserved_4_63           : 60;
4160#endif
4161    } cn52xx;
4162    struct cvmx_ciu_dint_cn52xx          cn52xxp1;
4163    struct cvmx_ciu_dint_cn56xx
4164    {
4165#if __BYTE_ORDER == __BIG_ENDIAN
4166        uint64_t reserved_12_63          : 52;
4167        uint64_t dint                    : 12;      /**< Send DINT pulse to PP vector */
4168#else
4169        uint64_t dint                    : 12;
4170        uint64_t reserved_12_63          : 52;
4171#endif
4172    } cn56xx;
4173    struct cvmx_ciu_dint_cn56xx          cn56xxp1;
4174    struct cvmx_ciu_dint_s               cn58xx;
4175    struct cvmx_ciu_dint_s               cn58xxp1;
4176} cvmx_ciu_dint_t;
4177
4178
4179/**
4180 * cvmx_ciu_fuse
4181 */
4182typedef union
4183{
4184    uint64_t u64;
4185    struct cvmx_ciu_fuse_s
4186    {
4187#if __BYTE_ORDER == __BIG_ENDIAN
4188        uint64_t reserved_16_63          : 48;
4189        uint64_t fuse                    : 16;      /**< Physical PP is present */
4190#else
4191        uint64_t fuse                    : 16;
4192        uint64_t reserved_16_63          : 48;
4193#endif
4194    } s;
4195    struct cvmx_ciu_fuse_cn30xx
4196    {
4197#if __BYTE_ORDER == __BIG_ENDIAN
4198        uint64_t reserved_1_63           : 63;
4199        uint64_t fuse                    : 1;       /**< Physical PP is present */
4200#else
4201        uint64_t fuse                    : 1;
4202        uint64_t reserved_1_63           : 63;
4203#endif
4204    } cn30xx;
4205    struct cvmx_ciu_fuse_cn31xx
4206    {
4207#if __BYTE_ORDER == __BIG_ENDIAN
4208        uint64_t reserved_2_63           : 62;
4209        uint64_t fuse                    : 2;       /**< Physical PP is present */
4210#else
4211        uint64_t fuse                    : 2;
4212        uint64_t reserved_2_63           : 62;
4213#endif
4214    } cn31xx;
4215    struct cvmx_ciu_fuse_s               cn38xx;
4216    struct cvmx_ciu_fuse_s               cn38xxp2;
4217    struct cvmx_ciu_fuse_cn31xx          cn50xx;
4218    struct cvmx_ciu_fuse_cn52xx
4219    {
4220#if __BYTE_ORDER == __BIG_ENDIAN
4221        uint64_t reserved_4_63           : 60;
4222        uint64_t fuse                    : 4;       /**< Physical PP is present */
4223#else
4224        uint64_t fuse                    : 4;
4225        uint64_t reserved_4_63           : 60;
4226#endif
4227    } cn52xx;
4228    struct cvmx_ciu_fuse_cn52xx          cn52xxp1;
4229    struct cvmx_ciu_fuse_cn56xx
4230    {
4231#if __BYTE_ORDER == __BIG_ENDIAN
4232        uint64_t reserved_12_63          : 52;
4233        uint64_t fuse                    : 12;      /**< Physical PP is present */
4234#else
4235        uint64_t fuse                    : 12;
4236        uint64_t reserved_12_63          : 52;
4237#endif
4238    } cn56xx;
4239    struct cvmx_ciu_fuse_cn56xx          cn56xxp1;
4240    struct cvmx_ciu_fuse_s               cn58xx;
4241    struct cvmx_ciu_fuse_s               cn58xxp1;
4242} cvmx_ciu_fuse_t;
4243
4244
4245/**
4246 * cvmx_ciu_gstop
4247 */
4248typedef union
4249{
4250    uint64_t u64;
4251    struct cvmx_ciu_gstop_s
4252    {
4253#if __BYTE_ORDER == __BIG_ENDIAN
4254        uint64_t reserved_1_63           : 63;
4255        uint64_t gstop                   : 1;       /**< GSTOP bit */
4256#else
4257        uint64_t gstop                   : 1;
4258        uint64_t reserved_1_63           : 63;
4259#endif
4260    } s;
4261    struct cvmx_ciu_gstop_s              cn30xx;
4262    struct cvmx_ciu_gstop_s              cn31xx;
4263    struct cvmx_ciu_gstop_s              cn38xx;
4264    struct cvmx_ciu_gstop_s              cn38xxp2;
4265    struct cvmx_ciu_gstop_s              cn50xx;
4266    struct cvmx_ciu_gstop_s              cn52xx;
4267    struct cvmx_ciu_gstop_s              cn52xxp1;
4268    struct cvmx_ciu_gstop_s              cn56xx;
4269    struct cvmx_ciu_gstop_s              cn56xxp1;
4270    struct cvmx_ciu_gstop_s              cn58xx;
4271    struct cvmx_ciu_gstop_s              cn58xxp1;
4272} cvmx_ciu_gstop_t;
4273
4274
4275/**
4276 * cvmx_ciu_int#_en0
4277 *
4278 * Notes:
4279 * CIU_INT0_EN0:  PP0 /IP2
4280 * CIU_INT1_EN0:  PP0 /IP3
4281 * ...
4282 * CIU_INT6_EN0:  PP3/IP2
4283 * CIU_INT7_EN0:  PP3/IP3
4284 * (hole)
4285 * CIU_INT32_EN0: PCI /IP
4286 */
4287typedef union
4288{
4289    uint64_t u64;
4290    struct cvmx_ciu_intx_en0_s
4291    {
4292#if __BYTE_ORDER == __BIG_ENDIAN
4293        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4294        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4295        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4296        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4297        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4298        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
4299        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
4300        uint64_t usb                     : 1;       /**< USB Interrupt */
4301        uint64_t timer                   : 4;       /**< General timer interrupts */
4302        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4303        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4304        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4305        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4306        uint64_t rml                     : 1;       /**< RML Interrupt */
4307        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4308        uint64_t reserved_44_44          : 1;
4309        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4310        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4311        uint64_t uart                    : 2;       /**< Two UART interrupts */
4312        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4313        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4314        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4315#else
4316        uint64_t workq                   : 16;
4317        uint64_t gpio                    : 16;
4318        uint64_t mbox                    : 2;
4319        uint64_t uart                    : 2;
4320        uint64_t pci_int                 : 4;
4321        uint64_t pci_msi                 : 4;
4322        uint64_t reserved_44_44          : 1;
4323        uint64_t twsi                    : 1;
4324        uint64_t rml                     : 1;
4325        uint64_t trace                   : 1;
4326        uint64_t gmx_drp                 : 2;
4327        uint64_t ipd_drp                 : 1;
4328        uint64_t key_zero                : 1;
4329        uint64_t timer                   : 4;
4330        uint64_t usb                     : 1;
4331        uint64_t pcm                     : 1;
4332        uint64_t mpi                     : 1;
4333        uint64_t twsi2                   : 1;
4334        uint64_t powiq                   : 1;
4335        uint64_t ipdppthr                : 1;
4336        uint64_t mii                     : 1;
4337        uint64_t bootdma                 : 1;
4338#endif
4339    } s;
4340    struct cvmx_ciu_intx_en0_cn30xx
4341    {
4342#if __BYTE_ORDER == __BIG_ENDIAN
4343        uint64_t reserved_59_63          : 5;
4344        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
4345        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
4346        uint64_t usb                     : 1;       /**< USB interrupt */
4347        uint64_t timer                   : 4;       /**< General timer interrupts */
4348        uint64_t reserved_51_51          : 1;
4349        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4350        uint64_t reserved_49_49          : 1;
4351        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
4352        uint64_t reserved_47_47          : 1;
4353        uint64_t rml                     : 1;       /**< RML Interrupt */
4354        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4355        uint64_t reserved_44_44          : 1;
4356        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4357        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4358        uint64_t uart                    : 2;       /**< Two UART interrupts */
4359        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4360        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4361        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4362#else
4363        uint64_t workq                   : 16;
4364        uint64_t gpio                    : 16;
4365        uint64_t mbox                    : 2;
4366        uint64_t uart                    : 2;
4367        uint64_t pci_int                 : 4;
4368        uint64_t pci_msi                 : 4;
4369        uint64_t reserved_44_44          : 1;
4370        uint64_t twsi                    : 1;
4371        uint64_t rml                     : 1;
4372        uint64_t reserved_47_47          : 1;
4373        uint64_t gmx_drp                 : 1;
4374        uint64_t reserved_49_49          : 1;
4375        uint64_t ipd_drp                 : 1;
4376        uint64_t reserved_51_51          : 1;
4377        uint64_t timer                   : 4;
4378        uint64_t usb                     : 1;
4379        uint64_t pcm                     : 1;
4380        uint64_t mpi                     : 1;
4381        uint64_t reserved_59_63          : 5;
4382#endif
4383    } cn30xx;
4384    struct cvmx_ciu_intx_en0_cn31xx
4385    {
4386#if __BYTE_ORDER == __BIG_ENDIAN
4387        uint64_t reserved_59_63          : 5;
4388        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
4389        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
4390        uint64_t usb                     : 1;       /**< USB interrupt */
4391        uint64_t timer                   : 4;       /**< General timer interrupts */
4392        uint64_t reserved_51_51          : 1;
4393        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4394        uint64_t reserved_49_49          : 1;
4395        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
4396        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4397        uint64_t rml                     : 1;       /**< RML Interrupt */
4398        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4399        uint64_t reserved_44_44          : 1;
4400        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4401        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4402        uint64_t uart                    : 2;       /**< Two UART interrupts */
4403        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4404        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4405        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4406#else
4407        uint64_t workq                   : 16;
4408        uint64_t gpio                    : 16;
4409        uint64_t mbox                    : 2;
4410        uint64_t uart                    : 2;
4411        uint64_t pci_int                 : 4;
4412        uint64_t pci_msi                 : 4;
4413        uint64_t reserved_44_44          : 1;
4414        uint64_t twsi                    : 1;
4415        uint64_t rml                     : 1;
4416        uint64_t trace                   : 1;
4417        uint64_t gmx_drp                 : 1;
4418        uint64_t reserved_49_49          : 1;
4419        uint64_t ipd_drp                 : 1;
4420        uint64_t reserved_51_51          : 1;
4421        uint64_t timer                   : 4;
4422        uint64_t usb                     : 1;
4423        uint64_t pcm                     : 1;
4424        uint64_t mpi                     : 1;
4425        uint64_t reserved_59_63          : 5;
4426#endif
4427    } cn31xx;
4428    struct cvmx_ciu_intx_en0_cn38xx
4429    {
4430#if __BYTE_ORDER == __BIG_ENDIAN
4431        uint64_t reserved_56_63          : 8;
4432        uint64_t timer                   : 4;       /**< General timer interrupts */
4433        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4434        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4435        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4436        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4437        uint64_t rml                     : 1;       /**< RML Interrupt */
4438        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4439        uint64_t reserved_44_44          : 1;
4440        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4441        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4442        uint64_t uart                    : 2;       /**< Two UART interrupts */
4443        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4444        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4445        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4446#else
4447        uint64_t workq                   : 16;
4448        uint64_t gpio                    : 16;
4449        uint64_t mbox                    : 2;
4450        uint64_t uart                    : 2;
4451        uint64_t pci_int                 : 4;
4452        uint64_t pci_msi                 : 4;
4453        uint64_t reserved_44_44          : 1;
4454        uint64_t twsi                    : 1;
4455        uint64_t rml                     : 1;
4456        uint64_t trace                   : 1;
4457        uint64_t gmx_drp                 : 2;
4458        uint64_t ipd_drp                 : 1;
4459        uint64_t key_zero                : 1;
4460        uint64_t timer                   : 4;
4461        uint64_t reserved_56_63          : 8;
4462#endif
4463    } cn38xx;
4464    struct cvmx_ciu_intx_en0_cn38xx      cn38xxp2;
4465    struct cvmx_ciu_intx_en0_cn30xx      cn50xx;
4466    struct cvmx_ciu_intx_en0_cn52xx
4467    {
4468#if __BYTE_ORDER == __BIG_ENDIAN
4469        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4470        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4471        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4472        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4473        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4474        uint64_t reserved_57_58          : 2;
4475        uint64_t usb                     : 1;       /**< USB Interrupt */
4476        uint64_t timer                   : 4;       /**< General timer interrupts */
4477        uint64_t reserved_51_51          : 1;
4478        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4479        uint64_t reserved_49_49          : 1;
4480        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
4481        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4482        uint64_t rml                     : 1;       /**< RML Interrupt */
4483        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4484        uint64_t reserved_44_44          : 1;
4485        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4486        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4487        uint64_t uart                    : 2;       /**< Two UART interrupts */
4488        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4489        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4490        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4491#else
4492        uint64_t workq                   : 16;
4493        uint64_t gpio                    : 16;
4494        uint64_t mbox                    : 2;
4495        uint64_t uart                    : 2;
4496        uint64_t pci_int                 : 4;
4497        uint64_t pci_msi                 : 4;
4498        uint64_t reserved_44_44          : 1;
4499        uint64_t twsi                    : 1;
4500        uint64_t rml                     : 1;
4501        uint64_t trace                   : 1;
4502        uint64_t gmx_drp                 : 1;
4503        uint64_t reserved_49_49          : 1;
4504        uint64_t ipd_drp                 : 1;
4505        uint64_t reserved_51_51          : 1;
4506        uint64_t timer                   : 4;
4507        uint64_t usb                     : 1;
4508        uint64_t reserved_57_58          : 2;
4509        uint64_t twsi2                   : 1;
4510        uint64_t powiq                   : 1;
4511        uint64_t ipdppthr                : 1;
4512        uint64_t mii                     : 1;
4513        uint64_t bootdma                 : 1;
4514#endif
4515    } cn52xx;
4516    struct cvmx_ciu_intx_en0_cn52xx      cn52xxp1;
4517    struct cvmx_ciu_intx_en0_cn56xx
4518    {
4519#if __BYTE_ORDER == __BIG_ENDIAN
4520        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4521        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4522        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4523        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4524        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4525        uint64_t reserved_57_58          : 2;
4526        uint64_t usb                     : 1;       /**< USB Interrupt */
4527        uint64_t timer                   : 4;       /**< General timer interrupts */
4528        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4529        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4530        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4531        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4532        uint64_t rml                     : 1;       /**< RML Interrupt */
4533        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4534        uint64_t reserved_44_44          : 1;
4535        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4536        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4537        uint64_t uart                    : 2;       /**< Two UART interrupts */
4538        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4539        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4540        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4541#else
4542        uint64_t workq                   : 16;
4543        uint64_t gpio                    : 16;
4544        uint64_t mbox                    : 2;
4545        uint64_t uart                    : 2;
4546        uint64_t pci_int                 : 4;
4547        uint64_t pci_msi                 : 4;
4548        uint64_t reserved_44_44          : 1;
4549        uint64_t twsi                    : 1;
4550        uint64_t rml                     : 1;
4551        uint64_t trace                   : 1;
4552        uint64_t gmx_drp                 : 2;
4553        uint64_t ipd_drp                 : 1;
4554        uint64_t key_zero                : 1;
4555        uint64_t timer                   : 4;
4556        uint64_t usb                     : 1;
4557        uint64_t reserved_57_58          : 2;
4558        uint64_t twsi2                   : 1;
4559        uint64_t powiq                   : 1;
4560        uint64_t ipdppthr                : 1;
4561        uint64_t mii                     : 1;
4562        uint64_t bootdma                 : 1;
4563#endif
4564    } cn56xx;
4565    struct cvmx_ciu_intx_en0_cn56xx      cn56xxp1;
4566    struct cvmx_ciu_intx_en0_cn38xx      cn58xx;
4567    struct cvmx_ciu_intx_en0_cn38xx      cn58xxp1;
4568} cvmx_ciu_intx_en0_t;
4569
4570
4571/**
4572 * cvmx_ciu_int#_en0_w1c
4573 *
4574 * Notes:
4575 * Write-1-to-clear version of the CIU_INTx_EN0 register
4576 * (Pass2 ONLY)
4577 */
4578typedef union
4579{
4580    uint64_t u64;
4581    struct cvmx_ciu_intx_en0_w1c_s
4582    {
4583#if __BYTE_ORDER == __BIG_ENDIAN
4584        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4585        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4586        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4587        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4588        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4589        uint64_t reserved_57_58          : 2;
4590        uint64_t usb                     : 1;       /**< USB Interrupt */
4591        uint64_t timer                   : 4;       /**< General timer interrupts */
4592        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4593        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4594        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4595        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4596        uint64_t rml                     : 1;       /**< RML Interrupt */
4597        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4598        uint64_t reserved_44_44          : 1;
4599        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4600        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4601        uint64_t uart                    : 2;       /**< Two UART interrupts */
4602        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4603        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4604        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4605#else
4606        uint64_t workq                   : 16;
4607        uint64_t gpio                    : 16;
4608        uint64_t mbox                    : 2;
4609        uint64_t uart                    : 2;
4610        uint64_t pci_int                 : 4;
4611        uint64_t pci_msi                 : 4;
4612        uint64_t reserved_44_44          : 1;
4613        uint64_t twsi                    : 1;
4614        uint64_t rml                     : 1;
4615        uint64_t trace                   : 1;
4616        uint64_t gmx_drp                 : 2;
4617        uint64_t ipd_drp                 : 1;
4618        uint64_t key_zero                : 1;
4619        uint64_t timer                   : 4;
4620        uint64_t usb                     : 1;
4621        uint64_t reserved_57_58          : 2;
4622        uint64_t twsi2                   : 1;
4623        uint64_t powiq                   : 1;
4624        uint64_t ipdppthr                : 1;
4625        uint64_t mii                     : 1;
4626        uint64_t bootdma                 : 1;
4627#endif
4628    } s;
4629    struct cvmx_ciu_intx_en0_w1c_cn52xx
4630    {
4631#if __BYTE_ORDER == __BIG_ENDIAN
4632        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4633        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4634        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4635        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4636        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4637        uint64_t reserved_57_58          : 2;
4638        uint64_t usb                     : 1;       /**< USB Interrupt */
4639        uint64_t timer                   : 4;       /**< General timer interrupts */
4640        uint64_t reserved_51_51          : 1;
4641        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4642        uint64_t reserved_49_49          : 1;
4643        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
4644        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4645        uint64_t rml                     : 1;       /**< RML Interrupt */
4646        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4647        uint64_t reserved_44_44          : 1;
4648        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4649        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4650        uint64_t uart                    : 2;       /**< Two UART interrupts */
4651        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4652        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4653        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4654#else
4655        uint64_t workq                   : 16;
4656        uint64_t gpio                    : 16;
4657        uint64_t mbox                    : 2;
4658        uint64_t uart                    : 2;
4659        uint64_t pci_int                 : 4;
4660        uint64_t pci_msi                 : 4;
4661        uint64_t reserved_44_44          : 1;
4662        uint64_t twsi                    : 1;
4663        uint64_t rml                     : 1;
4664        uint64_t trace                   : 1;
4665        uint64_t gmx_drp                 : 1;
4666        uint64_t reserved_49_49          : 1;
4667        uint64_t ipd_drp                 : 1;
4668        uint64_t reserved_51_51          : 1;
4669        uint64_t timer                   : 4;
4670        uint64_t usb                     : 1;
4671        uint64_t reserved_57_58          : 2;
4672        uint64_t twsi2                   : 1;
4673        uint64_t powiq                   : 1;
4674        uint64_t ipdppthr                : 1;
4675        uint64_t mii                     : 1;
4676        uint64_t bootdma                 : 1;
4677#endif
4678    } cn52xx;
4679    struct cvmx_ciu_intx_en0_w1c_s       cn56xx;
4680    struct cvmx_ciu_intx_en0_w1c_cn58xx
4681    {
4682#if __BYTE_ORDER == __BIG_ENDIAN
4683        uint64_t reserved_56_63          : 8;
4684        uint64_t timer                   : 4;       /**< General timer interrupts */
4685        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4686        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4687        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4688        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4689        uint64_t rml                     : 1;       /**< RML Interrupt */
4690        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4691        uint64_t reserved_44_44          : 1;
4692        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4693        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4694        uint64_t uart                    : 2;       /**< Two UART interrupts */
4695        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4696        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4697        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4698#else
4699        uint64_t workq                   : 16;
4700        uint64_t gpio                    : 16;
4701        uint64_t mbox                    : 2;
4702        uint64_t uart                    : 2;
4703        uint64_t pci_int                 : 4;
4704        uint64_t pci_msi                 : 4;
4705        uint64_t reserved_44_44          : 1;
4706        uint64_t twsi                    : 1;
4707        uint64_t rml                     : 1;
4708        uint64_t trace                   : 1;
4709        uint64_t gmx_drp                 : 2;
4710        uint64_t ipd_drp                 : 1;
4711        uint64_t key_zero                : 1;
4712        uint64_t timer                   : 4;
4713        uint64_t reserved_56_63          : 8;
4714#endif
4715    } cn58xx;
4716} cvmx_ciu_intx_en0_w1c_t;
4717
4718
4719/**
4720 * cvmx_ciu_int#_en0_w1s
4721 *
4722 * Notes:
4723 * Write-1-to-set version of the CIU_INTx_EN0 register
4724 * (Pass2 ONLY)
4725 */
4726typedef union
4727{
4728    uint64_t u64;
4729    struct cvmx_ciu_intx_en0_w1s_s
4730    {
4731#if __BYTE_ORDER == __BIG_ENDIAN
4732        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4733        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4734        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4735        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4736        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4737        uint64_t reserved_57_58          : 2;
4738        uint64_t usb                     : 1;       /**< USB Interrupt */
4739        uint64_t timer                   : 4;       /**< General timer interrupts */
4740        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4741        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4742        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4743        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4744        uint64_t rml                     : 1;       /**< RML Interrupt */
4745        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4746        uint64_t reserved_44_44          : 1;
4747        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4748        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4749        uint64_t uart                    : 2;       /**< Two UART interrupts */
4750        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4751        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4752        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4753#else
4754        uint64_t workq                   : 16;
4755        uint64_t gpio                    : 16;
4756        uint64_t mbox                    : 2;
4757        uint64_t uart                    : 2;
4758        uint64_t pci_int                 : 4;
4759        uint64_t pci_msi                 : 4;
4760        uint64_t reserved_44_44          : 1;
4761        uint64_t twsi                    : 1;
4762        uint64_t rml                     : 1;
4763        uint64_t trace                   : 1;
4764        uint64_t gmx_drp                 : 2;
4765        uint64_t ipd_drp                 : 1;
4766        uint64_t key_zero                : 1;
4767        uint64_t timer                   : 4;
4768        uint64_t usb                     : 1;
4769        uint64_t reserved_57_58          : 2;
4770        uint64_t twsi2                   : 1;
4771        uint64_t powiq                   : 1;
4772        uint64_t ipdppthr                : 1;
4773        uint64_t mii                     : 1;
4774        uint64_t bootdma                 : 1;
4775#endif
4776    } s;
4777    struct cvmx_ciu_intx_en0_w1s_cn52xx
4778    {
4779#if __BYTE_ORDER == __BIG_ENDIAN
4780        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
4781        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
4782        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
4783        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
4784        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
4785        uint64_t reserved_57_58          : 2;
4786        uint64_t usb                     : 1;       /**< USB Interrupt */
4787        uint64_t timer                   : 4;       /**< General timer interrupts */
4788        uint64_t reserved_51_51          : 1;
4789        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4790        uint64_t reserved_49_49          : 1;
4791        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
4792        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4793        uint64_t rml                     : 1;       /**< RML Interrupt */
4794        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4795        uint64_t reserved_44_44          : 1;
4796        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4797        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4798        uint64_t uart                    : 2;       /**< Two UART interrupts */
4799        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4800        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4801        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4802#else
4803        uint64_t workq                   : 16;
4804        uint64_t gpio                    : 16;
4805        uint64_t mbox                    : 2;
4806        uint64_t uart                    : 2;
4807        uint64_t pci_int                 : 4;
4808        uint64_t pci_msi                 : 4;
4809        uint64_t reserved_44_44          : 1;
4810        uint64_t twsi                    : 1;
4811        uint64_t rml                     : 1;
4812        uint64_t trace                   : 1;
4813        uint64_t gmx_drp                 : 1;
4814        uint64_t reserved_49_49          : 1;
4815        uint64_t ipd_drp                 : 1;
4816        uint64_t reserved_51_51          : 1;
4817        uint64_t timer                   : 4;
4818        uint64_t usb                     : 1;
4819        uint64_t reserved_57_58          : 2;
4820        uint64_t twsi2                   : 1;
4821        uint64_t powiq                   : 1;
4822        uint64_t ipdppthr                : 1;
4823        uint64_t mii                     : 1;
4824        uint64_t bootdma                 : 1;
4825#endif
4826    } cn52xx;
4827    struct cvmx_ciu_intx_en0_w1s_s       cn56xx;
4828    struct cvmx_ciu_intx_en0_w1s_cn58xx
4829    {
4830#if __BYTE_ORDER == __BIG_ENDIAN
4831        uint64_t reserved_56_63          : 8;
4832        uint64_t timer                   : 4;       /**< General timer interrupts */
4833        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
4834        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
4835        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
4836        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
4837        uint64_t rml                     : 1;       /**< RML Interrupt */
4838        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
4839        uint64_t reserved_44_44          : 1;
4840        uint64_t pci_msi                 : 4;       /**< PCI MSI */
4841        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
4842        uint64_t uart                    : 2;       /**< Two UART interrupts */
4843        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
4844        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
4845        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
4846#else
4847        uint64_t workq                   : 16;
4848        uint64_t gpio                    : 16;
4849        uint64_t mbox                    : 2;
4850        uint64_t uart                    : 2;
4851        uint64_t pci_int                 : 4;
4852        uint64_t pci_msi                 : 4;
4853        uint64_t reserved_44_44          : 1;
4854        uint64_t twsi                    : 1;
4855        uint64_t rml                     : 1;
4856        uint64_t trace                   : 1;
4857        uint64_t gmx_drp                 : 2;
4858        uint64_t ipd_drp                 : 1;
4859        uint64_t key_zero                : 1;
4860        uint64_t timer                   : 4;
4861        uint64_t reserved_56_63          : 8;
4862#endif
4863    } cn58xx;
4864} cvmx_ciu_intx_en0_w1s_t;
4865
4866
4867/**
4868 * cvmx_ciu_int#_en1
4869 *
4870 * Notes:
4871 * @verbatim
4872 * PPx/IP2 will be raised when...
4873 *
4874 *    n = x*2
4875 *    PPx/IP2 = |([CIU_INT_SUM1, CIU_INTn_SUM0] & [CIU_INTn_EN1, CIU_INTn_EN0])
4876 *
4877 * PPx/IP3 will be raised when...
4878 *
4879 *    n = x*2 + 1
4880 *    PPx/IP3 =  |([CIU_INT_SUM1, CIU_INTn_SUM0] & [CIU_INTn_EN1, CIU_INTn_EN0])
4881 *
4882 * PCI/INT will be raised when...
4883 *
4884 *    PCI/INT = |([CIU_INT_SUM1, CIU_INT32_SUM0] & [CIU_INT32_EN1, CIU_INT32_EN0])
4885 * @endverbatim
4886 */
4887typedef union
4888{
4889    uint64_t u64;
4890    struct cvmx_ciu_intx_en1_s
4891    {
4892#if __BYTE_ORDER == __BIG_ENDIAN
4893        uint64_t reserved_20_63          : 44;
4894        uint64_t nand                    : 1;       /**< NAND Flash Controller */
4895        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
4896        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
4897        uint64_t uart2                   : 1;       /**< Third UART interrupt */
4898        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
4899#else
4900        uint64_t wdog                    : 16;
4901        uint64_t uart2                   : 1;
4902        uint64_t usb1                    : 1;
4903        uint64_t mii1                    : 1;
4904        uint64_t nand                    : 1;
4905        uint64_t reserved_20_63          : 44;
4906#endif
4907    } s;
4908    struct cvmx_ciu_intx_en1_cn30xx
4909    {
4910#if __BYTE_ORDER == __BIG_ENDIAN
4911        uint64_t reserved_1_63           : 63;
4912        uint64_t wdog                    : 1;       /**< Watchdog summary interrupt enable vector */
4913#else
4914        uint64_t wdog                    : 1;
4915        uint64_t reserved_1_63           : 63;
4916#endif
4917    } cn30xx;
4918    struct cvmx_ciu_intx_en1_cn31xx
4919    {
4920#if __BYTE_ORDER == __BIG_ENDIAN
4921        uint64_t reserved_2_63           : 62;
4922        uint64_t wdog                    : 2;       /**< Watchdog summary interrupt enable vectory */
4923#else
4924        uint64_t wdog                    : 2;
4925        uint64_t reserved_2_63           : 62;
4926#endif
4927    } cn31xx;
4928    struct cvmx_ciu_intx_en1_cn38xx
4929    {
4930#if __BYTE_ORDER == __BIG_ENDIAN
4931        uint64_t reserved_16_63          : 48;
4932        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
4933#else
4934        uint64_t wdog                    : 16;
4935        uint64_t reserved_16_63          : 48;
4936#endif
4937    } cn38xx;
4938    struct cvmx_ciu_intx_en1_cn38xx      cn38xxp2;
4939    struct cvmx_ciu_intx_en1_cn31xx      cn50xx;
4940    struct cvmx_ciu_intx_en1_cn52xx
4941    {
4942#if __BYTE_ORDER == __BIG_ENDIAN
4943        uint64_t reserved_20_63          : 44;
4944        uint64_t nand                    : 1;       /**< NAND Flash Controller */
4945        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
4946        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
4947        uint64_t uart2                   : 1;       /**< Third UART interrupt */
4948        uint64_t reserved_4_15           : 12;
4949        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
4950#else
4951        uint64_t wdog                    : 4;
4952        uint64_t reserved_4_15           : 12;
4953        uint64_t uart2                   : 1;
4954        uint64_t usb1                    : 1;
4955        uint64_t mii1                    : 1;
4956        uint64_t nand                    : 1;
4957        uint64_t reserved_20_63          : 44;
4958#endif
4959    } cn52xx;
4960    struct cvmx_ciu_intx_en1_cn52xxp1
4961    {
4962#if __BYTE_ORDER == __BIG_ENDIAN
4963        uint64_t reserved_19_63          : 45;
4964        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
4965        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
4966        uint64_t uart2                   : 1;       /**< Third UART interrupt */
4967        uint64_t reserved_4_15           : 12;
4968        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
4969#else
4970        uint64_t wdog                    : 4;
4971        uint64_t reserved_4_15           : 12;
4972        uint64_t uart2                   : 1;
4973        uint64_t usb1                    : 1;
4974        uint64_t mii1                    : 1;
4975        uint64_t reserved_19_63          : 45;
4976#endif
4977    } cn52xxp1;
4978    struct cvmx_ciu_intx_en1_cn56xx
4979    {
4980#if __BYTE_ORDER == __BIG_ENDIAN
4981        uint64_t reserved_12_63          : 52;
4982        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
4983#else
4984        uint64_t wdog                    : 12;
4985        uint64_t reserved_12_63          : 52;
4986#endif
4987    } cn56xx;
4988    struct cvmx_ciu_intx_en1_cn56xx      cn56xxp1;
4989    struct cvmx_ciu_intx_en1_cn38xx      cn58xx;
4990    struct cvmx_ciu_intx_en1_cn38xx      cn58xxp1;
4991} cvmx_ciu_intx_en1_t;
4992
4993
4994/**
4995 * cvmx_ciu_int#_en1_w1c
4996 *
4997 * Notes:
4998 * Write-1-to-clear version of the CIU_INTx_EN1 register
4999 * (Pass2 ONLY)
5000 */
5001typedef union
5002{
5003    uint64_t u64;
5004    struct cvmx_ciu_intx_en1_w1c_s
5005    {
5006#if __BYTE_ORDER == __BIG_ENDIAN
5007        uint64_t reserved_20_63          : 44;
5008        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5009        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5010        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5011        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5012        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5013#else
5014        uint64_t wdog                    : 16;
5015        uint64_t uart2                   : 1;
5016        uint64_t usb1                    : 1;
5017        uint64_t mii1                    : 1;
5018        uint64_t nand                    : 1;
5019        uint64_t reserved_20_63          : 44;
5020#endif
5021    } s;
5022    struct cvmx_ciu_intx_en1_w1c_cn52xx
5023    {
5024#if __BYTE_ORDER == __BIG_ENDIAN
5025        uint64_t reserved_20_63          : 44;
5026        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5027        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5028        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5029        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5030        uint64_t reserved_4_15           : 12;
5031        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5032#else
5033        uint64_t wdog                    : 4;
5034        uint64_t reserved_4_15           : 12;
5035        uint64_t uart2                   : 1;
5036        uint64_t usb1                    : 1;
5037        uint64_t mii1                    : 1;
5038        uint64_t nand                    : 1;
5039        uint64_t reserved_20_63          : 44;
5040#endif
5041    } cn52xx;
5042    struct cvmx_ciu_intx_en1_w1c_cn56xx
5043    {
5044#if __BYTE_ORDER == __BIG_ENDIAN
5045        uint64_t reserved_12_63          : 52;
5046        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
5047#else
5048        uint64_t wdog                    : 12;
5049        uint64_t reserved_12_63          : 52;
5050#endif
5051    } cn56xx;
5052    struct cvmx_ciu_intx_en1_w1c_cn58xx
5053    {
5054#if __BYTE_ORDER == __BIG_ENDIAN
5055        uint64_t reserved_16_63          : 48;
5056        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5057#else
5058        uint64_t wdog                    : 16;
5059        uint64_t reserved_16_63          : 48;
5060#endif
5061    } cn58xx;
5062} cvmx_ciu_intx_en1_w1c_t;
5063
5064
5065/**
5066 * cvmx_ciu_int#_en1_w1s
5067 *
5068 * Notes:
5069 * Write-1-to-set version of the CIU_INTx_EN1 register
5070 * (Pass2 ONLY)
5071 */
5072typedef union
5073{
5074    uint64_t u64;
5075    struct cvmx_ciu_intx_en1_w1s_s
5076    {
5077#if __BYTE_ORDER == __BIG_ENDIAN
5078        uint64_t reserved_20_63          : 44;
5079        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5080        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5081        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5082        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5083        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5084#else
5085        uint64_t wdog                    : 16;
5086        uint64_t uart2                   : 1;
5087        uint64_t usb1                    : 1;
5088        uint64_t mii1                    : 1;
5089        uint64_t nand                    : 1;
5090        uint64_t reserved_20_63          : 44;
5091#endif
5092    } s;
5093    struct cvmx_ciu_intx_en1_w1s_cn52xx
5094    {
5095#if __BYTE_ORDER == __BIG_ENDIAN
5096        uint64_t reserved_20_63          : 44;
5097        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5098        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5099        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5100        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5101        uint64_t reserved_4_15           : 12;
5102        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5103#else
5104        uint64_t wdog                    : 4;
5105        uint64_t reserved_4_15           : 12;
5106        uint64_t uart2                   : 1;
5107        uint64_t usb1                    : 1;
5108        uint64_t mii1                    : 1;
5109        uint64_t nand                    : 1;
5110        uint64_t reserved_20_63          : 44;
5111#endif
5112    } cn52xx;
5113    struct cvmx_ciu_intx_en1_w1s_cn56xx
5114    {
5115#if __BYTE_ORDER == __BIG_ENDIAN
5116        uint64_t reserved_12_63          : 52;
5117        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
5118#else
5119        uint64_t wdog                    : 12;
5120        uint64_t reserved_12_63          : 52;
5121#endif
5122    } cn56xx;
5123    struct cvmx_ciu_intx_en1_w1s_cn58xx
5124    {
5125#if __BYTE_ORDER == __BIG_ENDIAN
5126        uint64_t reserved_16_63          : 48;
5127        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5128#else
5129        uint64_t wdog                    : 16;
5130        uint64_t reserved_16_63          : 48;
5131#endif
5132    } cn58xx;
5133} cvmx_ciu_intx_en1_w1s_t;
5134
5135
5136/**
5137 * cvmx_ciu_int#_en4_0
5138 *
5139 * Notes:
5140 * CIU_INT0_EN4_0:   PP0  /IP4
5141 * CIU_INT1_EN4_0:   PP1  /IP4
5142 * ...
5143 * CIU_INT11_EN4_0:  PP11 /IP4
5144 */
5145typedef union
5146{
5147    uint64_t u64;
5148    struct cvmx_ciu_intx_en4_0_s
5149    {
5150#if __BYTE_ORDER == __BIG_ENDIAN
5151        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5152        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5153        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5154        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5155        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5156        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
5157        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
5158        uint64_t usb                     : 1;       /**< USB Interrupt */
5159        uint64_t timer                   : 4;       /**< General timer interrupts */
5160        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5161        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5162        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5163        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5164        uint64_t rml                     : 1;       /**< RML Interrupt */
5165        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5166        uint64_t reserved_44_44          : 1;
5167        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5168        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5169        uint64_t uart                    : 2;       /**< Two UART interrupts */
5170        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5171        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5172        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5173#else
5174        uint64_t workq                   : 16;
5175        uint64_t gpio                    : 16;
5176        uint64_t mbox                    : 2;
5177        uint64_t uart                    : 2;
5178        uint64_t pci_int                 : 4;
5179        uint64_t pci_msi                 : 4;
5180        uint64_t reserved_44_44          : 1;
5181        uint64_t twsi                    : 1;
5182        uint64_t rml                     : 1;
5183        uint64_t trace                   : 1;
5184        uint64_t gmx_drp                 : 2;
5185        uint64_t ipd_drp                 : 1;
5186        uint64_t key_zero                : 1;
5187        uint64_t timer                   : 4;
5188        uint64_t usb                     : 1;
5189        uint64_t pcm                     : 1;
5190        uint64_t mpi                     : 1;
5191        uint64_t twsi2                   : 1;
5192        uint64_t powiq                   : 1;
5193        uint64_t ipdppthr                : 1;
5194        uint64_t mii                     : 1;
5195        uint64_t bootdma                 : 1;
5196#endif
5197    } s;
5198    struct cvmx_ciu_intx_en4_0_cn50xx
5199    {
5200#if __BYTE_ORDER == __BIG_ENDIAN
5201        uint64_t reserved_59_63          : 5;
5202        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
5203        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
5204        uint64_t usb                     : 1;       /**< USB interrupt */
5205        uint64_t timer                   : 4;       /**< General timer interrupts */
5206        uint64_t reserved_51_51          : 1;
5207        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5208        uint64_t reserved_49_49          : 1;
5209        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
5210        uint64_t reserved_47_47          : 1;
5211        uint64_t rml                     : 1;       /**< RML Interrupt */
5212        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5213        uint64_t reserved_44_44          : 1;
5214        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5215        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5216        uint64_t uart                    : 2;       /**< Two UART interrupts */
5217        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5218        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5219        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5220#else
5221        uint64_t workq                   : 16;
5222        uint64_t gpio                    : 16;
5223        uint64_t mbox                    : 2;
5224        uint64_t uart                    : 2;
5225        uint64_t pci_int                 : 4;
5226        uint64_t pci_msi                 : 4;
5227        uint64_t reserved_44_44          : 1;
5228        uint64_t twsi                    : 1;
5229        uint64_t rml                     : 1;
5230        uint64_t reserved_47_47          : 1;
5231        uint64_t gmx_drp                 : 1;
5232        uint64_t reserved_49_49          : 1;
5233        uint64_t ipd_drp                 : 1;
5234        uint64_t reserved_51_51          : 1;
5235        uint64_t timer                   : 4;
5236        uint64_t usb                     : 1;
5237        uint64_t pcm                     : 1;
5238        uint64_t mpi                     : 1;
5239        uint64_t reserved_59_63          : 5;
5240#endif
5241    } cn50xx;
5242    struct cvmx_ciu_intx_en4_0_cn52xx
5243    {
5244#if __BYTE_ORDER == __BIG_ENDIAN
5245        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5246        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5247        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5248        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5249        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5250        uint64_t reserved_57_58          : 2;
5251        uint64_t usb                     : 1;       /**< USB Interrupt */
5252        uint64_t timer                   : 4;       /**< General timer interrupts */
5253        uint64_t reserved_51_51          : 1;
5254        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5255        uint64_t reserved_49_49          : 1;
5256        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
5257        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5258        uint64_t rml                     : 1;       /**< RML Interrupt */
5259        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5260        uint64_t reserved_44_44          : 1;
5261        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5262        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5263        uint64_t uart                    : 2;       /**< Two UART interrupts */
5264        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5265        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5266        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5267#else
5268        uint64_t workq                   : 16;
5269        uint64_t gpio                    : 16;
5270        uint64_t mbox                    : 2;
5271        uint64_t uart                    : 2;
5272        uint64_t pci_int                 : 4;
5273        uint64_t pci_msi                 : 4;
5274        uint64_t reserved_44_44          : 1;
5275        uint64_t twsi                    : 1;
5276        uint64_t rml                     : 1;
5277        uint64_t trace                   : 1;
5278        uint64_t gmx_drp                 : 1;
5279        uint64_t reserved_49_49          : 1;
5280        uint64_t ipd_drp                 : 1;
5281        uint64_t reserved_51_51          : 1;
5282        uint64_t timer                   : 4;
5283        uint64_t usb                     : 1;
5284        uint64_t reserved_57_58          : 2;
5285        uint64_t twsi2                   : 1;
5286        uint64_t powiq                   : 1;
5287        uint64_t ipdppthr                : 1;
5288        uint64_t mii                     : 1;
5289        uint64_t bootdma                 : 1;
5290#endif
5291    } cn52xx;
5292    struct cvmx_ciu_intx_en4_0_cn52xx    cn52xxp1;
5293    struct cvmx_ciu_intx_en4_0_cn56xx
5294    {
5295#if __BYTE_ORDER == __BIG_ENDIAN
5296        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5297        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5298        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5299        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5300        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5301        uint64_t reserved_57_58          : 2;
5302        uint64_t usb                     : 1;       /**< USB Interrupt */
5303        uint64_t timer                   : 4;       /**< General timer interrupts */
5304        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5305        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5306        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5307        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5308        uint64_t rml                     : 1;       /**< RML Interrupt */
5309        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5310        uint64_t reserved_44_44          : 1;
5311        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5312        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5313        uint64_t uart                    : 2;       /**< Two UART interrupts */
5314        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5315        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5316        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5317#else
5318        uint64_t workq                   : 16;
5319        uint64_t gpio                    : 16;
5320        uint64_t mbox                    : 2;
5321        uint64_t uart                    : 2;
5322        uint64_t pci_int                 : 4;
5323        uint64_t pci_msi                 : 4;
5324        uint64_t reserved_44_44          : 1;
5325        uint64_t twsi                    : 1;
5326        uint64_t rml                     : 1;
5327        uint64_t trace                   : 1;
5328        uint64_t gmx_drp                 : 2;
5329        uint64_t ipd_drp                 : 1;
5330        uint64_t key_zero                : 1;
5331        uint64_t timer                   : 4;
5332        uint64_t usb                     : 1;
5333        uint64_t reserved_57_58          : 2;
5334        uint64_t twsi2                   : 1;
5335        uint64_t powiq                   : 1;
5336        uint64_t ipdppthr                : 1;
5337        uint64_t mii                     : 1;
5338        uint64_t bootdma                 : 1;
5339#endif
5340    } cn56xx;
5341    struct cvmx_ciu_intx_en4_0_cn56xx    cn56xxp1;
5342    struct cvmx_ciu_intx_en4_0_cn58xx
5343    {
5344#if __BYTE_ORDER == __BIG_ENDIAN
5345        uint64_t reserved_56_63          : 8;
5346        uint64_t timer                   : 4;       /**< General timer interrupts */
5347        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5348        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5349        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5350        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5351        uint64_t rml                     : 1;       /**< RML Interrupt */
5352        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5353        uint64_t reserved_44_44          : 1;
5354        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5355        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5356        uint64_t uart                    : 2;       /**< Two UART interrupts */
5357        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5358        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5359        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5360#else
5361        uint64_t workq                   : 16;
5362        uint64_t gpio                    : 16;
5363        uint64_t mbox                    : 2;
5364        uint64_t uart                    : 2;
5365        uint64_t pci_int                 : 4;
5366        uint64_t pci_msi                 : 4;
5367        uint64_t reserved_44_44          : 1;
5368        uint64_t twsi                    : 1;
5369        uint64_t rml                     : 1;
5370        uint64_t trace                   : 1;
5371        uint64_t gmx_drp                 : 2;
5372        uint64_t ipd_drp                 : 1;
5373        uint64_t key_zero                : 1;
5374        uint64_t timer                   : 4;
5375        uint64_t reserved_56_63          : 8;
5376#endif
5377    } cn58xx;
5378    struct cvmx_ciu_intx_en4_0_cn58xx    cn58xxp1;
5379} cvmx_ciu_intx_en4_0_t;
5380
5381
5382/**
5383 * cvmx_ciu_int#_en4_0_w1c
5384 *
5385 * Notes:
5386 * Write-1-to-clear version of the CIU_INTx_EN4_0 register
5387 * (Pass2 ONLY)
5388 */
5389typedef union
5390{
5391    uint64_t u64;
5392    struct cvmx_ciu_intx_en4_0_w1c_s
5393    {
5394#if __BYTE_ORDER == __BIG_ENDIAN
5395        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5396        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5397        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5398        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5399        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5400        uint64_t reserved_57_58          : 2;
5401        uint64_t usb                     : 1;       /**< USB Interrupt */
5402        uint64_t timer                   : 4;       /**< General timer interrupts */
5403        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5404        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5405        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5406        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5407        uint64_t rml                     : 1;       /**< RML Interrupt */
5408        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5409        uint64_t reserved_44_44          : 1;
5410        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5411        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5412        uint64_t uart                    : 2;       /**< Two UART interrupts */
5413        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5414        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5415        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5416#else
5417        uint64_t workq                   : 16;
5418        uint64_t gpio                    : 16;
5419        uint64_t mbox                    : 2;
5420        uint64_t uart                    : 2;
5421        uint64_t pci_int                 : 4;
5422        uint64_t pci_msi                 : 4;
5423        uint64_t reserved_44_44          : 1;
5424        uint64_t twsi                    : 1;
5425        uint64_t rml                     : 1;
5426        uint64_t trace                   : 1;
5427        uint64_t gmx_drp                 : 2;
5428        uint64_t ipd_drp                 : 1;
5429        uint64_t key_zero                : 1;
5430        uint64_t timer                   : 4;
5431        uint64_t usb                     : 1;
5432        uint64_t reserved_57_58          : 2;
5433        uint64_t twsi2                   : 1;
5434        uint64_t powiq                   : 1;
5435        uint64_t ipdppthr                : 1;
5436        uint64_t mii                     : 1;
5437        uint64_t bootdma                 : 1;
5438#endif
5439    } s;
5440    struct cvmx_ciu_intx_en4_0_w1c_cn52xx
5441    {
5442#if __BYTE_ORDER == __BIG_ENDIAN
5443        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5444        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5445        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5446        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5447        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5448        uint64_t reserved_57_58          : 2;
5449        uint64_t usb                     : 1;       /**< USB Interrupt */
5450        uint64_t timer                   : 4;       /**< General timer interrupts */
5451        uint64_t reserved_51_51          : 1;
5452        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5453        uint64_t reserved_49_49          : 1;
5454        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
5455        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5456        uint64_t rml                     : 1;       /**< RML Interrupt */
5457        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5458        uint64_t reserved_44_44          : 1;
5459        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5460        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5461        uint64_t uart                    : 2;       /**< Two UART interrupts */
5462        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5463        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5464        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5465#else
5466        uint64_t workq                   : 16;
5467        uint64_t gpio                    : 16;
5468        uint64_t mbox                    : 2;
5469        uint64_t uart                    : 2;
5470        uint64_t pci_int                 : 4;
5471        uint64_t pci_msi                 : 4;
5472        uint64_t reserved_44_44          : 1;
5473        uint64_t twsi                    : 1;
5474        uint64_t rml                     : 1;
5475        uint64_t trace                   : 1;
5476        uint64_t gmx_drp                 : 1;
5477        uint64_t reserved_49_49          : 1;
5478        uint64_t ipd_drp                 : 1;
5479        uint64_t reserved_51_51          : 1;
5480        uint64_t timer                   : 4;
5481        uint64_t usb                     : 1;
5482        uint64_t reserved_57_58          : 2;
5483        uint64_t twsi2                   : 1;
5484        uint64_t powiq                   : 1;
5485        uint64_t ipdppthr                : 1;
5486        uint64_t mii                     : 1;
5487        uint64_t bootdma                 : 1;
5488#endif
5489    } cn52xx;
5490    struct cvmx_ciu_intx_en4_0_w1c_s     cn56xx;
5491    struct cvmx_ciu_intx_en4_0_w1c_cn58xx
5492    {
5493#if __BYTE_ORDER == __BIG_ENDIAN
5494        uint64_t reserved_56_63          : 8;
5495        uint64_t timer                   : 4;       /**< General timer interrupts */
5496        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5497        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5498        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5499        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5500        uint64_t rml                     : 1;       /**< RML Interrupt */
5501        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5502        uint64_t reserved_44_44          : 1;
5503        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5504        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5505        uint64_t uart                    : 2;       /**< Two UART interrupts */
5506        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5507        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5508        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5509#else
5510        uint64_t workq                   : 16;
5511        uint64_t gpio                    : 16;
5512        uint64_t mbox                    : 2;
5513        uint64_t uart                    : 2;
5514        uint64_t pci_int                 : 4;
5515        uint64_t pci_msi                 : 4;
5516        uint64_t reserved_44_44          : 1;
5517        uint64_t twsi                    : 1;
5518        uint64_t rml                     : 1;
5519        uint64_t trace                   : 1;
5520        uint64_t gmx_drp                 : 2;
5521        uint64_t ipd_drp                 : 1;
5522        uint64_t key_zero                : 1;
5523        uint64_t timer                   : 4;
5524        uint64_t reserved_56_63          : 8;
5525#endif
5526    } cn58xx;
5527} cvmx_ciu_intx_en4_0_w1c_t;
5528
5529
5530/**
5531 * cvmx_ciu_int#_en4_0_w1s
5532 *
5533 * Notes:
5534 * Write-1-to-set version of the CIU_INTx_EN4_0 register
5535 * (Pass2 ONLY)
5536 */
5537typedef union
5538{
5539    uint64_t u64;
5540    struct cvmx_ciu_intx_en4_0_w1s_s
5541    {
5542#if __BYTE_ORDER == __BIG_ENDIAN
5543        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5544        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5545        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5546        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5547        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5548        uint64_t reserved_57_58          : 2;
5549        uint64_t usb                     : 1;       /**< USB Interrupt */
5550        uint64_t timer                   : 4;       /**< General timer interrupts */
5551        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5552        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5553        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5554        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5555        uint64_t rml                     : 1;       /**< RML Interrupt */
5556        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5557        uint64_t reserved_44_44          : 1;
5558        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5559        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5560        uint64_t uart                    : 2;       /**< Two UART interrupts */
5561        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5562        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5563        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5564#else
5565        uint64_t workq                   : 16;
5566        uint64_t gpio                    : 16;
5567        uint64_t mbox                    : 2;
5568        uint64_t uart                    : 2;
5569        uint64_t pci_int                 : 4;
5570        uint64_t pci_msi                 : 4;
5571        uint64_t reserved_44_44          : 1;
5572        uint64_t twsi                    : 1;
5573        uint64_t rml                     : 1;
5574        uint64_t trace                   : 1;
5575        uint64_t gmx_drp                 : 2;
5576        uint64_t ipd_drp                 : 1;
5577        uint64_t key_zero                : 1;
5578        uint64_t timer                   : 4;
5579        uint64_t usb                     : 1;
5580        uint64_t reserved_57_58          : 2;
5581        uint64_t twsi2                   : 1;
5582        uint64_t powiq                   : 1;
5583        uint64_t ipdppthr                : 1;
5584        uint64_t mii                     : 1;
5585        uint64_t bootdma                 : 1;
5586#endif
5587    } s;
5588    struct cvmx_ciu_intx_en4_0_w1s_cn52xx
5589    {
5590#if __BYTE_ORDER == __BIG_ENDIAN
5591        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5592        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5593        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5594        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5595        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5596        uint64_t reserved_57_58          : 2;
5597        uint64_t usb                     : 1;       /**< USB Interrupt */
5598        uint64_t timer                   : 4;       /**< General timer interrupts */
5599        uint64_t reserved_51_51          : 1;
5600        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5601        uint64_t reserved_49_49          : 1;
5602        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
5603        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5604        uint64_t rml                     : 1;       /**< RML Interrupt */
5605        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5606        uint64_t reserved_44_44          : 1;
5607        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5608        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5609        uint64_t uart                    : 2;       /**< Two UART interrupts */
5610        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5611        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5612        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5613#else
5614        uint64_t workq                   : 16;
5615        uint64_t gpio                    : 16;
5616        uint64_t mbox                    : 2;
5617        uint64_t uart                    : 2;
5618        uint64_t pci_int                 : 4;
5619        uint64_t pci_msi                 : 4;
5620        uint64_t reserved_44_44          : 1;
5621        uint64_t twsi                    : 1;
5622        uint64_t rml                     : 1;
5623        uint64_t trace                   : 1;
5624        uint64_t gmx_drp                 : 1;
5625        uint64_t reserved_49_49          : 1;
5626        uint64_t ipd_drp                 : 1;
5627        uint64_t reserved_51_51          : 1;
5628        uint64_t timer                   : 4;
5629        uint64_t usb                     : 1;
5630        uint64_t reserved_57_58          : 2;
5631        uint64_t twsi2                   : 1;
5632        uint64_t powiq                   : 1;
5633        uint64_t ipdppthr                : 1;
5634        uint64_t mii                     : 1;
5635        uint64_t bootdma                 : 1;
5636#endif
5637    } cn52xx;
5638    struct cvmx_ciu_intx_en4_0_w1s_s     cn56xx;
5639    struct cvmx_ciu_intx_en4_0_w1s_cn58xx
5640    {
5641#if __BYTE_ORDER == __BIG_ENDIAN
5642        uint64_t reserved_56_63          : 8;
5643        uint64_t timer                   : 4;       /**< General timer interrupts */
5644        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt */
5645        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5646        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5647        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5648        uint64_t rml                     : 1;       /**< RML Interrupt */
5649        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5650        uint64_t reserved_44_44          : 1;
5651        uint64_t pci_msi                 : 4;       /**< PCI MSI */
5652        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5653        uint64_t uart                    : 2;       /**< Two UART interrupts */
5654        uint64_t mbox                    : 2;       /**< Two mailbox/PCI interrupts */
5655        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5656        uint64_t workq                   : 16;      /**< 16 work queue interrupts */
5657#else
5658        uint64_t workq                   : 16;
5659        uint64_t gpio                    : 16;
5660        uint64_t mbox                    : 2;
5661        uint64_t uart                    : 2;
5662        uint64_t pci_int                 : 4;
5663        uint64_t pci_msi                 : 4;
5664        uint64_t reserved_44_44          : 1;
5665        uint64_t twsi                    : 1;
5666        uint64_t rml                     : 1;
5667        uint64_t trace                   : 1;
5668        uint64_t gmx_drp                 : 2;
5669        uint64_t ipd_drp                 : 1;
5670        uint64_t key_zero                : 1;
5671        uint64_t timer                   : 4;
5672        uint64_t reserved_56_63          : 8;
5673#endif
5674    } cn58xx;
5675} cvmx_ciu_intx_en4_0_w1s_t;
5676
5677
5678/**
5679 * cvmx_ciu_int#_en4_1
5680 *
5681 * Notes:
5682 * PPx/IP4 will be raised when...
5683 * PPx/IP4 = |([CIU_INT_SUM1, CIU_INTx_SUM4] & [CIU_INTx_EN4_1, CIU_INTx_EN4_0])
5684 */
5685typedef union
5686{
5687    uint64_t u64;
5688    struct cvmx_ciu_intx_en4_1_s
5689    {
5690#if __BYTE_ORDER == __BIG_ENDIAN
5691        uint64_t reserved_20_63          : 44;
5692        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5693        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5694        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5695        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5696        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5697#else
5698        uint64_t wdog                    : 16;
5699        uint64_t uart2                   : 1;
5700        uint64_t usb1                    : 1;
5701        uint64_t mii1                    : 1;
5702        uint64_t nand                    : 1;
5703        uint64_t reserved_20_63          : 44;
5704#endif
5705    } s;
5706    struct cvmx_ciu_intx_en4_1_cn50xx
5707    {
5708#if __BYTE_ORDER == __BIG_ENDIAN
5709        uint64_t reserved_2_63           : 62;
5710        uint64_t wdog                    : 2;       /**< Watchdog summary interrupt enable vectory */
5711#else
5712        uint64_t wdog                    : 2;
5713        uint64_t reserved_2_63           : 62;
5714#endif
5715    } cn50xx;
5716    struct cvmx_ciu_intx_en4_1_cn52xx
5717    {
5718#if __BYTE_ORDER == __BIG_ENDIAN
5719        uint64_t reserved_20_63          : 44;
5720        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5721        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5722        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5723        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5724        uint64_t reserved_4_15           : 12;
5725        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5726#else
5727        uint64_t wdog                    : 4;
5728        uint64_t reserved_4_15           : 12;
5729        uint64_t uart2                   : 1;
5730        uint64_t usb1                    : 1;
5731        uint64_t mii1                    : 1;
5732        uint64_t nand                    : 1;
5733        uint64_t reserved_20_63          : 44;
5734#endif
5735    } cn52xx;
5736    struct cvmx_ciu_intx_en4_1_cn52xxp1
5737    {
5738#if __BYTE_ORDER == __BIG_ENDIAN
5739        uint64_t reserved_19_63          : 45;
5740        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5741        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5742        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5743        uint64_t reserved_4_15           : 12;
5744        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5745#else
5746        uint64_t wdog                    : 4;
5747        uint64_t reserved_4_15           : 12;
5748        uint64_t uart2                   : 1;
5749        uint64_t usb1                    : 1;
5750        uint64_t mii1                    : 1;
5751        uint64_t reserved_19_63          : 45;
5752#endif
5753    } cn52xxp1;
5754    struct cvmx_ciu_intx_en4_1_cn56xx
5755    {
5756#if __BYTE_ORDER == __BIG_ENDIAN
5757        uint64_t reserved_12_63          : 52;
5758        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
5759#else
5760        uint64_t wdog                    : 12;
5761        uint64_t reserved_12_63          : 52;
5762#endif
5763    } cn56xx;
5764    struct cvmx_ciu_intx_en4_1_cn56xx    cn56xxp1;
5765    struct cvmx_ciu_intx_en4_1_cn58xx
5766    {
5767#if __BYTE_ORDER == __BIG_ENDIAN
5768        uint64_t reserved_16_63          : 48;
5769        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5770#else
5771        uint64_t wdog                    : 16;
5772        uint64_t reserved_16_63          : 48;
5773#endif
5774    } cn58xx;
5775    struct cvmx_ciu_intx_en4_1_cn58xx    cn58xxp1;
5776} cvmx_ciu_intx_en4_1_t;
5777
5778
5779/**
5780 * cvmx_ciu_int#_en4_1_w1c
5781 *
5782 * Notes:
5783 * Write-1-to-clear version of the CIU_INTx_EN4_1 register
5784 * (Pass2 ONLY)
5785 */
5786typedef union
5787{
5788    uint64_t u64;
5789    struct cvmx_ciu_intx_en4_1_w1c_s
5790    {
5791#if __BYTE_ORDER == __BIG_ENDIAN
5792        uint64_t reserved_20_63          : 44;
5793        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5794        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5795        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5796        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5797        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5798#else
5799        uint64_t wdog                    : 16;
5800        uint64_t uart2                   : 1;
5801        uint64_t usb1                    : 1;
5802        uint64_t mii1                    : 1;
5803        uint64_t nand                    : 1;
5804        uint64_t reserved_20_63          : 44;
5805#endif
5806    } s;
5807    struct cvmx_ciu_intx_en4_1_w1c_cn52xx
5808    {
5809#if __BYTE_ORDER == __BIG_ENDIAN
5810        uint64_t reserved_20_63          : 44;
5811        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5812        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5813        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5814        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5815        uint64_t reserved_4_15           : 12;
5816        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5817#else
5818        uint64_t wdog                    : 4;
5819        uint64_t reserved_4_15           : 12;
5820        uint64_t uart2                   : 1;
5821        uint64_t usb1                    : 1;
5822        uint64_t mii1                    : 1;
5823        uint64_t nand                    : 1;
5824        uint64_t reserved_20_63          : 44;
5825#endif
5826    } cn52xx;
5827    struct cvmx_ciu_intx_en4_1_w1c_cn56xx
5828    {
5829#if __BYTE_ORDER == __BIG_ENDIAN
5830        uint64_t reserved_12_63          : 52;
5831        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
5832#else
5833        uint64_t wdog                    : 12;
5834        uint64_t reserved_12_63          : 52;
5835#endif
5836    } cn56xx;
5837    struct cvmx_ciu_intx_en4_1_w1c_cn58xx
5838    {
5839#if __BYTE_ORDER == __BIG_ENDIAN
5840        uint64_t reserved_16_63          : 48;
5841        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5842#else
5843        uint64_t wdog                    : 16;
5844        uint64_t reserved_16_63          : 48;
5845#endif
5846    } cn58xx;
5847} cvmx_ciu_intx_en4_1_w1c_t;
5848
5849
5850/**
5851 * cvmx_ciu_int#_en4_1_w1s
5852 *
5853 * Notes:
5854 * Write-1-to-set version of the CIU_INTx_EN4_1 register
5855 * (Pass2 ONLY)
5856 */
5857typedef union
5858{
5859    uint64_t u64;
5860    struct cvmx_ciu_intx_en4_1_w1s_s
5861    {
5862#if __BYTE_ORDER == __BIG_ENDIAN
5863        uint64_t reserved_20_63          : 44;
5864        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5865        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5866        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5867        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5868        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5869#else
5870        uint64_t wdog                    : 16;
5871        uint64_t uart2                   : 1;
5872        uint64_t usb1                    : 1;
5873        uint64_t mii1                    : 1;
5874        uint64_t nand                    : 1;
5875        uint64_t reserved_20_63          : 44;
5876#endif
5877    } s;
5878    struct cvmx_ciu_intx_en4_1_w1s_cn52xx
5879    {
5880#if __BYTE_ORDER == __BIG_ENDIAN
5881        uint64_t reserved_20_63          : 44;
5882        uint64_t nand                    : 1;       /**< NAND Flash Controller */
5883        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
5884        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
5885        uint64_t uart2                   : 1;       /**< Third UART interrupt */
5886        uint64_t reserved_4_15           : 12;
5887        uint64_t wdog                    : 4;       /**< Watchdog summary interrupt enable vector */
5888#else
5889        uint64_t wdog                    : 4;
5890        uint64_t reserved_4_15           : 12;
5891        uint64_t uart2                   : 1;
5892        uint64_t usb1                    : 1;
5893        uint64_t mii1                    : 1;
5894        uint64_t nand                    : 1;
5895        uint64_t reserved_20_63          : 44;
5896#endif
5897    } cn52xx;
5898    struct cvmx_ciu_intx_en4_1_w1s_cn56xx
5899    {
5900#if __BYTE_ORDER == __BIG_ENDIAN
5901        uint64_t reserved_12_63          : 52;
5902        uint64_t wdog                    : 12;      /**< Watchdog summary interrupt enable vectory */
5903#else
5904        uint64_t wdog                    : 12;
5905        uint64_t reserved_12_63          : 52;
5906#endif
5907    } cn56xx;
5908    struct cvmx_ciu_intx_en4_1_w1s_cn58xx
5909    {
5910#if __BYTE_ORDER == __BIG_ENDIAN
5911        uint64_t reserved_16_63          : 48;
5912        uint64_t wdog                    : 16;      /**< Watchdog summary interrupt enable vectory */
5913#else
5914        uint64_t wdog                    : 16;
5915        uint64_t reserved_16_63          : 48;
5916#endif
5917    } cn58xx;
5918} cvmx_ciu_intx_en4_1_w1s_t;
5919
5920
5921/**
5922 * cvmx_ciu_int#_sum0
5923 */
5924typedef union
5925{
5926    uint64_t u64;
5927    struct cvmx_ciu_intx_sum0_s
5928    {
5929#if __BYTE_ORDER == __BIG_ENDIAN
5930        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
5931        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
5932        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
5933        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
5934        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
5935        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
5936        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
5937        uint64_t usb                     : 1;       /**< USB Interrupt */
5938        uint64_t timer                   : 4;       /**< General timer interrupts */
5939        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
5940                                                         KEY_ZERO will be set when the external ZERO_KEYS
5941                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
5942        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
5943        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
5944        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
5945        uint64_t rml                     : 1;       /**< RML Interrupt */
5946        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
5947        uint64_t wdog_sum                : 1;       /**< Watchdog summary
5948                                                         PPs use CIU_INTx_SUM0 where x=0-31.
5949                                                         PCI uses the CIU_INTx_SUM0 where x=32.
5950                                                         Even INTx registers report WDOG to IP2
5951                                                         Odd INTx registers report WDOG to IP3 */
5952        uint64_t pci_msi                 : 4;       /**< PCI MSI
5953                                                         [43] is the or of <63:48>
5954                                                         [42] is the or of <47:32>
5955                                                         [41] is the or of <31:16>
5956                                                         [40] is the or of <15:0> */
5957        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
5958        uint64_t uart                    : 2;       /**< Two UART interrupts */
5959        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
5960                                                          [33] is the or of <31:16>
5961                                                          [32] is the or of <15:0>
5962                                                         Two PCI internal interrupts for entry 32
5963                                                          CIU_PCI_INTA */
5964        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
5965        uint64_t workq                   : 16;      /**< 16 work queue interrupts
5966                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
5967#else
5968        uint64_t workq                   : 16;
5969        uint64_t gpio                    : 16;
5970        uint64_t mbox                    : 2;
5971        uint64_t uart                    : 2;
5972        uint64_t pci_int                 : 4;
5973        uint64_t pci_msi                 : 4;
5974        uint64_t wdog_sum                : 1;
5975        uint64_t twsi                    : 1;
5976        uint64_t rml                     : 1;
5977        uint64_t trace                   : 1;
5978        uint64_t gmx_drp                 : 2;
5979        uint64_t ipd_drp                 : 1;
5980        uint64_t key_zero                : 1;
5981        uint64_t timer                   : 4;
5982        uint64_t usb                     : 1;
5983        uint64_t pcm                     : 1;
5984        uint64_t mpi                     : 1;
5985        uint64_t twsi2                   : 1;
5986        uint64_t powiq                   : 1;
5987        uint64_t ipdppthr                : 1;
5988        uint64_t mii                     : 1;
5989        uint64_t bootdma                 : 1;
5990#endif
5991    } s;
5992    struct cvmx_ciu_intx_sum0_cn30xx
5993    {
5994#if __BYTE_ORDER == __BIG_ENDIAN
5995        uint64_t reserved_59_63          : 5;
5996        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
5997        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
5998        uint64_t usb                     : 1;       /**< USB interrupt */
5999        uint64_t timer                   : 4;       /**< General timer interrupts */
6000        uint64_t reserved_51_51          : 1;
6001        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6002        uint64_t reserved_49_49          : 1;
6003        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
6004        uint64_t reserved_47_47          : 1;
6005        uint64_t rml                     : 1;       /**< RML Interrupt */
6006        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6007        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6008                                                         PPs use CIU_INTx_SUM0 where x=0-1.
6009                                                         PCI uses the CIU_INTx_SUM0 where x=32.
6010                                                         Even INTx registers report WDOG to IP2
6011                                                         Odd INTx registers report WDOG to IP3 */
6012        uint64_t pci_msi                 : 4;       /**< PCI MSI
6013                                                         [43] is the or of <63:48>
6014                                                         [42] is the or of <47:32>
6015                                                         [41] is the or of <31:16>
6016                                                         [40] is the or of <15:0> */
6017        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6018        uint64_t uart                    : 2;       /**< Two UART interrupts */
6019        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6020                                                          [33] is the or of <31:16>
6021                                                          [32] is the or of <15:0>
6022                                                         Two PCI internal interrupts for entry 32
6023                                                          CIU_PCI_INTA */
6024        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6025        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6026                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6027#else
6028        uint64_t workq                   : 16;
6029        uint64_t gpio                    : 16;
6030        uint64_t mbox                    : 2;
6031        uint64_t uart                    : 2;
6032        uint64_t pci_int                 : 4;
6033        uint64_t pci_msi                 : 4;
6034        uint64_t wdog_sum                : 1;
6035        uint64_t twsi                    : 1;
6036        uint64_t rml                     : 1;
6037        uint64_t reserved_47_47          : 1;
6038        uint64_t gmx_drp                 : 1;
6039        uint64_t reserved_49_49          : 1;
6040        uint64_t ipd_drp                 : 1;
6041        uint64_t reserved_51_51          : 1;
6042        uint64_t timer                   : 4;
6043        uint64_t usb                     : 1;
6044        uint64_t pcm                     : 1;
6045        uint64_t mpi                     : 1;
6046        uint64_t reserved_59_63          : 5;
6047#endif
6048    } cn30xx;
6049    struct cvmx_ciu_intx_sum0_cn31xx
6050    {
6051#if __BYTE_ORDER == __BIG_ENDIAN
6052        uint64_t reserved_59_63          : 5;
6053        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
6054        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
6055        uint64_t usb                     : 1;       /**< USB interrupt */
6056        uint64_t timer                   : 4;       /**< General timer interrupts */
6057        uint64_t reserved_51_51          : 1;
6058        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6059        uint64_t reserved_49_49          : 1;
6060        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
6061        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6062        uint64_t rml                     : 1;       /**< RML Interrupt */
6063        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6064        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6065                                                         PPs use CIU_INTx_SUM0 where x=0-3.
6066                                                         PCI uses the CIU_INTx_SUM0 where x=32.
6067                                                         Even INTx registers report WDOG to IP2
6068                                                         Odd INTx registers report WDOG to IP3 */
6069        uint64_t pci_msi                 : 4;       /**< PCI MSI
6070                                                         [43] is the or of <63:48>
6071                                                         [42] is the or of <47:32>
6072                                                         [41] is the or of <31:16>
6073                                                         [40] is the or of <15:0> */
6074        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6075        uint64_t uart                    : 2;       /**< Two UART interrupts */
6076        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6077                                                          [33] is the or of <31:16>
6078                                                          [32] is the or of <15:0>
6079                                                         Two PCI internal interrupts for entry 32
6080                                                          CIU_PCI_INTA */
6081        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6082        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6083                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6084#else
6085        uint64_t workq                   : 16;
6086        uint64_t gpio                    : 16;
6087        uint64_t mbox                    : 2;
6088        uint64_t uart                    : 2;
6089        uint64_t pci_int                 : 4;
6090        uint64_t pci_msi                 : 4;
6091        uint64_t wdog_sum                : 1;
6092        uint64_t twsi                    : 1;
6093        uint64_t rml                     : 1;
6094        uint64_t trace                   : 1;
6095        uint64_t gmx_drp                 : 1;
6096        uint64_t reserved_49_49          : 1;
6097        uint64_t ipd_drp                 : 1;
6098        uint64_t reserved_51_51          : 1;
6099        uint64_t timer                   : 4;
6100        uint64_t usb                     : 1;
6101        uint64_t pcm                     : 1;
6102        uint64_t mpi                     : 1;
6103        uint64_t reserved_59_63          : 5;
6104#endif
6105    } cn31xx;
6106    struct cvmx_ciu_intx_sum0_cn38xx
6107    {
6108#if __BYTE_ORDER == __BIG_ENDIAN
6109        uint64_t reserved_56_63          : 8;
6110        uint64_t timer                   : 4;       /**< General timer interrupts */
6111        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
6112                                                         KEY_ZERO will be set when the external ZERO_KEYS
6113                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
6114        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6115        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
6116        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6117        uint64_t rml                     : 1;       /**< RML Interrupt */
6118        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6119        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6120                                                         PPs use CIU_INTx_SUM0 where x=0-31.
6121                                                         PCI uses the CIU_INTx_SUM0 where x=32.
6122                                                         Even INTx registers report WDOG to IP2
6123                                                         Odd INTx registers report WDOG to IP3 */
6124        uint64_t pci_msi                 : 4;       /**< PCI MSI
6125                                                         [43] is the or of <63:48>
6126                                                         [42] is the or of <47:32>
6127                                                         [41] is the or of <31:16>
6128                                                         [40] is the or of <15:0> */
6129        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6130        uint64_t uart                    : 2;       /**< Two UART interrupts */
6131        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6132                                                          [33] is the or of <31:16>
6133                                                          [32] is the or of <15:0>
6134                                                         Two PCI internal interrupts for entry 32
6135                                                          CIU_PCI_INTA */
6136        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6137        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6138                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6139#else
6140        uint64_t workq                   : 16;
6141        uint64_t gpio                    : 16;
6142        uint64_t mbox                    : 2;
6143        uint64_t uart                    : 2;
6144        uint64_t pci_int                 : 4;
6145        uint64_t pci_msi                 : 4;
6146        uint64_t wdog_sum                : 1;
6147        uint64_t twsi                    : 1;
6148        uint64_t rml                     : 1;
6149        uint64_t trace                   : 1;
6150        uint64_t gmx_drp                 : 2;
6151        uint64_t ipd_drp                 : 1;
6152        uint64_t key_zero                : 1;
6153        uint64_t timer                   : 4;
6154        uint64_t reserved_56_63          : 8;
6155#endif
6156    } cn38xx;
6157    struct cvmx_ciu_intx_sum0_cn38xx     cn38xxp2;
6158    struct cvmx_ciu_intx_sum0_cn30xx     cn50xx;
6159    struct cvmx_ciu_intx_sum0_cn52xx
6160    {
6161#if __BYTE_ORDER == __BIG_ENDIAN
6162        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
6163        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
6164        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
6165        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
6166        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
6167        uint64_t reserved_57_58          : 2;
6168        uint64_t usb                     : 1;       /**< USB Interrupt */
6169        uint64_t timer                   : 4;       /**< General timer interrupts */
6170        uint64_t reserved_51_51          : 1;
6171        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6172        uint64_t reserved_49_49          : 1;
6173        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
6174        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6175        uint64_t rml                     : 1;       /**< RML Interrupt */
6176        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6177        uint64_t wdog_sum                : 1;       /**< SUM1&EN1 summary bit
6178                                                         This read-only bit reads as a one whenever any
6179                                                         CIU_INT_SUM1 bit is set and corresponding
6180                                                         enable bit in CIU_INTx_EN is set, where x
6181                                                         is the same as x in this CIU_INTx_SUM0.
6182                                                         PPs use CIU_INTx_SUM0 where x=0-7.
6183                                                         PCI uses the CIU_INTx_SUM0 where x=32.
6184                                                         Even INTx registers report WDOG to IP2
6185                                                         Odd INTx registers report WDOG to IP3
6186                                                         Note that WDOG_SUM only summarizes the SUM/EN1
6187                                                         result and does not have a corresponding enable
6188                                                         bit, so does not directly contribute to
6189                                                         interrupts. */
6190        uint64_t pci_msi                 : 4;       /**< PCI MSI
6191                                                         Refer to "Receiving Message-Signalled
6192                                                         Interrupts" in the PCIe chapter of the spec */
6193        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D
6194                                                         Refer to "Receiving Emulated INTA/INTB/
6195                                                         INTC/INTD" in the PCIe chapter of the spec */
6196        uint64_t uart                    : 2;       /**< Two UART interrupts */
6197        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-7
6198                                                          [33] is the or of <31:16>
6199                                                          [32] is the or of <15:0>
6200                                                         Two PCI internal interrupts for entry 32
6201                                                          CIU_PCI_INTA */
6202        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6203        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6204                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6205#else
6206        uint64_t workq                   : 16;
6207        uint64_t gpio                    : 16;
6208        uint64_t mbox                    : 2;
6209        uint64_t uart                    : 2;
6210        uint64_t pci_int                 : 4;
6211        uint64_t pci_msi                 : 4;
6212        uint64_t wdog_sum                : 1;
6213        uint64_t twsi                    : 1;
6214        uint64_t rml                     : 1;
6215        uint64_t trace                   : 1;
6216        uint64_t gmx_drp                 : 1;
6217        uint64_t reserved_49_49          : 1;
6218        uint64_t ipd_drp                 : 1;
6219        uint64_t reserved_51_51          : 1;
6220        uint64_t timer                   : 4;
6221        uint64_t usb                     : 1;
6222        uint64_t reserved_57_58          : 2;
6223        uint64_t twsi2                   : 1;
6224        uint64_t powiq                   : 1;
6225        uint64_t ipdppthr                : 1;
6226        uint64_t mii                     : 1;
6227        uint64_t bootdma                 : 1;
6228#endif
6229    } cn52xx;
6230    struct cvmx_ciu_intx_sum0_cn52xx     cn52xxp1;
6231    struct cvmx_ciu_intx_sum0_cn56xx
6232    {
6233#if __BYTE_ORDER == __BIG_ENDIAN
6234        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
6235        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
6236        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
6237        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
6238        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
6239        uint64_t reserved_57_58          : 2;
6240        uint64_t usb                     : 1;       /**< USB Interrupt */
6241        uint64_t timer                   : 4;       /**< General timer interrupts */
6242        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
6243                                                         KEY_ZERO will be set when the external ZERO_KEYS
6244                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
6245        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6246        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
6247        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6248        uint64_t rml                     : 1;       /**< RML Interrupt */
6249        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6250        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6251                                                         PPs use CIU_INTx_SUM0 where x=0-23.
6252                                                         PCI uses the CIU_INTx_SUM0 where x=32.
6253                                                         Even INTx registers report WDOG to IP2
6254                                                         Odd INTx registers report WDOG to IP3 */
6255        uint64_t pci_msi                 : 4;       /**< PCI MSI
6256                                                         Refer to "Receiving Message-Signalled
6257                                                         Interrupts" in the PCIe chapter of the spec */
6258        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D
6259                                                         Refer to "Receiving Emulated INTA/INTB/
6260                                                         INTC/INTD" in the PCIe chapter of the spec */
6261        uint64_t uart                    : 2;       /**< Two UART interrupts */
6262        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-23
6263                                                          [33] is the or of <31:16>
6264                                                          [32] is the or of <15:0>
6265                                                         Two PCI internal interrupts for entry 32
6266                                                          CIU_PCI_INTA */
6267        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6268        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6269                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6270#else
6271        uint64_t workq                   : 16;
6272        uint64_t gpio                    : 16;
6273        uint64_t mbox                    : 2;
6274        uint64_t uart                    : 2;
6275        uint64_t pci_int                 : 4;
6276        uint64_t pci_msi                 : 4;
6277        uint64_t wdog_sum                : 1;
6278        uint64_t twsi                    : 1;
6279        uint64_t rml                     : 1;
6280        uint64_t trace                   : 1;
6281        uint64_t gmx_drp                 : 2;
6282        uint64_t ipd_drp                 : 1;
6283        uint64_t key_zero                : 1;
6284        uint64_t timer                   : 4;
6285        uint64_t usb                     : 1;
6286        uint64_t reserved_57_58          : 2;
6287        uint64_t twsi2                   : 1;
6288        uint64_t powiq                   : 1;
6289        uint64_t ipdppthr                : 1;
6290        uint64_t mii                     : 1;
6291        uint64_t bootdma                 : 1;
6292#endif
6293    } cn56xx;
6294    struct cvmx_ciu_intx_sum0_cn56xx     cn56xxp1;
6295    struct cvmx_ciu_intx_sum0_cn38xx     cn58xx;
6296    struct cvmx_ciu_intx_sum0_cn38xx     cn58xxp1;
6297} cvmx_ciu_intx_sum0_t;
6298
6299
6300/**
6301 * cvmx_ciu_int#_sum4
6302 */
6303typedef union
6304{
6305    uint64_t u64;
6306    struct cvmx_ciu_intx_sum4_s
6307    {
6308#if __BYTE_ORDER == __BIG_ENDIAN
6309        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
6310        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
6311        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
6312        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
6313        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
6314        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
6315        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
6316        uint64_t usb                     : 1;       /**< USB Interrupt */
6317        uint64_t timer                   : 4;       /**< General timer interrupts */
6318        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
6319                                                         KEY_ZERO will be set when the external ZERO_KEYS
6320                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
6321        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6322        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
6323        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6324        uint64_t rml                     : 1;       /**< RML Interrupt */
6325        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6326        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6327                                                         These registers report WDOG to IP4 */
6328        uint64_t pci_msi                 : 4;       /**< PCI MSI
6329                                                         [43] is the or of <63:48>
6330                                                         [42] is the or of <47:32>
6331                                                         [41] is the or of <31:16>
6332                                                         [40] is the or of <15:0> */
6333        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6334        uint64_t uart                    : 2;       /**< Two UART interrupts */
6335        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6336                                                          [33] is the or of <31:16>
6337                                                          [32] is the or of <15:0>
6338                                                         Two PCI internal interrupts for entry 32
6339                                                          CIU_PCI_INTA */
6340        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6341        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6342                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6343#else
6344        uint64_t workq                   : 16;
6345        uint64_t gpio                    : 16;
6346        uint64_t mbox                    : 2;
6347        uint64_t uart                    : 2;
6348        uint64_t pci_int                 : 4;
6349        uint64_t pci_msi                 : 4;
6350        uint64_t wdog_sum                : 1;
6351        uint64_t twsi                    : 1;
6352        uint64_t rml                     : 1;
6353        uint64_t trace                   : 1;
6354        uint64_t gmx_drp                 : 2;
6355        uint64_t ipd_drp                 : 1;
6356        uint64_t key_zero                : 1;
6357        uint64_t timer                   : 4;
6358        uint64_t usb                     : 1;
6359        uint64_t pcm                     : 1;
6360        uint64_t mpi                     : 1;
6361        uint64_t twsi2                   : 1;
6362        uint64_t powiq                   : 1;
6363        uint64_t ipdppthr                : 1;
6364        uint64_t mii                     : 1;
6365        uint64_t bootdma                 : 1;
6366#endif
6367    } s;
6368    struct cvmx_ciu_intx_sum4_cn50xx
6369    {
6370#if __BYTE_ORDER == __BIG_ENDIAN
6371        uint64_t reserved_59_63          : 5;
6372        uint64_t mpi                     : 1;       /**< MPI/SPI interrupt */
6373        uint64_t pcm                     : 1;       /**< PCM/TDM interrupt */
6374        uint64_t usb                     : 1;       /**< USB interrupt */
6375        uint64_t timer                   : 4;       /**< General timer interrupts */
6376        uint64_t reserved_51_51          : 1;
6377        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6378        uint64_t reserved_49_49          : 1;
6379        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
6380        uint64_t reserved_47_47          : 1;
6381        uint64_t rml                     : 1;       /**< RML Interrupt */
6382        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6383        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6384                                                         PPs use CIU_INTx_SUM4 where x=0-1. */
6385        uint64_t pci_msi                 : 4;       /**< PCI MSI
6386                                                         [43] is the or of <63:48>
6387                                                         [42] is the or of <47:32>
6388                                                         [41] is the or of <31:16>
6389                                                         [40] is the or of <15:0> */
6390        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6391        uint64_t uart                    : 2;       /**< Two UART interrupts */
6392        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6393                                                          [33] is the or of <31:16>
6394                                                          [32] is the or of <15:0>
6395                                                         Two PCI internal interrupts for entry 32
6396                                                          CIU_PCI_INTA */
6397        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6398        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6399                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6400#else
6401        uint64_t workq                   : 16;
6402        uint64_t gpio                    : 16;
6403        uint64_t mbox                    : 2;
6404        uint64_t uart                    : 2;
6405        uint64_t pci_int                 : 4;
6406        uint64_t pci_msi                 : 4;
6407        uint64_t wdog_sum                : 1;
6408        uint64_t twsi                    : 1;
6409        uint64_t rml                     : 1;
6410        uint64_t reserved_47_47          : 1;
6411        uint64_t gmx_drp                 : 1;
6412        uint64_t reserved_49_49          : 1;
6413        uint64_t ipd_drp                 : 1;
6414        uint64_t reserved_51_51          : 1;
6415        uint64_t timer                   : 4;
6416        uint64_t usb                     : 1;
6417        uint64_t pcm                     : 1;
6418        uint64_t mpi                     : 1;
6419        uint64_t reserved_59_63          : 5;
6420#endif
6421    } cn50xx;
6422    struct cvmx_ciu_intx_sum4_cn52xx
6423    {
6424#if __BYTE_ORDER == __BIG_ENDIAN
6425        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
6426        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
6427        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
6428        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
6429        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
6430        uint64_t reserved_57_58          : 2;
6431        uint64_t usb                     : 1;       /**< USB Interrupt */
6432        uint64_t timer                   : 4;       /**< General timer interrupts */
6433        uint64_t reserved_51_51          : 1;
6434        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6435        uint64_t reserved_49_49          : 1;
6436        uint64_t gmx_drp                 : 1;       /**< GMX packet drop */
6437        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6438        uint64_t rml                     : 1;       /**< RML Interrupt */
6439        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6440        uint64_t wdog_sum                : 1;       /**< SUM1&EN4_1 summary bit
6441                                                         This read-only bit reads as a one whenever any
6442                                                         CIU_INT_SUM1 bit is set and corresponding
6443                                                         enable bit in CIU_INTx_EN4_1 is set, where x
6444                                                         is the same as x in this CIU_INTx_SUM4.
6445                                                         PPs use CIU_INTx_SUM4 for IP4, where x=PPid.
6446                                                         Note that WDOG_SUM only summarizes the SUM/EN4_1
6447                                                         result and does not have a corresponding enable
6448                                                         bit, so does not directly contribute to
6449                                                         interrupts. */
6450        uint64_t pci_msi                 : 4;       /**< PCI MSI
6451                                                         Refer to "Receiving Message-Signalled
6452                                                         Interrupts" in the PCIe chapter of the spec */
6453        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D
6454                                                         Refer to "Receiving Emulated INTA/INTB/
6455                                                         INTC/INTD" in the PCIe chapter of the spec */
6456        uint64_t uart                    : 2;       /**< Two UART interrupts */
6457        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-3
6458                                                         [33] is the or of <31:16>
6459                                                         [32] is the or of <15:0> */
6460        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6461        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6462                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6463#else
6464        uint64_t workq                   : 16;
6465        uint64_t gpio                    : 16;
6466        uint64_t mbox                    : 2;
6467        uint64_t uart                    : 2;
6468        uint64_t pci_int                 : 4;
6469        uint64_t pci_msi                 : 4;
6470        uint64_t wdog_sum                : 1;
6471        uint64_t twsi                    : 1;
6472        uint64_t rml                     : 1;
6473        uint64_t trace                   : 1;
6474        uint64_t gmx_drp                 : 1;
6475        uint64_t reserved_49_49          : 1;
6476        uint64_t ipd_drp                 : 1;
6477        uint64_t reserved_51_51          : 1;
6478        uint64_t timer                   : 4;
6479        uint64_t usb                     : 1;
6480        uint64_t reserved_57_58          : 2;
6481        uint64_t twsi2                   : 1;
6482        uint64_t powiq                   : 1;
6483        uint64_t ipdppthr                : 1;
6484        uint64_t mii                     : 1;
6485        uint64_t bootdma                 : 1;
6486#endif
6487    } cn52xx;
6488    struct cvmx_ciu_intx_sum4_cn52xx     cn52xxp1;
6489    struct cvmx_ciu_intx_sum4_cn56xx
6490    {
6491#if __BYTE_ORDER == __BIG_ENDIAN
6492        uint64_t bootdma                 : 1;       /**< Boot bus DMA engines Interrupt */
6493        uint64_t mii                     : 1;       /**< MII Interface Interrupt */
6494        uint64_t ipdppthr                : 1;       /**< IPD per-port counter threshold interrupt */
6495        uint64_t powiq                   : 1;       /**< POW IQ interrupt */
6496        uint64_t twsi2                   : 1;       /**< 2nd TWSI Interrupt */
6497        uint64_t reserved_57_58          : 2;
6498        uint64_t usb                     : 1;       /**< USB Interrupt */
6499        uint64_t timer                   : 4;       /**< General timer interrupts */
6500        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
6501                                                         KEY_ZERO will be set when the external ZERO_KEYS
6502                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
6503        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6504        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
6505        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6506        uint64_t rml                     : 1;       /**< RML Interrupt */
6507        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6508        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6509                                                         These registers report WDOG to IP4 */
6510        uint64_t pci_msi                 : 4;       /**< PCI MSI
6511                                                         Refer to "Receiving Message-Signalled
6512                                                         Interrupts" in the PCIe chapter of the spec */
6513        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D
6514                                                         Refer to "Receiving Emulated INTA/INTB/
6515                                                         INTC/INTD" in the PCIe chapter of the spec */
6516        uint64_t uart                    : 2;       /**< Two UART interrupts */
6517        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-11
6518                                                         [33] is the or of <31:16>
6519                                                         [32] is the or of <15:0> */
6520        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6521        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6522                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6523#else
6524        uint64_t workq                   : 16;
6525        uint64_t gpio                    : 16;
6526        uint64_t mbox                    : 2;
6527        uint64_t uart                    : 2;
6528        uint64_t pci_int                 : 4;
6529        uint64_t pci_msi                 : 4;
6530        uint64_t wdog_sum                : 1;
6531        uint64_t twsi                    : 1;
6532        uint64_t rml                     : 1;
6533        uint64_t trace                   : 1;
6534        uint64_t gmx_drp                 : 2;
6535        uint64_t ipd_drp                 : 1;
6536        uint64_t key_zero                : 1;
6537        uint64_t timer                   : 4;
6538        uint64_t usb                     : 1;
6539        uint64_t reserved_57_58          : 2;
6540        uint64_t twsi2                   : 1;
6541        uint64_t powiq                   : 1;
6542        uint64_t ipdppthr                : 1;
6543        uint64_t mii                     : 1;
6544        uint64_t bootdma                 : 1;
6545#endif
6546    } cn56xx;
6547    struct cvmx_ciu_intx_sum4_cn56xx     cn56xxp1;
6548    struct cvmx_ciu_intx_sum4_cn58xx
6549    {
6550#if __BYTE_ORDER == __BIG_ENDIAN
6551        uint64_t reserved_56_63          : 8;
6552        uint64_t timer                   : 4;       /**< General timer interrupts */
6553        uint64_t key_zero                : 1;       /**< Key Zeroization interrupt
6554                                                         KEY_ZERO will be set when the external ZERO_KEYS
6555                                                         pin is sampled high.  KEY_ZERO is cleared by SW */
6556        uint64_t ipd_drp                 : 1;       /**< IPD QOS packet drop */
6557        uint64_t gmx_drp                 : 2;       /**< GMX packet drop */
6558        uint64_t trace                   : 1;       /**< L2C has the CMB trace buffer */
6559        uint64_t rml                     : 1;       /**< RML Interrupt */
6560        uint64_t twsi                    : 1;       /**< TWSI Interrupt */
6561        uint64_t wdog_sum                : 1;       /**< Watchdog summary
6562                                                         These registers report WDOG to IP4 */
6563        uint64_t pci_msi                 : 4;       /**< PCI MSI
6564                                                         [43] is the or of <63:48>
6565                                                         [42] is the or of <47:32>
6566                                                         [41] is the or of <31:16>
6567                                                         [40] is the or of <15:0> */
6568        uint64_t pci_int                 : 4;       /**< PCI INTA/B/C/D */
6569        uint64_t uart                    : 2;       /**< Two UART interrupts */
6570        uint64_t mbox                    : 2;       /**< Two mailbox interrupts for entries 0-31
6571                                                          [33] is the or of <31:16>
6572                                                          [32] is the or of <15:0>
6573                                                         Two PCI internal interrupts for entry 32
6574                                                          CIU_PCI_INTA */
6575        uint64_t gpio                    : 16;      /**< 16 GPIO interrupts */
6576        uint64_t workq                   : 16;      /**< 16 work queue interrupts
6577                                                         1 bit/group. A copy of the R/W1C bit in the POW. */
6578#else
6579        uint64_t workq                   : 16;
6580        uint64_t gpio                    : 16;
6581        uint64_t mbox                    : 2;
6582        uint64_t uart                    : 2;
6583        uint64_t pci_int                 : 4;
6584        uint64_t pci_msi                 : 4;
6585        uint64_t wdog_sum                : 1;
6586        uint64_t twsi                    : 1;
6587        uint64_t rml                     : 1;
6588        uint64_t trace                   : 1;
6589        uint64_t gmx_drp                 : 2;
6590        uint64_t ipd_drp                 : 1;
6591        uint64_t key_zero                : 1;
6592        uint64_t timer                   : 4;
6593        uint64_t reserved_56_63          : 8;
6594#endif
6595    } cn58xx;
6596    struct cvmx_ciu_intx_sum4_cn58xx     cn58xxp1;
6597} cvmx_ciu_intx_sum4_t;
6598
6599
6600/**
6601 * cvmx_ciu_int_sum1
6602 */
6603typedef union
6604{
6605    uint64_t u64;
6606    struct cvmx_ciu_int_sum1_s
6607    {
6608#if __BYTE_ORDER == __BIG_ENDIAN
6609        uint64_t reserved_20_63          : 44;
6610        uint64_t nand                    : 1;       /**< NAND Flash Controller */
6611        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
6612        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
6613        uint64_t uart2                   : 1;       /**< Third UART interrupt */
6614        uint64_t wdog                    : 16;      /**< 16 watchdog interrupts */
6615#else
6616        uint64_t wdog                    : 16;
6617        uint64_t uart2                   : 1;
6618        uint64_t usb1                    : 1;
6619        uint64_t mii1                    : 1;
6620        uint64_t nand                    : 1;
6621        uint64_t reserved_20_63          : 44;
6622#endif
6623    } s;
6624    struct cvmx_ciu_int_sum1_cn30xx
6625    {
6626#if __BYTE_ORDER == __BIG_ENDIAN
6627        uint64_t reserved_1_63           : 63;
6628        uint64_t wdog                    : 1;       /**< 1 watchdog interrupt */
6629#else
6630        uint64_t wdog                    : 1;
6631        uint64_t reserved_1_63           : 63;
6632#endif
6633    } cn30xx;
6634    struct cvmx_ciu_int_sum1_cn31xx
6635    {
6636#if __BYTE_ORDER == __BIG_ENDIAN
6637        uint64_t reserved_2_63           : 62;
6638        uint64_t wdog                    : 2;       /**< 2 watchdog interrupts */
6639#else
6640        uint64_t wdog                    : 2;
6641        uint64_t reserved_2_63           : 62;
6642#endif
6643    } cn31xx;
6644    struct cvmx_ciu_int_sum1_cn38xx
6645    {
6646#if __BYTE_ORDER == __BIG_ENDIAN
6647        uint64_t reserved_16_63          : 48;
6648        uint64_t wdog                    : 16;      /**< 16 watchdog interrupts */
6649#else
6650        uint64_t wdog                    : 16;
6651        uint64_t reserved_16_63          : 48;
6652#endif
6653    } cn38xx;
6654    struct cvmx_ciu_int_sum1_cn38xx      cn38xxp2;
6655    struct cvmx_ciu_int_sum1_cn31xx      cn50xx;
6656    struct cvmx_ciu_int_sum1_cn52xx
6657    {
6658#if __BYTE_ORDER == __BIG_ENDIAN
6659        uint64_t reserved_20_63          : 44;
6660        uint64_t nand                    : 1;       /**< NAND Flash Controller */
6661        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
6662        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
6663        uint64_t uart2                   : 1;       /**< Third UART interrupt */
6664        uint64_t reserved_4_15           : 12;
6665        uint64_t wdog                    : 4;       /**< 4 watchdog interrupts */
6666#else
6667        uint64_t wdog                    : 4;
6668        uint64_t reserved_4_15           : 12;
6669        uint64_t uart2                   : 1;
6670        uint64_t usb1                    : 1;
6671        uint64_t mii1                    : 1;
6672        uint64_t nand                    : 1;
6673        uint64_t reserved_20_63          : 44;
6674#endif
6675    } cn52xx;
6676    struct cvmx_ciu_int_sum1_cn52xxp1
6677    {
6678#if __BYTE_ORDER == __BIG_ENDIAN
6679        uint64_t reserved_19_63          : 45;
6680        uint64_t mii1                    : 1;       /**< Second MII Interrupt */
6681        uint64_t usb1                    : 1;       /**< Second USB Interrupt */
6682        uint64_t uart2                   : 1;       /**< Third UART interrupt */
6683        uint64_t reserved_4_15           : 12;
6684        uint64_t wdog                    : 4;       /**< 4 watchdog interrupts */
6685#else
6686        uint64_t wdog                    : 4;
6687        uint64_t reserved_4_15           : 12;
6688        uint64_t uart2                   : 1;
6689        uint64_t usb1                    : 1;
6690        uint64_t mii1                    : 1;
6691        uint64_t reserved_19_63          : 45;
6692#endif
6693    } cn52xxp1;
6694    struct cvmx_ciu_int_sum1_cn56xx
6695    {
6696#if __BYTE_ORDER == __BIG_ENDIAN
6697        uint64_t reserved_12_63          : 52;
6698        uint64_t wdog                    : 12;      /**< 12 watchdog interrupts */
6699#else
6700        uint64_t wdog                    : 12;
6701        uint64_t reserved_12_63          : 52;
6702#endif
6703    } cn56xx;
6704    struct cvmx_ciu_int_sum1_cn56xx      cn56xxp1;
6705    struct cvmx_ciu_int_sum1_cn38xx      cn58xx;
6706    struct cvmx_ciu_int_sum1_cn38xx      cn58xxp1;
6707} cvmx_ciu_int_sum1_t;
6708
6709
6710/**
6711 * cvmx_ciu_mbox_clr#
6712 */
6713typedef union
6714{
6715    uint64_t u64;
6716    struct cvmx_ciu_mbox_clrx_s
6717    {
6718#if __BYTE_ORDER == __BIG_ENDIAN
6719        uint64_t reserved_32_63          : 32;
6720        uint64_t bits                    : 32;      /**< On writes, clr corresponding bit in MBOX register
6721                                                         on reads, return the MBOX register */
6722#else
6723        uint64_t bits                    : 32;
6724        uint64_t reserved_32_63          : 32;
6725#endif
6726    } s;
6727    struct cvmx_ciu_mbox_clrx_s          cn30xx;
6728    struct cvmx_ciu_mbox_clrx_s          cn31xx;
6729    struct cvmx_ciu_mbox_clrx_s          cn38xx;
6730    struct cvmx_ciu_mbox_clrx_s          cn38xxp2;
6731    struct cvmx_ciu_mbox_clrx_s          cn50xx;
6732    struct cvmx_ciu_mbox_clrx_s          cn52xx;
6733    struct cvmx_ciu_mbox_clrx_s          cn52xxp1;
6734    struct cvmx_ciu_mbox_clrx_s          cn56xx;
6735    struct cvmx_ciu_mbox_clrx_s          cn56xxp1;
6736    struct cvmx_ciu_mbox_clrx_s          cn58xx;
6737    struct cvmx_ciu_mbox_clrx_s          cn58xxp1;
6738} cvmx_ciu_mbox_clrx_t;
6739
6740
6741/**
6742 * cvmx_ciu_mbox_set#
6743 */
6744typedef union
6745{
6746    uint64_t u64;
6747    struct cvmx_ciu_mbox_setx_s
6748    {
6749#if __BYTE_ORDER == __BIG_ENDIAN
6750        uint64_t reserved_32_63          : 32;
6751        uint64_t bits                    : 32;      /**< On writes, set corresponding bit in MBOX register
6752                                                         on reads, return the MBOX register */
6753#else
6754        uint64_t bits                    : 32;
6755        uint64_t reserved_32_63          : 32;
6756#endif
6757    } s;
6758    struct cvmx_ciu_mbox_setx_s          cn30xx;
6759    struct cvmx_ciu_mbox_setx_s          cn31xx;
6760    struct cvmx_ciu_mbox_setx_s          cn38xx;
6761    struct cvmx_ciu_mbox_setx_s          cn38xxp2;
6762    struct cvmx_ciu_mbox_setx_s          cn50xx;
6763    struct cvmx_ciu_mbox_setx_s          cn52xx;
6764    struct cvmx_ciu_mbox_setx_s          cn52xxp1;
6765    struct cvmx_ciu_mbox_setx_s          cn56xx;
6766    struct cvmx_ciu_mbox_setx_s          cn56xxp1;
6767    struct cvmx_ciu_mbox_setx_s          cn58xx;
6768    struct cvmx_ciu_mbox_setx_s          cn58xxp1;
6769} cvmx_ciu_mbox_setx_t;
6770
6771
6772/**
6773 * cvmx_ciu_nmi
6774 */
6775typedef union
6776{
6777    uint64_t u64;
6778    struct cvmx_ciu_nmi_s
6779    {
6780#if __BYTE_ORDER == __BIG_ENDIAN
6781        uint64_t reserved_16_63          : 48;
6782        uint64_t nmi                     : 16;      /**< Send NMI pulse to PP vector */
6783#else
6784        uint64_t nmi                     : 16;
6785        uint64_t reserved_16_63          : 48;
6786#endif
6787    } s;
6788    struct cvmx_ciu_nmi_cn30xx
6789    {
6790#if __BYTE_ORDER == __BIG_ENDIAN
6791        uint64_t reserved_1_63           : 63;
6792        uint64_t nmi                     : 1;       /**< Send NMI pulse to PP vector */
6793#else
6794        uint64_t nmi                     : 1;
6795        uint64_t reserved_1_63           : 63;
6796#endif
6797    } cn30xx;
6798    struct cvmx_ciu_nmi_cn31xx
6799    {
6800#if __BYTE_ORDER == __BIG_ENDIAN
6801        uint64_t reserved_2_63           : 62;
6802        uint64_t nmi                     : 2;       /**< Send NMI pulse to PP vector */
6803#else
6804        uint64_t nmi                     : 2;
6805        uint64_t reserved_2_63           : 62;
6806#endif
6807    } cn31xx;
6808    struct cvmx_ciu_nmi_s                cn38xx;
6809    struct cvmx_ciu_nmi_s                cn38xxp2;
6810    struct cvmx_ciu_nmi_cn31xx           cn50xx;
6811    struct cvmx_ciu_nmi_cn52xx
6812    {
6813#if __BYTE_ORDER == __BIG_ENDIAN
6814        uint64_t reserved_4_63           : 60;
6815        uint64_t nmi                     : 4;       /**< Send NMI pulse to PP vector */
6816#else
6817        uint64_t nmi                     : 4;
6818        uint64_t reserved_4_63           : 60;
6819#endif
6820    } cn52xx;
6821    struct cvmx_ciu_nmi_cn52xx           cn52xxp1;
6822    struct cvmx_ciu_nmi_cn56xx
6823    {
6824#if __BYTE_ORDER == __BIG_ENDIAN
6825        uint64_t reserved_12_63          : 52;
6826        uint64_t nmi                     : 12;      /**< Send NMI pulse to PP vector */
6827#else
6828        uint64_t nmi                     : 12;
6829        uint64_t reserved_12_63          : 52;
6830#endif
6831    } cn56xx;
6832    struct cvmx_ciu_nmi_cn56xx           cn56xxp1;
6833    struct cvmx_ciu_nmi_s                cn58xx;
6834    struct cvmx_ciu_nmi_s                cn58xxp1;
6835} cvmx_ciu_nmi_t;
6836
6837
6838/**
6839 * cvmx_ciu_pci_inta
6840 */
6841typedef union
6842{
6843    uint64_t u64;
6844    struct cvmx_ciu_pci_inta_s
6845    {
6846#if __BYTE_ORDER == __BIG_ENDIAN
6847        uint64_t reserved_2_63           : 62;
6848        uint64_t intr                    : 2;       /**< PCI interrupt
6849                                                         These bits are observed in CIU_INT32_SUM0<33:32> */
6850#else
6851        uint64_t intr                    : 2;
6852        uint64_t reserved_2_63           : 62;
6853#endif
6854    } s;
6855    struct cvmx_ciu_pci_inta_s           cn30xx;
6856    struct cvmx_ciu_pci_inta_s           cn31xx;
6857    struct cvmx_ciu_pci_inta_s           cn38xx;
6858    struct cvmx_ciu_pci_inta_s           cn38xxp2;
6859    struct cvmx_ciu_pci_inta_s           cn50xx;
6860    struct cvmx_ciu_pci_inta_s           cn52xx;
6861    struct cvmx_ciu_pci_inta_s           cn52xxp1;
6862    struct cvmx_ciu_pci_inta_s           cn56xx;
6863    struct cvmx_ciu_pci_inta_s           cn56xxp1;
6864    struct cvmx_ciu_pci_inta_s           cn58xx;
6865    struct cvmx_ciu_pci_inta_s           cn58xxp1;
6866} cvmx_ciu_pci_inta_t;
6867
6868
6869/**
6870 * cvmx_ciu_pp_dbg
6871 */
6872typedef union
6873{
6874    uint64_t u64;
6875    struct cvmx_ciu_pp_dbg_s
6876    {
6877#if __BYTE_ORDER == __BIG_ENDIAN
6878        uint64_t reserved_16_63          : 48;
6879        uint64_t ppdbg                   : 16;      /**< Debug[DM] value for each PP
6880                                                         whether the PP's are in debug mode or not */
6881#else
6882        uint64_t ppdbg                   : 16;
6883        uint64_t reserved_16_63          : 48;
6884#endif
6885    } s;
6886    struct cvmx_ciu_pp_dbg_cn30xx
6887    {
6888#if __BYTE_ORDER == __BIG_ENDIAN
6889        uint64_t reserved_1_63           : 63;
6890        uint64_t ppdbg                   : 1;       /**< Debug[DM] value for each PP
6891                                                         whether the PP's are in debug mode or not */
6892#else
6893        uint64_t ppdbg                   : 1;
6894        uint64_t reserved_1_63           : 63;
6895#endif
6896    } cn30xx;
6897    struct cvmx_ciu_pp_dbg_cn31xx
6898    {
6899#if __BYTE_ORDER == __BIG_ENDIAN
6900        uint64_t reserved_2_63           : 62;
6901        uint64_t ppdbg                   : 2;       /**< Debug[DM] value for each PP
6902                                                         whether the PP's are in debug mode or not */
6903#else
6904        uint64_t ppdbg                   : 2;
6905        uint64_t reserved_2_63           : 62;
6906#endif
6907    } cn31xx;
6908    struct cvmx_ciu_pp_dbg_s             cn38xx;
6909    struct cvmx_ciu_pp_dbg_s             cn38xxp2;
6910    struct cvmx_ciu_pp_dbg_cn31xx        cn50xx;
6911    struct cvmx_ciu_pp_dbg_cn52xx
6912    {
6913#if __BYTE_ORDER == __BIG_ENDIAN
6914        uint64_t reserved_4_63           : 60;
6915        uint64_t ppdbg                   : 4;       /**< Debug[DM] value for each PP
6916                                                         whether the PP's are in debug mode or not */
6917#else
6918        uint64_t ppdbg                   : 4;
6919        uint64_t reserved_4_63           : 60;
6920#endif
6921    } cn52xx;
6922    struct cvmx_ciu_pp_dbg_cn52xx        cn52xxp1;
6923    struct cvmx_ciu_pp_dbg_cn56xx
6924    {
6925#if __BYTE_ORDER == __BIG_ENDIAN
6926        uint64_t reserved_12_63          : 52;
6927        uint64_t ppdbg                   : 12;      /**< Debug[DM] value for each PP
6928                                                         whether the PP's are in debug mode or not */
6929#else
6930        uint64_t ppdbg                   : 12;
6931        uint64_t reserved_12_63          : 52;
6932#endif
6933    } cn56xx;
6934    struct cvmx_ciu_pp_dbg_cn56xx        cn56xxp1;
6935    struct cvmx_ciu_pp_dbg_s             cn58xx;
6936    struct cvmx_ciu_pp_dbg_s             cn58xxp1;
6937} cvmx_ciu_pp_dbg_t;
6938
6939
6940/**
6941 * cvmx_ciu_pp_poke#
6942 *
6943 * Notes:
6944 * Any write to a CIU_PP_POKE register clears any pending interrupt generated
6945 * by the associated watchdog, resets the CIU_WDOG[STATE] field, and set
6946 * CIU_WDOG[CNT] to be (CIU_WDOG[LEN] << 8).
6947 *
6948 * Reads to this register will return the associated CIU_WDOG register.
6949 */
6950typedef union
6951{
6952    uint64_t u64;
6953    struct cvmx_ciu_pp_pokex_s
6954    {
6955#if __BYTE_ORDER == __BIG_ENDIAN
6956        uint64_t poke                    : 64;      /**< Reserved */
6957#else
6958        uint64_t poke                    : 64;
6959#endif
6960    } s;
6961    struct cvmx_ciu_pp_pokex_s           cn30xx;
6962    struct cvmx_ciu_pp_pokex_s           cn31xx;
6963    struct cvmx_ciu_pp_pokex_s           cn38xx;
6964    struct cvmx_ciu_pp_pokex_s           cn38xxp2;
6965    struct cvmx_ciu_pp_pokex_s           cn50xx;
6966    struct cvmx_ciu_pp_pokex_s           cn52xx;
6967    struct cvmx_ciu_pp_pokex_s           cn52xxp1;
6968    struct cvmx_ciu_pp_pokex_s           cn56xx;
6969    struct cvmx_ciu_pp_pokex_s           cn56xxp1;
6970    struct cvmx_ciu_pp_pokex_s           cn58xx;
6971    struct cvmx_ciu_pp_pokex_s           cn58xxp1;
6972} cvmx_ciu_pp_pokex_t;
6973
6974
6975/**
6976 * cvmx_ciu_pp_rst
6977 *
6978 * Contains the reset control for each PP.  Value of '1' will hold a PP in reset, '0' will release.
6979 * Resets to 0xffff when PCI boot is enabled, 0xfffe otherwise.
6980 */
6981typedef union
6982{
6983    uint64_t u64;
6984    struct cvmx_ciu_pp_rst_s
6985    {
6986#if __BYTE_ORDER == __BIG_ENDIAN
6987        uint64_t reserved_16_63          : 48;
6988        uint64_t rst                     : 15;      /**< PP Rst for PP's 15-1 */
6989        uint64_t rst0                    : 1;       /**< PP Rst for PP0
6990                                                         depends on standalone mode */
6991#else
6992        uint64_t rst0                    : 1;
6993        uint64_t rst                     : 15;
6994        uint64_t reserved_16_63          : 48;
6995#endif
6996    } s;
6997    struct cvmx_ciu_pp_rst_cn30xx
6998    {
6999#if __BYTE_ORDER == __BIG_ENDIAN
7000        uint64_t reserved_1_63           : 63;
7001        uint64_t rst0                    : 1;       /**< PP Rst for PP0
7002                                                         depends on standalone mode */
7003#else
7004        uint64_t rst0                    : 1;
7005        uint64_t reserved_1_63           : 63;
7006#endif
7007    } cn30xx;
7008    struct cvmx_ciu_pp_rst_cn31xx
7009    {
7010#if __BYTE_ORDER == __BIG_ENDIAN
7011        uint64_t reserved_2_63           : 62;
7012        uint64_t rst                     : 1;       /**< PP Rst for PP1 */
7013        uint64_t rst0                    : 1;       /**< PP Rst for PP0
7014                                                         depends on standalone mode */
7015#else
7016        uint64_t rst0                    : 1;
7017        uint64_t rst                     : 1;
7018        uint64_t reserved_2_63           : 62;
7019#endif
7020    } cn31xx;
7021    struct cvmx_ciu_pp_rst_s             cn38xx;
7022    struct cvmx_ciu_pp_rst_s             cn38xxp2;
7023    struct cvmx_ciu_pp_rst_cn31xx        cn50xx;
7024    struct cvmx_ciu_pp_rst_cn52xx
7025    {
7026#if __BYTE_ORDER == __BIG_ENDIAN
7027        uint64_t reserved_4_63           : 60;
7028        uint64_t rst                     : 3;       /**< PP Rst for PP's 11-1 */
7029        uint64_t rst0                    : 1;       /**< PP Rst for PP0
7030                                                         depends on standalone mode */
7031#else
7032        uint64_t rst0                    : 1;
7033        uint64_t rst                     : 3;
7034        uint64_t reserved_4_63           : 60;
7035#endif
7036    } cn52xx;
7037    struct cvmx_ciu_pp_rst_cn52xx        cn52xxp1;
7038    struct cvmx_ciu_pp_rst_cn56xx
7039    {
7040#if __BYTE_ORDER == __BIG_ENDIAN
7041        uint64_t reserved_12_63          : 52;
7042        uint64_t rst                     : 11;      /**< PP Rst for PP's 11-1 */
7043        uint64_t rst0                    : 1;       /**< PP Rst for PP0
7044                                                         depends on standalone mode */
7045#else
7046        uint64_t rst0                    : 1;
7047        uint64_t rst                     : 11;
7048        uint64_t reserved_12_63          : 52;
7049#endif
7050    } cn56xx;
7051    struct cvmx_ciu_pp_rst_cn56xx        cn56xxp1;
7052    struct cvmx_ciu_pp_rst_s             cn58xx;
7053    struct cvmx_ciu_pp_rst_s             cn58xxp1;
7054} cvmx_ciu_pp_rst_t;
7055
7056
7057/**
7058 * cvmx_ciu_qlm_dcok
7059 */
7060typedef union
7061{
7062    uint64_t u64;
7063    struct cvmx_ciu_qlm_dcok_s
7064    {
7065#if __BYTE_ORDER == __BIG_ENDIAN
7066        uint64_t reserved_4_63           : 60;
7067        uint64_t qlm_dcok                : 4;       /**< Re-assert dcok for each QLM. The value in this
7068                                                         field is "anded" with the pll_dcok pin and then
7069                                                         sent to each QLM (0..3). */
7070#else
7071        uint64_t qlm_dcok                : 4;
7072        uint64_t reserved_4_63           : 60;
7073#endif
7074    } s;
7075    struct cvmx_ciu_qlm_dcok_cn52xx
7076    {
7077#if __BYTE_ORDER == __BIG_ENDIAN
7078        uint64_t reserved_2_63           : 62;
7079        uint64_t qlm_dcok                : 2;       /**< Re-assert dcok for each QLM. The value in this
7080                                                         field is "anded" with the pll_dcok pin and then
7081                                                         sent to each QLM (0..3). */
7082#else
7083        uint64_t qlm_dcok                : 2;
7084        uint64_t reserved_2_63           : 62;
7085#endif
7086    } cn52xx;
7087    struct cvmx_ciu_qlm_dcok_cn52xx      cn52xxp1;
7088    struct cvmx_ciu_qlm_dcok_s           cn56xx;
7089    struct cvmx_ciu_qlm_dcok_s           cn56xxp1;
7090} cvmx_ciu_qlm_dcok_t;
7091
7092
7093/**
7094 * cvmx_ciu_qlm_jtgc
7095 */
7096typedef union
7097{
7098    uint64_t u64;
7099    struct cvmx_ciu_qlm_jtgc_s
7100    {
7101#if __BYTE_ORDER == __BIG_ENDIAN
7102        uint64_t reserved_11_63          : 53;
7103        uint64_t clk_div                 : 3;       /**< Clock divider for QLM JTAG operations.  eclk is
7104                                                         divided by 2^(CLK_DIV + 2) */
7105        uint64_t reserved_6_7            : 2;
7106        uint64_t mux_sel                 : 2;       /**< Selects which QLM JTAG shift out is shifted into
7107                                                         the QLM JTAG shift register: CIU_QLM_JTGD[SHFT_REG] */
7108        uint64_t bypass                  : 4;       /**< Selects which QLM JTAG shift chains are bypassed
7109                                                         by the QLM JTAG data register (CIU_QLM_JTGD) (one
7110                                                         bit per QLM) */
7111#else
7112        uint64_t bypass                  : 4;
7113        uint64_t mux_sel                 : 2;
7114        uint64_t reserved_6_7            : 2;
7115        uint64_t clk_div                 : 3;
7116        uint64_t reserved_11_63          : 53;
7117#endif
7118    } s;
7119    struct cvmx_ciu_qlm_jtgc_cn52xx
7120    {
7121#if __BYTE_ORDER == __BIG_ENDIAN
7122        uint64_t reserved_11_63          : 53;
7123        uint64_t clk_div                 : 3;       /**< Clock divider for QLM JTAG operations.  eclk is
7124                                                         divided by 2^(CLK_DIV + 2) */
7125        uint64_t reserved_5_7            : 3;
7126        uint64_t mux_sel                 : 1;       /**< Selects which QLM JTAG shift out is shifted into
7127                                                         the QLM JTAG shift register: CIU_QLM_JTGD[SHFT_REG] */
7128        uint64_t reserved_2_3            : 2;
7129        uint64_t bypass                  : 2;       /**< Selects which QLM JTAG shift chains are bypassed
7130                                                         by the QLM JTAG data register (CIU_QLM_JTGD) (one
7131                                                         bit per QLM) */
7132#else
7133        uint64_t bypass                  : 2;
7134        uint64_t reserved_2_3            : 2;
7135        uint64_t mux_sel                 : 1;
7136        uint64_t reserved_5_7            : 3;
7137        uint64_t clk_div                 : 3;
7138        uint64_t reserved_11_63          : 53;
7139#endif
7140    } cn52xx;
7141    struct cvmx_ciu_qlm_jtgc_cn52xx      cn52xxp1;
7142    struct cvmx_ciu_qlm_jtgc_s           cn56xx;
7143    struct cvmx_ciu_qlm_jtgc_s           cn56xxp1;
7144} cvmx_ciu_qlm_jtgc_t;
7145
7146
7147/**
7148 * cvmx_ciu_qlm_jtgd
7149 */
7150typedef union
7151{
7152    uint64_t u64;
7153    struct cvmx_ciu_qlm_jtgd_s
7154    {
7155#if __BYTE_ORDER == __BIG_ENDIAN
7156        uint64_t capture                 : 1;       /**< Perform JTAG capture operation (self-clearing when
7157                                                         op completes) */
7158        uint64_t shift                   : 1;       /**< Perform JTAG shift operation (self-clearing when
7159                                                         op completes) */
7160        uint64_t update                  : 1;       /**< Perform JTAG update operation (self-clearing when
7161                                                         op completes) */
7162        uint64_t reserved_44_60          : 17;
7163        uint64_t select                  : 4;       /**< Selects which QLM JTAG shift chains the JTAG
7164                                                         operations are performed on */
7165        uint64_t reserved_37_39          : 3;
7166        uint64_t shft_cnt                : 5;       /**< QLM JTAG shift count (encoded in -1 notation) */
7167        uint64_t shft_reg                : 32;      /**< QLM JTAG shift register */
7168#else
7169        uint64_t shft_reg                : 32;
7170        uint64_t shft_cnt                : 5;
7171        uint64_t reserved_37_39          : 3;
7172        uint64_t select                  : 4;
7173        uint64_t reserved_44_60          : 17;
7174        uint64_t update                  : 1;
7175        uint64_t shift                   : 1;
7176        uint64_t capture                 : 1;
7177#endif
7178    } s;
7179    struct cvmx_ciu_qlm_jtgd_cn52xx
7180    {
7181#if __BYTE_ORDER == __BIG_ENDIAN
7182        uint64_t capture                 : 1;       /**< Perform JTAG capture operation (self-clearing when
7183                                                         op completes) */
7184        uint64_t shift                   : 1;       /**< Perform JTAG shift operation (self-clearing when
7185                                                         op completes) */
7186        uint64_t update                  : 1;       /**< Perform JTAG update operation (self-clearing when
7187                                                         op completes) */
7188        uint64_t reserved_42_60          : 19;
7189        uint64_t select                  : 2;       /**< Selects which QLM JTAG shift chains the JTAG
7190                                                         operations are performed on */
7191        uint64_t reserved_37_39          : 3;
7192        uint64_t shft_cnt                : 5;       /**< QLM JTAG shift count (encoded in -1 notation) */
7193        uint64_t shft_reg                : 32;      /**< QLM JTAG shift register */
7194#else
7195        uint64_t shft_reg                : 32;
7196        uint64_t shft_cnt                : 5;
7197        uint64_t reserved_37_39          : 3;
7198        uint64_t select                  : 2;
7199        uint64_t reserved_42_60          : 19;
7200        uint64_t update                  : 1;
7201        uint64_t shift                   : 1;
7202        uint64_t capture                 : 1;
7203#endif
7204    } cn52xx;
7205    struct cvmx_ciu_qlm_jtgd_cn52xx      cn52xxp1;
7206    struct cvmx_ciu_qlm_jtgd_s           cn56xx;
7207    struct cvmx_ciu_qlm_jtgd_cn56xxp1
7208    {
7209#if __BYTE_ORDER == __BIG_ENDIAN
7210        uint64_t capture                 : 1;       /**< Perform JTAG capture operation (self-clearing when
7211                                                         op completes) */
7212        uint64_t shift                   : 1;       /**< Perform JTAG shift operation (self-clearing when
7213                                                         op completes) */
7214        uint64_t update                  : 1;       /**< Perform JTAG update operation (self-clearing when
7215                                                         op completes) */
7216        uint64_t reserved_37_60          : 24;
7217        uint64_t shft_cnt                : 5;       /**< QLM JTAG shift count (encoded in -1 notation) */
7218        uint64_t shft_reg                : 32;      /**< QLM JTAG shift register */
7219#else
7220        uint64_t shft_reg                : 32;
7221        uint64_t shft_cnt                : 5;
7222        uint64_t reserved_37_60          : 24;
7223        uint64_t update                  : 1;
7224        uint64_t shift                   : 1;
7225        uint64_t capture                 : 1;
7226#endif
7227    } cn56xxp1;
7228} cvmx_ciu_qlm_jtgd_t;
7229
7230
7231/**
7232 * cvmx_ciu_soft_bist
7233 */
7234typedef union
7235{
7236    uint64_t u64;
7237    struct cvmx_ciu_soft_bist_s
7238    {
7239#if __BYTE_ORDER == __BIG_ENDIAN
7240        uint64_t reserved_1_63           : 63;
7241        uint64_t soft_bist               : 1;       /**< Run BIST on soft reset. */
7242#else
7243        uint64_t soft_bist               : 1;
7244        uint64_t reserved_1_63           : 63;
7245#endif
7246    } s;
7247    struct cvmx_ciu_soft_bist_s          cn30xx;
7248    struct cvmx_ciu_soft_bist_s          cn31xx;
7249    struct cvmx_ciu_soft_bist_s          cn38xx;
7250    struct cvmx_ciu_soft_bist_s          cn38xxp2;
7251    struct cvmx_ciu_soft_bist_s          cn50xx;
7252    struct cvmx_ciu_soft_bist_s          cn52xx;
7253    struct cvmx_ciu_soft_bist_s          cn52xxp1;
7254    struct cvmx_ciu_soft_bist_s          cn56xx;
7255    struct cvmx_ciu_soft_bist_s          cn56xxp1;
7256    struct cvmx_ciu_soft_bist_s          cn58xx;
7257    struct cvmx_ciu_soft_bist_s          cn58xxp1;
7258} cvmx_ciu_soft_bist_t;
7259
7260
7261/**
7262 * cvmx_ciu_soft_prst
7263 */
7264typedef union
7265{
7266    uint64_t u64;
7267    struct cvmx_ciu_soft_prst_s
7268    {
7269#if __BYTE_ORDER == __BIG_ENDIAN
7270        uint64_t reserved_3_63           : 61;
7271        uint64_t host64                  : 1;       /**< PCX Host Mode Device Capability (0=32b/1=64b) */
7272        uint64_t npi                     : 1;       /**< When PCI soft reset is asserted, also reset the
7273                                                         NPI and PNI logic */
7274        uint64_t soft_prst               : 1;       /**< Reset the PCI bus.  Only works when Octane is
7275                                                         configured as a HOST. When OCTEON is a PCI host
7276                                                         (i.e. when PCI_HOST_MODE = 1), This controls
7277                                                         PCI_RST_L. Refer to section 10.11.1. */
7278#else
7279        uint64_t soft_prst               : 1;
7280        uint64_t npi                     : 1;
7281        uint64_t host64                  : 1;
7282        uint64_t reserved_3_63           : 61;
7283#endif
7284    } s;
7285    struct cvmx_ciu_soft_prst_s          cn30xx;
7286    struct cvmx_ciu_soft_prst_s          cn31xx;
7287    struct cvmx_ciu_soft_prst_s          cn38xx;
7288    struct cvmx_ciu_soft_prst_s          cn38xxp2;
7289    struct cvmx_ciu_soft_prst_s          cn50xx;
7290    struct cvmx_ciu_soft_prst_cn52xx
7291    {
7292#if __BYTE_ORDER == __BIG_ENDIAN
7293        uint64_t reserved_1_63           : 63;
7294        uint64_t soft_prst               : 1;       /**< Reset the PCI bus.  Only works when Octane is
7295                                                         configured as a HOST. When OCTEON is a PCI host
7296                                                         (i.e. when PCI_HOST_MODE = 1), This controls
7297                                                         PCI_RST_L. Refer to section 10.11.1. */
7298#else
7299        uint64_t soft_prst               : 1;
7300        uint64_t reserved_1_63           : 63;
7301#endif
7302    } cn52xx;
7303    struct cvmx_ciu_soft_prst_cn52xx     cn52xxp1;
7304    struct cvmx_ciu_soft_prst_cn52xx     cn56xx;
7305    struct cvmx_ciu_soft_prst_cn52xx     cn56xxp1;
7306    struct cvmx_ciu_soft_prst_s          cn58xx;
7307    struct cvmx_ciu_soft_prst_s          cn58xxp1;
7308} cvmx_ciu_soft_prst_t;
7309
7310
7311/**
7312 * cvmx_ciu_soft_prst1
7313 */
7314typedef union
7315{
7316    uint64_t u64;
7317    struct cvmx_ciu_soft_prst1_s
7318    {
7319#if __BYTE_ORDER == __BIG_ENDIAN
7320        uint64_t reserved_1_63           : 63;
7321        uint64_t soft_prst               : 1;       /**< Reset the PCI bus.  Only works when Octane is
7322                                                         configured as a HOST. When OCTEON is a PCI host
7323                                                         (i.e. when PCI_HOST_MODE = 1), This controls
7324                                                         PCI_RST_L. Refer to section 10.11.1. */
7325#else
7326        uint64_t soft_prst               : 1;
7327        uint64_t reserved_1_63           : 63;
7328#endif
7329    } s;
7330    struct cvmx_ciu_soft_prst1_s         cn52xx;
7331    struct cvmx_ciu_soft_prst1_s         cn52xxp1;
7332    struct cvmx_ciu_soft_prst1_s         cn56xx;
7333    struct cvmx_ciu_soft_prst1_s         cn56xxp1;
7334} cvmx_ciu_soft_prst1_t;
7335
7336
7337/**
7338 * cvmx_ciu_soft_rst
7339 */
7340typedef union
7341{
7342    uint64_t u64;
7343    struct cvmx_ciu_soft_rst_s
7344    {
7345#if __BYTE_ORDER == __BIG_ENDIAN
7346        uint64_t reserved_1_63           : 63;
7347        uint64_t soft_rst                : 1;       /**< Resets Octeon
7348                                                         When soft reseting Octeon from a remote PCI host,
7349                                                         always read CIU_SOFT_RST (and wait for result)
7350                                                         before writing SOFT_RST to '1'. */
7351#else
7352        uint64_t soft_rst                : 1;
7353        uint64_t reserved_1_63           : 63;
7354#endif
7355    } s;
7356    struct cvmx_ciu_soft_rst_s           cn30xx;
7357    struct cvmx_ciu_soft_rst_s           cn31xx;
7358    struct cvmx_ciu_soft_rst_s           cn38xx;
7359    struct cvmx_ciu_soft_rst_s           cn38xxp2;
7360    struct cvmx_ciu_soft_rst_s           cn50xx;
7361    struct cvmx_ciu_soft_rst_s           cn52xx;
7362    struct cvmx_ciu_soft_rst_s           cn52xxp1;
7363    struct cvmx_ciu_soft_rst_s           cn56xx;
7364    struct cvmx_ciu_soft_rst_s           cn56xxp1;
7365    struct cvmx_ciu_soft_rst_s           cn58xx;
7366    struct cvmx_ciu_soft_rst_s           cn58xxp1;
7367} cvmx_ciu_soft_rst_t;
7368
7369
7370/**
7371 * cvmx_ciu_tim#
7372 */
7373typedef union
7374{
7375    uint64_t u64;
7376    struct cvmx_ciu_timx_s
7377    {
7378#if __BYTE_ORDER == __BIG_ENDIAN
7379        uint64_t reserved_37_63          : 27;
7380        uint64_t one_shot                : 1;       /**< One-shot mode */
7381        uint64_t len                     : 36;      /**< Timeout length in core clock cycles
7382                                                         Periodic interrupts will occur every LEN+1 core
7383                                                         clock cycles when ONE_SHOT==0
7384                                                         Timer disabled when LEN==0 */
7385#else
7386        uint64_t len                     : 36;
7387        uint64_t one_shot                : 1;
7388        uint64_t reserved_37_63          : 27;
7389#endif
7390    } s;
7391    struct cvmx_ciu_timx_s               cn30xx;
7392    struct cvmx_ciu_timx_s               cn31xx;
7393    struct cvmx_ciu_timx_s               cn38xx;
7394    struct cvmx_ciu_timx_s               cn38xxp2;
7395    struct cvmx_ciu_timx_s               cn50xx;
7396    struct cvmx_ciu_timx_s               cn52xx;
7397    struct cvmx_ciu_timx_s               cn52xxp1;
7398    struct cvmx_ciu_timx_s               cn56xx;
7399    struct cvmx_ciu_timx_s               cn56xxp1;
7400    struct cvmx_ciu_timx_s               cn58xx;
7401    struct cvmx_ciu_timx_s               cn58xxp1;
7402} cvmx_ciu_timx_t;
7403
7404
7405/**
7406 * cvmx_ciu_wdog#
7407 */
7408typedef union
7409{
7410    uint64_t u64;
7411    struct cvmx_ciu_wdogx_s
7412    {
7413#if __BYTE_ORDER == __BIG_ENDIAN
7414        uint64_t reserved_46_63          : 18;
7415        uint64_t gstopen                 : 1;       /**< GSTOPEN */
7416        uint64_t dstop                   : 1;       /**< DSTOP */
7417        uint64_t cnt                     : 24;      /**< Number of 256-cycle intervals until next watchdog
7418                                                         expiration.  Cleared on write to associated
7419                                                         CIU_PP_POKE register. */
7420        uint64_t len                     : 16;      /**< Watchdog time expiration length
7421                                                         The 16 bits of LEN represent the most significant
7422                                                         bits of a 24 bit decrementer that decrements
7423                                                         every 256 cycles.
7424                                                         LEN must be set > 0 */
7425        uint64_t state                   : 2;       /**< Watchdog state
7426                                                         number of watchdog time expirations since last
7427                                                         PP poke.  Cleared on write to associated
7428                                                         CIU_PP_POKE register. */
7429        uint64_t mode                    : 2;       /**< Watchdog mode
7430                                                         0 = Off
7431                                                         1 = Interrupt Only
7432                                                         2 = Interrupt + NMI
7433                                                         3 = Interrupt + NMI + Soft-Reset */
7434#else
7435        uint64_t mode                    : 2;
7436        uint64_t state                   : 2;
7437        uint64_t len                     : 16;
7438        uint64_t cnt                     : 24;
7439        uint64_t dstop                   : 1;
7440        uint64_t gstopen                 : 1;
7441        uint64_t reserved_46_63          : 18;
7442#endif
7443    } s;
7444    struct cvmx_ciu_wdogx_s              cn30xx;
7445    struct cvmx_ciu_wdogx_s              cn31xx;
7446    struct cvmx_ciu_wdogx_s              cn38xx;
7447    struct cvmx_ciu_wdogx_s              cn38xxp2;
7448    struct cvmx_ciu_wdogx_s              cn50xx;
7449    struct cvmx_ciu_wdogx_s              cn52xx;
7450    struct cvmx_ciu_wdogx_s              cn52xxp1;
7451    struct cvmx_ciu_wdogx_s              cn56xx;
7452    struct cvmx_ciu_wdogx_s              cn56xxp1;
7453    struct cvmx_ciu_wdogx_s              cn58xx;
7454    struct cvmx_ciu_wdogx_s              cn58xxp1;
7455} cvmx_ciu_wdogx_t;
7456
7457
7458/**
7459 * cvmx_dbg_data
7460 *
7461 * DBG_DATA = Debug Data Register
7462 *
7463 * Value returned on the debug-data lines from the RSLs
7464 */
7465typedef union
7466{
7467    uint64_t u64;
7468    struct cvmx_dbg_data_s
7469    {
7470#if __BYTE_ORDER == __BIG_ENDIAN
7471        uint64_t reserved_23_63          : 41;
7472        uint64_t c_mul                   : 5;       /**< C_MUL pins sampled at DCOK assertion */
7473        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
7474                                                         debug select value. */
7475        uint64_t data                    : 17;      /**< Value on the debug data lines. */
7476#else
7477        uint64_t data                    : 17;
7478        uint64_t dsel_ext                : 1;
7479        uint64_t c_mul                   : 5;
7480        uint64_t reserved_23_63          : 41;
7481#endif
7482    } s;
7483    struct cvmx_dbg_data_cn30xx
7484    {
7485#if __BYTE_ORDER == __BIG_ENDIAN
7486        uint64_t reserved_31_63          : 33;
7487        uint64_t pll_mul                 : 3;       /**< pll_mul pins sampled at DCOK assertion */
7488        uint64_t reserved_23_27          : 5;
7489        uint64_t c_mul                   : 5;       /**< Core PLL multiplier sampled at DCOK assertion */
7490        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
7491                                                         debug select value. */
7492        uint64_t data                    : 17;      /**< Value on the debug data lines. */
7493#else
7494        uint64_t data                    : 17;
7495        uint64_t dsel_ext                : 1;
7496        uint64_t c_mul                   : 5;
7497        uint64_t reserved_23_27          : 5;
7498        uint64_t pll_mul                 : 3;
7499        uint64_t reserved_31_63          : 33;
7500#endif
7501    } cn30xx;
7502    struct cvmx_dbg_data_cn30xx          cn31xx;
7503    struct cvmx_dbg_data_cn38xx
7504    {
7505#if __BYTE_ORDER == __BIG_ENDIAN
7506        uint64_t reserved_29_63          : 35;
7507        uint64_t d_mul                   : 4;       /**< D_MUL pins sampled on DCOK assertion */
7508        uint64_t dclk_mul2               : 1;       /**< Should always be set for fast DDR-II operation */
7509        uint64_t cclk_div2               : 1;       /**< Should always be clear for fast core clock */
7510        uint64_t c_mul                   : 5;       /**< C_MUL pins sampled at DCOK assertion */
7511        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
7512                                                         debug select value. */
7513        uint64_t data                    : 17;      /**< Value on the debug data lines. */
7514#else
7515        uint64_t data                    : 17;
7516        uint64_t dsel_ext                : 1;
7517        uint64_t c_mul                   : 5;
7518        uint64_t cclk_div2               : 1;
7519        uint64_t dclk_mul2               : 1;
7520        uint64_t d_mul                   : 4;
7521        uint64_t reserved_29_63          : 35;
7522#endif
7523    } cn38xx;
7524    struct cvmx_dbg_data_cn38xx          cn38xxp2;
7525    struct cvmx_dbg_data_cn30xx          cn50xx;
7526    struct cvmx_dbg_data_cn58xx
7527    {
7528#if __BYTE_ORDER == __BIG_ENDIAN
7529        uint64_t reserved_29_63          : 35;
7530        uint64_t rem                     : 6;       /**< Remaining debug_select pins sampled at DCOK */
7531        uint64_t c_mul                   : 5;       /**< C_MUL pins sampled at DCOK assertion */
7532        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
7533                                                         debug select value. */
7534        uint64_t data                    : 17;      /**< Value on the debug data lines. */
7535#else
7536        uint64_t data                    : 17;
7537        uint64_t dsel_ext                : 1;
7538        uint64_t c_mul                   : 5;
7539        uint64_t rem                     : 6;
7540        uint64_t reserved_29_63          : 35;
7541#endif
7542    } cn58xx;
7543    struct cvmx_dbg_data_cn58xx          cn58xxp1;
7544} cvmx_dbg_data_t;
7545
7546
7547/**
7548 * cvmx_dfa_bst0
7549 *
7550 * DFA_BST0 = DFA Bist Status
7551 *
7552 * Description:
7553 */
7554typedef union
7555{
7556    uint64_t u64;
7557    struct cvmx_dfa_bst0_s
7558    {
7559#if __BYTE_ORDER == __BIG_ENDIAN
7560        uint64_t reserved_32_63          : 32;
7561        uint64_t rdf                     : 16;      /**< Bist Results for RDF[3:0] RAM(s)
7562                                                         - 0: GOOD (or bist in progress/never run)
7563                                                         - 1: BAD */
7564        uint64_t pdf                     : 16;      /**< Bist Results for PDF[3:0] RAM(s)
7565                                                         - 0: GOOD (or bist in progress/never run)
7566                                                         - 1: BAD */
7567#else
7568        uint64_t pdf                     : 16;
7569        uint64_t rdf                     : 16;
7570        uint64_t reserved_32_63          : 32;
7571#endif
7572    } s;
7573    struct cvmx_dfa_bst0_s               cn31xx;
7574    struct cvmx_dfa_bst0_s               cn38xx;
7575    struct cvmx_dfa_bst0_s               cn38xxp2;
7576    struct cvmx_dfa_bst0_cn58xx
7577    {
7578#if __BYTE_ORDER == __BIG_ENDIAN
7579        uint64_t reserved_20_63          : 44;
7580        uint64_t rdf                     : 4;       /**< Bist Results for RDF[3:0] RAM(s)
7581                                                         - 0: GOOD (or bist in progress/never run)
7582                                                         - 1: BAD */
7583        uint64_t reserved_4_15           : 12;
7584        uint64_t pdf                     : 4;       /**< Bist Results for PDF[3:0] RAM(s)
7585                                                         - 0: GOOD (or bist in progress/never run)
7586                                                         - 1: BAD */
7587#else
7588        uint64_t pdf                     : 4;
7589        uint64_t reserved_4_15           : 12;
7590        uint64_t rdf                     : 4;
7591        uint64_t reserved_20_63          : 44;
7592#endif
7593    } cn58xx;
7594    struct cvmx_dfa_bst0_cn58xx          cn58xxp1;
7595} cvmx_dfa_bst0_t;
7596
7597
7598/**
7599 * cvmx_dfa_bst1
7600 *
7601 * DFA_BST1 = DFA Bist Status
7602 *
7603 * Description:
7604 */
7605typedef union
7606{
7607    uint64_t u64;
7608    struct cvmx_dfa_bst1_s
7609    {
7610#if __BYTE_ORDER == __BIG_ENDIAN
7611        uint64_t reserved_23_63          : 41;
7612        uint64_t crq                     : 1;       /**< Bist Results for CRQ RAM
7613                                                         - 0: GOOD (or bist in progress/never run)
7614                                                         - 1: BAD */
7615        uint64_t ifu                     : 1;       /**< Bist Results for IFU RAM
7616                                                         - 0: GOOD (or bist in progress/never run)
7617                                                         - 1: BAD */
7618        uint64_t gfu                     : 1;       /**< Bist Results for GFU RAM
7619                                                         - 0: GOOD (or bist in progress/never run)
7620                                                         - 1: BAD */
7621        uint64_t drf                     : 1;       /**< Bist Results for DRF RAM
7622                                                         - 0: GOOD (or bist in progress/never run)
7623                                                         - 1: BAD */
7624        uint64_t crf                     : 1;       /**< Bist Results for CRF RAM
7625                                                         - 0: GOOD (or bist in progress/never run)
7626                                                         - 1: BAD */
7627        uint64_t p0_bwb                  : 1;       /**< Bist Results for P0_BWB RAM
7628                                                         - 0: GOOD (or bist in progress/never run)
7629                                                         - 1: BAD */
7630        uint64_t p1_bwb                  : 1;       /**< Bist Results for P1_BWB RAM
7631                                                         - 0: GOOD (or bist in progress/never run)
7632                                                         - 1: BAD */
7633        uint64_t p0_brf                  : 8;       /**< Bist Results for P0_BRF RAM
7634                                                         - 0: GOOD (or bist in progress/never run)
7635                                                         - 1: BAD */
7636        uint64_t p1_brf                  : 8;       /**< Bist Results for P1_BRF RAM
7637                                                         - 0: GOOD (or bist in progress/never run)
7638                                                         - 1: BAD */
7639#else
7640        uint64_t p1_brf                  : 8;
7641        uint64_t p0_brf                  : 8;
7642        uint64_t p1_bwb                  : 1;
7643        uint64_t p0_bwb                  : 1;
7644        uint64_t crf                     : 1;
7645        uint64_t drf                     : 1;
7646        uint64_t gfu                     : 1;
7647        uint64_t ifu                     : 1;
7648        uint64_t crq                     : 1;
7649        uint64_t reserved_23_63          : 41;
7650#endif
7651    } s;
7652    struct cvmx_dfa_bst1_cn31xx
7653    {
7654#if __BYTE_ORDER == __BIG_ENDIAN
7655        uint64_t reserved_23_63          : 41;
7656        uint64_t crq                     : 1;       /**< Bist Results for CRQ RAM
7657                                                         - 0: GOOD (or bist in progress/never run)
7658                                                         - 1: BAD */
7659        uint64_t ifu                     : 1;       /**< Bist Results for IFU RAM
7660                                                         - 0: GOOD (or bist in progress/never run)
7661                                                         - 1: BAD */
7662        uint64_t gfu                     : 1;       /**< Bist Results for GFU RAM
7663                                                         - 0: GOOD (or bist in progress/never run)
7664                                                         - 1: BAD */
7665        uint64_t drf                     : 1;       /**< Bist Results for DRF RAM
7666                                                         - 0: GOOD (or bist in progress/never run)
7667                                                         - 1: BAD */
7668        uint64_t crf                     : 1;       /**< Bist Results for CRF RAM
7669                                                         - 0: GOOD (or bist in progress/never run)
7670                                                         - 1: BAD */
7671        uint64_t reserved_0_17           : 18;
7672#else
7673        uint64_t reserved_0_17           : 18;
7674        uint64_t crf                     : 1;
7675        uint64_t drf                     : 1;
7676        uint64_t gfu                     : 1;
7677        uint64_t ifu                     : 1;
7678        uint64_t crq                     : 1;
7679        uint64_t reserved_23_63          : 41;
7680#endif
7681    } cn31xx;
7682    struct cvmx_dfa_bst1_s               cn38xx;
7683    struct cvmx_dfa_bst1_s               cn38xxp2;
7684    struct cvmx_dfa_bst1_cn58xx
7685    {
7686#if __BYTE_ORDER == __BIG_ENDIAN
7687        uint64_t reserved_23_63          : 41;
7688        uint64_t crq                     : 1;       /**< Bist Results for CRQ RAM
7689                                                         - 0: GOOD (or bist in progress/never run)
7690                                                         - 1: BAD */
7691        uint64_t ifu                     : 1;       /**< Bist Results for IFU RAM
7692                                                         - 0: GOOD (or bist in progress/never run)
7693                                                         - 1: BAD */
7694        uint64_t gfu                     : 1;       /**< Bist Results for GFU RAM
7695                                                         - 0: GOOD (or bist in progress/never run)
7696                                                         - 1: BAD */
7697        uint64_t reserved_19_19          : 1;
7698        uint64_t crf                     : 1;       /**< Bist Results for CRF RAM
7699                                                         - 0: GOOD (or bist in progress/never run)
7700                                                         - 1: BAD */
7701        uint64_t p0_bwb                  : 1;       /**< Bist Results for P0_BWB RAM
7702                                                         - 0: GOOD (or bist in progress/never run)
7703                                                         - 1: BAD */
7704        uint64_t p1_bwb                  : 1;       /**< Bist Results for P1_BWB RAM
7705                                                         - 0: GOOD (or bist in progress/never run)
7706                                                         - 1: BAD */
7707        uint64_t p0_brf                  : 8;       /**< Bist Results for P0_BRF RAM
7708                                                         - 0: GOOD (or bist in progress/never run)
7709                                                         - 1: BAD */
7710        uint64_t p1_brf                  : 8;       /**< Bist Results for P1_BRF RAM
7711                                                         - 0: GOOD (or bist in progress/never run)
7712                                                         - 1: BAD */
7713#else
7714        uint64_t p1_brf                  : 8;
7715        uint64_t p0_brf                  : 8;
7716        uint64_t p1_bwb                  : 1;
7717        uint64_t p0_bwb                  : 1;
7718        uint64_t crf                     : 1;
7719        uint64_t reserved_19_19          : 1;
7720        uint64_t gfu                     : 1;
7721        uint64_t ifu                     : 1;
7722        uint64_t crq                     : 1;
7723        uint64_t reserved_23_63          : 41;
7724#endif
7725    } cn58xx;
7726    struct cvmx_dfa_bst1_cn58xx          cn58xxp1;
7727} cvmx_dfa_bst1_t;
7728
7729
7730/**
7731 * cvmx_dfa_cfg
7732 *
7733 * Specify the RSL base addresses for the block
7734 *
7735 *                  DFA_CFG = DFA Configuration
7736 *
7737 * Description:
7738 */
7739typedef union
7740{
7741    uint64_t u64;
7742    struct cvmx_dfa_cfg_s
7743    {
7744#if __BYTE_ORDER == __BIG_ENDIAN
7745        uint64_t reserved_4_63           : 60;
7746        uint64_t nrpl_ena                : 1;       /**< When set, allows the per-node replication feature to be
7747                                                         enabled.
7748                                                         In 36-bit mode: The IWORD0[31:30]=SNREPL field AND
7749                                                         bits [21:20] of the Next Node ptr are used in generating
7750                                                         the next node address (see OCTEON HRM - DFA Chapter for
7751                                                         psuedo-code of DTE next node address generation).
7752                                                         NOTE: When NRPL_ENA=1 and IWORD0[TY]=1(36b mode),
7753                                                         (regardless of IWORD0[NRPLEN]), the Resultant Word1+
7754                                                         [[47:44],[23:20]] = Next Node's [27:20] bits. This allows
7755                                                         SW to use the RESERVED bits of the final node for SW
7756                                                         caching. Also, if required, SW will use [22:21]=Node
7757                                                         Replication to re-start the same graph walk(if graph
7758                                                         walk prematurely terminated (ie: DATA_GONE).
7759                                                         In 18-bit mode: The IWORD0[31:30]=SNREPL field AND
7760                                                         bit [16:14] of the Next Node ptr are used in generating
7761                                                         the next node address (see OCTEON HRM - DFA Chapter for
7762                                                         psuedo-code of DTE next node address generation).
7763                                                         If (IWORD0[NREPLEN]=1 and DFA_CFG[NRPL_ENA]=1) [
7764                                                            If next node ptr[16] is set [
7765                                                              next node ptr[15:14] indicates the next node repl
7766                                                              next node ptr[13:0]  indicates the position of the
7767                                                                 node relative to the first normal node (i.e.
7768                                                                 IWORD3[Msize] must be added to get the final node)
7769                                                            ]
7770                                                            else If next node ptr[16] is not set [
7771                                                              next node ptr[15:0] indicates the next node id
7772                                                              next node repl = 0
7773                                                            ]
7774                                                         ]
7775                                                         NOTE: For 18b node replication, MAX node space=64KB(2^16)
7776                                                         is used in detecting terminal node space(see HRM for full
7777                                                         description).
7778                                                         NOTE: The DFA graphs MUST BE built/written to DFA LLM memory
7779                                                         aware of the "per-node" replication. */
7780        uint64_t nxor_ena                : 1;       /**< When set, allows the DTE Instruction IWORD0[NXOREN]
7781                                                         to be used to enable/disable the per-node address 'scramble'
7782                                                         of the LLM address to lessen the effects of bank conflicts.
7783                                                         If IWORD0[NXOREN] is also set, then:
7784                                                         In 36-bit mode: The node_Id[7:0] 8-bit value is XORed
7785                                                         against the LLM address addr[9:2].
7786                                                         In 18-bit mode: The node_id[6:0] 7-bit value is XORed
7787                                                         against the LLM address addr[8:2]. (note: we don't address
7788                                                         scramble outside the mode's node space).
7789                                                         NOTE: The DFA graphs MUST BE built/written to DFA LLM memory
7790                                                         aware of the "per-node" address scramble.
7791                                                         NOTE: The address 'scramble' ocurs for BOTH DFA LLM graph
7792                                                         read/write operations. */
7793        uint64_t gxor_ena                : 1;       /**< When set, the DTE Instruction IWORD0[GXOR]
7794                                                         field is used to 'scramble' the LLM address
7795                                                         to lessen the effects of bank conflicts.
7796                                                         In 36-bit mode: The GXOR[7:0] 8-bit value is XORed
7797                                                         against the LLM address addr[9:2].
7798                                                         In 18-bit mode: GXOR[6:0] 7-bit value is XORed against
7799                                                         the LLM address addr[8:2]. (note: we don't address
7800                                                         scramble outside the mode's node space)
7801                                                         NOTE: The DFA graphs MUST BE built/written to DFA LLM memory
7802                                                         aware of the "per-graph" address scramble.
7803                                                         NOTE: The address 'scramble' ocurs for BOTH DFA LLM graph
7804                                                         read/write operations. */
7805        uint64_t sarb                    : 1;       /**< DFA Source Arbiter Mode
7806                                                         Selects the arbitration mode used to select DFA
7807                                                         requests issued from either CP2 or the DTE (NCB-CSR
7808                                                         or DFA HW engine).
7809                                                            - 0: Fixed Priority [Highest=CP2, Lowest=DTE]
7810                                                            - 1: Round-Robin
7811                                                         NOTE: This should only be written to a different value
7812                                                         during power-on SW initialization. */
7813#else
7814        uint64_t sarb                    : 1;
7815        uint64_t gxor_ena                : 1;
7816        uint64_t nxor_ena                : 1;
7817        uint64_t nrpl_ena                : 1;
7818        uint64_t reserved_4_63           : 60;
7819#endif
7820    } s;
7821    struct cvmx_dfa_cfg_s                cn38xx;
7822    struct cvmx_dfa_cfg_cn38xxp2
7823    {
7824#if __BYTE_ORDER == __BIG_ENDIAN
7825        uint64_t reserved_1_63           : 63;
7826        uint64_t sarb                    : 1;       /**< DFA Source Arbiter Mode
7827                                                         Selects the arbitration mode used to select DFA
7828                                                         requests issued from either CP2 or the DTE (NCB-CSR
7829                                                         or DFA HW engine).
7830                                                            - 0: Fixed Priority [Highest=CP2, Lowest=DTE]
7831                                                            - 1: Round-Robin
7832                                                         NOTE: This should only be written to a different value
7833                                                         during power-on SW initialization. */
7834#else
7835        uint64_t sarb                    : 1;
7836        uint64_t reserved_1_63           : 63;
7837#endif
7838    } cn38xxp2;
7839    struct cvmx_dfa_cfg_s                cn58xx;
7840    struct cvmx_dfa_cfg_s                cn58xxp1;
7841} cvmx_dfa_cfg_t;
7842
7843
7844/**
7845 * cvmx_dfa_dbell
7846 *
7847 * DFA_DBELL = DFA Doorbell Register
7848 *
7849 * Description:
7850 *  NOTE: To write to the DFA_DBELL register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b00.
7851 *        To read the DFA_DBELL register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b00.
7852 *
7853 *  NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DBELL register do not take effect.
7854 *  NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DBELL register do not take effect.
7855 */
7856typedef union
7857{
7858    uint64_t u64;
7859    struct cvmx_dfa_dbell_s
7860    {
7861#if __BYTE_ORDER == __BIG_ENDIAN
7862        uint64_t reserved_20_63          : 44;
7863        uint64_t dbell                   : 20;      /**< Represents the cumulative total of pending
7864                                                         DFA instructions which SW has previously written
7865                                                         into the DFA Instruction FIFO (DIF) in main memory.
7866                                                         Each DFA instruction contains a fixed size 32B
7867                                                         instruction word which is executed by the DFA HW.
7868                                                         The DBL register can hold up to 1M-1 (2^20-1)
7869                                                         pending DFA instruction requests.
7870                                                         During a read (by SW), the 'most recent' contents
7871                                                         of the DFA_DBELL register are returned at the time
7872                                                         the NCB-INB bus is driven.
7873                                                         NOTE: Since DFA HW updates this register, its
7874                                                         contents are unpredictable in SW. */
7875#else
7876        uint64_t dbell                   : 20;
7877        uint64_t reserved_20_63          : 44;
7878#endif
7879    } s;
7880    struct cvmx_dfa_dbell_s              cn31xx;
7881    struct cvmx_dfa_dbell_s              cn38xx;
7882    struct cvmx_dfa_dbell_s              cn38xxp2;
7883    struct cvmx_dfa_dbell_s              cn58xx;
7884    struct cvmx_dfa_dbell_s              cn58xxp1;
7885} cvmx_dfa_dbell_t;
7886
7887
7888/**
7889 * cvmx_dfa_ddr2_addr
7890 *
7891 * DFA_DDR2_ADDR = DFA DDR2  fclk-domain Memory Address Config Register
7892 *
7893 *
7894 * Description: The following registers are used to compose the DFA's DDR2 address into ROW/COL/BNK
7895 *              etc.
7896 */
7897typedef union
7898{
7899    uint64_t u64;
7900    struct cvmx_dfa_ddr2_addr_s
7901    {
7902#if __BYTE_ORDER == __BIG_ENDIAN
7903        uint64_t reserved_9_63           : 55;
7904        uint64_t rdimm_ena               : 1;       /**< If there is a need to insert a register chip on the
7905                                                         system (the equivalent of a registered DIMM) to
7906                                                         provide better setup for the command and control bits
7907                                                         turn this mode on.
7908                                                             RDIMM_ENA
7909                                                                0           Registered Mode OFF
7910                                                                1           Registered Mode ON */
7911        uint64_t num_rnks                : 2;       /**< NUM_RNKS is programmed based on how many ranks there
7912                                                         are in the system. This needs to be programmed correctly
7913                                                         regardless of whether we are in RNK_LO mode or not.
7914                                                            NUM_RNKS     \# of Ranks
7915                                                              0              1
7916                                                              1              2
7917                                                              2              4
7918                                                              3              RESERVED */
7919        uint64_t rnk_lo                  : 1;       /**< When this mode is turned on, consecutive addresses
7920                                                         outside the bank boundary
7921                                                         are programmed to go to different ranks in order to
7922                                                         minimize bank conflicts. It is useful in 4-bank DDR2
7923                                                         parts based memory to extend out the \#physical banks
7924                                                         available and minimize bank conflicts.
7925                                                         On 8 bank ddr2 parts, this mode is not very useful
7926                                                         because this mode does come with
7927                                                         a penalty which is that every successive reads that
7928                                                         cross rank boundary will need a 1 cycle bubble
7929                                                         inserted to prevent bus turnaround conflicts.
7930                                                            RNK_LO
7931                                                             0      - OFF
7932                                                             1      - ON */
7933        uint64_t num_colrows             : 3;       /**< NUM_COLROWS    is used to set the MSB of the ROW_ADDR
7934                                                         and the LSB of RANK address when not in RNK_LO mode.
7935                                                         Calculate the sum of \#COL and \#ROW and program the
7936                                                         controller appropriately
7937                                                            RANK_LSB        \#COLs + \#ROWs
7938                                                            ------------------------------
7939                                                             - 000:                   22
7940                                                             - 001:                   23
7941                                                             - 010:                   24
7942                                                             - 011:                   25
7943                                                            - 100-111:             RESERVED */
7944        uint64_t num_cols                : 2;       /**< The Long word address that the controller receives
7945                                                         needs to be converted to Row, Col, Rank and Bank
7946                                                         addresses depending on the memory part's micro arch.
7947                                                         NUM_COL tells the controller how many colum bits
7948                                                         there are and the controller uses this info to map
7949                                                         the LSB of the row address
7950                                                             - 00: num_cols = 9
7951                                                             - 01: num_cols = 10
7952                                                             - 10: num_cols = 11
7953                                                             - 11: RESERVED */
7954#else
7955        uint64_t num_cols                : 2;
7956        uint64_t num_colrows             : 3;
7957        uint64_t rnk_lo                  : 1;
7958        uint64_t num_rnks                : 2;
7959        uint64_t rdimm_ena               : 1;
7960        uint64_t reserved_9_63           : 55;
7961#endif
7962    } s;
7963    struct cvmx_dfa_ddr2_addr_s          cn31xx;
7964} cvmx_dfa_ddr2_addr_t;
7965
7966
7967/**
7968 * cvmx_dfa_ddr2_bus
7969 *
7970 * DFA_DDR2_BUS = DFA DDR Bus Activity Counter
7971 *
7972 *
7973 * Description: This counter counts \# cycles that the memory bus is doing a read/write/command
7974 *              Useful to benchmark the bus utilization as a ratio of
7975 *              \#Cycles of Data Transfer/\#Cycles since init or
7976 *              \#Cycles of Data Transfer/\#Cycles that memory controller is active
7977 */
7978typedef union
7979{
7980    uint64_t u64;
7981    struct cvmx_dfa_ddr2_bus_s
7982    {
7983#if __BYTE_ORDER == __BIG_ENDIAN
7984        uint64_t reserved_47_63          : 17;
7985        uint64_t bus_cnt                 : 47;      /**< Counter counts the \# cycles of Data transfer */
7986#else
7987        uint64_t bus_cnt                 : 47;
7988        uint64_t reserved_47_63          : 17;
7989#endif
7990    } s;
7991    struct cvmx_dfa_ddr2_bus_s           cn31xx;
7992} cvmx_dfa_ddr2_bus_t;
7993
7994
7995/**
7996 * cvmx_dfa_ddr2_cfg
7997 *
7998 * DFA_DDR2_CFG = DFA DDR2 fclk-domain Memory Configuration \#0 Register
7999 *
8000 * Description:
8001 */
8002typedef union
8003{
8004    uint64_t u64;
8005    struct cvmx_dfa_ddr2_cfg_s
8006    {
8007#if __BYTE_ORDER == __BIG_ENDIAN
8008        uint64_t reserved_41_63          : 23;
8009        uint64_t trfc                    : 5;       /**< Establishes tRFC(from DDR2 data sheets) in \# of
8010                                                         4 fclk intervals.
8011                                                         General Equation:
8012                                                         TRFC(csr) = ROUNDUP[tRFC(data-sheet-ns)/(4 * fclk(ns))]
8013                                                         Example:
8014                                                            tRFC(data-sheet-ns) = 127.5ns
8015                                                            Operational Frequency: 533MHz DDR rate
8016                                                                [fclk=266MHz(3.75ns)]
8017                                                         Then:
8018                                                            TRFC(csr) = ROUNDUP[127.5ns/(4 * 3.75ns)]
8019                                                                      = 9 */
8020        uint64_t mrs_pgm                 : 1;       /**< When clear, the HW initialization sequence fixes
8021                                                         some of the *MRS register bit definitions.
8022                                                            EMRS:
8023                                                              A[14:13] = 0 RESERVED
8024                                                              A[12] = 0    Output Buffers Enabled (FIXED)
8025                                                              A[11] = 0    RDQS Disabled (FIXED)
8026                                                              A[10] = 0    DQSn Enabled (FIXED)
8027                                                              A[9:7] = 0   OCD Not supported (FIXED)
8028                                                              A[6] = 0     RTT Disabled (FIXED)
8029                                                              A[5:3]=DFA_DDR2_TMG[ADDLAT] (if DFA_DDR2_TMG[POCAS]=1)
8030                                                                            Additive LATENCY (Programmable)
8031                                                              A[2]=0       RTT Disabled (FIXED)
8032                                                              A[1]=DFA_DDR2_TMG[DIC] (Programmable)
8033                                                              A[0] = 0     DLL Enabled (FIXED)
8034                                                            MRS:
8035                                                              A[14:13] = 0 RESERVED
8036                                                              A[12] = 0    Fast Active Power Down Mode (FIXED)
8037                                                              A[11:9] = DFA_DDR2_TMG[TWR](Programmable)
8038                                                              A[8] = 1     DLL Reset (FIXED)
8039                                                              A[7] = 0     Test Mode (FIXED)
8040                                                              A[6:4]=DFA_DDR2_TMG[CASLAT] CAS LATENCY (Programmable)
8041                                                              A[3] = 0     Burst Type(must be 0:Sequential) (FIXED)
8042                                                              A[2:0] = 2   Burst Length=4 (must be 0:Sequential) (FIXED)
8043                                                         When set, the HW initialization sequence sources
8044                                                         the DFA_DDR2_MRS, DFA_DDR2_EMRS registers which are
8045                                                         driven onto the DFA_A[] pins. (this allows the MRS/EMRS
8046                                                         fields to be completely programmable - however care
8047                                                         must be taken by software).
8048                                                         This mode is useful for customers who wish to:
8049                                                            1) override the FIXED definitions(above), or
8050                                                            2) Use a "clamshell mode" of operation where the
8051                                                               address bits(per rank) are swizzled on the
8052                                                               board to reduce stub lengths for optimal
8053                                                               frequency operation.
8054                                                         Use this in combination with DFA_DDR2_CFG[RNK_MSK]
8055                                                         to specify the INIT sequence for each of the 4
8056                                                         supported ranks. */
8057        uint64_t fpip                    : 3;       /**< Early Fill Programmable Pipe [\#fclks]
8058                                                         This field dictates the \#fclks prior to the arrival
8059                                                         of fill data(in fclk domain), to start the 'early' fill
8060                                                         command pipe (in the eclk domain) so as to minimize the
8061                                                         overall fill latency.
8062                                                         The programmable early fill command signal is synchronized
8063                                                         into the eclk domain, where it is used to pull data out of
8064                                                         asynchronous RAM as fast as possible.
8065                                                         NOTE: A value of FPIP=0 is the 'safest' setting and will
8066                                                         result in the early fill command pipe starting in the
8067                                                         same cycle as the fill data.
8068                                                         General Equation: (for FPIP)
8069                                                             FPIP <= MIN[6, (ROUND_DOWN[6/EF_RATIO] + 1)]
8070                                                         where:
8071                                                           EF_RATIO = ECLK/FCLK Ratio [eclk(MHz)/fclk(MHz)]
8072                                                         Example: FCLK=200MHz/ECLK=600MHz
8073                                                            FPIP = MIN[6, (ROUND_DOWN[6/(600/200))] + 1)]
8074                                                            FPIP <= 3 */
8075        uint64_t reserved_29_31          : 3;
8076        uint64_t ref_int                 : 13;      /**< Refresh Interval (represented in \#of fclk
8077                                                         increments).
8078                                                         Each refresh interval will generate a single
8079                                                         auto-refresh command sequence which implicitly targets
8080                                                         all banks within the device:
8081                                                         Example: For fclk=200MHz(5ns)/400MHz(DDR):
8082                                                           trefint(ns) = [tREFI(max)=3.9us = 3900ns [datasheet]
8083                                                           REF_INT = ROUND_DOWN[(trefint/fclk)]
8084                                                                   = ROUND_DOWN[(3900ns/5ns)]
8085                                                                   = 780 fclks (0x30c)
8086                                                         NOTE: This should only be written to a different value
8087                                                         during power-on SW initialization. */
8088        uint64_t reserved_14_15          : 2;
8089        uint64_t tskw                    : 2;       /**< Board Skew (represented in \#fclks)
8090                                                         Represents additional board skew of DQ/DQS.
8091                                                             - 00: board-skew = 0 fclk
8092                                                             - 01: board-skew = 1 fclk
8093                                                             - 10: board-skew = 2 fclk
8094                                                             - 11: board-skew = 3 fclk
8095                                                         NOTE: This should only be written to a different value
8096                                                         during power-on SW initialization. */
8097        uint64_t rnk_msk                 : 4;       /**< Controls the CS_N[3:0] during a) a HW Initialization
8098                                                         sequence (triggered by DFA_DDR2_CFG[INIT]) or
8099                                                         b) during a normal refresh sequence. If
8100                                                         the RNK_MSK[x]=1, the corresponding CS_N[x] is driven.
8101                                                         NOTE: This is required for DRAM used in a
8102                                                         clamshell configuration, since the address lines
8103                                                         carry Mode Register write data that is unique
8104                                                         per rank(or clam). In a clamshell configuration,
8105                                                         the N3K DFA_A[x] pin may be tied into Clam#0's A[x]
8106                                                         and also into Clam#1's 'mirrored' address bit A[y]
8107                                                         (eg: Clam0 sees A[5] and Clam1 sees A[15]).
8108                                                         To support clamshell designs, SW must initiate
8109                                                         separate HW init sequences each unique rank address
8110                                                         mapping. Before each HW init sequence is triggered,
8111                                                         SW must preload the DFA_DDR2_MRS/EMRS registers with
8112                                                         the data that will be driven onto the A[14:0] wires
8113                                                         during the EMRS/MRS mode register write(s).
8114                                                         NOTE: After the final HW initialization sequence has
8115                                                         been triggered, SW must wait 64K eclks before writing
8116                                                         the RNK_MSK[3:0] field = 3'b1111 (so that CS_N[3:0]
8117                                                         is driven during refresh sequences in normal operation.
8118                                                         NOTE: This should only be written to a different value
8119                                                         during power-on SW initialization. */
8120        uint64_t silo_qc                 : 1;       /**< Enables Quarter Cycle move of the Rd sampling window */
8121        uint64_t silo_hc                 : 1;       /**< A combination of SILO_HC, SILO_QC and TSKW
8122                                                         specifies the positioning of the sampling strobe
8123                                                         when receiving read data back from DDR2. This is
8124                                                         done to offset any board trace induced delay on
8125                                                         the DQ and DQS which inherently makes these
8126                                                         asynchronous with respect to the internal clk of
8127                                                         controller. TSKW moves this sampling window by
8128                                                         integer cycles. SILO_QC and HC move this quarter
8129                                                         and half a cycle respectively. */
8130        uint64_t sil_lat                 : 2;       /**< Silo Latency (\#fclks): On reads, determines how many
8131                                                         additional fclks to wait (on top of CASLAT+1) before
8132                                                         pulling data out of the padring silos used for time
8133                                                         domain boundary crossing.
8134                                                         NOTE: This should only be written to a different value
8135                                                         during power-on SW initialization. */
8136        uint64_t bprch                   : 1;       /**< Tristate Enable (back porch) (\#fclks)
8137                                                         On reads, allows user to control the shape of the
8138                                                         tristate disable back porch for the DQ data bus.
8139                                                         This parameter is also very dependent on the
8140                                                         RW_DLY and WR_DLY parameters and care must be
8141                                                         taken when programming these parameters to avoid
8142                                                         data bus contention. Valid range [0..2]
8143                                                         NOTE: This should only be written to a different value
8144                                                         during power-on SW initialization. */
8145        uint64_t fprch                   : 1;       /**< Tristate Enable (front porch) (\#fclks)
8146                                                         On reads, allows user to control the shape of the
8147                                                         tristate disable front porch for the DQ data bus.
8148                                                         This parameter is also very dependent on the
8149                                                         RW_DLY and WR_DLY parameters and care must be
8150                                                         taken when programming these parameters to avoid
8151                                                         data bus contention. Valid range [0..2]
8152                                                         NOTE: This should only be written to a different value
8153                                                         during power-on SW initialization. */
8154        uint64_t init                    : 1;       /**< When a '1' is written (and the previous value was '0'),
8155                                                         the HW init sequence(s) for the LLM Memory Port is
8156                                                         initiated.
8157                                                         NOTE: To initialize memory, SW must:
8158                                                           1) Enable memory port
8159                                                               a) PRTENA=1
8160                                                           2) Wait 200us (to ensure a stable clock
8161                                                              to the DDR2) - as per DDR2 spec.
8162                                                           3) Write a '1' to the INIT which
8163                                                              will initiate a hardware initialization
8164                                                              sequence.
8165                                                         NOTE: After writing a '1', SW must wait 64K eclk
8166                                                         cycles to ensure the HW init sequence has completed
8167                                                         before writing to ANY of the DFA_DDR2* registers.
8168                                                         NOTE: This should only be written to a different value
8169                                                         during power-on SW initialization. */
8170        uint64_t prtena                  : 1;       /**< Enable DFA Memory
8171                                                         When enabled, this bit lets N3K be the default
8172                                                         driver for DFA-LLM memory port. */
8173#else
8174        uint64_t prtena                  : 1;
8175        uint64_t init                    : 1;
8176        uint64_t fprch                   : 1;
8177        uint64_t bprch                   : 1;
8178        uint64_t sil_lat                 : 2;
8179        uint64_t silo_hc                 : 1;
8180        uint64_t silo_qc                 : 1;
8181        uint64_t rnk_msk                 : 4;
8182        uint64_t tskw                    : 2;
8183        uint64_t reserved_14_15          : 2;
8184        uint64_t ref_int                 : 13;
8185        uint64_t reserved_29_31          : 3;
8186        uint64_t fpip                    : 3;
8187        uint64_t mrs_pgm                 : 1;
8188        uint64_t trfc                    : 5;
8189        uint64_t reserved_41_63          : 23;
8190#endif
8191    } s;
8192    struct cvmx_dfa_ddr2_cfg_s           cn31xx;
8193} cvmx_dfa_ddr2_cfg_t;
8194
8195
8196/**
8197 * cvmx_dfa_ddr2_comp
8198 *
8199 * DFA_DDR2_COMP = DFA DDR2 I/O PVT Compensation Configuration
8200 *
8201 *
8202 * Description: The following are registers to program the DDR2 PLL and DLL
8203 */
8204typedef union
8205{
8206    uint64_t u64;
8207    struct cvmx_dfa_ddr2_comp_s
8208    {
8209#if __BYTE_ORDER == __BIG_ENDIAN
8210        uint64_t dfa__pctl               : 4;       /**< DFA DDR pctl from compensation circuit
8211                                                         Internal DBG only */
8212        uint64_t dfa__nctl               : 4;       /**< DFA DDR nctl from compensation circuit
8213                                                         Internal DBG only */
8214        uint64_t reserved_9_55           : 47;
8215        uint64_t pctl_csr                : 4;       /**< Compensation control bits */
8216        uint64_t nctl_csr                : 4;       /**< Compensation control bits */
8217        uint64_t comp_bypass             : 1;       /**< Compensation Bypass */
8218#else
8219        uint64_t comp_bypass             : 1;
8220        uint64_t nctl_csr                : 4;
8221        uint64_t pctl_csr                : 4;
8222        uint64_t reserved_9_55           : 47;
8223        uint64_t dfa__nctl               : 4;
8224        uint64_t dfa__pctl               : 4;
8225#endif
8226    } s;
8227    struct cvmx_dfa_ddr2_comp_s          cn31xx;
8228} cvmx_dfa_ddr2_comp_t;
8229
8230
8231/**
8232 * cvmx_dfa_ddr2_emrs
8233 *
8234 * DFA_DDR2_EMRS = DDR2 EMRS Register(s) EMRS1[14:0], EMRS1_OCD[14:0]
8235 * Description: This register contains the data driven onto the Address[14:0] lines during  DDR INIT
8236 * To support Clamshelling (where N3K DFA_A[] pins are not 1:1 mapped to each clam(or rank), a HW init
8237 * sequence is allowed on a "per-rank" basis. Care must be taken in the values programmed into these
8238 * registers during the HW initialization sequence (see N3K specific restrictions in notes below).
8239 * DFA_DDR2_CFG[MRS_PGM] must be 1 to support this feature.
8240 *
8241 * Notes:
8242 * For DDR-II please consult your device's data sheet for further details:
8243 *
8244 */
8245typedef union
8246{
8247    uint64_t u64;
8248    struct cvmx_dfa_ddr2_emrs_s
8249    {
8250#if __BYTE_ORDER == __BIG_ENDIAN
8251        uint64_t reserved_31_63          : 33;
8252        uint64_t emrs1_ocd               : 15;      /**< Memory Address[14:0] during "EMRS1 (OCD Calibration)"
8253                                                         step \#12a "EMRS OCD Default Command" A[9:7]=111
8254                                                         of DDR2 HW initialization sequence.
8255                                                         (See JEDEC DDR2 specification (JESD79-2):
8256                                                         Power Up and initialization sequence).
8257                                                            A[14:13] = 0, RESERVED
8258                                                            A[12] = 0, Output Buffers Enabled
8259                                                            A[11] = 0, RDQS Disabled (we do not support RDQS)
8260                                                            A[10] = 0, DQSn Enabled
8261                                                            A[9:7] = 7, OCD Calibration Mode Default
8262                                                            A[6] = 0, ODT Disabled
8263                                                            A[5:3]=DFA_DDR2_TMG[ADDLAT]  Additive LATENCY (Default 0)
8264                                                            A[2]=0    Termination Res RTT (ODT off Default)
8265                                                            [A6,A2] = 0 -> ODT Disabled
8266                                                                      1 -> 75 ohm; 2 -> 150 ohm; 3 - Reserved
8267                                                            A[1]=0  Normal Output Driver Imp mode
8268                                                                    (1 - weak ie., 60% of normal drive strength)
8269                                                            A[0] = 0 DLL Enabled */
8270        uint64_t reserved_15_15          : 1;
8271        uint64_t emrs1                   : 15;      /**< Memory Address[14:0] during:
8272                                                           a) Step \#7 "EMRS1 to enable DLL (A[0]=0)"
8273                                                           b) Step \#12b "EMRS OCD Calibration Mode Exit"
8274                                                         steps of DDR2 HW initialization sequence.
8275                                                         (See JEDEC DDR2 specification (JESD79-2): Power Up and
8276                                                         initialization sequence).
8277                                                           A[14:13] = 0, RESERVED
8278                                                           A[12] = 0, Output Buffers Enabled
8279                                                           A[11] = 0, RDQS Disabled (we do not support RDQS)
8280                                                           A[10] = 0, DQSn Enabled
8281                                                           A[9:7] = 0, OCD Calibration Mode exit/maintain
8282                                                           A[6] = 0, ODT Disabled
8283                                                           A[5:3]=DFA_DDR2_TMG[ADDLAT]  Additive LATENCY (Default 0)
8284                                                           A[2]=0    Termination Res RTT (ODT off Default)
8285                                                           [A6,A2] = 0 -> ODT Disabled
8286                                                                     1 -> 75 ohm; 2 -> 150 ohm; 3 - Reserved
8287                                                           A[1]=0  Normal Output Driver Imp mode
8288                                                                   (1 - weak ie., 60% of normal drive strength)
8289                                                           A[0] = 0 DLL Enabled */
8290#else
8291        uint64_t emrs1                   : 15;
8292        uint64_t reserved_15_15          : 1;
8293        uint64_t emrs1_ocd               : 15;
8294        uint64_t reserved_31_63          : 33;
8295#endif
8296    } s;
8297    struct cvmx_dfa_ddr2_emrs_s          cn31xx;
8298} cvmx_dfa_ddr2_emrs_t;
8299
8300
8301/**
8302 * cvmx_dfa_ddr2_fcnt
8303 *
8304 * DFA_DDR2_FCNT = DFA FCLK Counter
8305 *
8306 *
8307 * Description: This FCLK cycle counter gets going after memory has been initialized
8308 */
8309typedef union
8310{
8311    uint64_t u64;
8312    struct cvmx_dfa_ddr2_fcnt_s
8313    {
8314#if __BYTE_ORDER == __BIG_ENDIAN
8315        uint64_t reserved_47_63          : 17;
8316        uint64_t fcyc_cnt                : 47;      /**< Counter counts FCLK cycles or \# cycles that the memory
8317                                                         controller has requests queued up depending on FCNT_MODE
8318                                                         If FCNT_MODE = 0, this counter counts the \# FCLK cycles
8319                                                         If FCNT_MODE = 1, this counter counts the \# cycles the
8320                                                         controller is active with memory requests. */
8321#else
8322        uint64_t fcyc_cnt                : 47;
8323        uint64_t reserved_47_63          : 17;
8324#endif
8325    } s;
8326    struct cvmx_dfa_ddr2_fcnt_s          cn31xx;
8327} cvmx_dfa_ddr2_fcnt_t;
8328
8329
8330/**
8331 * cvmx_dfa_ddr2_mrs
8332 *
8333 * DFA_DDR2_MRS = DDR2 MRS Register(s) MRS_DLL[14:0], MRS[14:0]
8334 * Description: This register contains the data driven onto the Address[14:0] lines during DDR INIT
8335 * To support Clamshelling (where N3K DFA_A[] pins are not 1:1 mapped to each clam(or rank), a HW init
8336 * sequence is allowed on a "per-rank" basis. Care must be taken in the values programmed into these
8337 * registers during the HW initialization sequence (see N3K specific restrictions in notes below).
8338 * DFA_DDR2_CFG[MRS_PGM] must be 1 to support this feature.
8339 *
8340 * Notes:
8341 * For DDR-II please consult your device's data sheet for further details:
8342 *
8343 */
8344typedef union
8345{
8346    uint64_t u64;
8347    struct cvmx_dfa_ddr2_mrs_s
8348    {
8349#if __BYTE_ORDER == __BIG_ENDIAN
8350        uint64_t reserved_31_63          : 33;
8351        uint64_t mrs                     : 15;      /**< Memory Address[14:0] during "MRS without resetting
8352                                                         DLL A[8]=0" step of HW initialization sequence.
8353                                                         (See JEDEC DDR2 specification (JESD79-2): Power Up
8354                                                         and initialization sequence - Step \#11).
8355                                                           A[14:13] = 0, RESERVED
8356                                                           A[12] = 0, Fast Active Power Down Mode
8357                                                           A[11:9] = DFA_DDR2_TMG[TWR]
8358                                                           A[8] = 0, for DLL Reset
8359                                                           A[7] =0  Test Mode (must be 0 for normal operation)
8360                                                           A[6:4]=DFA_DDR2_TMG[CASLAT] CAS LATENCY (default 4)
8361                                                           A[3]=0    Burst Type(must be 0:Sequential)
8362                                                           A[2:0]=2  Burst Length=4(default) */
8363        uint64_t reserved_15_15          : 1;
8364        uint64_t mrs_dll                 : 15;      /**< Memory Address[14:0] during "MRS for DLL_RESET A[8]=1"
8365                                                         step of HW initialization sequence.
8366                                                         (See JEDEC DDR2 specification (JESD79-2): Power Up
8367                                                         and initialization sequence - Step \#8).
8368                                                           A[14:13] = 0, RESERVED
8369                                                           A[12] = 0, Fast Active Power Down Mode
8370                                                           A[11:9] = DFA_DDR2_TMG[TWR]
8371                                                           A[8] = 1, for DLL Reset
8372                                                           A[7] = 0  Test Mode (must be 0 for normal operation)
8373                                                           A[6:4]=DFA_DDR2_TMG[CASLAT]    CAS LATENCY (default 4)
8374                                                           A[3] = 0    Burst Type(must be 0:Sequential)
8375                                                           A[2:0] = 2  Burst Length=4(default) */
8376#else
8377        uint64_t mrs_dll                 : 15;
8378        uint64_t reserved_15_15          : 1;
8379        uint64_t mrs                     : 15;
8380        uint64_t reserved_31_63          : 33;
8381#endif
8382    } s;
8383    struct cvmx_dfa_ddr2_mrs_s           cn31xx;
8384} cvmx_dfa_ddr2_mrs_t;
8385
8386
8387/**
8388 * cvmx_dfa_ddr2_opt
8389 *
8390 * DFA_DDR2_OPT = DFA DDR2 Optimization Registers
8391 *
8392 *
8393 * Description: The following are registers to tweak certain parameters to boost performance
8394 */
8395typedef union
8396{
8397    uint64_t u64;
8398    struct cvmx_dfa_ddr2_opt_s
8399    {
8400#if __BYTE_ORDER == __BIG_ENDIAN
8401        uint64_t reserved_10_63          : 54;
8402        uint64_t max_read_batch          : 5;       /**< Maximum number of consecutive read to service before
8403                                                         allowing write to interrupt. */
8404        uint64_t max_write_batch         : 5;       /**< Maximum number of consecutive writes to service before
8405                                                         allowing reads to interrupt. */
8406#else
8407        uint64_t max_write_batch         : 5;
8408        uint64_t max_read_batch          : 5;
8409        uint64_t reserved_10_63          : 54;
8410#endif
8411    } s;
8412    struct cvmx_dfa_ddr2_opt_s           cn31xx;
8413} cvmx_dfa_ddr2_opt_t;
8414
8415
8416/**
8417 * cvmx_dfa_ddr2_pll
8418 *
8419 * DFA_DDR2_PLL = DFA DDR2 PLL and DLL Configuration
8420 *
8421 *
8422 * Description: The following are registers to program the DDR2 PLL and DLL
8423 */
8424typedef union
8425{
8426    uint64_t u64;
8427    struct cvmx_dfa_ddr2_pll_s
8428    {
8429#if __BYTE_ORDER == __BIG_ENDIAN
8430        uint64_t pll_setting             : 17;      /**< Internal Debug Use Only */
8431        uint64_t reserved_32_46          : 15;
8432        uint64_t setting90               : 5;       /**< Contains the setting of DDR DLL; Internal DBG only */
8433        uint64_t reserved_21_26          : 6;
8434        uint64_t dll_setting             : 5;       /**< Contains the open loop setting value for the DDR90 delay
8435                                                         line. */
8436        uint64_t dll_byp                 : 1;       /**< DLL Bypass. When set, the DDR90 DLL is bypassed and
8437                                                         the DLL behaves in Open Loop giving a fixed delay
8438                                                         set by DLL_SETTING */
8439        uint64_t qdll_ena                : 1;       /**< DDR Quad DLL Enable: A 0->1 transition on this bit after
8440                                                         erst deassertion will reset the DDR 90 DLL. Allow
8441                                                         200 micro seconds for Lock before DDR Init. */
8442        uint64_t bw_ctl                  : 4;       /**< Internal Use Only - for Debug */
8443        uint64_t bw_upd                  : 1;       /**< Internal Use Only - for Debug */
8444        uint64_t pll_div2                : 1;       /**< PLL Output is further divided by 2. Useful for slow
8445                                                         fclk frequencies where the PLL may be out of range. */
8446        uint64_t reserved_7_7            : 1;
8447        uint64_t pll_ratio               : 5;       /**< Bits <6:2> sets the clk multiplication ratio
8448                                                         If the fclk frequency desired is less than 260MHz
8449                                                         (lower end saturation point of the pll), write 2x
8450                                                         the ratio desired in this register and set PLL_DIV2 */
8451        uint64_t pll_bypass              : 1;       /**< PLL Bypass. Uses the ref_clk without multiplication. */
8452        uint64_t pll_init                : 1;       /**< Need a 0 to 1 pulse on this CSR to get the DFA
8453                                                         Clk Generator Started. Write this register before
8454                                                         starting anything. Allow 200 uS for PLL Lock before
8455                                                         doing anything. */
8456#else
8457        uint64_t pll_init                : 1;
8458        uint64_t pll_bypass              : 1;
8459        uint64_t pll_ratio               : 5;
8460        uint64_t reserved_7_7            : 1;
8461        uint64_t pll_div2                : 1;
8462        uint64_t bw_upd                  : 1;
8463        uint64_t bw_ctl                  : 4;
8464        uint64_t qdll_ena                : 1;
8465        uint64_t dll_byp                 : 1;
8466        uint64_t dll_setting             : 5;
8467        uint64_t reserved_21_26          : 6;
8468        uint64_t setting90               : 5;
8469        uint64_t reserved_32_46          : 15;
8470        uint64_t pll_setting             : 17;
8471#endif
8472    } s;
8473    struct cvmx_dfa_ddr2_pll_s           cn31xx;
8474} cvmx_dfa_ddr2_pll_t;
8475
8476
8477/**
8478 * cvmx_dfa_ddr2_tmg
8479 *
8480 * DFA_DDR2_TMG = DFA DDR2 Memory Timing Config Register
8481 *
8482 *
8483 * Description: The following are registers to program the DDR2 memory timing parameters.
8484 */
8485typedef union
8486{
8487    uint64_t u64;
8488    struct cvmx_dfa_ddr2_tmg_s
8489    {
8490#if __BYTE_ORDER == __BIG_ENDIAN
8491        uint64_t reserved_47_63          : 17;
8492        uint64_t fcnt_mode               : 1;       /**< If FCNT_MODE = 0, this counter counts the \# FCLK cycles
8493                                                         If FCNT_MODE = 1, this counter counts the \# cycles the
8494                                                         controller is active with memory requests. */
8495        uint64_t cnt_clr                 : 1;       /**< Clears the FCLK Cyc & Bus Util counter */
8496        uint64_t cavmipo                 : 1;       /**< RESERVED */
8497        uint64_t ctr_rst                 : 1;       /**< Reset oneshot pulse for refresh counter & Perf counters
8498                                                         SW should first write this field to a one to clear
8499                                                         & then write to a zero for normal operation */
8500        uint64_t odt_rtt                 : 2;       /**< DDR2 Termination Resistor Setting
8501                                                         These two bits are loaded into the RTT
8502                                                         portion of the EMRS register bits A6 & A2. If DDR2's
8503                                                         termination (for the memory's DQ/DQS/DM pads) is not
8504                                                         desired, set it to 00. If it is, chose between
8505                                                         01 for 75 ohm and 10 for 150 ohm termination.
8506                                                              00 = ODT Disabled
8507                                                              01 = 75 ohm Termination
8508                                                              10 = 150 ohm Termination
8509                                                              11 = 50 ohm Termination */
8510        uint64_t dqsn_ena                : 1;       /**< For DDR-II Mode, DIC[1] is used to load into EMRS
8511                                                         bit 10 - DQSN Enable/Disable field. By default, we
8512                                                         program the DDR's to drive the DQSN also. Set it to
8513                                                         1 if DQSN should be Hi-Z.
8514                                                              0 - DQSN Enable
8515                                                              1 - DQSN Disable */
8516        uint64_t dic                     : 1;       /**< Drive Strength Control:
8517                                                         For DDR-I/II Mode, DIC[0] is
8518                                                         loaded into the Extended Mode Register (EMRS) A1 bit
8519                                                         during initialization. (see DDR-I data sheet EMRS
8520                                                         description)
8521                                                              0 = Normal
8522                                                              1 = Reduced */
8523        uint64_t r2r_slot                : 1;       /**< A 1 on this register will force the controller to
8524                                                         slot a bubble between every reads */
8525        uint64_t tfaw                    : 5;       /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1
8526                                                         Four Access Window time. Relevant only in
8527                                                         8-bank parts.
8528                                                              TFAW = 5'b0 for DDR2-4bank
8529                                                              TFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1 in DDR2-8bank */
8530        uint64_t twtr                    : 4;       /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)]
8531                                                         Last Wr Data to Rd Command time.
8532                                                         (Represented in fclk cycles)
8533                                                         TYP=15ns
8534                                                              - 0000: RESERVED
8535                                                              - 0001: 1
8536                                                              - ...
8537                                                              - 0111: 7
8538                                                              - 1000-1111: RESERVED */
8539        uint64_t twr                     : 3;       /**< DDR Write Recovery time (tWR). Last Wr Brst to Prech
8540                                                         This is not a direct encoding of the value. Its
8541                                                         programmed as below per DDR2 spec. The decimal number
8542                                                         on the right is RNDUP(tWR(ns) / clkFreq)
8543                                                         TYP=15ns
8544                                                              - 000: RESERVED
8545                                                              - 001: 2
8546                                                              - 010: 3
8547                                                              - 011: 4
8548                                                              - 100: 5
8549                                                              - 101: 6
8550                                                              - 110-111: RESERVED */
8551        uint64_t trp                     : 4;       /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)]
8552                                                         (Represented in fclk cycles)
8553                                                         TYP=15ns
8554                                                              - 0000: RESERVED
8555                                                              - 0001: 1
8556                                                              - ...
8557                                                              - 0111: 7
8558                                                              - 1000-1111: RESERVED
8559                                                         When using parts with 8 banks (DFA_CFG->MAX_BNK
8560                                                         is 1), load tRP cycles + 1 into this register. */
8561        uint64_t tras                    : 5;       /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)]
8562                                                         (Represented in fclk cycles)
8563                                                         TYP=45ns
8564                                                              - 00000-0001: RESERVED
8565                                                              - 00010: 2
8566                                                              - ...
8567                                                              - 10100: 20
8568                                                              - 10101-11111: RESERVED */
8569        uint64_t trrd                    : 3;       /**< tRRD cycles: ACT-ACT timing parameter for different
8570                                                         banks. (Represented in fclk cycles)
8571                                                         For DDR2, TYP=7.5ns
8572                                                             - 000: RESERVED
8573                                                             - 001: 1 tCYC
8574                                                             - 010: 2 tCYC
8575                                                             - 011: 3 tCYC
8576                                                             - 100: 4 tCYC
8577                                                             - 101: 5 tCYC
8578                                                             - 110-111: RESERVED */
8579        uint64_t trcd                    : 4;       /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)]
8580                                                         (Represented in fclk cycles)
8581                                                         TYP=15ns
8582                                                              - 0000: RESERVED
8583                                                              - 0001: 2 (2 is the smallest value allowed)
8584                                                              - 0002: 2
8585                                                              - ...
8586                                                              - 0111: 7
8587                                                              - 1110-1111: RESERVED */
8588        uint64_t addlat                  : 3;       /**< When in Posted CAS mode ADDLAT needs to be programmed
8589                                                         to tRCD-1
8590                                                               ADDLAT         \#additional latency cycles
8591                                                                000              0
8592                                                                001              1 (tRCD = 2 fclk's)
8593                                                                010              2 (tRCD = 3 fclk's)
8594                                                                011              3 (tRCD = 4 fclk's)
8595                                                                100              4 (tRCD = 5 fclk's)
8596                                                                101              5 (tRCD = 6 fclk's)
8597                                                                110              6 (tRCD = 7 fclk's)
8598                                                                111              7 (tRCD = 8 fclk's) */
8599        uint64_t pocas                   : 1;       /**< Posted CAS mode. When 1, we use DDR2's Posted CAS
8600                                                         feature. When using this mode, ADDLAT needs to be
8601                                                         programmed as well */
8602        uint64_t caslat                  : 3;       /**< CAS Latency in \# fclk Cycles
8603                                                         CASLAT           \#  CAS latency cycles
8604                                                          000 - 010           RESERVED
8605                                                          011                    3
8606                                                          100                    4
8607                                                          101                    5
8608                                                          110                    6
8609                                                          111                    7 */
8610        uint64_t tmrd                    : 2;       /**< tMRD Cycles
8611                                                         (Represented in fclk tCYC)
8612                                                         For DDR2, its TYP 2*tCYC)
8613                                                             - 000: RESERVED
8614                                                             - 001: 1
8615                                                             - 010: 2
8616                                                             - 011: 3 */
8617        uint64_t ddr2t                   : 1;       /**< When 2T mode is turned on, command signals are
8618                                                         setup a cycle ahead of when the CS is enabled
8619                                                         and kept for a total of 2 cycles. This mode is
8620                                                         enabled in higher speeds when there is difficulty
8621                                                         meeting setup. Performance could
8622                                                         be negatively affected in 2T mode */
8623#else
8624        uint64_t ddr2t                   : 1;
8625        uint64_t tmrd                    : 2;
8626        uint64_t caslat                  : 3;
8627        uint64_t pocas                   : 1;
8628        uint64_t addlat                  : 3;
8629        uint64_t trcd                    : 4;
8630        uint64_t trrd                    : 3;
8631        uint64_t tras                    : 5;
8632        uint64_t trp                     : 4;
8633        uint64_t twr                     : 3;
8634        uint64_t twtr                    : 4;
8635        uint64_t tfaw                    : 5;
8636        uint64_t r2r_slot                : 1;
8637        uint64_t dic                     : 1;
8638        uint64_t dqsn_ena                : 1;
8639        uint64_t odt_rtt                 : 2;
8640        uint64_t ctr_rst                 : 1;
8641        uint64_t cavmipo                 : 1;
8642        uint64_t cnt_clr                 : 1;
8643        uint64_t fcnt_mode               : 1;
8644        uint64_t reserved_47_63          : 17;
8645#endif
8646    } s;
8647    struct cvmx_dfa_ddr2_tmg_s           cn31xx;
8648} cvmx_dfa_ddr2_tmg_t;
8649
8650
8651/**
8652 * cvmx_dfa_difctl
8653 *
8654 * DFA_DIFCTL = DFA Instruction FIFO (DIF) Control Register
8655 *
8656 * Description:
8657 *  NOTE: To write to the DFA_DIFCTL register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b11.
8658 *        To read the DFA_DIFCTL register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b11.
8659 *
8660 *  NOTE: This register is intended to ONLY be written once (at power-up). Any future writes could
8661 *  cause the DFA and FPA HW to become unpredictable.
8662 *
8663 *  NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DIFCTL register do not take effect.
8664 *  NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DIFCTL register do not take effect.
8665 */
8666typedef union
8667{
8668    uint64_t u64;
8669    struct cvmx_dfa_difctl_s
8670    {
8671#if __BYTE_ORDER == __BIG_ENDIAN
8672        uint64_t reserved_20_63          : 44;
8673        uint64_t dwbcnt                  : 8;       /**< Represents the \# of cache lines in the instruction
8674                                                         buffer that may be dirty and should not be
8675                                                         written-back to memory when the instruction
8676                                                         chunk is returned to the Free Page list.
8677                                                         NOTE: Typically SW will want to mark all DFA
8678                                                         Instruction memory returned to the Free Page list
8679                                                         as DWB (Don't WriteBack), therefore SW should
8680                                                         seed this register as:
8681                                                           DFA_DIFCTL[DWBCNT] = (DFA_DIFCTL[SIZE] + 4)/4 */
8682        uint64_t pool                    : 3;       /**< Represents the 3bit buffer pool-id  used by DFA HW
8683                                                         when the DFA instruction chunk is recycled back
8684                                                         to the Free Page List maintained by the FPA HW
8685                                                         (once the DFA instruction has been issued). */
8686        uint64_t size                    : 9;       /**< Represents the \# of 32B instructions contained
8687                                                         within each DFA instruction chunk. At Power-on,
8688                                                         SW will seed the SIZE register with a fixed
8689                                                         chunk-size. (Must be at least 3)
8690                                                         DFA HW uses this field to determine the size
8691                                                         of each DFA instruction chunk, in order to:
8692                                                            a) determine when to read the next DFA
8693                                                               instruction chunk pointer which is
8694                                                               written by SW at the end of the current
8695                                                               DFA instruction chunk (see DFA description
8696                                                               of next chunk buffer Ptr for format).
8697                                                            b) determine when a DFA instruction chunk
8698                                                               can be returned to the Free Page List
8699                                                               maintained by the FPA HW. */
8700#else
8701        uint64_t size                    : 9;
8702        uint64_t pool                    : 3;
8703        uint64_t dwbcnt                  : 8;
8704        uint64_t reserved_20_63          : 44;
8705#endif
8706    } s;
8707    struct cvmx_dfa_difctl_s             cn31xx;
8708    struct cvmx_dfa_difctl_s             cn38xx;
8709    struct cvmx_dfa_difctl_s             cn38xxp2;
8710    struct cvmx_dfa_difctl_s             cn58xx;
8711    struct cvmx_dfa_difctl_s             cn58xxp1;
8712} cvmx_dfa_difctl_t;
8713
8714
8715/**
8716 * cvmx_dfa_difrdptr
8717 *
8718 * DFA_DIFRDPTR = DFA Instruction FIFO (DIF) RDPTR Register
8719 *
8720 * Description:
8721 *  NOTE: To write to the DFA_DIFRDPTR register, a device would issue an IOBST directed at the DFA with addr[34:33]=2'b01.
8722 *        To read the DFA_DIFRDPTR register, a device would issue an IOBLD64 directed at the DFA with addr[34:33]=2'b01.
8723 *
8724 *  NOTE: If DFA_CFG[DTECLKDIS]=1 (DFA-DTE clocks disabled), reads/writes to the DFA_DIFRDPTR register do not take effect.
8725 *  NOTE: If FUSE[120]="DFA DTE disable" is blown, reads/writes to the DFA_DIFRDPTR register do not take effect.
8726 */
8727typedef union
8728{
8729    uint64_t u64;
8730    struct cvmx_dfa_difrdptr_s
8731    {
8732#if __BYTE_ORDER == __BIG_ENDIAN
8733        uint64_t reserved_36_63          : 28;
8734        uint64_t rdptr                   : 31;      /**< Represents the 32B-aligned address of the current
8735                                                         instruction in the DFA Instruction FIFO in main
8736                                                         memory. The RDPTR must be seeded by software at
8737                                                         boot time, and is then maintained thereafter
8738                                                         by DFA HW.
8739                                                         During the seed write (by SW), RDPTR[6:5]=0,
8740                                                         since DFA instruction chunks must be 128B aligned.
8741                                                         During a read (by SW), the 'most recent' contents
8742                                                         of the RDPTR register are returned at the time
8743                                                         the NCB-INB bus is driven.
8744                                                         NOTE: Since DFA HW updates this register, its
8745                                                         contents are unpredictable in SW (unless
8746                                                         its guaranteed that no new DoorBell register
8747                                                         writes have occurred and the DoorBell register is
8748                                                         read as zero). */
8749        uint64_t reserved_0_4            : 5;
8750#else
8751        uint64_t reserved_0_4            : 5;
8752        uint64_t rdptr                   : 31;
8753        uint64_t reserved_36_63          : 28;
8754#endif
8755    } s;
8756    struct cvmx_dfa_difrdptr_s           cn31xx;
8757    struct cvmx_dfa_difrdptr_s           cn38xx;
8758    struct cvmx_dfa_difrdptr_s           cn38xxp2;
8759    struct cvmx_dfa_difrdptr_s           cn58xx;
8760    struct cvmx_dfa_difrdptr_s           cn58xxp1;
8761} cvmx_dfa_difrdptr_t;
8762
8763
8764/**
8765 * cvmx_dfa_eclkcfg
8766 *
8767 * Specify the RSL base addresses for the block
8768 *
8769 *                  DFA_ECLKCFG = DFA eclk-domain Configuration Registers
8770 *
8771 * Description:
8772 */
8773typedef union
8774{
8775    uint64_t u64;
8776    struct cvmx_dfa_eclkcfg_s
8777    {
8778#if __BYTE_ORDER == __BIG_ENDIAN
8779        uint64_t reserved_19_63          : 45;
8780        uint64_t sbdnum                  : 3;       /**< SBD Debug Entry#
8781                                                         For internal use only. (DFA Scoreboard debug)
8782                                                         Selects which one of 8 DFA Scoreboard entries is
8783                                                         latched into the DFA_SBD_DBG[0-3] registers. */
8784        uint64_t reserved_15_15          : 1;
8785        uint64_t sbdlck                  : 1;       /**< DFA Scoreboard LOCK Strobe
8786                                                         For internal use only. (DFA Scoreboard debug)
8787                                                         When written with a '1', the DFA Scoreboard Debug
8788                                                         registers (DFA_SBD_DBG[0-3]) are all locked down.
8789                                                         This allows SW to lock down the contents of the entire
8790                                                         SBD for a single instant in time. All subsequent reads
8791                                                         of the DFA scoreboard registers will return the data
8792                                                         from that instant in time. */
8793        uint64_t dcmode                  : 1;       /**< DRF-CRQ/DTE Arbiter Mode
8794                                                         DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR)
8795                                                         NOTE: This should only be written to a different value
8796                                                         during power-on SW initialization. */
8797        uint64_t dtmode                  : 1;       /**< DRF-DTE Arbiter Mode
8798                                                         DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR)
8799                                                         NOTE: This should only be written to a different value
8800                                                         during power-on SW initialization. */
8801        uint64_t pmode                   : 1;       /**< NCB-NRP Arbiter Mode
8802                                                         (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR
8803                                                         NOTE: This should only be written to a different value
8804                                                         during power-on SW initialization. */
8805        uint64_t qmode                   : 1;       /**< NCB-NRQ Arbiter Mode
8806                                                         (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR
8807                                                         NOTE: This should only be written to a different value
8808                                                         during power-on SW initialization. */
8809        uint64_t imode                   : 1;       /**< NCB-Inbound Arbiter
8810                                                         (0=FP [LP=NRQ,HP=NRP], 1=RR)
8811                                                         NOTE: This should only be written to a different value
8812                                                         during power-on SW initialization. */
8813        uint64_t sarb                    : 1;       /**< DFA Source Arbiter Mode
8814                                                         Selects the arbitration mode used to select DFA requests
8815                                                         issued from either CP2 or the DTE (NCB-CSR or DFA HW engine).
8816                                                          - 0: Fixed Priority [Highest=CP2, Lowest=DTE]
8817                                                          - 1: Round-Robin
8818                                                         NOTE: This should only be written to a different value
8819                                                         during power-on SW initialization. */
8820        uint64_t reserved_3_7            : 5;
8821        uint64_t dteclkdis               : 1;       /**< DFA DTE Clock Disable
8822                                                         When SET, the DFA clocks for DTE(thread engine)
8823                                                         operation are disabled.
8824                                                         NOTE: When SET, SW MUST NEVER issue ANY operations to
8825                                                         the DFA via the NCB Bus. All DFA Operations must be
8826                                                         issued solely through the CP2 interface. */
8827        uint64_t maxbnk                  : 1;       /**< Maximum Banks per-device (used by the address mapper
8828                                                         when extracting address bits for the memory bank#.
8829                                                                 - 0: 4 banks/device
8830                                                                 - 1: 8 banks/device */
8831        uint64_t dfa_frstn               : 1;       /**< Hold this 0 until the DFA DDR PLL and DLL lock
8832                                                         and then write a 1. A 1 on this register deasserts
8833                                                         the internal frst_n. Refer to DFA_DDR2_PLL registers for more
8834                                                         startup information.
8835                                                         Startup sequence if DFA interface needs to be ON:
8836                                                          After valid power up,
8837                                                          Write DFA_DDR2_PLL-> PLL_RATIO & PLL_DIV2 & PLL_BYPASS
8838                                                          to the appropriate values
8839                                                          Wait a few cycles
8840                                                          Write a 1 DFA_DDR2_PLL -> PLL_INIT
8841                                                          Wait 100 microseconds
8842                                                          Write a 1 to DFA_DDR2_PLL -> QDLL_ENA
8843                                                          Wait 10 microseconds
8844                                                          Write a 1 to this register DFA_FRSTN to pull DFA out of
8845                                                          reset
8846                                                          Now the DFA block is ready to be initialized (follow the
8847                                                          DDR init sequence). */
8848#else
8849        uint64_t dfa_frstn               : 1;
8850        uint64_t maxbnk                  : 1;
8851        uint64_t dteclkdis               : 1;
8852        uint64_t reserved_3_7            : 5;
8853        uint64_t sarb                    : 1;
8854        uint64_t imode                   : 1;
8855        uint64_t qmode                   : 1;
8856        uint64_t pmode                   : 1;
8857        uint64_t dtmode                  : 1;
8858        uint64_t dcmode                  : 1;
8859        uint64_t sbdlck                  : 1;
8860        uint64_t reserved_15_15          : 1;
8861        uint64_t sbdnum                  : 3;
8862        uint64_t reserved_19_63          : 45;
8863#endif
8864    } s;
8865    struct cvmx_dfa_eclkcfg_s            cn31xx;
8866} cvmx_dfa_eclkcfg_t;
8867
8868
8869/**
8870 * cvmx_dfa_err
8871 *
8872 * DFA_ERR = DFA ERROR Register
8873 *
8874 * Description:
8875 */
8876typedef union
8877{
8878    uint64_t u64;
8879    struct cvmx_dfa_err_s
8880    {
8881#if __BYTE_ORDER == __BIG_ENDIAN
8882        uint64_t reserved_33_63          : 31;
8883        uint64_t dblina                  : 1;       /**< Doorbell Overflow Interrupt Enable bit.
8884                                                         When set, doorbell overflow conditions are reported. */
8885        uint64_t dblovf                  : 1;       /**< Doorbell Overflow detected - Status bit
8886                                                         When set, the 20b accumulated doorbell register
8887                                                         had overflowed (SW wrote too many doorbell requests).
8888                                                         If the DBLINA had previously been enabled(set),
8889                                                         an interrupt will be posted. Software can clear
8890                                                         the interrupt by writing a 1 to this register bit.
8891                                                         NOTE: Detection of a Doorbell Register overflow
8892                                                         is a catastrophic error which may leave the DFA
8893                                                         HW in an unrecoverable state. */
8894        uint64_t cp2pina                 : 1;       /**< CP2 LW Mode Parity Error Interrupt Enable bit.
8895                                                         When set, all PP-generated LW Mode read
8896                                                         transactions which encounter a parity error (across
8897                                                         the 36b of data) are reported. */
8898        uint64_t cp2perr                 : 1;       /**< PP-CP2 Parity Error Detected - Status bit
8899                                                         When set, a parity error had been detected for a
8900                                                         PP-generated LW Mode read transaction.
8901                                                         If the CP2PINA had previously been enabled(set),
8902                                                         an interrupt will be posted. Software can clear
8903                                                         the interrupt by writing a 1 to this register bit.
8904                                                         See also: DFA_MEMFADR CSR which contains more data
8905                                                         about the memory address/control to help isolate
8906                                                         the failure. */
8907        uint64_t cp2parena               : 1;       /**< CP2 LW Mode Parity Error Enable
8908                                                         When set, all PP-generated LW Mode read
8909                                                         transactions which encounter a parity error (across
8910                                                         the 36b of data) are reported.
8911                                                         NOTE: This signal must only be written to a different
8912                                                         value when there are no PP-CP2 transactions
8913                                                         (preferrably during power-on software initialization). */
8914        uint64_t dtepina                 : 1;       /**< DTE Parity Error Interrupt Enable bit
8915                                                         (for 18b SIMPLE mode ONLY).
8916                                                         When set, all DTE-generated 18b SIMPLE Mode read
8917                                                         transactions which encounter a parity error (across
8918                                                         the 17b of data) are reported. */
8919        uint64_t dteperr                 : 1;       /**< DTE Parity Error Detected (for 18b SIMPLE mode ONLY)
8920                                                         When set, all DTE-generated 18b SIMPLE Mode read
8921                                                         transactions which encounter a parity error (across
8922                                                         the 17b of data) are reported. */
8923        uint64_t dteparena               : 1;       /**< DTE Parity Error Enable (for 18b SIMPLE mode ONLY)
8924                                                         When set, all DTE-generated 18b SIMPLE Mode read
8925                                                         transactions which encounter a parity error (across
8926                                                         the 17b of data) are reported.
8927                                                         NOTE: This signal must only be written to a different
8928                                                         value when there are no DFA thread engines active
8929                                                         (preferrably during power-on). */
8930        uint64_t dtesyn                  : 7;       /**< DTE 29b ECC Failing 6bit Syndrome
8931                                                         When DTESBE or DTEDBE are set, this field contains
8932                                                         the failing 7b ECC syndrome. */
8933        uint64_t dtedbina                : 1;       /**< DTE 29b Double Bit Error Interrupt Enable bit
8934                                                         When set, an interrupt is posted for any DTE-generated
8935                                                         36b SIMPLE Mode read which encounters a double bit
8936                                                         error. */
8937        uint64_t dtesbina                : 1;       /**< DTE 29b Single Bit Error Interrupt Enable bit
8938                                                         When set, an interrupt is posted for any DTE-generated
8939                                                         36b SIMPLE Mode read which encounters a single bit
8940                                                         error (which is also corrected). */
8941        uint64_t dtedbe                  : 1;       /**< DTE 29b Double Bit Error Detected - Status bit
8942                                                         When set, a double bit error had been detected
8943                                                         for a DTE-generated 36b SIMPLE Mode read transaction.
8944                                                         The DTESYN contains the failing syndrome.
8945                                                         If the DTEDBINA had previously been enabled(set),
8946                                                         an interrupt will be posted. Software can clear
8947                                                         the interrupt by writing a 1 to this register bit.
8948                                                         See also: DFA_MEMFADR CSR which contains more data
8949                                                         about the memory address/control to help isolate
8950                                                         the failure.
8951                                                         NOTE: DTE-generated 18b SIMPLE Mode Read transactions
8952                                                         do not participate in ECC check/correct). */
8953        uint64_t dtesbe                  : 1;       /**< DTE 29b Single Bit Error Corrected - Status bit
8954                                                         When set, a single bit error had been detected and
8955                                                         corrected for a DTE-generated 36b SIMPLE Mode read
8956                                                         transaction.
8957                                                         If the DTEDBE=0, then the DTESYN contains the
8958                                                         failing syndrome (used during correction).
8959                                                         NOTE: DTE-generated 18b SIMPLE Mode Read
8960                                                         transactions do not participate in ECC check/correct).
8961                                                         If the DTESBINA had previously been enabled(set),
8962                                                         an interrupt will be posted. Software can clear
8963                                                         the interrupt by writing a 1 to this register bit.
8964                                                         See also: DFA_MEMFADR CSR which contains more data
8965                                                         about the memory address/control to help isolate
8966                                                         the failure. */
8967        uint64_t dteeccena               : 1;       /**< DTE 29b ECC Enable (for 36b SIMPLE mode ONLY)
8968                                                         When set, 29b ECC is enabled on all DTE-generated
8969                                                         36b SIMPLE Mode read transactions.
8970                                                         NOTE: This signal must only be written to a different
8971                                                         value when there are no DFA thread engines active
8972                                                         (preferrably during power-on software initialization). */
8973        uint64_t cp2syn                  : 8;       /**< PP-CP2 QW ECC Failing 8bit Syndrome
8974                                                         When CP2SBE or CP2DBE are set, this field contains
8975                                                         the failing ECC 8b syndrome.
8976                                                         Refer to CP2ECCENA. */
8977        uint64_t cp2dbina                : 1;       /**< PP-CP2 Double Bit Error Interrupt Enable bit
8978                                                         When set, an interrupt is posted for any PP-generated
8979                                                         QW Mode read which encounters a double bit error.
8980                                                         Refer to CP2DBE. */
8981        uint64_t cp2sbina                : 1;       /**< PP-CP2 Single Bit Error Interrupt Enable bit
8982                                                         When set, an interrupt is posted for any PP-generated
8983                                                         QW Mode read which encounters a single bit error
8984                                                         (which is also corrected).
8985                                                         Refer to CP2SBE. */
8986        uint64_t cp2dbe                  : 1;       /**< PP-CP2 Double Bit Error Detected - Status bit
8987                                                         When set, a double bit error had been detected
8988                                                         for a PP-generated QW Mode read transaction.
8989                                                         The CP2SYN contains the failing syndrome.
8990                                                          NOTE: PP-generated LW Mode Read transactions
8991                                                         do not participate in ECC check/correct).
8992                                                         Refer to CP2ECCENA.
8993                                                         If the CP2DBINA had previously been enabled(set),
8994                                                         an interrupt will be posted. Software can clear
8995                                                         the interrupt by writing a 1 to this register bit.
8996                                                         See also: DFA_MEMFADR CSR which contains more data
8997                                                         about the memory address/control to help isolate
8998                                                         the failure. */
8999        uint64_t cp2sbe                  : 1;       /**< PP-CP2 Single Bit Error Corrected - Status bit
9000                                                         When set, a single bit error had been detected and
9001                                                         corrected for a PP-generated QW Mode read
9002                                                         transaction.
9003                                                         If the CP2DBE=0, then the CP2SYN contains the
9004                                                         failing syndrome (used during correction).
9005                                                         Refer to CP2ECCENA.
9006                                                         If the CP2SBINA had previously been enabled(set),
9007                                                         an interrupt will be posted. Software can clear
9008                                                         the interrupt by writing a 1 to this register bit.
9009                                                         See also: DFA_MEMFADR CSR which contains more data
9010                                                         about the memory address/control to help isolate
9011                                                         the failure.
9012                                                         NOTE: PP-generated LW Mode Read transactions
9013                                                         do not participate in ECC check/correct). */
9014        uint64_t cp2eccena               : 1;       /**< PP-CP2 QW ECC Enable (for QW Mode transactions)
9015                                                         When set, 8bit QW ECC is enabled on all PP-generated
9016                                                         QW Mode read transactions, CP2SBE and
9017                                                         CP2DBE may be set, and CP2SYN may be filled.
9018                                                         NOTE: This signal must only be written to a different
9019                                                         value when there are no PP-CP2 transactions
9020                                                         (preferrably during power-on software initialization).
9021                                                         NOTE: QW refers to a 64-bit LLM Load/Store (intiated
9022                                                         by a processor core). LW refers to a 36-bit load/store. */
9023#else
9024        uint64_t cp2eccena               : 1;
9025        uint64_t cp2sbe                  : 1;
9026        uint64_t cp2dbe                  : 1;
9027        uint64_t cp2sbina                : 1;
9028        uint64_t cp2dbina                : 1;
9029        uint64_t cp2syn                  : 8;
9030        uint64_t dteeccena               : 1;
9031        uint64_t dtesbe                  : 1;
9032        uint64_t dtedbe                  : 1;
9033        uint64_t dtesbina                : 1;
9034        uint64_t dtedbina                : 1;
9035        uint64_t dtesyn                  : 7;
9036        uint64_t dteparena               : 1;
9037        uint64_t dteperr                 : 1;
9038        uint64_t dtepina                 : 1;
9039        uint64_t cp2parena               : 1;
9040        uint64_t cp2perr                 : 1;
9041        uint64_t cp2pina                 : 1;
9042        uint64_t dblovf                  : 1;
9043        uint64_t dblina                  : 1;
9044        uint64_t reserved_33_63          : 31;
9045#endif
9046    } s;
9047    struct cvmx_dfa_err_s                cn31xx;
9048    struct cvmx_dfa_err_s                cn38xx;
9049    struct cvmx_dfa_err_s                cn38xxp2;
9050    struct cvmx_dfa_err_s                cn58xx;
9051    struct cvmx_dfa_err_s                cn58xxp1;
9052} cvmx_dfa_err_t;
9053
9054
9055/**
9056 * cvmx_dfa_memcfg0
9057 *
9058 * DFA_MEMCFG0 = DFA Memory Configuration
9059 *
9060 * Description:
9061 */
9062typedef union
9063{
9064    uint64_t u64;
9065    struct cvmx_dfa_memcfg0_s
9066    {
9067#if __BYTE_ORDER == __BIG_ENDIAN
9068        uint64_t reserved_32_63          : 32;
9069        uint64_t rldqck90_rst            : 1;       /**< RLDCK90 and RLDQK90 DLL SW Reset
9070                                                         When written with a '1' the RLDCK90 and RLDQK90 DLL are
9071                                                         in soft-reset. */
9072        uint64_t rldck_rst               : 1;       /**< RLDCK Zero Delay DLL(Clock Generator) SW Reset
9073                                                         When written with a '1' the RLDCK zero delay DLL is in
9074                                                         soft-reset. */
9075        uint64_t clkdiv                  : 2;       /**< RLDCLK Divisor Select
9076                                                           - 0: RLDx_CK_H/L = Core Clock /2
9077                                                           - 1: RESERVED (must not be used)
9078                                                           - 2: RLDx_CK_H/L = Core Clock /3
9079                                                           - 3: RLDx_CK_H/L = Core Clock /4
9080                                                         The DFA LLM interface(s) are tied to the core clock
9081                                                         frequency through this programmable clock divisor.
9082                                                         Examples:
9083                                                            Core Clock(MHz) | DFA-LLM Clock(MHz) | CLKDIV
9084                                                           -----------------+--------------------+--------
9085                                                                 800        |    400/(800-DDR)   |  /2
9086                                                                1000        |    333/(666-DDR)   |  /3
9087                                                                 800        |    200/(400-DDR)   |  /4
9088                                                         NOTE: This value MUST BE programmed BEFORE doing a
9089                                                         Hardware init sequence (see: DFA_MEMCFG0[INIT_Px] bits).
9090                                                         *** NOTE: O9N PASS1 Addition */
9091        uint64_t lpp_ena                 : 1;       /**< PP Linear Port Addressing Mode Enable
9092                                                         When enabled, PP-core LLM accesses to the lower-512MB
9093                                                         LLM address space are sent to the single DFA port
9094                                                         which is enabled. NOTE: If LPP_ENA=1, only
9095                                                         one DFA RLDRAM port may be enabled for RLDRAM accesses
9096                                                         (ie: ENA_P0 and ENA_P1 CAN NEVER BOTH be set).
9097                                                         PP-core LLM accesses to the upper-512MB LLM address
9098                                                         space are sent to the other 'disabled' DFA port.
9099                                                         SW RESTRICTION: If LPP_ENA=1, then only one DFA port
9100                                                         may be enabled for RLDRAM accesses (ie: ENA_P0 and
9101                                                         ENA_P1 CAN NEVER BOTH be set).
9102                                                         NOTE: This bit is used to allow PP-Core LLM accesses to a
9103                                                         disabled port, such that each port can be sequentially
9104                                                         addressed (ie: disable LW address interleaving).
9105                                                         Enabling this bit allows BOTH PORTs to be active and
9106                                                         sequentially addressable. The single port that is
9107                                                         enabled(ENA_Px) will respond to the low-512MB LLM address
9108                                                         space, and the other 'disabled' port will respond to the
9109                                                         high-512MB LLM address space.
9110                                                         Example usage:
9111                                                            - DFA RLD0 pins used for TCAM-FPGA(CP2 accesses)
9112                                                            - DFA RLD1 pins used for RLDRAM (DTE/CP2 accesses).
9113                                                         USAGE NOTE:
9114                                                         If LPP_ENA=1 and SW DOES NOT initialize the disabled port
9115                                                         (ie: INIT_Px=0->1), then refreshes and the HW init
9116                                                         sequence WILL NOT occur for the disabled port.
9117                                                         If LPP_ENA=1 and SW does initialize the disabled port
9118                                                         (INIT_Px=0->1 with ENA_Px=0), then refreshes and
9119                                                         the HW init sequence WILL occur to the disabled port. */
9120        uint64_t bunk_init               : 2;       /**< Controls the CS_N[1:0] during a) a HW Initialization
9121                                                         sequence (triggered by DFA_MEMCFG0[INIT_Px]) or
9122                                                         b) during a normal refresh sequence. If
9123                                                         the BNK_INIT[x]=1, the corresponding CS_N[x] is driven.
9124                                                         NOTE: This is required for DRAM used in a
9125                                                         clamshell configuration, since the address lines
9126                                                         carry Mode Register write data that is unique
9127                                                         per bunk(or clam). In a clamshell configuration,
9128                                                         The N3K A[x] pin may be tied into Clam#0's A[x]
9129                                                         and also into Clam#1's 'mirrored' address bit A[y]
9130                                                         (eg: Clam0 sees A[5] and Clam1 sees A[15]).
9131                                                         To support clamshell designs, SW must initiate
9132                                                         two separate HW init sequences for the two bunks
9133                                                         (or clams) . Before each HW init sequence is triggered,
9134                                                         SW must preload the DFA_MEMRLD[22:0] with the data
9135                                                         that will be driven onto the A[22:0] wires during
9136                                                         an MRS mode register write.
9137                                                         NOTE: After the final HW initialization sequence has
9138                                                         been triggered, SW must wait 64K eclks before writing
9139                                                         the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is
9140                                                         driven during refresh sequences in normal operation.
9141                                                         NOTE: This should only be written to a different value
9142                                                         during power-on SW initialization. */
9143        uint64_t init_p0                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9144                                                         the HW init sequence(s) for Memory Port \#0 is
9145                                                         initiated.
9146                                                         NOTE: To initialize memory, SW must:
9147                                                           1) Set up the DFA_MEMCFG0[CLKDIV] ratio for intended
9148                                                              RLDRAM operation.
9149                                                                [legal values 0: DIV2 2: DIV3 3: DIV4]
9150                                                           2) Write a '1' into BOTH the DFA_MEM_CFG0[RLDCK_RST]
9151                                                              and DFA_MEM_CFG0[RLDQCK90_RST] field at
9152                                                              the SAME TIME. This step puts all three DLLs in
9153                                                              SW reset (RLDCK, RLDCK90, RLDQK90 DLLs).
9154                                                           3) Write a '0' into the DFA_MEM_CFG0[RLDCK_RST] field.
9155                                                              This step takes the RLDCK DLL out of soft-reset so
9156                                                              that the DLL can generate the RLDx_CK_H/L clock pins.
9157                                                           4) Wait 1ms (for RLDCK DLL to achieve lock)
9158                                                           5) Write a '0' into DFA_MEM_CFG0[RLDQCK90_RST] field.
9159                                                              This step takes the RLDCK90 DLL AND RLDQK90 DLL out
9160                                                              of soft-reset.
9161                                                           6) Wait 1ms (for RLDCK90/RLDQK90 DLLs to achieve lock)
9162                                                           7) Enable memory port(s):  ENA_P0=1/ENA_P1=1
9163                                                           8) Wait 100us (to ensure a stable clock
9164                                                              to the RLDRAMs) - as per RLDRAM spec.
9165                                                           - - - - - Hardware Initialization Sequence - - - - -
9166                                                           9) Setup the DFA_MEMCFG0[BUNK_INIT] for the bunk(s)
9167                                                              intended to be initialized.
9168                                                          10) Write a '1' to the corresponding INIT_Px which
9169                                                              will initiate a hardware initialization
9170                                                              sequence to that'specific' port.
9171                                                          11) Wait (DFA_MEMCFG0[CLKDIV] * 32K) eclk cycles.
9172                                                              [to ensure the HW init sequence has completed
9173                                                              before writing to ANY of the DFA_MEM* registers]
9174                                                           - - - - - Hardware Initialization Sequence - - - - -
9175                                                          12) Write the DFA_MEMCFG0[BUNK_INIT]=3 to enable
9176                                                              refreshes to BOTH bunks.
9177                                                         NOTE: In some cases (where the address wires are routed
9178                                                         differently between the front and back 'bunks'),
9179                                                         SW will need to use DFA_MEMCFG0[BUNK_INIT] bits to
9180                                                         control the Hardware initialization sequence for a
9181                                                         'specific bunk'. In these cases, SW would setup the
9182                                                         BUNK_INIT and repeat Steps \#9-11 for each bunk/port.
9183                                                         NOTE: This should only be written to a different value
9184                                                         during power-on SW initialization.
9185                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9186                                                         RLD0_* pins. */
9187        uint64_t init_p1                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9188                                                         the HW init sequence(s) for Memory Port \#1 is
9189                                                         initiated.
9190                                                         NOTE: To initialize memory, SW must:
9191                                                           1) Set up the DFA_MEMCFG0[CLKDIV] ratio for intended
9192                                                              RLDRAM operation.
9193                                                                [legal values 0: DIV2 2: DIV3 3: DIV4]
9194                                                           2) Write a '1' into BOTH the DFA_MEM_CFG0[RLDCK_RST]
9195                                                              and DFA_MEM_CFG0[RLDQCK90_RST] field at
9196                                                              the SAME TIME. This step puts all three DLLs in
9197                                                              SW reset (RLDCK, RLDCK90, RLDQK90 DLLs).
9198                                                           3) Write a '0' into the DFA_MEM_CFG0[RLDCK_RST] field.
9199                                                              This step takes the RLDCK DLL out of soft-reset so
9200                                                              that the DLL can generate the RLDx_CK_H/L clock pins.
9201                                                           4) Wait 1ms (for RLDCK DLL to achieve lock)
9202                                                           5) Write a '0' into DFA_MEM_CFG0[RLDQCK90_RST] field.
9203                                                              This step takes the RLDCK90 DLL AND RLDQK90 DLL out
9204                                                              of soft-reset.
9205                                                           6) Wait 1ms (for RLDCK90/RLDQK90 DLLs to achieve lock)
9206                                                           7) Enable memory port(s) ENA_P0=1/ENA_P1=1
9207                                                           8) Wait 100us (to ensure a stable clock
9208                                                              to the RLDRAMs) - as per RLDRAM spec.
9209                                                           - - - - - Hardware Initialization Sequence - - - - -
9210                                                           9) Setup the DFA_MEMCFG0[BUNK_INIT] for the bunk(s)
9211                                                              intended to be initialized.
9212                                                          10) Write a '1' to the corresponding INIT_Px which
9213                                                              will initiate a hardware initialization
9214                                                              sequence to that'specific' port.
9215                                                          11) Wait (DFA_MEMCFG0[CLKDIV] * 32K) eclk cycles.
9216                                                              [to ensure the HW init sequence has completed
9217                                                              before writing to ANY of the DFA_MEM* registers]
9218                                                           - - - - - Hardware Initialization Sequence - - - - -
9219                                                          12) Write the DFA_MEMCFG0[BUNK_INIT]=3 to enable
9220                                                              refreshes to BOTH bunks.
9221                                                         NOTE: In some cases (where the address wires are routed
9222                                                         differently between the front and back 'bunks'),
9223                                                         SW will need to use DFA_MEMCFG0[BUNK_INIT] bits to
9224                                                         control the Hardware initialization sequence for a
9225                                                         'specific bunk'. In these cases, SW would setup the
9226                                                         BUNK_INIT and repeat Steps \#9-11 for each bunk/port.
9227                                                         NOTE: This should only be written to a different value
9228                                                         during power-on SW initialization.
9229                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9230                                                         RLD1_* pins. */
9231        uint64_t r2r_pbunk               : 1;       /**< When enabled, an additional command bubble is inserted
9232                                                         if back to back reads are issued to different physical
9233                                                         bunks. This is to avoid DQ data bus collisions when
9234                                                         references cross between physical bunks.
9235                                                         [NOTE: the physical bunk address boundary is determined
9236                                                         by the PBUNK bit].
9237                                                         NOTE: This should only be written to a different value
9238                                                         during power-on SW initialization. */
9239        uint64_t pbunk                   : 3;       /**< Physical Bunk address bit pointer.
9240                                                         Specifies which address bit within the Longword
9241                                                         Memory address MA[23:0] is used to determine the
9242                                                         chip selects.
9243                                                         [RLD_CS0_N corresponds to physical bunk \#0, and
9244                                                         RLD_CS1_N corresponds to physical bunk \#1].
9245                                                           - 000: CS0_N = MA[19]/CS1_N = !MA[19]
9246                                                           - 001: CS0_N = MA[20]/CS1_N = !MA[20]
9247                                                           - 010: CS0_N = MA[21]/CS1_N = !MA[21]
9248                                                           - 011: CS0_N = MA[22]/CS1_N = !MA[22]
9249                                                           - 100: CS0_N = MA[23]/CS1_N = !MA[23]
9250                                                           - 101-111: CS0_N = 0 /CS1_N = 1
9251                                                         Example(s):
9252                                                         To build out a 128MB DFA memory, 4x 32Mx9
9253                                                         parts could be used to fill out TWO physical
9254                                                         bunks (clamshell configuration). Each (of the
9255                                                         two) physical bunks contains 2x 32Mx9 = 16Mx36.
9256                                                         Each RLDRAM device also contains 8 internal banks,
9257                                                         therefore the memory Address is 16M/8banks = 2M
9258                                                         addresses/bunk (2^21). In this case, MA[21] would
9259                                                         select the physical bunk.
9260                                                         NOTE: This should only be written to a different value
9261                                                         during power-on SW initialization.
9262                                                         be used to determine the Chip Select(s). */
9263        uint64_t blen                    : 1;       /**< Device Burst Length  (0=2-burst/1=4-burst)
9264                                                         NOTE: RLDRAM-II MUST USE BLEN=0(2-burst) */
9265        uint64_t bprch                   : 2;       /**< Tristate Enable (back porch) (\#dclks)
9266                                                         On reads, allows user to control the shape of the
9267                                                         tristate disable back porch for the DQ data bus.
9268                                                         This parameter is also very dependent on the
9269                                                         RW_DLY and WR_DLY parameters and care must be
9270                                                         taken when programming these parameters to avoid
9271                                                         data bus contention. Valid range [0..2]
9272                                                         NOTE: This should only be written to a different value
9273                                                         during power-on SW initialization. */
9274        uint64_t fprch                   : 2;       /**< Tristate Enable (front porch) (\#dclks)
9275                                                         On reads, allows user to control the shape of the
9276                                                         tristate disable front porch for the DQ data bus.
9277                                                         This parameter is also very dependent on the
9278                                                         RW_DLY and WR_DLY parameters and care must be
9279                                                         taken when programming these parameters to avoid
9280                                                         data bus contention. Valid range [0..2]
9281                                                         NOTE: This should only be written to a different value
9282                                                         during power-on SW initialization. */
9283        uint64_t wr_dly                  : 4;       /**< Write->Read CMD Delay (\#mclks):
9284                                                         Determines \#mclk cycles to insert when controller
9285                                                         switches from write to read. This allows programmer
9286                                                         to control the data bus contention.
9287                                                         For RLDRAM-II(BL2): (TBL=1)
9288                                                         WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1
9289                                                         NOTE: This should only be written to a different value
9290                                                         during power-on SW initialization.
9291                                                         NOTE: For aggressive(performance optimal) designs,
9292                                                         the WR_DLY 'may' be tuned down(-1) if bus fight
9293                                                         on W->R transitions is not pronounced. */
9294        uint64_t rw_dly                  : 4;       /**< Read->Write CMD Delay (\#mclks):
9295                                                         Determines \#mclk cycles to insert when controller
9296                                                         switches from read to write. This allows programmer
9297                                                         to control the data bus contention.
9298                                                         For RLDRAM-II(BL2): (TBL=1)
9299                                                         RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1
9300                                                         NOTE: This should only be written to a different value
9301                                                         during power-on SW initialization.
9302                                                         NOTE: For aggressive(performance optimal) designs,
9303                                                         the RW_DLY 'may' be tuned down(-1) if bus fight
9304                                                         on R->W transitions is not pronounced. */
9305        uint64_t sil_lat                 : 2;       /**< Silo Latency (\#dclks): On reads, determines how many
9306                                                         additional dclks to wait (on top of tRL+1) before
9307                                                         pulling data out of the padring silos used for time
9308                                                         domain boundary crossing.
9309                                                         NOTE: This should only be written to a different value
9310                                                         during power-on SW initialization. */
9311        uint64_t mtype                   : 1;       /**< FCRAM-II Memory Type
9312                                                         *** O9N UNSUPPORTED *** */
9313        uint64_t reserved_2_2            : 1;
9314        uint64_t ena_p0                  : 1;       /**< Enable DFA RLDRAM Port#0
9315                                                         When enabled, this bit lets N3K be the default
9316                                                         driver for memory port \#0.
9317                                                         NOTE: a customer is at
9318                                                         liberty to enable either Port#0 or Port#1 or both.
9319                                                         NOTE: Once a port has been disabled, it MUST NEVER
9320                                                         be re-enabled. [the only way to enable a port is
9321                                                         through a chip reset].
9322                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9323                                                         RLD0_* pins. */
9324        uint64_t ena_p1                  : 1;       /**< Enable DFA RLDRAM Port#1
9325                                                         When enabled, this bit lets N3K be the default
9326                                                         driver for memory port \#1.
9327                                                         NOTE: a customer is at
9328                                                         liberty to enable either Port#0 or Port#1 or both.
9329                                                         NOTE: Once a port has been disabled, it MUST NEVER
9330                                                         be re-enabled. [the only way to enable a port is
9331                                                         through a chip reset].
9332                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9333                                                         RLD1_* pins. */
9334#else
9335        uint64_t ena_p1                  : 1;
9336        uint64_t ena_p0                  : 1;
9337        uint64_t reserved_2_2            : 1;
9338        uint64_t mtype                   : 1;
9339        uint64_t sil_lat                 : 2;
9340        uint64_t rw_dly                  : 4;
9341        uint64_t wr_dly                  : 4;
9342        uint64_t fprch                   : 2;
9343        uint64_t bprch                   : 2;
9344        uint64_t blen                    : 1;
9345        uint64_t pbunk                   : 3;
9346        uint64_t r2r_pbunk               : 1;
9347        uint64_t init_p1                 : 1;
9348        uint64_t init_p0                 : 1;
9349        uint64_t bunk_init               : 2;
9350        uint64_t lpp_ena                 : 1;
9351        uint64_t clkdiv                  : 2;
9352        uint64_t rldck_rst               : 1;
9353        uint64_t rldqck90_rst            : 1;
9354        uint64_t reserved_32_63          : 32;
9355#endif
9356    } s;
9357    struct cvmx_dfa_memcfg0_cn38xx
9358    {
9359#if __BYTE_ORDER == __BIG_ENDIAN
9360        uint64_t reserved_28_63          : 36;
9361        uint64_t lpp_ena                 : 1;       /**< PP Linear Port Addressing Mode Enable
9362                                                         When enabled, PP-core LLM accesses to the lower-512MB
9363                                                         LLM address space are sent to the single DFA port
9364                                                         which is enabled. NOTE: If LPP_ENA=1, only
9365                                                         one DFA RLDRAM port may be enabled for RLDRAM accesses
9366                                                         (ie: ENA_P0 and ENA_P1 CAN NEVER BOTH be set).
9367                                                         PP-core LLM accesses to the upper-512MB LLM address
9368                                                         space are sent to the other 'disabled' DFA port.
9369                                                         SW RESTRICTION: If LPP_ENA=1, then only one DFA port
9370                                                         may be enabled for RLDRAM accesses (ie: ENA_P0 and
9371                                                         ENA_P1 CAN NEVER BOTH be set).
9372                                                         NOTE: This bit is used to allow PP-Core LLM accesses to a
9373                                                         disabled port, such that each port can be sequentially
9374                                                         addressed (ie: disable LW address interleaving).
9375                                                         Enabling this bit allows BOTH PORTs to be active and
9376                                                         sequentially addressable. The single port that is
9377                                                         enabled(ENA_Px) will respond to the low-512MB LLM address
9378                                                         space, and the other 'disabled' port will respond to the
9379                                                         high-512MB LLM address space.
9380                                                         Example usage:
9381                                                            - DFA RLD0 pins used for TCAM-FPGA(CP2 accesses)
9382                                                            - DFA RLD1 pins used for RLDRAM (DTE/CP2 accesses).
9383                                                         USAGE NOTE:
9384                                                         If LPP_ENA=1 and SW DOES NOT initialize the disabled port
9385                                                         (ie: INIT_Px=0->1), then refreshes and the HW init
9386                                                         sequence WILL NOT occur for the disabled port.
9387                                                         If LPP_ENA=1 and SW does initialize the disabled port
9388                                                         (INIT_Px=0->1 with ENA_Px=0), then refreshes and
9389                                                         the HW init sequence WILL occur to the disabled port. */
9390        uint64_t bunk_init               : 2;       /**< Controls the CS_N[1:0] during a) a HW Initialization
9391                                                         sequence (triggered by DFA_MEMCFG0[INIT_Px]) or
9392                                                         b) during a normal refresh sequence. If
9393                                                         the BNK_INIT[x]=1, the corresponding CS_N[x] is driven.
9394                                                         NOTE: This is required for DRAM used in a
9395                                                         clamshell configuration, since the address lines
9396                                                         carry Mode Register write data that is unique
9397                                                         per bunk(or clam). In a clamshell configuration,
9398                                                         The N3K A[x] pin may be tied into Clam#0's A[x]
9399                                                         and also into Clam#1's 'mirrored' address bit A[y]
9400                                                         (eg: Clam0 sees A[5] and Clam1 sees A[15]).
9401                                                         To support clamshell designs, SW must initiate
9402                                                         two separate HW init sequences for the two bunks
9403                                                         (or clams) . Before each HW init sequence is triggered,
9404                                                         SW must preload the DFA_MEMRLD[22:0] with the data
9405                                                         that will be driven onto the A[22:0] wires during
9406                                                         an MRS mode register write.
9407                                                         NOTE: After the final HW initialization sequence has
9408                                                         been triggered, SW must wait 64K eclks before writing
9409                                                         the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is
9410                                                         driven during refresh sequences in normal operation.
9411                                                         NOTE: This should only be written to a different value
9412                                                         during power-on SW initialization.
9413                                                         NOTE: For MTYPE=1(FCRAM) Mode, each bunk MUST BE
9414                                                         initialized independently. In other words, a HW init
9415                                                         must be done for Bunk#0, and then another HW init
9416                                                         must be done for Bunk#1 at power-on. */
9417        uint64_t init_p0                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9418                                                         the HW init sequence(s) for Memory Port \#0 is
9419                                                         initiated.
9420                                                         NOTE: To initialize memory, SW must:
9421                                                           1) Enable memory port(s):
9422                                                               a) ENA_P1=1 (single port in pass 1) OR
9423                                                               b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1)
9424                                                           2) Wait 100us (to ensure a stable clock
9425                                                              to the RLDRAMs) - as per RLDRAM spec.
9426                                                           3) Write a '1' to the corresponding INIT_Px which
9427                                                              will initiate a hardware initialization
9428                                                              sequence.
9429                                                         NOTE: After writing a '1', SW must wait 64K eclk
9430                                                         cycles to ensure the HW init sequence has completed
9431                                                         before writing to ANY of the DFA_MEM* registers.
9432                                                         NOTE: This should only be written to a different value
9433                                                         during power-on SW initialization.
9434                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9435                                                         RLD0_* pins. */
9436        uint64_t init_p1                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9437                                                         the HW init sequence(s) for Memory Port \#1 is
9438                                                         initiated.
9439                                                         NOTE: To initialize memory, SW must:
9440                                                           1) Enable memory port(s):
9441                                                               a) ENA_P1=1 (single port in pass 1) OR
9442                                                               b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1)
9443                                                           2) Wait 100us (to ensure a stable clock
9444                                                              to the RLDRAMs) - as per RLDRAM spec.
9445                                                           3) Write a '1' to the corresponding INIT_Px which
9446                                                              will initiate a hardware initialization
9447                                                              sequence.
9448                                                         NOTE: After writing a '1', SW must wait 64K eclk
9449                                                         cycles to ensure the HW init sequence has completed
9450                                                         before writing to ANY of the DFA_MEM* registers.
9451                                                         NOTE: This should only be written to a different value
9452                                                         during power-on SW initialization.
9453                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9454                                                         RLD1_* pins. */
9455        uint64_t r2r_pbunk               : 1;       /**< When enabled, an additional command bubble is inserted
9456                                                         if back to back reads are issued to different physical
9457                                                         bunks. This is to avoid DQ data bus collisions when
9458                                                         references cross between physical bunks.
9459                                                         [NOTE: the physical bunk address boundary is determined
9460                                                         by the PBUNK bit].
9461                                                         NOTE: This should only be written to a different value
9462                                                         during power-on SW initialization.
9463                                                         When MTYPE=1(FCRAM)/BLEN=0(2-burst), R2R_PBUNK SHOULD BE
9464                                                         ZERO(for optimal performance). However, if electrically,
9465                                                         DQ-sharing becomes a power/heat issue, then R2R_PBUNK
9466                                                         should be set (but at a cost to performance (1/2 BW). */
9467        uint64_t pbunk                   : 3;       /**< Physical Bunk address bit pointer.
9468                                                         Specifies which address bit within the Longword
9469                                                         Memory address MA[23:0] is used to determine the
9470                                                         chip selects.
9471                                                         [RLD_CS0_N corresponds to physical bunk \#0, and
9472                                                         RLD_CS1_N corresponds to physical bunk \#1].
9473                                                           - 000: CS0_N = MA[19]/CS1_N = !MA[19]
9474                                                           - 001: CS0_N = MA[20]/CS1_N = !MA[20]
9475                                                           - 010: CS0_N = MA[21]/CS1_N = !MA[21]
9476                                                           - 011: CS0_N = MA[22]/CS1_N = !MA[22]
9477                                                           - 100: CS0_N = MA[23]/CS1_N = !MA[23]
9478                                                           - 101-111: CS0_N = 0 /CS1_N = 1
9479                                                         Example(s):
9480                                                         To build out a 128MB DFA memory, 4x 32Mx9
9481                                                         parts could be used to fill out TWO physical
9482                                                         bunks (clamshell configuration). Each (of the
9483                                                         two) physical bunks contains 2x 32Mx9 = 16Mx36.
9484                                                         Each RLDRAM device also contains 8 internal banks,
9485                                                         therefore the memory Address is 16M/8banks = 2M
9486                                                         addresses/bunk (2^21). In this case, MA[21] would
9487                                                         select the physical bunk.
9488                                                         NOTE: This should only be written to a different value
9489                                                         during power-on SW initialization.
9490                                                         be used to determine the Chip Select(s).
9491                                                         NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), a
9492                                                         "Redundant Bunk" scheme is employed to provide the
9493                                                         highest overall performance (1 Req/ MCLK cycle).
9494                                                         In this mode, it's imperative that SW set the PBUNK
9495                                                         field +1 'above' the highest address bit. (such that
9496                                                         the PBUNK extracted from the address will always be
9497                                                         zero). In this mode, the CS_N[1:0] pins are driven
9498                                                         to each redundant bunk based on a TDM scheme:
9499                                                         [MCLK-EVEN=Bunk#0/MCLK-ODD=Bunk#1]. */
9500        uint64_t blen                    : 1;       /**< Device Burst Length  (0=2-burst/1=4-burst)
9501                                                         When BLEN=0(BL2), all QW reads/writes from CP2 are
9502                                                         decomposed into 2 separate BL2(LW) requests to the
9503                                                         Low-Latency memory.
9504                                                         When BLEN=1(BL4), a LW request (from CP2 or NCB) is
9505                                                         treated as 1 BL4(QW) request to the low latency memory.
9506                                                         NOTE: QW refers to a 64-bit LLM Load/Store (intiated
9507                                                         by a processor core). LW refers to a 36-bit load/store.
9508                                                         NOTE: This should only be written to a different value
9509                                                         during power-on SW initialization before the DFA LLM
9510                                                         (low latency memory) is used.
9511                                                         NOTE: MTYPE=0(RLDRAM-II) MUST USE BLEN=0(2-burst)
9512                                                         NOTE: MTYPE=1(FCRAM)/BLEN=0(BL2) requires a
9513                                                         multi-bunk(clam) board design.
9514                                                         NOTE: If MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=1(BL4),
9515                                                         SW SHOULD use CP2 QW read/write requests (for
9516                                                         optimal low-latency bus performance).
9517                                                         [LW length read/write requests(in BL4 mode) use 50%
9518                                                         of the available bus bandwidth]
9519                                                         NOTE: MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=0(BL2) can only
9520                                                         be used with FCRAM-II devices which support BL2 mode
9521                                                         (see: Toshiba FCRAM-II, where DQ tristate after 2 data
9522                                                         transfers).
9523                                                         NOTE: MTYPE=1(FCRAM)/FCRAM2P=1(II+) does not support LW
9524                                                         write requests (FCRAM-II+ device specification has removed
9525                                                         the variable write mask function from the devices).
9526                                                         As such, if this mode is used, SW must be careful to
9527                                                         issue only PP-CP2 QW write requests. */
9528        uint64_t bprch                   : 2;       /**< Tristate Enable (back porch) (\#dclks)
9529                                                         On reads, allows user to control the shape of the
9530                                                         tristate disable back porch for the DQ data bus.
9531                                                         This parameter is also very dependent on the
9532                                                         RW_DLY and WR_DLY parameters and care must be
9533                                                         taken when programming these parameters to avoid
9534                                                         data bus contention. Valid range [0..2]
9535                                                         NOTE: This should only be written to a different value
9536                                                         during power-on SW initialization. */
9537        uint64_t fprch                   : 2;       /**< Tristate Enable (front porch) (\#dclks)
9538                                                         On reads, allows user to control the shape of the
9539                                                         tristate disable front porch for the DQ data bus.
9540                                                         This parameter is also very dependent on the
9541                                                         RW_DLY and WR_DLY parameters and care must be
9542                                                         taken when programming these parameters to avoid
9543                                                         data bus contention. Valid range [0..2]
9544                                                         NOTE: This should only be written to a different value
9545                                                         during power-on SW initialization. */
9546        uint64_t wr_dly                  : 4;       /**< Write->Read CMD Delay (\#mclks):
9547                                                         Determines \#mclk cycles to insert when controller
9548                                                         switches from write to read. This allows programmer
9549                                                         to control the data bus contention.
9550                                                         For RLDRAM-II(BL2): (TBL=1)
9551                                                         For FCRAM-II (BL4): (TBL=2)
9552                                                         For FCRAM-II (BL2 grepl=1x ONLY): (TBL=1)
9553                                                         For FCRAM-II (BL2 grepl>=2x): (TBL=3)
9554                                                            NOTE: When MTYTPE=1(FCRAM-II) BLEN=0(BL2 Mode),
9555                                                            grepl>=2x, writes require redundant bunk writes
9556                                                            which require an additional 2 cycles before slotting
9557                                                            the next read.
9558                                                         WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1
9559                                                         NOTE: This should only be written to a different value
9560                                                         during power-on SW initialization.
9561                                                         NOTE: For aggressive(performance optimal) designs,
9562                                                         the WR_DLY 'may' be tuned down(-1) if bus fight
9563                                                         on W->R transitions is not pronounced. */
9564        uint64_t rw_dly                  : 4;       /**< Read->Write CMD Delay (\#mclks):
9565                                                         Determines \#mclk cycles to insert when controller
9566                                                         switches from read to write. This allows programmer
9567                                                         to control the data bus contention.
9568                                                         For RLDRAM-II/FCRAM-II (BL2): (TBL=1)
9569                                                         For FCRAM-II (BL4): (TBL=2)
9570                                                         RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1
9571                                                         NOTE: This should only be written to a different value
9572                                                         during power-on SW initialization.
9573                                                         NOTE: For aggressive(performance optimal) designs,
9574                                                         the RW_DLY 'may' be tuned down(-1) if bus fight
9575                                                         on R->W transitions is not pronounced. */
9576        uint64_t sil_lat                 : 2;       /**< Silo Latency (\#dclks): On reads, determines how many
9577                                                         additional dclks to wait (on top of tRL+1) before
9578                                                         pulling data out of the padring silos used for time
9579                                                         domain boundary crossing.
9580                                                         NOTE: This should only be written to a different value
9581                                                         during power-on SW initialization. */
9582        uint64_t mtype                   : 1;       /**< Memory Type (0=RLDRAM-II/1=Network DRAM-II/FCRAM)
9583                                                         NOTE: N3K-P1 only supports RLDRAM-II
9584                                                         NOTE: This should only be written to a different value
9585                                                         during power-on SW initialization.
9586                                                         NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), only the
9587                                                         "unidirectional DS/QS" mode is supported. (see FCRAM
9588                                                         data sheet EMRS[A6:A5]=SS(Strobe Select) register
9589                                                         definition. [in FCRAM 2-burst mode, we use FCRAM
9590                                                         in a clamshell configuration such that clam0 is
9591                                                         addressed independently of clam1, and DQ is shared
9592                                                         for optimal performance. As such it's imperative that
9593                                                         the QS are conditionally received (and are NOT
9594                                                         free-running), as the N3K receive data capture silos
9595                                                         OR the clam0/1 QS strobes.
9596                                                         NOTE: If this bit is SET, the ASX0/1
9597                                                         ASX_RLD_FCRAM_MODE[MODE] bit(s) should also be SET
9598                                                         in order for the RLD0/1-PHY(s) to support FCRAM devices. */
9599        uint64_t reserved_2_2            : 1;
9600        uint64_t ena_p0                  : 1;       /**< Enable DFA RLDRAM Port#0
9601                                                         When enabled, this bit lets N3K be the default
9602                                                         driver for memory port \#0.
9603                                                         NOTE: For N3K-P1, to enable Port#0(2nd port),
9604                                                         Port#1 MUST ALSO be enabled.
9605                                                         NOTE: For N3K-P2, single port mode, a customer is at
9606                                                         liberty to enable either Port#0 or Port#1.
9607                                                         NOTE: Once a port has been disabled, it MUST NEVER
9608                                                         be re-enabled. [the only way to enable a port is
9609                                                         through a chip reset].
9610                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9611                                                         RLD0_* pins. */
9612        uint64_t ena_p1                  : 1;       /**< Enable DFA RLDRAM Port#1
9613                                                         When enabled, this bit lets N3K be the default
9614                                                         driver for memory port \#1.
9615                                                         NOTE: For N3K-P1, If the customer wishes to use a
9616                                                         single port, s/he must enable Port#1 (and not Port#0).
9617                                                         NOTE: For N3K-P2, single port mode, a customer is at
9618                                                         liberty to enable either Port#0 or Port#1.
9619                                                         NOTE: Once a port has been disabled, it MUST NEVER
9620                                                         be re-enabled. [the only way to enable a port is
9621                                                         through a chip reset].
9622                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9623                                                         RLD1_* pins. */
9624#else
9625        uint64_t ena_p1                  : 1;
9626        uint64_t ena_p0                  : 1;
9627        uint64_t reserved_2_2            : 1;
9628        uint64_t mtype                   : 1;
9629        uint64_t sil_lat                 : 2;
9630        uint64_t rw_dly                  : 4;
9631        uint64_t wr_dly                  : 4;
9632        uint64_t fprch                   : 2;
9633        uint64_t bprch                   : 2;
9634        uint64_t blen                    : 1;
9635        uint64_t pbunk                   : 3;
9636        uint64_t r2r_pbunk               : 1;
9637        uint64_t init_p1                 : 1;
9638        uint64_t init_p0                 : 1;
9639        uint64_t bunk_init               : 2;
9640        uint64_t lpp_ena                 : 1;
9641        uint64_t reserved_28_63          : 36;
9642#endif
9643    } cn38xx;
9644    struct cvmx_dfa_memcfg0_cn38xxp2
9645    {
9646#if __BYTE_ORDER == __BIG_ENDIAN
9647        uint64_t reserved_27_63          : 37;
9648        uint64_t bunk_init               : 2;       /**< Controls the CS_N[1:0] during a) a HW Initialization
9649                                                         sequence (triggered by DFA_MEMCFG0[INIT_Px]) or
9650                                                         b) during a normal refresh sequence. If
9651                                                         the BNK_INIT[x]=1, the corresponding CS_N[x] is driven.
9652                                                         NOTE: This is required for DRAM used in a
9653                                                         clamshell configuration, since the address lines
9654                                                         carry Mode Register write data that is unique
9655                                                         per bunk(or clam). In a clamshell configuration,
9656                                                         The N3K A[x] pin may be tied into Clam#0's A[x]
9657                                                         and also into Clam#1's 'mirrored' address bit A[y]
9658                                                         (eg: Clam0 sees A[5] and Clam1 sees A[15]).
9659                                                         To support clamshell designs, SW must initiate
9660                                                         two separate HW init sequences for the two bunks
9661                                                         (or clams) . Before each HW init sequence is triggered,
9662                                                         SW must preload the DFA_MEMRLD[22:0] with the data
9663                                                         that will be driven onto the A[22:0] wires during
9664                                                         an MRS mode register write.
9665                                                         NOTE: After the final HW initialization sequence has
9666                                                         been triggered, SW must wait 64K eclks before writing
9667                                                         the BUNK_INIT[1:0] field = 3'b11 (so that CS_N[1:0] is
9668                                                         driven during refresh sequences in normal operation.
9669                                                         NOTE: This should only be written to a different value
9670                                                         during power-on SW initialization.
9671                                                         NOTE: For MTYPE=1(FCRAM) Mode, each bunk MUST BE
9672                                                         initialized independently. In other words, a HW init
9673                                                         must be done for Bunk#0, and then another HW init
9674                                                         must be done for Bunk#1 at power-on. */
9675        uint64_t init_p0                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9676                                                         the HW init sequence(s) for Memory Port \#0 is
9677                                                         initiated.
9678                                                         NOTE: To initialize memory, SW must:
9679                                                           1) Enable memory port(s):
9680                                                               a) ENA_P1=1 (single port in pass 1) OR
9681                                                               b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1)
9682                                                           2) Wait 100us (to ensure a stable clock
9683                                                              to the RLDRAMs) - as per RLDRAM spec.
9684                                                           3) Write a '1' to the corresponding INIT_Px which
9685                                                              will initiate a hardware initialization
9686                                                              sequence.
9687                                                         NOTE: After writing a '1', SW must wait 64K eclk
9688                                                         cycles to ensure the HW init sequence has completed
9689                                                         before writing to ANY of the DFA_MEM* registers.
9690                                                         NOTE: This should only be written to a different value
9691                                                         during power-on SW initialization.
9692                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9693                                                         RLD0_* pins. */
9694        uint64_t init_p1                 : 1;       /**< When a '1' is written (and the previous value was '0'),
9695                                                         the HW init sequence(s) for Memory Port \#1 is
9696                                                         initiated.
9697                                                         NOTE: To initialize memory, SW must:
9698                                                           1) Enable memory port(s):
9699                                                               a) ENA_P1=1 (single port in pass 1) OR
9700                                                               b) ENA_P0=1/ENA_P1=1 (dual ports or single when not pass 1)
9701                                                           2) Wait 100us (to ensure a stable clock
9702                                                              to the RLDRAMs) - as per RLDRAM spec.
9703                                                           3) Write a '1' to the corresponding INIT_Px which
9704                                                              will initiate a hardware initialization
9705                                                              sequence.
9706                                                         NOTE: After writing a '1', SW must wait 64K eclk
9707                                                         cycles to ensure the HW init sequence has completed
9708                                                         before writing to ANY of the DFA_MEM* registers.
9709                                                         NOTE: This should only be written to a different value
9710                                                         during power-on SW initialization.
9711                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9712                                                         RLD1_* pins. */
9713        uint64_t r2r_pbunk               : 1;       /**< When enabled, an additional command bubble is inserted
9714                                                         if back to back reads are issued to different physical
9715                                                         bunks. This is to avoid DQ data bus collisions when
9716                                                         references cross between physical bunks.
9717                                                         [NOTE: the physical bunk address boundary is determined
9718                                                         by the PBUNK bit].
9719                                                         NOTE: This should only be written to a different value
9720                                                         during power-on SW initialization.
9721                                                         When MTYPE=1(FCRAM)/BLEN=0(2-burst), R2R_PBUNK SHOULD BE
9722                                                         ZERO(for optimal performance). However, if electrically,
9723                                                         DQ-sharing becomes a power/heat issue, then R2R_PBUNK
9724                                                         should be set (but at a cost to performance (1/2 BW). */
9725        uint64_t pbunk                   : 3;       /**< Physical Bunk address bit pointer.
9726                                                         Specifies which address bit within the Longword
9727                                                         Memory address MA[23:0] is used to determine the
9728                                                         chip selects.
9729                                                         [RLD_CS0_N corresponds to physical bunk \#0, and
9730                                                         RLD_CS1_N corresponds to physical bunk \#1].
9731                                                           - 000: CS0_N = MA[19]/CS1_N = !MA[19]
9732                                                           - 001: CS0_N = MA[20]/CS1_N = !MA[20]
9733                                                           - 010: CS0_N = MA[21]/CS1_N = !MA[21]
9734                                                           - 011: CS0_N = MA[22]/CS1_N = !MA[22]
9735                                                           - 100: CS0_N = MA[23]/CS1_N = !MA[23]
9736                                                           - 101-111: CS0_N = 0 /CS1_N = 1
9737                                                         Example(s):
9738                                                         To build out a 128MB DFA memory, 4x 32Mx9
9739                                                         parts could be used to fill out TWO physical
9740                                                         bunks (clamshell configuration). Each (of the
9741                                                         two) physical bunks contains 2x 32Mx9 = 16Mx36.
9742                                                         Each RLDRAM device also contains 8 internal banks,
9743                                                         therefore the memory Address is 16M/8banks = 2M
9744                                                         addresses/bunk (2^21). In this case, MA[21] would
9745                                                         select the physical bunk.
9746                                                         NOTE: This should only be written to a different value
9747                                                         during power-on SW initialization.
9748                                                         be used to determine the Chip Select(s).
9749                                                         NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), a
9750                                                         "Redundant Bunk" scheme is employed to provide the
9751                                                         highest overall performance (1 Req/ MCLK cycle).
9752                                                         In this mode, it's imperative that SW set the PBUNK
9753                                                         field +1 'above' the highest address bit. (such that
9754                                                         the PBUNK extracted from the address will always be
9755                                                         zero). In this mode, the CS_N[1:0] pins are driven
9756                                                         to each redundant bunk based on a TDM scheme:
9757                                                         [MCLK-EVEN=Bunk#0/MCLK-ODD=Bunk#1]. */
9758        uint64_t blen                    : 1;       /**< Device Burst Length  (0=2-burst/1=4-burst)
9759                                                         When BLEN=0(BL2), all QW reads/writes from CP2 are
9760                                                         decomposed into 2 separate BL2(LW) requests to the
9761                                                         Low-Latency memory.
9762                                                         When BLEN=1(BL4), a LW request (from CP2 or NCB) is
9763                                                         treated as 1 BL4(QW) request to the low latency memory.
9764                                                         NOTE: QW refers to a 64-bit LLM Load/Store (intiated
9765                                                         by a processor core). LW refers to a 36-bit load/store.
9766                                                         NOTE: This should only be written to a different value
9767                                                         during power-on SW initialization before the DFA LLM
9768                                                         (low latency memory) is used.
9769                                                         NOTE: MTYPE=0(RLDRAM-II) MUST USE BLEN=0(2-burst)
9770                                                         NOTE: MTYPE=1(FCRAM)/BLEN=0(BL2) requires a
9771                                                         multi-bunk(clam) board design.
9772                                                         NOTE: If MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=1(BL4),
9773                                                         SW SHOULD use CP2 QW read/write requests (for
9774                                                         optimal low-latency bus performance).
9775                                                         [LW length read/write requests(in BL4 mode) use 50%
9776                                                         of the available bus bandwidth]
9777                                                         NOTE: MTYPE=1(FCRAM)/FCRAM2P=0(II)/BLEN=0(BL2) can only
9778                                                         be used with FCRAM-II devices which support BL2 mode
9779                                                         (see: Toshiba FCRAM-II, where DQ tristate after 2 data
9780                                                         transfers).
9781                                                         NOTE: MTYPE=1(FCRAM)/FCRAM2P=1(II+) does not support LW
9782                                                         write requests (FCRAM-II+ device specification has removed
9783                                                         the variable write mask function from the devices).
9784                                                         As such, if this mode is used, SW must be careful to
9785                                                         issue only PP-CP2 QW write requests. */
9786        uint64_t bprch                   : 2;       /**< Tristate Enable (back porch) (\#dclks)
9787                                                         On reads, allows user to control the shape of the
9788                                                         tristate disable back porch for the DQ data bus.
9789                                                         This parameter is also very dependent on the
9790                                                         RW_DLY and WR_DLY parameters and care must be
9791                                                         taken when programming these parameters to avoid
9792                                                         data bus contention. Valid range [0..2]
9793                                                         NOTE: This should only be written to a different value
9794                                                         during power-on SW initialization. */
9795        uint64_t fprch                   : 2;       /**< Tristate Enable (front porch) (\#dclks)
9796                                                         On reads, allows user to control the shape of the
9797                                                         tristate disable front porch for the DQ data bus.
9798                                                         This parameter is also very dependent on the
9799                                                         RW_DLY and WR_DLY parameters and care must be
9800                                                         taken when programming these parameters to avoid
9801                                                         data bus contention. Valid range [0..2]
9802                                                         NOTE: This should only be written to a different value
9803                                                         during power-on SW initialization. */
9804        uint64_t wr_dly                  : 4;       /**< Write->Read CMD Delay (\#mclks):
9805                                                         Determines \#mclk cycles to insert when controller
9806                                                         switches from write to read. This allows programmer
9807                                                         to control the data bus contention.
9808                                                         For RLDRAM-II(BL2): (TBL=1)
9809                                                         For FCRAM-II (BL4): (TBL=2)
9810                                                         For FCRAM-II (BL2 grepl=1x ONLY): (TBL=1)
9811                                                         For FCRAM-II (BL2 grepl>=2x): (TBL=3)
9812                                                            NOTE: When MTYTPE=1(FCRAM-II) BLEN=0(BL2 Mode),
9813                                                            grepl>=2x, writes require redundant bunk writes
9814                                                            which require an additional 2 cycles before slotting
9815                                                            the next read.
9816                                                         WR_DLY = ROUND_UP[((TWL+TBL)*2 - TSKW + FPRCH) / 2] - TRL + 1
9817                                                         NOTE: This should only be written to a different value
9818                                                         during power-on SW initialization.
9819                                                         NOTE: For aggressive(performance optimal) designs,
9820                                                         the WR_DLY 'may' be tuned down(-1) if bus fight
9821                                                         on W->R transitions is not pronounced. */
9822        uint64_t rw_dly                  : 4;       /**< Read->Write CMD Delay (\#mclks):
9823                                                         Determines \#mclk cycles to insert when controller
9824                                                         switches from read to write. This allows programmer
9825                                                         to control the data bus contention.
9826                                                         For RLDRAM-II/FCRAM-II (BL2): (TBL=1)
9827                                                         For FCRAM-II (BL4): (TBL=2)
9828                                                         RW_DLY = ROUND_UP[((TRL+TBL)*2 + TSKW + BPRCH+2)/2] - TWL + 1
9829                                                         NOTE: This should only be written to a different value
9830                                                         during power-on SW initialization.
9831                                                         NOTE: For aggressive(performance optimal) designs,
9832                                                         the RW_DLY 'may' be tuned down(-1) if bus fight
9833                                                         on R->W transitions is not pronounced. */
9834        uint64_t sil_lat                 : 2;       /**< Silo Latency (\#dclks): On reads, determines how many
9835                                                         additional dclks to wait (on top of tRL+1) before
9836                                                         pulling data out of the padring silos used for time
9837                                                         domain boundary crossing.
9838                                                         NOTE: This should only be written to a different value
9839                                                         during power-on SW initialization. */
9840        uint64_t mtype                   : 1;       /**< Memory Type (0=RLDRAM-II/1=Network DRAM-II/FCRAM)
9841                                                         NOTE: N3K-P1 only supports RLDRAM-II
9842                                                         NOTE: This should only be written to a different value
9843                                                         during power-on SW initialization.
9844                                                         NOTE: When MTYPE=1(FCRAM)/BLEN=0(2-burst), only the
9845                                                         "unidirectional DS/QS" mode is supported. (see FCRAM
9846                                                         data sheet EMRS[A6:A5]=SS(Strobe Select) register
9847                                                         definition. [in FCRAM 2-burst mode, we use FCRAM
9848                                                         in a clamshell configuration such that clam0 is
9849                                                         addressed independently of clam1, and DQ is shared
9850                                                         for optimal performance. As such it's imperative that
9851                                                         the QS are conditionally received (and are NOT
9852                                                         free-running), as the N3K receive data capture silos
9853                                                         OR the clam0/1 QS strobes.
9854                                                         NOTE: If this bit is SET, the ASX0/1
9855                                                         ASX_RLD_FCRAM_MODE[MODE] bit(s) should also be SET
9856                                                         in order for the RLD0/1-PHY(s) to support FCRAM devices. */
9857        uint64_t reserved_2_2            : 1;
9858        uint64_t ena_p0                  : 1;       /**< Enable DFA RLDRAM Port#0
9859                                                         When enabled, this bit lets N3K be the default
9860                                                         driver for memory port \#0.
9861                                                         NOTE: For N3K-P1, to enable Port#0(2nd port),
9862                                                         Port#1 MUST ALSO be enabled.
9863                                                         NOTE: For N3K-P2, single port mode, a customer is at
9864                                                         liberty to enable either Port#0 or Port#1.
9865                                                         NOTE: Once a port has been disabled, it MUST NEVER
9866                                                         be re-enabled. [the only way to enable a port is
9867                                                         through a chip reset].
9868                                                         NOTE: DFA Memory Port#0 corresponds to the Octeon
9869                                                         RLD0_* pins. */
9870        uint64_t ena_p1                  : 1;       /**< Enable DFA RLDRAM Port#1
9871                                                         When enabled, this bit lets N3K be the default
9872                                                         driver for memory port \#1.
9873                                                         NOTE: For N3K-P1, If the customer wishes to use a
9874                                                         single port, s/he must enable Port#1 (and not Port#0).
9875                                                         NOTE: For N3K-P2, single port mode, a customer is at
9876                                                         liberty to enable either Port#0 or Port#1.
9877                                                         NOTE: Once a port has been disabled, it MUST NEVER
9878                                                         be re-enabled. [the only way to enable a port is
9879                                                         through a chip reset].
9880                                                         NOTE: DFA Memory Port#1 corresponds to the Octeon
9881                                                         RLD1_* pins. */
9882#else
9883        uint64_t ena_p1                  : 1;
9884        uint64_t ena_p0                  : 1;
9885        uint64_t reserved_2_2            : 1;
9886        uint64_t mtype                   : 1;
9887        uint64_t sil_lat                 : 2;
9888        uint64_t rw_dly                  : 4;
9889        uint64_t wr_dly                  : 4;
9890        uint64_t fprch                   : 2;
9891        uint64_t bprch                   : 2;
9892        uint64_t blen                    : 1;
9893        uint64_t pbunk                   : 3;
9894        uint64_t r2r_pbunk               : 1;
9895        uint64_t init_p1                 : 1;
9896        uint64_t init_p0                 : 1;
9897        uint64_t bunk_init               : 2;
9898        uint64_t reserved_27_63          : 37;
9899#endif
9900    } cn38xxp2;
9901    struct cvmx_dfa_memcfg0_s            cn58xx;
9902    struct cvmx_dfa_memcfg0_s            cn58xxp1;
9903} cvmx_dfa_memcfg0_t;
9904
9905
9906/**
9907 * cvmx_dfa_memcfg1
9908 *
9909 * DFA_MEMCFG1 = RLDRAM Memory Timing Configuration
9910 *
9911 * Description:
9912 */
9913typedef union
9914{
9915    uint64_t u64;
9916    struct cvmx_dfa_memcfg1_s
9917    {
9918#if __BYTE_ORDER == __BIG_ENDIAN
9919        uint64_t reserved_34_63          : 30;
9920        uint64_t ref_intlo               : 9;       /**< Burst Refresh Interval[8:0] (\#dclks)
9921                                                         For finer refresh interval granularity control.
9922                                                         This field provides an additional level of granularity
9923                                                         for the refresh interval. It specifies the additional
9924                                                         \#dclks [0...511] to be added to the REF_INT[3:0] field.
9925                                                         For RLDRAM-II: For dclk(400MHz=2.5ns):
9926                                                         Example: 64K AREF cycles required within tREF=32ms
9927                                                             trefint = tREF(ms)/(64K cycles/8banks)
9928                                                                         = 32ms/8K = 3.9us = 3900ns
9929                                                             REF_INT[3:0] = ROUND_DOWN[(trefint/dclk)/512]
9930                                                                          = ROUND_DOWN[(3900/2.5)/512]
9931                                                                          = 3
9932                                                             REF_INTLO[8:0] = MOD[(trefint/dclk)/512]
9933                                                                            = MOD[(3900/2.5)/512]
9934                                                                            = 24
9935                                                         NOTE: This should only be written to a different value
9936                                                         during power-on SW initialization.
9937                                                         *** NOTE: PASS2 Addition */
9938        uint64_t aref_ena                : 1;       /**< Auto Refresh Cycle Enable
9939                                                         INTERNAL USE ONLY:
9940                                                         NOTE: This mode bit is ONLY intended to be used by
9941                                                         low-level power-on initialization routines in the
9942                                                         event that the hardware initialization routine
9943                                                         does not work. It allows SW to create AREF
9944                                                         commands on the RLDRAM bus directly.
9945                                                         When this bit is set, ALL RLDRAM writes (issued by
9946                                                         a PP through the NCB or CP2) are converted to AREF
9947                                                         commands on the RLDRAM bus. The write-address is
9948                                                         presented on the A[20:0]/BA[2:0] pins (for which
9949                                                         the RLDRAM only interprets BA[2:0]).
9950                                                         When this bit is set, only writes are allowed
9951                                                         and MUST use grepl=0 (1x).
9952                                                         NOTE: This should only be written to a different value
9953                                                         during power-on SW initialization.
9954                                                         NOTE: MRS_ENA and AREF_ENA are mutually exclusive
9955                                                         (SW can set one or the other, but never both!)
9956                                                         NOTE: AREF commands generated using this method target
9957                                                         the 'addressed' bunk. */
9958        uint64_t mrs_ena                 : 1;       /**< Mode Register Set Cycle Enable
9959                                                         INTERNAL USE ONLY:
9960                                                         NOTE: This mode bit is ONLY intended to be used by
9961                                                         low-level power-on initialization routines in the
9962                                                         event that the hardware initialization routine
9963                                                         does not work. It allows SW to create MRS
9964                                                         commands on the RLDRAM bus directly.
9965                                                         When this bit is set, ALL RLDRAM writes (issued by
9966                                                         a PP through the NCB or CP2) are converted to MRS
9967                                                         commands on the RLDRAM bus. The write-address is
9968                                                         presented on the A[20:0]/BA[2:0] pins (for which
9969                                                         the RLDRAM only interprets A[17:0]).
9970                                                         When this bit is set, only writes are allowed
9971                                                         and MUST use grepl=0 (1x).
9972                                                         NOTE: This should only be written to a different value
9973                                                         during power-on SW initialization.
9974                                                         NOTE: MRS_ENA and AREF_ENA are mutually exclusive
9975                                                         (SW can set one or the other, but never both!)
9976                                                         NOTE: MRS commands generated using this method target
9977                                                         the 'addressed' bunk. */
9978        uint64_t tmrsc                   : 3;       /**< Mode Register Set Cycle Time (represented in \#mclks)
9979                                                              - 000-001: RESERVED
9980                                                              - 010: tMRSC = 2 mclks
9981                                                              - 011: tMRSC = 3 mclks
9982                                                              - ...
9983                                                              - 111: tMRSC = 7 mclks
9984                                                         NOTE: The device tMRSC parameter is a function of CL
9985                                                         (which during HW initialization is not known. Its
9986                                                         recommended to load tMRSC(MAX) value to avoid timing
9987                                                         violations.
9988                                                         NOTE: This should only be written to a different value
9989                                                         during power-on SW initialization. */
9990        uint64_t trc                     : 4;       /**< Row Cycle Time (represented in \#mclks)
9991                                                         see also: DFA_MEMRLD[RLCFG] field which must
9992                                                         correspond with tRL/tWL parameter(s).
9993                                                              - 0000-0010: RESERVED
9994                                                              - 0011: tRC = 3 mclks
9995                                                              - 0100: tRC = 4 mclks
9996                                                              - 0101: tRC = 5 mclks
9997                                                              - 0110: tRC = 6 mclks
9998                                                              - 0111: tRC = 7 mclks
9999                                                              - 1000: tRC = 8 mclks
10000                                                              - 1001: tRC = 9 mclks
10001                                                              - 1010-1111: RESERVED
10002                                                         NOTE: This should only be written to a different value
10003                                                         during power-on SW initialization. */
10004        uint64_t twl                     : 4;       /**< Write Latency (represented in \#mclks)
10005                                                         see also: DFA_MEMRLD[RLCFG] field which must
10006                                                         correspond with tRL/tWL parameter(s).
10007                                                              - 0000-0001: RESERVED
10008                                                              - 0010: Write Latency (WL=2.0 mclk)
10009                                                              - 0011: Write Latency (WL=3.0 mclks)
10010                                                              - 0100: Write Latency (WL=4.0 mclks)
10011                                                              - 0101: Write Latency (WL=5.0 mclks)
10012                                                              - 0110: Write Latency (WL=6.0 mclks)
10013                                                              - 0111: Write Latency (WL=7.0 mclks)
10014                                                              - 1000: Write Latency (WL=8.0 mclks)
10015                                                              - 1001: Write Latency (WL=9.0 mclks)
10016                                                              - 1010: Write Latency (WL=10.0 mclks)
10017                                                              - 1011-1111: RESERVED
10018                                                         NOTE: This should only be written to a different value
10019                                                         during power-on SW initialization. */
10020        uint64_t trl                     : 4;       /**< Read Latency (represented in \#mclks)
10021                                                         see also: DFA_MEMRLD[RLCFG] field which must
10022                                                         correspond with tRL/tWL parameter(s).
10023                                                              - 0000-0010: RESERVED
10024                                                              - 0011: Read Latency = 3 mclks
10025                                                              - 0100: Read Latency = 4 mclks
10026                                                              - 0101: Read Latency = 5 mclks
10027                                                              - 0110: Read Latency = 6 mclks
10028                                                              - 0111: Read Latency = 7 mclks
10029                                                              - 1000: Read Latency = 8 mclks
10030                                                              - 1001: Read Latency = 9 mclks
10031                                                              - 1010: Read Latency = 10 mclks
10032                                                              - 1011-1111: RESERVED
10033                                                         NOTE: This should only be written to a different value
10034                                                         during power-on SW initialization. */
10035        uint64_t reserved_6_7            : 2;
10036        uint64_t tskw                    : 2;       /**< Board Skew (represented in \#dclks)
10037                                                         Represents additional board skew of DQ/DQS.
10038                                                             - 00: board-skew = 0 dclk
10039                                                             - 01: board-skew = 1 dclk
10040                                                             - 10: board-skew = 2 dclk
10041                                                             - 11: board-skew = 3 dclk
10042                                                         NOTE: This should only be written to a different value
10043                                                         during power-on SW initialization. */
10044        uint64_t ref_int                 : 4;       /**< Refresh Interval (represented in \#of 512 dclk
10045                                                         increments).
10046                                                              - 0000: RESERVED
10047                                                              - 0001: 1 * 512  = 512 dclks
10048                                                              - ...
10049                                                              - 1111: 15 * 512 = 7680 dclks
10050                                                         NOTE: For finer level of granularity, refer to
10051                                                         REF_INTLO[8:0] field.
10052                                                         For RLDRAM-II, each refresh interval will
10053                                                         generate a burst of 8 AREF commands, one to each of
10054                                                         8 explicit banks (referenced using the RLD_BA[2:0]
10055                                                         pins.
10056                                                         Example: For mclk=200MHz/dclk(400MHz=2.5ns):
10057                                                           64K AREF cycles required within tREF=32ms
10058                                                             trefint = tREF(ms)/(64K cycles/8banks)
10059                                                                     = 32ms/8K = 3.9us = 3900ns
10060                                                             REF_INT = ROUND_DOWN[(trefint/dclk)/512]
10061                                                                     = ROUND_DOWN[(3900/2.5)/512]
10062                                                                     = 3
10063                                                         NOTE: This should only be written to a different value
10064                                                         during power-on SW initialization. */
10065#else
10066        uint64_t ref_int                 : 4;
10067        uint64_t tskw                    : 2;
10068        uint64_t reserved_6_7            : 2;
10069        uint64_t trl                     : 4;
10070        uint64_t twl                     : 4;
10071        uint64_t trc                     : 4;
10072        uint64_t tmrsc                   : 3;
10073        uint64_t mrs_ena                 : 1;
10074        uint64_t aref_ena                : 1;
10075        uint64_t ref_intlo               : 9;
10076        uint64_t reserved_34_63          : 30;
10077#endif
10078    } s;
10079    struct cvmx_dfa_memcfg1_s            cn38xx;
10080    struct cvmx_dfa_memcfg1_s            cn38xxp2;
10081    struct cvmx_dfa_memcfg1_s            cn58xx;
10082    struct cvmx_dfa_memcfg1_s            cn58xxp1;
10083} cvmx_dfa_memcfg1_t;
10084
10085
10086/**
10087 * cvmx_dfa_memcfg2
10088 *
10089 * DFA_MEMCFG2 = DFA Memory Config Register \#2
10090 * *** NOTE: Pass2 Addition
10091 *
10092 * Description: Additional Memory Configuration CSRs to support FCRAM-II/II+ and Network DRAM-II
10093 */
10094typedef union
10095{
10096    uint64_t u64;
10097    struct cvmx_dfa_memcfg2_s
10098    {
10099#if __BYTE_ORDER == __BIG_ENDIAN
10100        uint64_t reserved_12_63          : 52;
10101        uint64_t dteclkdis               : 1;       /**< DFA DTE Clock Disable
10102                                                         When SET, the DFA clocks for DTE(thread engine)
10103                                                         operation are disabled.
10104                                                         NOTE: When SET, SW MUST NEVER issue ANY operations to
10105                                                         the DFA via the NCB Bus. All DFA Operations must be
10106                                                         issued solely through the CP2 interface.
10107                                                         *** NOTE: PASS2 Addition
10108                                                         NOTE: When DTECLKDIS=1, if CP2 Errors are encountered
10109                                                         (ie: CP2SBE, CP2DBE, CP2PERR), the DFA_MEMFADR CSR
10110                                                         does not reflect the failing address/ctl information. */
10111        uint64_t silrst                  : 1;       /**< LLM-PHY Silo Reset
10112                                                         When a '1' is written (when the previous
10113                                                         value was a '0') causes the the LLM-PHY Silo read/write
10114                                                         pointers to be reset.
10115                                                         NOTE: SW MUST WAIT 400 dclks after the LAST HW Init
10116                                                         sequence was launched (ie: INIT_START 0->1 CSR write),
10117                                                         before the SILRST can be triggered (0->1). */
10118        uint64_t trfc                    : 5;       /**< FCRAM-II Refresh Interval
10119                                                         *** O9N UNSUPPORTED *** */
10120        uint64_t refshort                : 1;       /**< FCRAM Short Refresh Mode
10121                                                         *** O9N UNSUPPORTED *** */
10122        uint64_t ua_start                : 2;       /**< FCRAM-II Upper Addres Start
10123                                                         *** O9N UNSUPPORTED *** */
10124        uint64_t maxbnk                  : 1;       /**< Maximum Banks per-device (used by the address mapper
10125                                                         when extracting address bits for the memory bank#.
10126                                                           - 0: 4 banks/device
10127                                                           - 1: 8 banks/device
10128                                                         *** NOTE: PASS2 Addition */
10129        uint64_t fcram2p                 : 1;       /**< FCRAM-II+ Mode Enable
10130                                                         *** O9N UNSUPPORTED *** */
10131#else
10132        uint64_t fcram2p                 : 1;
10133        uint64_t maxbnk                  : 1;
10134        uint64_t ua_start                : 2;
10135        uint64_t refshort                : 1;
10136        uint64_t trfc                    : 5;
10137        uint64_t silrst                  : 1;
10138        uint64_t dteclkdis               : 1;
10139        uint64_t reserved_12_63          : 52;
10140#endif
10141    } s;
10142    struct cvmx_dfa_memcfg2_s            cn38xx;
10143    struct cvmx_dfa_memcfg2_s            cn38xxp2;
10144    struct cvmx_dfa_memcfg2_s            cn58xx;
10145    struct cvmx_dfa_memcfg2_s            cn58xxp1;
10146} cvmx_dfa_memcfg2_t;
10147
10148
10149/**
10150 * cvmx_dfa_memfadr
10151 *
10152 * DFA_MEMFADR = RLDRAM Failing Address/Control Register
10153 *
10154 * Description: DFA Memory Failing Address/Control Error Capture information
10155 * This register contains useful information to help in isolating an RLDRAM memory failure.
10156 * NOTE: The first detected SEC/DED/PERR failure is captured in DFA_MEMFADR, however, a DED or PERR (which is
10157 * more severe) will always overwrite a SEC error. The user can 'infer' the source of the interrupt
10158 * via the FSRC field.
10159 * NOTE: If DFA_MEMCFG2[DTECLKDIS]=1, the contents of this register are UNDEFINED.
10160 */
10161typedef union
10162{
10163    uint64_t u64;
10164    struct cvmx_dfa_memfadr_s
10165    {
10166#if __BYTE_ORDER == __BIG_ENDIAN
10167        uint64_t reserved_24_63          : 40;
10168        uint64_t maddr                   : 24;      /**< Memory Address */
10169#else
10170        uint64_t maddr                   : 24;
10171        uint64_t reserved_24_63          : 40;
10172#endif
10173    } s;
10174    struct cvmx_dfa_memfadr_cn31xx
10175    {
10176#if __BYTE_ORDER == __BIG_ENDIAN
10177        uint64_t reserved_40_63          : 24;
10178        uint64_t fdst                    : 9;       /**< Fill-Destination
10179                                                            FSRC[1:0]    | FDST[8:0]
10180                                                            -------------+-------------------------------------
10181                                                             0(NCB-DTE)  | [fillstart,2'b0,WIDX(1),DMODE(1),DTE(4)]
10182                                                             1(NCB-CSR)  | [ncbSRC[8:0]]
10183                                                             3(CP2-PP)   | [2'b0,SIZE(1),INDEX(1),PP(4),FID(1)]
10184                                                           where:
10185                                                               DTE: DFA Thread Engine ID#
10186                                                               PP: Packet Processor ID#
10187                                                               FID: Fill-ID# (unique per PP)
10188                                                               WIDX:  16b SIMPLE Mode (index)
10189                                                               DMODE: (0=16b SIMPLE/1=32b SIMPLE)
10190                                                               SIZE: (0=LW Mode access/1=QW Mode Access)
10191                                                               INDEX: (0=Low LW/1=High LW)
10192                                                         NOTE: QW refers to a 56/64-bit LLM Load/Store (intiated
10193                                                         by a processor core). LW refers to a 32-bit load/store. */
10194        uint64_t fsrc                    : 2;       /**< Fill-Source (0=NCB-DTE/1=NCB-CSR/2=RESERVED/3=PP-CP2) */
10195        uint64_t pnum                    : 1;       /**< Memory Port
10196                                                         NOTE: For O2P, this bit will always return zero. */
10197        uint64_t bnum                    : 3;       /**< Memory Bank
10198                                                         When DFA_DDR2_ADDR[RNK_LO]=1, BNUM[2]=RANK[0].
10199                                                         (RANK[1] can be inferred from MADDR[24:0]) */
10200        uint64_t maddr                   : 25;      /**< Memory Address */
10201#else
10202        uint64_t maddr                   : 25;
10203        uint64_t bnum                    : 3;
10204        uint64_t pnum                    : 1;
10205        uint64_t fsrc                    : 2;
10206        uint64_t fdst                    : 9;
10207        uint64_t reserved_40_63          : 24;
10208#endif
10209    } cn31xx;
10210    struct cvmx_dfa_memfadr_cn38xx
10211    {
10212#if __BYTE_ORDER == __BIG_ENDIAN
10213        uint64_t reserved_39_63          : 25;
10214        uint64_t fdst                    : 9;       /**< Fill-Destination
10215                                                            FSRC[1:0]    | FDST[8:0]
10216                                                            -------------+-------------------------------------
10217                                                             0(NCB-DTE)  | [fillstart,2'b0,WIDX(1),DMODE(1),DTE(4)]
10218                                                             1(NCB-CSR)  | [ncbSRC[8:0]]
10219                                                             3(CP2-PP)   | [2'b0,SIZE(1),INDEX(1),PP(4),FID(1)]
10220                                                           where:
10221                                                               DTE: DFA Thread Engine ID#
10222                                                               PP: Packet Processor ID#
10223                                                               FID: Fill-ID# (unique per PP)
10224                                                               WIDX:  18b SIMPLE Mode (index)
10225                                                               DMODE: (0=18b SIMPLE/1=36b SIMPLE)
10226                                                               SIZE: (0=LW Mode access/1=QW Mode Access)
10227                                                               INDEX: (0=Low LW/1=High LW)
10228                                                         NOTE: QW refers to a 64-bit LLM Load/Store (intiated
10229                                                         by a processor core). LW refers to a 36-bit load/store. */
10230        uint64_t fsrc                    : 2;       /**< Fill-Source (0=NCB-DTE/1=NCB-CSR/2=RESERVED/3=PP-CP2) */
10231        uint64_t pnum                    : 1;       /**< Memory Port
10232                                                         NOTE: the port id's are reversed
10233                                                            PNUM==0 => port#1
10234                                                            PNUM==1 => port#0 */
10235        uint64_t bnum                    : 3;       /**< Memory Bank */
10236        uint64_t maddr                   : 24;      /**< Memory Address */
10237#else
10238        uint64_t maddr                   : 24;
10239        uint64_t bnum                    : 3;
10240        uint64_t pnum                    : 1;
10241        uint64_t fsrc                    : 2;
10242        uint64_t fdst                    : 9;
10243        uint64_t reserved_39_63          : 25;
10244#endif
10245    } cn38xx;
10246    struct cvmx_dfa_memfadr_cn38xx       cn38xxp2;
10247    struct cvmx_dfa_memfadr_cn38xx       cn58xx;
10248    struct cvmx_dfa_memfadr_cn38xx       cn58xxp1;
10249} cvmx_dfa_memfadr_t;
10250
10251
10252/**
10253 * cvmx_dfa_memfcr
10254 *
10255 * DFA_MEMFCR = FCRAM MRS Register(s) EMRS2[14:0], EMRS1[14:0], MRS[14:0]
10256 * *** O9N UNSUPPORTED ***
10257 *
10258 * Notes:
10259 * For FCRAM-II please consult your device's data sheet for further details:
10260 * MRS Definition:
10261 *    A[13:8]=0   RESERVED
10262 *    A[7]=0      TEST MODE     (N3K requires test mode 0:"disabled")
10263 *    A[6:4]      CAS LATENCY   (fully programmable - SW must ensure that the value programmed
10264 *                               into DFA_MEM_CFG0[TRL] corresponds with this value).
10265 *    A[3]=0      BURST TYPE    (N3K requires 0:"Sequential" Burst Type)
10266 *    A[2:0]      BURST LENGTH  Burst Length [1:BL2/2:BL4] (N3K only supports BL=2,4)
10267 *
10268 *                                  In BL2 mode(for highest performance), only 1/2 the phsyical
10269 *                                  memory is unique (ie: each bunk stores the same information).
10270 *                                  In BL4 mode(highest capacity), all of the physical memory
10271 *                                  is unique (ie: each bunk is uniquely addressable).
10272 * EMRS Definition:
10273 *    A[13:12]    REFRESH MODE  (N3K Supports only 0:"Conventional" and 1:"Short" auto-refresh modes)
10274 *
10275 *                              (SW must ensure that the value programmed into DFA_MEMCFG2[REFSHORT]
10276 *                              is also reflected in the Refresh Mode encoding).
10277 *    A[11:7]=0   RESERVED
10278 *    A[6:5]=2    STROBE SELECT (N3K supports only 2:"Unidirectional DS/QS" mode - the read capture
10279 *                              silos rely on a conditional QS strobe)
10280 *    A[4:3]      DIC(QS)       QS Drive Strength: fully programmable (consult your FCRAM-II data sheet)
10281 *                                [0: Normal Output Drive/1: Strong Output Drive/2: Weak output Drive]
10282 *    A[2:1]      DIC(DQ)       DQ Drive Strength: fully programmable (consult your FCRAM-II data sheet)
10283 *                                [0: Normal Output Drive/1: Strong Output Drive/2: Weak output Drive]
10284 *    A[0]        DLL           DLL Enable: Programmable [0:DLL Enable/1: DLL Disable]
10285 *
10286 * EMRS2 Definition: (for FCRAM-II+)
10287 *    A[13:11]=0                RESERVED
10288 *    A[10:8]     ODTDS         On Die Termination (DS+/-)
10289 *                                 [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED]
10290 *    A[7:6]=0    MBW           Multi-Bank Write: (N3K requires use of 0:"single bank" mode only)
10291 *    A[5:3]      ODTin         On Die Termination (input pin)
10292 *                                 [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED]
10293 *    A[2:0]      ODTDQ         On Die Termination (DQ)
10294 *                                 [0: ODT Disable /1: 15ohm termination /(2-7): RESERVED]
10295 */
10296typedef union
10297{
10298    uint64_t u64;
10299    struct cvmx_dfa_memfcr_s
10300    {
10301#if __BYTE_ORDER == __BIG_ENDIAN
10302        uint64_t reserved_47_63          : 17;
10303        uint64_t emrs2                   : 15;      /**< Memory Address[14:0] during EMRS2(for FCRAM-II+)
10304                                                         *** O9N UNSUPPORTED *** */
10305        uint64_t reserved_31_31          : 1;
10306        uint64_t emrs                    : 15;      /**< Memory Address[14:0] during EMRS
10307                                                         *** O9N UNSUPPORTED ***
10308                                                           A[0]=1: DLL Enabled) */
10309        uint64_t reserved_15_15          : 1;
10310        uint64_t mrs                     : 15;      /**< FCRAM Memory Address[14:0] during MRS
10311                                                         *** O9N UNSUPPORTED ***
10312                                                           A[6:4]=4  CAS LATENCY=4(default)
10313                                                           A[3]=0    Burst Type(must be 0:Sequential)
10314                                                           A[2:0]=2  Burst Length=4(default) */
10315#else
10316        uint64_t mrs                     : 15;
10317        uint64_t reserved_15_15          : 1;
10318        uint64_t emrs                    : 15;
10319        uint64_t reserved_31_31          : 1;
10320        uint64_t emrs2                   : 15;
10321        uint64_t reserved_47_63          : 17;
10322#endif
10323    } s;
10324    struct cvmx_dfa_memfcr_s             cn38xx;
10325    struct cvmx_dfa_memfcr_s             cn38xxp2;
10326    struct cvmx_dfa_memfcr_s             cn58xx;
10327    struct cvmx_dfa_memfcr_s             cn58xxp1;
10328} cvmx_dfa_memfcr_t;
10329
10330
10331/**
10332 * cvmx_dfa_memrld
10333 *
10334 * DFA_MEMRLD = DFA RLDRAM MRS Register Values
10335 *
10336 * Description:
10337 */
10338typedef union
10339{
10340    uint64_t u64;
10341    struct cvmx_dfa_memrld_s
10342    {
10343#if __BYTE_ORDER == __BIG_ENDIAN
10344        uint64_t reserved_23_63          : 41;
10345        uint64_t mrsdat                  : 23;      /**< This field represents the data driven onto the
10346                                                         A[22:0] address lines during MRS(Mode Register Set)
10347                                                         commands (during a HW init sequence). This field
10348                                                         corresponds with the Mode Register Bit Map from
10349                                                         your RLDRAM-II device specific data sheet.
10350                                                            A[17:10]: RESERVED
10351                                                            A[9]:     ODT (on die termination)
10352                                                            A[8]:     Impedance Matching
10353                                                            A[7]:     DLL Reset
10354                                                            A[6]:     UNUSED
10355                                                            A[5]:     Address Mux  (for N3K: MUST BE ZERO)
10356                                                            A[4:3]:   Burst Length (for N3K: MUST BE ZERO)
10357                                                            A[2:0]:   Configuration (see data sheet for
10358                                                                      specific RLDRAM-II device).
10359                                                               - 000-001: CFG=1 [tRC=4/tRL=4/tWL=5]
10360                                                               - 010:     CFG=2 [tRC=6/tRL=6/tWL=7]
10361                                                               - 011:     CFG=3 [tRC=8/tRL=8/tWL=9]
10362                                                               - 100-111: RESERVED
10363                                                          NOTE: For additional density, the RLDRAM-II parts
10364                                                          can be 'clamshelled' (ie: two devices mounted on
10365                                                          different sides of the PCB board), since the BGA
10366                                                          pinout supports 'mirroring'.
10367                                                          To support a clamshell design, SW must preload
10368                                                          the MRSDAT[22:0] with the proper A[22:0] pin mapping
10369                                                          which is dependent on the 'selected' bunk/clam
10370                                                          (see also: DFA_MEMCFG0[BUNK_INIT] field).
10371                                                          NOTE: Care MUST BE TAKEN NOT to write to this register
10372                                                          within 64K eclk cycles of a HW INIT (see: INIT_P0/INIT_P1).
10373                                                          NOTE: This should only be written to a different value
10374                                                          during power-on SW initialization. */
10375#else
10376        uint64_t mrsdat                  : 23;
10377        uint64_t reserved_23_63          : 41;
10378#endif
10379    } s;
10380    struct cvmx_dfa_memrld_s             cn38xx;
10381    struct cvmx_dfa_memrld_s             cn38xxp2;
10382    struct cvmx_dfa_memrld_s             cn58xx;
10383    struct cvmx_dfa_memrld_s             cn58xxp1;
10384} cvmx_dfa_memrld_t;
10385
10386
10387/**
10388 * cvmx_dfa_ncbctl
10389 *
10390 * DFA_NCBCTL = DFA NCB CTL Register
10391 *
10392 * Description:
10393 */
10394typedef union
10395{
10396    uint64_t u64;
10397    struct cvmx_dfa_ncbctl_s
10398    {
10399#if __BYTE_ORDER == __BIG_ENDIAN
10400        uint64_t reserved_11_63          : 53;
10401        uint64_t sbdnum                  : 5;       /**< SBD Debug Entry#
10402                                                         For internal use only. (DFA Scoreboard debug)
10403                                                         Selects which one of 32 DFA Scoreboard entries is
10404                                                         latched into the DFA_SBD_DBG[0-3] registers. */
10405        uint64_t sbdlck                  : 1;       /**< DFA Scoreboard LOCK Strobe
10406                                                         For internal use only. (DFA Scoreboard debug)
10407                                                         When written with a '1', the DFA Scoreboard Debug
10408                                                         registers (DFA_SBD_DBG[0-3]) are all locked down.
10409                                                         This allows SW to lock down the contents of the entire
10410                                                         SBD for a single instant in time. All subsequent reads
10411                                                         of the DFA scoreboard registers will return the data
10412                                                         from that instant in time. */
10413        uint64_t dcmode                  : 1;       /**< DRF-CRQ/DTE Arbiter Mode
10414                                                         DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR)
10415                                                         NOTE: This should only be written to a different value
10416                                                         during power-on SW initialization. */
10417        uint64_t dtmode                  : 1;       /**< DRF-DTE Arbiter Mode
10418                                                         DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR)
10419                                                         NOTE: This should only be written to a different value
10420                                                         during power-on SW initialization. */
10421        uint64_t pmode                   : 1;       /**< NCB-NRP Arbiter Mode
10422                                                         (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR
10423                                                         NOTE: This should only be written to a different value
10424                                                         during power-on SW initialization. */
10425        uint64_t qmode                   : 1;       /**< NCB-NRQ Arbiter Mode
10426                                                         (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR
10427                                                         NOTE: This should only be written to a different value
10428                                                         during power-on SW initialization. */
10429        uint64_t imode                   : 1;       /**< NCB-Inbound Arbiter
10430                                                         (0=FP [LP=NRQ,HP=NRP], 1=RR)
10431                                                         NOTE: This should only be written to a different value
10432                                                         during power-on SW initialization. */
10433#else
10434        uint64_t imode                   : 1;
10435        uint64_t qmode                   : 1;
10436        uint64_t pmode                   : 1;
10437        uint64_t dtmode                  : 1;
10438        uint64_t dcmode                  : 1;
10439        uint64_t sbdlck                  : 1;
10440        uint64_t sbdnum                  : 5;
10441        uint64_t reserved_11_63          : 53;
10442#endif
10443    } s;
10444    struct cvmx_dfa_ncbctl_cn38xx
10445    {
10446#if __BYTE_ORDER == __BIG_ENDIAN
10447        uint64_t reserved_10_63          : 54;
10448        uint64_t sbdnum                  : 4;       /**< SBD Debug Entry#
10449                                                         For internal use only. (DFA Scoreboard debug)
10450                                                         Selects which one of 16 DFA Scoreboard entries is
10451                                                         latched into the DFA_SBD_DBG[0-3] registers. */
10452        uint64_t sbdlck                  : 1;       /**< DFA Scoreboard LOCK Strobe
10453                                                         For internal use only. (DFA Scoreboard debug)
10454                                                         When written with a '1', the DFA Scoreboard Debug
10455                                                         registers (DFA_SBD_DBG[0-3]) are all locked down.
10456                                                         This allows SW to lock down the contents of the entire
10457                                                         SBD for a single instant in time. All subsequent reads
10458                                                         of the DFA scoreboard registers will return the data
10459                                                         from that instant in time. */
10460        uint64_t dcmode                  : 1;       /**< DRF-CRQ/DTE Arbiter Mode
10461                                                         DTE-DRF Arbiter (0=FP [LP=CRQ/HP=DTE],1=RR)
10462                                                         NOTE: This should only be written to a different value
10463                                                         during power-on SW initialization. */
10464        uint64_t dtmode                  : 1;       /**< DRF-DTE Arbiter Mode
10465                                                         DTE-DRF Arbiter (0=FP [LP=DTE[15],...,HP=DTE[0]],1=RR)
10466                                                         NOTE: This should only be written to a different value
10467                                                         during power-on SW initialization. */
10468        uint64_t pmode                   : 1;       /**< NCB-NRP Arbiter Mode
10469                                                         (0=Fixed Priority [LP=WQF,DFF,HP=RGF]/1=RR
10470                                                         NOTE: This should only be written to a different value
10471                                                         during power-on SW initialization. */
10472        uint64_t qmode                   : 1;       /**< NCB-NRQ Arbiter Mode
10473                                                         (0=Fixed Priority [LP=IRF,RWF,PRF,HP=GRF]/1=RR
10474                                                         NOTE: This should only be written to a different value
10475                                                         during power-on SW initialization. */
10476        uint64_t imode                   : 1;       /**< NCB-Inbound Arbiter
10477                                                         (0=FP [LP=NRQ,HP=NRP], 1=RR)
10478                                                         NOTE: This should only be written to a different value
10479                                                         during power-on SW initialization. */
10480#else
10481        uint64_t imode                   : 1;
10482        uint64_t qmode                   : 1;
10483        uint64_t pmode                   : 1;
10484        uint64_t dtmode                  : 1;
10485        uint64_t dcmode                  : 1;
10486        uint64_t sbdlck                  : 1;
10487        uint64_t sbdnum                  : 4;
10488        uint64_t reserved_10_63          : 54;
10489#endif
10490    } cn38xx;
10491    struct cvmx_dfa_ncbctl_cn38xx        cn38xxp2;
10492    struct cvmx_dfa_ncbctl_s             cn58xx;
10493    struct cvmx_dfa_ncbctl_s             cn58xxp1;
10494} cvmx_dfa_ncbctl_t;
10495
10496
10497/**
10498 * cvmx_dfa_rodt_comp_ctl
10499 *
10500 * DFA_RODT_COMP_CTL = DFA RLD Compensation control (For read "on die termination")
10501 *
10502 */
10503typedef union
10504{
10505    uint64_t u64;
10506    struct cvmx_dfa_rodt_comp_ctl_s
10507    {
10508#if __BYTE_ORDER == __BIG_ENDIAN
10509        uint64_t reserved_17_63          : 47;
10510        uint64_t enable                  : 1;       /**< Read On Die Termination Enable
10511                                                         (0=disable, 1=enable) */
10512        uint64_t reserved_12_15          : 4;
10513        uint64_t nctl                    : 4;       /**< Compensation control bits */
10514        uint64_t reserved_5_7            : 3;
10515        uint64_t pctl                    : 5;       /**< Compensation control bits */
10516#else
10517        uint64_t pctl                    : 5;
10518        uint64_t reserved_5_7            : 3;
10519        uint64_t nctl                    : 4;
10520        uint64_t reserved_12_15          : 4;
10521        uint64_t enable                  : 1;
10522        uint64_t reserved_17_63          : 47;
10523#endif
10524    } s;
10525    struct cvmx_dfa_rodt_comp_ctl_s      cn58xx;
10526    struct cvmx_dfa_rodt_comp_ctl_s      cn58xxp1;
10527} cvmx_dfa_rodt_comp_ctl_t;
10528
10529
10530/**
10531 * cvmx_dfa_sbd_dbg0
10532 *
10533 * DFA_SBD_DBG0 = DFA Scoreboard Debug \#0 Register
10534 *
10535 * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down.
10536 * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the
10537 * CSR read.
10538 * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model)
10539 * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an
10540 * instruction.
10541 */
10542typedef union
10543{
10544    uint64_t u64;
10545    struct cvmx_dfa_sbd_dbg0_s
10546    {
10547#if __BYTE_ORDER == __BIG_ENDIAN
10548        uint64_t sbd0                    : 64;      /**< DFA ScoreBoard \#0 Data
10549                                                         For internal use only! (DFA Scoreboard Debug)
10550                                                         [63:40] rptr[26:3]: Result Base Pointer
10551                                                         [39:24] rwcnt[15:0] Cumulative Result Write Counter
10552                                                         [23]    lastgrdrsp: Last Gather-Rd Response
10553                                                         [22]    wtgrdrsp: Waiting Gather-Rd Response
10554                                                         [21]    wtgrdreq: Waiting for Gather-Rd Issue
10555                                                         [20]    glvld: GLPTR/GLCNT Valid
10556                                                         [19]    cmpmark: Completion Marked Node Detected
10557                                                         [18:17] cmpcode[1:0]: Completion Code
10558                                                                       [0=PDGONE/1=PERR/2=RFULL/3=TERM]
10559                                                         [16]    cmpdet: Completion Detected
10560                                                         [15]    wthdrwrcmtrsp: Waiting for HDR RWrCmtRsp
10561                                                         [14]    wtlastwrcmtrsp: Waiting for LAST RESULT
10562                                                                       RWrCmtRsp
10563                                                         [13]    hdrwrreq: Waiting for HDR RWrReq
10564                                                         [12]    wtrwrreq: Waiting for RWrReq
10565                                                         [11]    wtwqwrreq: Waiting for WQWrReq issue
10566                                                         [10]    lastprdrspeot: Last Packet-Rd Response
10567                                                         [9]     lastprdrsp: Last Packet-Rd Response
10568                                                         [8]     wtprdrsp:  Waiting for PRdRsp EOT
10569                                                         [7]     wtprdreq: Waiting for PRdReq Issue
10570                                                         [6]     lastpdvld: PDPTR/PDLEN Valid
10571                                                         [5]     pdvld: Packet Data Valid
10572                                                         [4]     wqvld: WQVLD
10573                                                         [3]     wqdone: WorkQueue Done condition
10574                                                                       a) WQWrReq issued(for WQPTR<>0) OR
10575                                                                       b) HDR RWrCmtRsp completed)
10576                                                         [2]     rwstf: Resultant write STF/P Mode
10577                                                         [1]     pdldt: Packet-Data LDT mode
10578                                                         [0]     gmode: Gather-Mode */
10579#else
10580        uint64_t sbd0                    : 64;
10581#endif
10582    } s;
10583    struct cvmx_dfa_sbd_dbg0_s           cn31xx;
10584    struct cvmx_dfa_sbd_dbg0_s           cn38xx;
10585    struct cvmx_dfa_sbd_dbg0_s           cn38xxp2;
10586    struct cvmx_dfa_sbd_dbg0_s           cn58xx;
10587    struct cvmx_dfa_sbd_dbg0_s           cn58xxp1;
10588} cvmx_dfa_sbd_dbg0_t;
10589
10590
10591/**
10592 * cvmx_dfa_sbd_dbg1
10593 *
10594 * DFA_SBD_DBG1 = DFA Scoreboard Debug \#1 Register
10595 *
10596 * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down.
10597 * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the
10598 * CSR read.
10599 * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model)
10600 * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an
10601 * instruction.
10602 */
10603typedef union
10604{
10605    uint64_t u64;
10606    struct cvmx_dfa_sbd_dbg1_s
10607    {
10608#if __BYTE_ORDER == __BIG_ENDIAN
10609        uint64_t sbd1                    : 64;      /**< DFA ScoreBoard \#1 Data
10610                                                         For internal use only! (DFA Scoreboard Debug)
10611                                                         [63:61] wqptr[35:33]: Work Queue Pointer
10612                                                         [60:52] rptr[35:27]: Result Base Pointer
10613                                                         [51:16] pdptr[35:0]: Packet Data Pointer
10614                                                         [15:0]  pdcnt[15:0]: Packet Data Counter */
10615#else
10616        uint64_t sbd1                    : 64;
10617#endif
10618    } s;
10619    struct cvmx_dfa_sbd_dbg1_s           cn31xx;
10620    struct cvmx_dfa_sbd_dbg1_s           cn38xx;
10621    struct cvmx_dfa_sbd_dbg1_s           cn38xxp2;
10622    struct cvmx_dfa_sbd_dbg1_s           cn58xx;
10623    struct cvmx_dfa_sbd_dbg1_s           cn58xxp1;
10624} cvmx_dfa_sbd_dbg1_t;
10625
10626
10627/**
10628 * cvmx_dfa_sbd_dbg2
10629 *
10630 * DFA_SBD_DBG2 = DFA Scoreboard Debug \#2 Register
10631 *
10632 * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down.
10633 * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the
10634 * CSR read.
10635 * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model)
10636 * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an
10637 * instruction.
10638 */
10639typedef union
10640{
10641    uint64_t u64;
10642    struct cvmx_dfa_sbd_dbg2_s
10643    {
10644#if __BYTE_ORDER == __BIG_ENDIAN
10645        uint64_t sbd2                    : 64;      /**< DFA ScoreBoard \#2 Data
10646                                                         [63:49] wqptr[17:3]: Work Queue Pointer
10647                                                         [48:16] rwptr[35:3]: Result Write Pointer
10648                                                         [15:0]  prwcnt[15:0]: Pending Result Write Counter */
10649#else
10650        uint64_t sbd2                    : 64;
10651#endif
10652    } s;
10653    struct cvmx_dfa_sbd_dbg2_s           cn31xx;
10654    struct cvmx_dfa_sbd_dbg2_s           cn38xx;
10655    struct cvmx_dfa_sbd_dbg2_s           cn38xxp2;
10656    struct cvmx_dfa_sbd_dbg2_s           cn58xx;
10657    struct cvmx_dfa_sbd_dbg2_s           cn58xxp1;
10658} cvmx_dfa_sbd_dbg2_t;
10659
10660
10661/**
10662 * cvmx_dfa_sbd_dbg3
10663 *
10664 * DFA_SBD_DBG3 = DFA Scoreboard Debug \#3 Register
10665 *
10666 * Description: When the DFA_NCBCTL[SBDLCK] bit is written '1', the contents of this register are locked down.
10667 * Otherwise, the contents of this register are the 'active' contents of the DFA Scoreboard at the time of the
10668 * CSR read.
10669 * VERIFICATION NOTE: Read data is unsafe. X's(undefined data) can propagate (in the behavioral model)
10670 * on the reads unless the DTE Engine specified by DFA_NCBCTL[SBDNUM] has previously been assigned an
10671 * instruction.
10672 */
10673typedef union
10674{
10675    uint64_t u64;
10676    struct cvmx_dfa_sbd_dbg3_s
10677    {
10678#if __BYTE_ORDER == __BIG_ENDIAN
10679        uint64_t sbd3                    : 64;      /**< DFA ScoreBoard \#3 Data
10680                                                         [63:49] wqptr[32:18]: Work Queue Pointer
10681                                                         [48:16] glptr[35:3]: Gather List Pointer
10682                                                         [15:0]  glcnt[15:0]: Gather List Counter */
10683#else
10684        uint64_t sbd3                    : 64;
10685#endif
10686    } s;
10687    struct cvmx_dfa_sbd_dbg3_s           cn31xx;
10688    struct cvmx_dfa_sbd_dbg3_s           cn38xx;
10689    struct cvmx_dfa_sbd_dbg3_s           cn38xxp2;
10690    struct cvmx_dfa_sbd_dbg3_s           cn58xx;
10691    struct cvmx_dfa_sbd_dbg3_s           cn58xxp1;
10692} cvmx_dfa_sbd_dbg3_t;
10693
10694
10695/**
10696 * cvmx_fpa_bist_status
10697 *
10698 * FPA_BIST_STATUS = BIST Status of FPA Memories
10699 *
10700 * The result of the BIST run on the FPA memories.
10701 */
10702typedef union
10703{
10704    uint64_t u64;
10705    struct cvmx_fpa_bist_status_s
10706    {
10707#if __BYTE_ORDER == __BIG_ENDIAN
10708        uint64_t reserved_5_63           : 59;
10709        uint64_t frd                     : 1;       /**< fpa_frd  memory bist status. */
10710        uint64_t fpf0                    : 1;       /**< fpa_fpf0 memory bist status. */
10711        uint64_t fpf1                    : 1;       /**< fpa_fpf1 memory bist status. */
10712        uint64_t ffr                     : 1;       /**< fpa_ffr  memory bist status. */
10713        uint64_t fdr                     : 1;       /**< fpa_fdr  memory bist status. */
10714#else
10715        uint64_t fdr                     : 1;
10716        uint64_t ffr                     : 1;
10717        uint64_t fpf1                    : 1;
10718        uint64_t fpf0                    : 1;
10719        uint64_t frd                     : 1;
10720        uint64_t reserved_5_63           : 59;
10721#endif
10722    } s;
10723    struct cvmx_fpa_bist_status_s        cn30xx;
10724    struct cvmx_fpa_bist_status_s        cn31xx;
10725    struct cvmx_fpa_bist_status_s        cn38xx;
10726    struct cvmx_fpa_bist_status_s        cn38xxp2;
10727    struct cvmx_fpa_bist_status_s        cn50xx;
10728    struct cvmx_fpa_bist_status_s        cn52xx;
10729    struct cvmx_fpa_bist_status_s        cn52xxp1;
10730    struct cvmx_fpa_bist_status_s        cn56xx;
10731    struct cvmx_fpa_bist_status_s        cn56xxp1;
10732    struct cvmx_fpa_bist_status_s        cn58xx;
10733    struct cvmx_fpa_bist_status_s        cn58xxp1;
10734} cvmx_fpa_bist_status_t;
10735
10736
10737/**
10738 * cvmx_fpa_ctl_status
10739 *
10740 * FPA_CTL_STATUS = FPA's Control/Status Register
10741 *
10742 * The FPA's interrupt enable register.
10743 */
10744typedef union
10745{
10746    uint64_t u64;
10747    struct cvmx_fpa_ctl_status_s
10748    {
10749#if __BYTE_ORDER == __BIG_ENDIAN
10750        uint64_t reserved_18_63          : 46;
10751        uint64_t reset                   : 1;       /**< When set causes a reset of the FPA with the
10752                                                         exception of the RSL. */
10753        uint64_t use_ldt                 : 1;       /**< When clear '0' the FPA will use LDT to load
10754                                                         pointers from the L2C. */
10755        uint64_t use_stt                 : 1;       /**< When clear '0' the FPA will use STT to store
10756                                                         pointers to the L2C. */
10757        uint64_t enb                     : 1;       /**< Must be set to 1 AFTER writing all config registers
10758                                                         and 10 cycles have past. If any of the config
10759                                                         register are written after writing this bit the
10760                                                         FPA may begin to operate incorrectly. */
10761        uint64_t mem1_err                : 7;       /**< Causes a flip of the ECC bit associated 38:32
10762                                                         respective to bit 6:0 of this field, for FPF
10763                                                         FIFO 1. */
10764        uint64_t mem0_err                : 7;       /**< Causes a flip of the ECC bit associated 38:32
10765                                                         respective to bit 6:0 of this field, for FPF
10766                                                         FIFO 0. */
10767#else
10768        uint64_t mem0_err                : 7;
10769        uint64_t mem1_err                : 7;
10770        uint64_t enb                     : 1;
10771        uint64_t use_stt                 : 1;
10772        uint64_t use_ldt                 : 1;
10773        uint64_t reset                   : 1;
10774        uint64_t reserved_18_63          : 46;
10775#endif
10776    } s;
10777    struct cvmx_fpa_ctl_status_s         cn30xx;
10778    struct cvmx_fpa_ctl_status_s         cn31xx;
10779    struct cvmx_fpa_ctl_status_s         cn38xx;
10780    struct cvmx_fpa_ctl_status_s         cn38xxp2;
10781    struct cvmx_fpa_ctl_status_s         cn50xx;
10782    struct cvmx_fpa_ctl_status_s         cn52xx;
10783    struct cvmx_fpa_ctl_status_s         cn52xxp1;
10784    struct cvmx_fpa_ctl_status_s         cn56xx;
10785    struct cvmx_fpa_ctl_status_s         cn56xxp1;
10786    struct cvmx_fpa_ctl_status_s         cn58xx;
10787    struct cvmx_fpa_ctl_status_s         cn58xxp1;
10788} cvmx_fpa_ctl_status_t;
10789
10790
10791/**
10792 * cvmx_fpa_fpf#_marks
10793 *
10794 * FPA_FPF1_MARKS = FPA's Queue 1 Free Page FIFO Read Write Marks
10795 *
10796 * The high and low watermark register that determines when we write and read free pages from L2C
10797 * for Queue 1. The value of FPF_RD and FPF_WR should have at least a 33 diffrence. Recommend value
10798 * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)
10799 */
10800typedef union
10801{
10802    uint64_t u64;
10803    struct cvmx_fpa_fpfx_marks_s
10804    {
10805#if __BYTE_ORDER == __BIG_ENDIAN
10806        uint64_t reserved_22_63          : 42;
10807        uint64_t fpf_wr                  : 11;      /**< When the number of free-page-pointers in a
10808                                                          queue exceeds this value the FPA will write
10809                                                          32-page-pointers of that queue to DRAM.
10810                                                         The MAX value for this field should be
10811                                                         FPA_FPF0_SIZE[FPF_SIZ]-2. */
10812        uint64_t fpf_rd                  : 11;      /**< When the number of free-page-pointers in a
10813                                                          queue drops below this value amd there are
10814                                                          free-page-pointers in DRAM, the FPA will
10815                                                          read one page (32 pointers) from DRAM.
10816                                                         This maximum value for this field should be
10817                                                         FPA_FPF0_SIZE[FPF_SIZ]-34. The min number
10818                                                         for this would be 16. */
10819#else
10820        uint64_t fpf_rd                  : 11;
10821        uint64_t fpf_wr                  : 11;
10822        uint64_t reserved_22_63          : 42;
10823#endif
10824    } s;
10825    struct cvmx_fpa_fpfx_marks_s         cn38xx;
10826    struct cvmx_fpa_fpfx_marks_s         cn38xxp2;
10827    struct cvmx_fpa_fpfx_marks_s         cn56xx;
10828    struct cvmx_fpa_fpfx_marks_s         cn56xxp1;
10829    struct cvmx_fpa_fpfx_marks_s         cn58xx;
10830    struct cvmx_fpa_fpfx_marks_s         cn58xxp1;
10831} cvmx_fpa_fpfx_marks_t;
10832
10833
10834/**
10835 * cvmx_fpa_fpf#_size
10836 *
10837 * FPA_FPFX_SIZE = FPA's Queue 1-7 Free Page FIFO Size
10838 *
10839 * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
10840 * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
10841 * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048.
10842 */
10843typedef union
10844{
10845    uint64_t u64;
10846    struct cvmx_fpa_fpfx_size_s
10847    {
10848#if __BYTE_ORDER == __BIG_ENDIAN
10849        uint64_t reserved_11_63          : 53;
10850        uint64_t fpf_siz                 : 11;      /**< The number of entries assigned in the FPA FIFO
10851                                                         (used to hold page-pointers) for this Queue.
10852                                                         The value of this register must divisable by 2,
10853                                                         and the FPA will ignore bit [0] of this register.
10854                                                         The total of the FPF_SIZ field of the 8 (0-7)
10855                                                         FPA_FPF#_SIZE registers must not exceed 2048.
10856                                                         After writing this field the FPA will need 10
10857                                                         core clock cycles to be ready for operation. The
10858                                                         assignment of location in the FPA FIFO must
10859                                                         start with Queue 0, then 1, 2, etc.
10860                                                         The number of useable entries will be FPF_SIZ-2. */
10861#else
10862        uint64_t fpf_siz                 : 11;
10863        uint64_t reserved_11_63          : 53;
10864#endif
10865    } s;
10866    struct cvmx_fpa_fpfx_size_s          cn38xx;
10867    struct cvmx_fpa_fpfx_size_s          cn38xxp2;
10868    struct cvmx_fpa_fpfx_size_s          cn56xx;
10869    struct cvmx_fpa_fpfx_size_s          cn56xxp1;
10870    struct cvmx_fpa_fpfx_size_s          cn58xx;
10871    struct cvmx_fpa_fpfx_size_s          cn58xxp1;
10872} cvmx_fpa_fpfx_size_t;
10873
10874
10875/**
10876 * cvmx_fpa_fpf0_marks
10877 *
10878 * FPA_FPF0_MARKS = FPA's Queue 0 Free Page FIFO Read Write Marks
10879 *
10880 * The high and low watermark register that determines when we write and read free pages from L2C
10881 * for Queue 0. The value of FPF_RD and FPF_WR should have at least a 33 diffrence. Recommend value
10882 * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)
10883 */
10884typedef union
10885{
10886    uint64_t u64;
10887    struct cvmx_fpa_fpf0_marks_s
10888    {
10889#if __BYTE_ORDER == __BIG_ENDIAN
10890        uint64_t reserved_24_63          : 40;
10891        uint64_t fpf_wr                  : 12;      /**< When the number of free-page-pointers in a
10892                                                          queue exceeds this value the FPA will write
10893                                                          32-page-pointers of that queue to DRAM.
10894                                                         The MAX value for this field should be
10895                                                         FPA_FPF0_SIZE[FPF_SIZ]-2. */
10896        uint64_t fpf_rd                  : 12;      /**< When the number of free-page-pointers in a
10897                                                         queue drops below this value amd there are
10898                                                         free-page-pointers in DRAM, the FPA will
10899                                                         read one page (32 pointers) from DRAM.
10900                                                         This maximum value for this field should be
10901                                                         FPA_FPF0_SIZE[FPF_SIZ]-34. The min number
10902                                                         for this would be 16. */
10903#else
10904        uint64_t fpf_rd                  : 12;
10905        uint64_t fpf_wr                  : 12;
10906        uint64_t reserved_24_63          : 40;
10907#endif
10908    } s;
10909    struct cvmx_fpa_fpf0_marks_s         cn38xx;
10910    struct cvmx_fpa_fpf0_marks_s         cn38xxp2;
10911    struct cvmx_fpa_fpf0_marks_s         cn56xx;
10912    struct cvmx_fpa_fpf0_marks_s         cn56xxp1;
10913    struct cvmx_fpa_fpf0_marks_s         cn58xx;
10914    struct cvmx_fpa_fpf0_marks_s         cn58xxp1;
10915} cvmx_fpa_fpf0_marks_t;
10916
10917
10918/**
10919 * cvmx_fpa_fpf0_size
10920 *
10921 * FPA_FPF0_SIZE = FPA's Queue 0 Free Page FIFO Size
10922 *
10923 * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
10924 * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
10925 * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048.
10926 */
10927typedef union
10928{
10929    uint64_t u64;
10930    struct cvmx_fpa_fpf0_size_s
10931    {
10932#if __BYTE_ORDER == __BIG_ENDIAN
10933        uint64_t reserved_12_63          : 52;
10934        uint64_t fpf_siz                 : 12;      /**< The number of entries assigned in the FPA FIFO
10935                                                         (used to hold page-pointers) for this Queue.
10936                                                         The value of this register must divisable by 2,
10937                                                         and the FPA will ignore bit [0] of this register.
10938                                                         The total of the FPF_SIZ field of the 8 (0-7)
10939                                                         FPA_FPF#_SIZE registers must not exceed 2048.
10940                                                         After writing this field the FPA will need 10
10941                                                         core clock cycles to be ready for operation. The
10942                                                         assignment of location in the FPA FIFO must
10943                                                         start with Queue 0, then 1, 2, etc.
10944                                                         The number of useable entries will be FPF_SIZ-2. */
10945#else
10946        uint64_t fpf_siz                 : 12;
10947        uint64_t reserved_12_63          : 52;
10948#endif
10949    } s;
10950    struct cvmx_fpa_fpf0_size_s          cn38xx;
10951    struct cvmx_fpa_fpf0_size_s          cn38xxp2;
10952    struct cvmx_fpa_fpf0_size_s          cn56xx;
10953    struct cvmx_fpa_fpf0_size_s          cn56xxp1;
10954    struct cvmx_fpa_fpf0_size_s          cn58xx;
10955    struct cvmx_fpa_fpf0_size_s          cn58xxp1;
10956} cvmx_fpa_fpf0_size_t;
10957
10958
10959/**
10960 * cvmx_fpa_int_enb
10961 *
10962 * FPA_INT_ENB = FPA's Interrupt Enable
10963 *
10964 * The FPA's interrupt enable register.
10965 */
10966typedef union
10967{
10968    uint64_t u64;
10969    struct cvmx_fpa_int_enb_s
10970    {
10971#if __BYTE_ORDER == __BIG_ENDIAN
10972        uint64_t reserved_28_63          : 36;
10973        uint64_t q7_perr                 : 1;       /**< When set (1) and bit 27 of the FPA_INT_SUM
10974                                                         register is asserted the FPA will assert an
10975                                                         interrupt. */
10976        uint64_t q7_coff                 : 1;       /**< When set (1) and bit 26 of the FPA_INT_SUM
10977                                                         register is asserted the FPA will assert an
10978                                                         interrupt. */
10979        uint64_t q7_und                  : 1;       /**< When set (1) and bit 25 of the FPA_INT_SUM
10980                                                         register is asserted the FPA will assert an
10981                                                         interrupt. */
10982        uint64_t q6_perr                 : 1;       /**< When set (1) and bit 24 of the FPA_INT_SUM
10983                                                         register is asserted the FPA will assert an
10984                                                         interrupt. */
10985        uint64_t q6_coff                 : 1;       /**< When set (1) and bit 23 of the FPA_INT_SUM
10986                                                         register is asserted the FPA will assert an
10987                                                         interrupt. */
10988        uint64_t q6_und                  : 1;       /**< When set (1) and bit 22 of the FPA_INT_SUM
10989                                                         register is asserted the FPA will assert an
10990                                                         interrupt. */
10991        uint64_t q5_perr                 : 1;       /**< When set (1) and bit 21 of the FPA_INT_SUM
10992                                                         register is asserted the FPA will assert an
10993                                                         interrupt. */
10994        uint64_t q5_coff                 : 1;       /**< When set (1) and bit 20 of the FPA_INT_SUM
10995                                                         register is asserted the FPA will assert an
10996                                                         interrupt. */
10997        uint64_t q5_und                  : 1;       /**< When set (1) and bit 19 of the FPA_INT_SUM
10998                                                         register is asserted the FPA will assert an
10999                                                         interrupt. */
11000        uint64_t q4_perr                 : 1;       /**< When set (1) and bit 18 of the FPA_INT_SUM
11001                                                         register is asserted the FPA will assert an
11002                                                         interrupt. */
11003        uint64_t q4_coff                 : 1;       /**< When set (1) and bit 17 of the FPA_INT_SUM
11004                                                         register is asserted the FPA will assert an
11005                                                         interrupt. */
11006        uint64_t q4_und                  : 1;       /**< When set (1) and bit 16 of the FPA_INT_SUM
11007                                                         register is asserted the FPA will assert an
11008                                                         interrupt. */
11009        uint64_t q3_perr                 : 1;       /**< When set (1) and bit 15 of the FPA_INT_SUM
11010                                                         register is asserted the FPA will assert an
11011                                                         interrupt. */
11012        uint64_t q3_coff                 : 1;       /**< When set (1) and bit 14 of the FPA_INT_SUM
11013                                                         register is asserted the FPA will assert an
11014                                                         interrupt. */
11015        uint64_t q3_und                  : 1;       /**< When set (1) and bit 13 of the FPA_INT_SUM
11016                                                         register is asserted the FPA will assert an
11017                                                         interrupt. */
11018        uint64_t q2_perr                 : 1;       /**< When set (1) and bit 12 of the FPA_INT_SUM
11019                                                         register is asserted the FPA will assert an
11020                                                         interrupt. */
11021        uint64_t q2_coff                 : 1;       /**< When set (1) and bit 11 of the FPA_INT_SUM
11022                                                         register is asserted the FPA will assert an
11023                                                         interrupt. */
11024        uint64_t q2_und                  : 1;       /**< When set (1) and bit 10 of the FPA_INT_SUM
11025                                                         register is asserted the FPA will assert an
11026                                                         interrupt. */
11027        uint64_t q1_perr                 : 1;       /**< When set (1) and bit 9 of the FPA_INT_SUM
11028                                                         register is asserted the FPA will assert an
11029                                                         interrupt. */
11030        uint64_t q1_coff                 : 1;       /**< When set (1) and bit 8 of the FPA_INT_SUM
11031                                                         register is asserted the FPA will assert an
11032                                                         interrupt. */
11033        uint64_t q1_und                  : 1;       /**< When set (1) and bit 7 of the FPA_INT_SUM
11034                                                         register is asserted the FPA will assert an
11035                                                         interrupt. */
11036        uint64_t q0_perr                 : 1;       /**< When set (1) and bit 6 of the FPA_INT_SUM
11037                                                         register is asserted the FPA will assert an
11038                                                         interrupt. */
11039        uint64_t q0_coff                 : 1;       /**< When set (1) and bit 5 of the FPA_INT_SUM
11040                                                         register is asserted the FPA will assert an
11041                                                         interrupt. */
11042        uint64_t q0_und                  : 1;       /**< When set (1) and bit 4 of the FPA_INT_SUM
11043                                                         register is asserted the FPA will assert an
11044                                                         interrupt. */
11045        uint64_t fed1_dbe                : 1;       /**< When set (1) and bit 3 of the FPA_INT_SUM
11046                                                         register is asserted the FPA will assert an
11047                                                         interrupt. */
11048        uint64_t fed1_sbe                : 1;       /**< When set (1) and bit 2 of the FPA_INT_SUM
11049                                                         register is asserted the FPA will assert an
11050                                                         interrupt. */
11051        uint64_t fed0_dbe                : 1;       /**< When set (1) and bit 1 of the FPA_INT_SUM
11052                                                         register is asserted the FPA will assert an
11053                                                         interrupt. */
11054        uint64_t fed0_sbe                : 1;       /**< When set (1) and bit 0 of the FPA_INT_SUM
11055                                                         register is asserted the FPA will assert an
11056                                                         interrupt. */
11057#else
11058        uint64_t fed0_sbe                : 1;
11059        uint64_t fed0_dbe                : 1;
11060        uint64_t fed1_sbe                : 1;
11061        uint64_t fed1_dbe                : 1;
11062        uint64_t q0_und                  : 1;
11063        uint64_t q0_coff                 : 1;
11064        uint64_t q0_perr                 : 1;
11065        uint64_t q1_und                  : 1;
11066        uint64_t q1_coff                 : 1;
11067        uint64_t q1_perr                 : 1;
11068        uint64_t q2_und                  : 1;
11069        uint64_t q2_coff                 : 1;
11070        uint64_t q2_perr                 : 1;
11071        uint64_t q3_und                  : 1;
11072        uint64_t q3_coff                 : 1;
11073        uint64_t q3_perr                 : 1;
11074        uint64_t q4_und                  : 1;
11075        uint64_t q4_coff                 : 1;
11076        uint64_t q4_perr                 : 1;
11077        uint64_t q5_und                  : 1;
11078        uint64_t q5_coff                 : 1;
11079        uint64_t q5_perr                 : 1;
11080        uint64_t q6_und                  : 1;
11081        uint64_t q6_coff                 : 1;
11082        uint64_t q6_perr                 : 1;
11083        uint64_t q7_und                  : 1;
11084        uint64_t q7_coff                 : 1;
11085        uint64_t q7_perr                 : 1;
11086        uint64_t reserved_28_63          : 36;
11087#endif
11088    } s;
11089    struct cvmx_fpa_int_enb_s            cn30xx;
11090    struct cvmx_fpa_int_enb_s            cn31xx;
11091    struct cvmx_fpa_int_enb_s            cn38xx;
11092    struct cvmx_fpa_int_enb_s            cn38xxp2;
11093    struct cvmx_fpa_int_enb_s            cn50xx;
11094    struct cvmx_fpa_int_enb_s            cn52xx;
11095    struct cvmx_fpa_int_enb_s            cn52xxp1;
11096    struct cvmx_fpa_int_enb_s            cn56xx;
11097    struct cvmx_fpa_int_enb_s            cn56xxp1;
11098    struct cvmx_fpa_int_enb_s            cn58xx;
11099    struct cvmx_fpa_int_enb_s            cn58xxp1;
11100} cvmx_fpa_int_enb_t;
11101
11102
11103/**
11104 * cvmx_fpa_int_sum
11105 *
11106 * FPA_INT_SUM = FPA's Interrupt Summary Register
11107 *
11108 * Contains the diffrent interrupt summary bits of the FPA.
11109 */
11110typedef union
11111{
11112    uint64_t u64;
11113    struct cvmx_fpa_int_sum_s
11114    {
11115#if __BYTE_ORDER == __BIG_ENDIAN
11116        uint64_t reserved_28_63          : 36;
11117        uint64_t q7_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11118                                                         the L2C does not have the FPA owner ship bit set. */
11119        uint64_t q7_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11120                                                         the count available is greater than than pointers
11121                                                         present in the FPA. */
11122        uint64_t q7_und                  : 1;       /**< Set when a Queue0 page count available goes
11123                                                         negative. */
11124        uint64_t q6_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11125                                                         the L2C does not have the FPA owner ship bit set. */
11126        uint64_t q6_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11127                                                         the count available is greater than than pointers
11128                                                         present in the FPA. */
11129        uint64_t q6_und                  : 1;       /**< Set when a Queue0 page count available goes
11130                                                         negative. */
11131        uint64_t q5_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11132                                                         the L2C does not have the FPA owner ship bit set. */
11133        uint64_t q5_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11134                                                         the count available is greater than than pointers
11135                                                         present in the FPA. */
11136        uint64_t q5_und                  : 1;       /**< Set when a Queue0 page count available goes
11137                                                         negative. */
11138        uint64_t q4_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11139                                                         the L2C does not have the FPA owner ship bit set. */
11140        uint64_t q4_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11141                                                         the count available is greater than than pointers
11142                                                         present in the FPA. */
11143        uint64_t q4_und                  : 1;       /**< Set when a Queue0 page count available goes
11144                                                         negative. */
11145        uint64_t q3_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11146                                                         the L2C does not have the FPA owner ship bit set. */
11147        uint64_t q3_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11148                                                         the count available is greater than than pointers
11149                                                         present in the FPA. */
11150        uint64_t q3_und                  : 1;       /**< Set when a Queue0 page count available goes
11151                                                         negative. */
11152        uint64_t q2_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11153                                                         the L2C does not have the FPA owner ship bit set. */
11154        uint64_t q2_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11155                                                         the count available is greater than than pointers
11156                                                         present in the FPA. */
11157        uint64_t q2_und                  : 1;       /**< Set when a Queue0 page count available goes
11158                                                         negative. */
11159        uint64_t q1_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11160                                                         the L2C does not have the FPA owner ship bit set. */
11161        uint64_t q1_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11162                                                         the count available is greater than pointers
11163                                                         present in the FPA. */
11164        uint64_t q1_und                  : 1;       /**< Set when a Queue0 page count available goes
11165                                                         negative. */
11166        uint64_t q0_perr                 : 1;       /**< Set when a Queue0 pointer read from the stack in
11167                                                         the L2C does not have the FPA owner ship bit set. */
11168        uint64_t q0_coff                 : 1;       /**< Set when a Queue0 stack end tag is present and
11169                                                         the count available is greater than pointers
11170                                                         present in the FPA. */
11171        uint64_t q0_und                  : 1;       /**< Set when a Queue0 page count available goes
11172                                                         negative. */
11173        uint64_t fed1_dbe                : 1;       /**< Set when a Double Bit Error is detected in FPF1. */
11174        uint64_t fed1_sbe                : 1;       /**< Set when a Single Bit Error is detected in FPF1. */
11175        uint64_t fed0_dbe                : 1;       /**< Set when a Double Bit Error is detected in FPF0. */
11176        uint64_t fed0_sbe                : 1;       /**< Set when a Single Bit Error is detected in FPF0. */
11177#else
11178        uint64_t fed0_sbe                : 1;
11179        uint64_t fed0_dbe                : 1;
11180        uint64_t fed1_sbe                : 1;
11181        uint64_t fed1_dbe                : 1;
11182        uint64_t q0_und                  : 1;
11183        uint64_t q0_coff                 : 1;
11184        uint64_t q0_perr                 : 1;
11185        uint64_t q1_und                  : 1;
11186        uint64_t q1_coff                 : 1;
11187        uint64_t q1_perr                 : 1;
11188        uint64_t q2_und                  : 1;
11189        uint64_t q2_coff                 : 1;
11190        uint64_t q2_perr                 : 1;
11191        uint64_t q3_und                  : 1;
11192        uint64_t q3_coff                 : 1;
11193        uint64_t q3_perr                 : 1;
11194        uint64_t q4_und                  : 1;
11195        uint64_t q4_coff                 : 1;
11196        uint64_t q4_perr                 : 1;
11197        uint64_t q5_und                  : 1;
11198        uint64_t q5_coff                 : 1;
11199        uint64_t q5_perr                 : 1;
11200        uint64_t q6_und                  : 1;
11201        uint64_t q6_coff                 : 1;
11202        uint64_t q6_perr                 : 1;
11203        uint64_t q7_und                  : 1;
11204        uint64_t q7_coff                 : 1;
11205        uint64_t q7_perr                 : 1;
11206        uint64_t reserved_28_63          : 36;
11207#endif
11208    } s;
11209    struct cvmx_fpa_int_sum_s            cn30xx;
11210    struct cvmx_fpa_int_sum_s            cn31xx;
11211    struct cvmx_fpa_int_sum_s            cn38xx;
11212    struct cvmx_fpa_int_sum_s            cn38xxp2;
11213    struct cvmx_fpa_int_sum_s            cn50xx;
11214    struct cvmx_fpa_int_sum_s            cn52xx;
11215    struct cvmx_fpa_int_sum_s            cn52xxp1;
11216    struct cvmx_fpa_int_sum_s            cn56xx;
11217    struct cvmx_fpa_int_sum_s            cn56xxp1;
11218    struct cvmx_fpa_int_sum_s            cn58xx;
11219    struct cvmx_fpa_int_sum_s            cn58xxp1;
11220} cvmx_fpa_int_sum_t;
11221
11222
11223/**
11224 * cvmx_fpa_que#_available
11225 *
11226 * FPA_QUEX_PAGES_AVAILABLE = FPA's Queue 0-7 Free Page Available Register
11227 *
11228 * The number of page pointers that are available in the FPA and local DRAM.
11229 */
11230typedef union
11231{
11232    uint64_t u64;
11233    struct cvmx_fpa_quex_available_s
11234    {
11235#if __BYTE_ORDER == __BIG_ENDIAN
11236        uint64_t reserved_29_63          : 35;
11237        uint64_t que_siz                 : 29;      /**< The number of free pages available in this Queue. */
11238#else
11239        uint64_t que_siz                 : 29;
11240        uint64_t reserved_29_63          : 35;
11241#endif
11242    } s;
11243    struct cvmx_fpa_quex_available_s     cn30xx;
11244    struct cvmx_fpa_quex_available_s     cn31xx;
11245    struct cvmx_fpa_quex_available_s     cn38xx;
11246    struct cvmx_fpa_quex_available_s     cn38xxp2;
11247    struct cvmx_fpa_quex_available_s     cn50xx;
11248    struct cvmx_fpa_quex_available_s     cn52xx;
11249    struct cvmx_fpa_quex_available_s     cn52xxp1;
11250    struct cvmx_fpa_quex_available_s     cn56xx;
11251    struct cvmx_fpa_quex_available_s     cn56xxp1;
11252    struct cvmx_fpa_quex_available_s     cn58xx;
11253    struct cvmx_fpa_quex_available_s     cn58xxp1;
11254} cvmx_fpa_quex_available_t;
11255
11256
11257/**
11258 * cvmx_fpa_que#_page_index
11259 *
11260 * FPA_QUE0_PAGE_INDEX = FPA's Queue0 Page Index
11261 *
11262 * The present index page for queue 0 of the FPA.
11263 * This numbr reflests the number of pages of pointers that have been written to memory
11264 * for this queue.
11265 */
11266typedef union
11267{
11268    uint64_t u64;
11269    struct cvmx_fpa_quex_page_index_s
11270    {
11271#if __BYTE_ORDER == __BIG_ENDIAN
11272        uint64_t reserved_25_63          : 39;
11273        uint64_t pg_num                  : 25;      /**< Page number. */
11274#else
11275        uint64_t pg_num                  : 25;
11276        uint64_t reserved_25_63          : 39;
11277#endif
11278    } s;
11279    struct cvmx_fpa_quex_page_index_s    cn30xx;
11280    struct cvmx_fpa_quex_page_index_s    cn31xx;
11281    struct cvmx_fpa_quex_page_index_s    cn38xx;
11282    struct cvmx_fpa_quex_page_index_s    cn38xxp2;
11283    struct cvmx_fpa_quex_page_index_s    cn50xx;
11284    struct cvmx_fpa_quex_page_index_s    cn52xx;
11285    struct cvmx_fpa_quex_page_index_s    cn52xxp1;
11286    struct cvmx_fpa_quex_page_index_s    cn56xx;
11287    struct cvmx_fpa_quex_page_index_s    cn56xxp1;
11288    struct cvmx_fpa_quex_page_index_s    cn58xx;
11289    struct cvmx_fpa_quex_page_index_s    cn58xxp1;
11290} cvmx_fpa_quex_page_index_t;
11291
11292
11293/**
11294 * cvmx_fpa_que_act
11295 *
11296 * FPA_QUE_ACT = FPA's Queue# Actual Page Index
11297 *
11298 * When a INT_SUM[PERR#] occurs this will be latched with the value read from L2C.
11299 * This is latched on the first error and will not latch again unitl all errors are cleared.
11300 */
11301typedef union
11302{
11303    uint64_t u64;
11304    struct cvmx_fpa_que_act_s
11305    {
11306#if __BYTE_ORDER == __BIG_ENDIAN
11307        uint64_t reserved_29_63          : 35;
11308        uint64_t act_que                 : 3;       /**< FPA-queue-number read from memory. */
11309        uint64_t act_indx                : 26;      /**< Page number read from memory. */
11310#else
11311        uint64_t act_indx                : 26;
11312        uint64_t act_que                 : 3;
11313        uint64_t reserved_29_63          : 35;
11314#endif
11315    } s;
11316    struct cvmx_fpa_que_act_s            cn30xx;
11317    struct cvmx_fpa_que_act_s            cn31xx;
11318    struct cvmx_fpa_que_act_s            cn38xx;
11319    struct cvmx_fpa_que_act_s            cn38xxp2;
11320    struct cvmx_fpa_que_act_s            cn50xx;
11321    struct cvmx_fpa_que_act_s            cn52xx;
11322    struct cvmx_fpa_que_act_s            cn52xxp1;
11323    struct cvmx_fpa_que_act_s            cn56xx;
11324    struct cvmx_fpa_que_act_s            cn56xxp1;
11325    struct cvmx_fpa_que_act_s            cn58xx;
11326    struct cvmx_fpa_que_act_s            cn58xxp1;
11327} cvmx_fpa_que_act_t;
11328
11329
11330/**
11331 * cvmx_fpa_que_exp
11332 *
11333 * FPA_QUE_EXP = FPA's Queue# Expected Page Index
11334 *
11335 * When a INT_SUM[PERR#] occurs this will be latched with the expected value.
11336 * This is latched on the first error and will not latch again unitl all errors are cleared.
11337 */
11338typedef union
11339{
11340    uint64_t u64;
11341    struct cvmx_fpa_que_exp_s
11342    {
11343#if __BYTE_ORDER == __BIG_ENDIAN
11344        uint64_t reserved_29_63          : 35;
11345        uint64_t exp_que                 : 3;       /**< Expected fpa-queue-number read from memory. */
11346        uint64_t exp_indx                : 26;      /**< Expected page number read from memory. */
11347#else
11348        uint64_t exp_indx                : 26;
11349        uint64_t exp_que                 : 3;
11350        uint64_t reserved_29_63          : 35;
11351#endif
11352    } s;
11353    struct cvmx_fpa_que_exp_s            cn30xx;
11354    struct cvmx_fpa_que_exp_s            cn31xx;
11355    struct cvmx_fpa_que_exp_s            cn38xx;
11356    struct cvmx_fpa_que_exp_s            cn38xxp2;
11357    struct cvmx_fpa_que_exp_s            cn50xx;
11358    struct cvmx_fpa_que_exp_s            cn52xx;
11359    struct cvmx_fpa_que_exp_s            cn52xxp1;
11360    struct cvmx_fpa_que_exp_s            cn56xx;
11361    struct cvmx_fpa_que_exp_s            cn56xxp1;
11362    struct cvmx_fpa_que_exp_s            cn58xx;
11363    struct cvmx_fpa_que_exp_s            cn58xxp1;
11364} cvmx_fpa_que_exp_t;
11365
11366
11367/**
11368 * cvmx_fpa_wart_ctl
11369 *
11370 * FPA_WART_CTL = FPA's WART Control
11371 *
11372 * Control and status for the WART block.
11373 */
11374typedef union
11375{
11376    uint64_t u64;
11377    struct cvmx_fpa_wart_ctl_s
11378    {
11379#if __BYTE_ORDER == __BIG_ENDIAN
11380        uint64_t reserved_16_63          : 48;
11381        uint64_t ctl                     : 16;      /**< Control information. */
11382#else
11383        uint64_t ctl                     : 16;
11384        uint64_t reserved_16_63          : 48;
11385#endif
11386    } s;
11387    struct cvmx_fpa_wart_ctl_s           cn30xx;
11388    struct cvmx_fpa_wart_ctl_s           cn31xx;
11389    struct cvmx_fpa_wart_ctl_s           cn38xx;
11390    struct cvmx_fpa_wart_ctl_s           cn38xxp2;
11391    struct cvmx_fpa_wart_ctl_s           cn50xx;
11392    struct cvmx_fpa_wart_ctl_s           cn52xx;
11393    struct cvmx_fpa_wart_ctl_s           cn52xxp1;
11394    struct cvmx_fpa_wart_ctl_s           cn56xx;
11395    struct cvmx_fpa_wart_ctl_s           cn56xxp1;
11396    struct cvmx_fpa_wart_ctl_s           cn58xx;
11397    struct cvmx_fpa_wart_ctl_s           cn58xxp1;
11398} cvmx_fpa_wart_ctl_t;
11399
11400
11401/**
11402 * cvmx_fpa_wart_status
11403 *
11404 * FPA_WART_STATUS = FPA's WART Status
11405 *
11406 * Control and status for the WART block.
11407 */
11408typedef union
11409{
11410    uint64_t u64;
11411    struct cvmx_fpa_wart_status_s
11412    {
11413#if __BYTE_ORDER == __BIG_ENDIAN
11414        uint64_t reserved_32_63          : 32;
11415        uint64_t status                  : 32;      /**< Status information. */
11416#else
11417        uint64_t status                  : 32;
11418        uint64_t reserved_32_63          : 32;
11419#endif
11420    } s;
11421    struct cvmx_fpa_wart_status_s        cn30xx;
11422    struct cvmx_fpa_wart_status_s        cn31xx;
11423    struct cvmx_fpa_wart_status_s        cn38xx;
11424    struct cvmx_fpa_wart_status_s        cn38xxp2;
11425    struct cvmx_fpa_wart_status_s        cn50xx;
11426    struct cvmx_fpa_wart_status_s        cn52xx;
11427    struct cvmx_fpa_wart_status_s        cn52xxp1;
11428    struct cvmx_fpa_wart_status_s        cn56xx;
11429    struct cvmx_fpa_wart_status_s        cn56xxp1;
11430    struct cvmx_fpa_wart_status_s        cn58xx;
11431    struct cvmx_fpa_wart_status_s        cn58xxp1;
11432} cvmx_fpa_wart_status_t;
11433
11434
11435/**
11436 * cvmx_gmx#_bad_reg
11437 *
11438 * GMX_BAD_REG = A collection of things that have gone very, very wrong
11439 *
11440 *
11441 * Notes:
11442 * In XAUI mode, only the lsb (corresponding to port0) of INB_NXA, LOSTSTAT, OUT_OVR, are used.
11443 *
11444 */
11445typedef union
11446{
11447    uint64_t u64;
11448    struct cvmx_gmxx_bad_reg_s
11449    {
11450#if __BYTE_ORDER == __BIG_ENDIAN
11451        uint64_t reserved_31_63          : 33;
11452        uint64_t inb_nxa                 : 4;       /**< Inbound port > GMX_RX_PRTS */
11453        uint64_t statovr                 : 1;       /**< TX Statistics overflow */
11454        uint64_t loststat                : 4;       /**< TX Statistics data was over-written (per RGM port)
11455                                                         TX Stats are corrupted */
11456        uint64_t reserved_18_21          : 4;
11457        uint64_t out_ovr                 : 16;      /**< Outbound data FIFO overflow (per port) */
11458        uint64_t ncb_ovr                 : 1;       /**< Outbound NCB FIFO Overflow */
11459        uint64_t out_col                 : 1;       /**< Outbound collision occured between PKO and NCB */
11460#else
11461        uint64_t out_col                 : 1;
11462        uint64_t ncb_ovr                 : 1;
11463        uint64_t out_ovr                 : 16;
11464        uint64_t reserved_18_21          : 4;
11465        uint64_t loststat                : 4;
11466        uint64_t statovr                 : 1;
11467        uint64_t inb_nxa                 : 4;
11468        uint64_t reserved_31_63          : 33;
11469#endif
11470    } s;
11471    struct cvmx_gmxx_bad_reg_cn30xx
11472    {
11473#if __BYTE_ORDER == __BIG_ENDIAN
11474        uint64_t reserved_31_63          : 33;
11475        uint64_t inb_nxa                 : 4;       /**< Inbound port > GMX_RX_PRTS */
11476        uint64_t statovr                 : 1;       /**< TX Statistics overflow */
11477        uint64_t reserved_25_25          : 1;
11478        uint64_t loststat                : 3;       /**< TX Statistics data was over-written (per RGM port)
11479                                                         TX Stats are corrupted */
11480        uint64_t reserved_5_21           : 17;
11481        uint64_t out_ovr                 : 3;       /**< Outbound data FIFO overflow (per port) */
11482        uint64_t reserved_0_1            : 2;
11483#else
11484        uint64_t reserved_0_1            : 2;
11485        uint64_t out_ovr                 : 3;
11486        uint64_t reserved_5_21           : 17;
11487        uint64_t loststat                : 3;
11488        uint64_t reserved_25_25          : 1;
11489        uint64_t statovr                 : 1;
11490        uint64_t inb_nxa                 : 4;
11491        uint64_t reserved_31_63          : 33;
11492#endif
11493    } cn30xx;
11494    struct cvmx_gmxx_bad_reg_cn30xx      cn31xx;
11495    struct cvmx_gmxx_bad_reg_s           cn38xx;
11496    struct cvmx_gmxx_bad_reg_s           cn38xxp2;
11497    struct cvmx_gmxx_bad_reg_cn30xx      cn50xx;
11498    struct cvmx_gmxx_bad_reg_cn52xx
11499    {
11500#if __BYTE_ORDER == __BIG_ENDIAN
11501        uint64_t reserved_31_63          : 33;
11502        uint64_t inb_nxa                 : 4;       /**< Inbound port > GMX_RX_PRTS */
11503        uint64_t statovr                 : 1;       /**< TX Statistics overflow
11504                                                         The common FIFO to SGMII and XAUI had an overflow
11505                                                         TX Stats are corrupted */
11506        uint64_t loststat                : 4;       /**< TX Statistics data was over-written
11507                                                         In SGMII, one bit per port
11508                                                         In XAUI, only port0 is used
11509                                                         TX Stats are corrupted */
11510        uint64_t reserved_6_21           : 16;
11511        uint64_t out_ovr                 : 4;       /**< Outbound data FIFO overflow (per port) */
11512        uint64_t reserved_0_1            : 2;
11513#else
11514        uint64_t reserved_0_1            : 2;
11515        uint64_t out_ovr                 : 4;
11516        uint64_t reserved_6_21           : 16;
11517        uint64_t loststat                : 4;
11518        uint64_t statovr                 : 1;
11519        uint64_t inb_nxa                 : 4;
11520        uint64_t reserved_31_63          : 33;
11521#endif
11522    } cn52xx;
11523    struct cvmx_gmxx_bad_reg_cn52xx      cn52xxp1;
11524    struct cvmx_gmxx_bad_reg_cn52xx      cn56xx;
11525    struct cvmx_gmxx_bad_reg_cn52xx      cn56xxp1;
11526    struct cvmx_gmxx_bad_reg_s           cn58xx;
11527    struct cvmx_gmxx_bad_reg_s           cn58xxp1;
11528} cvmx_gmxx_bad_reg_t;
11529
11530
11531/**
11532 * cvmx_gmx#_bist
11533 *
11534 * GMX_BIST = GMX BIST Results
11535 *
11536 */
11537typedef union
11538{
11539    uint64_t u64;
11540    struct cvmx_gmxx_bist_s
11541    {
11542#if __BYTE_ORDER == __BIG_ENDIAN
11543        uint64_t reserved_17_63          : 47;
11544        uint64_t status                  : 17;      /**< BIST Results.
11545                                                         HW sets a bit in BIST for for memory that fails
11546                                                         - 0: gmx#.inb.fif_bnk0
11547                                                         - 1: gmx#.inb.fif_bnk1
11548                                                         - 2: gmx#.inb.fif_bnk2
11549                                                         - 3: gmx#.inb.fif_bnk3
11550                                                         - 4: gmx#.outb.fif.fif_bnk0
11551                                                         - 5: gmx#.outb.fif.fif_bnk1
11552                                                         - 6: gmx#.outb.fif.fif_bnk2
11553                                                         - 7: gmx#.outb.fif.fif_bnk3
11554                                                         - 8: gmx#.csr.gmi0.srf8x64m1_bist
11555                                                         - 9: gmx#.csr.gmi1.srf8x64m1_bist
11556                                                         - 10: gmx#.csr.gmi2.srf8x64m1_bist
11557                                                         - 11: gmx#.csr.gmi3.srf8x64m1_bist
11558                                                         - 12: gmx#.csr.drf20x80m1_bist
11559                                                         - 13: gmx#.outb.stat.drf16x27m1_bist
11560                                                         - 14: gmx#.outb.stat.drf40x64m1_bist
11561                                                         - 15: gmx#.outb.ncb.drf16x76m1_bist
11562                                                         - 16: gmx#.outb.fif.srf32x16m2_bist */
11563#else
11564        uint64_t status                  : 17;
11565        uint64_t reserved_17_63          : 47;
11566#endif
11567    } s;
11568    struct cvmx_gmxx_bist_cn30xx
11569    {
11570#if __BYTE_ORDER == __BIG_ENDIAN
11571        uint64_t reserved_10_63          : 54;
11572        uint64_t status                  : 10;      /**< BIST Results.
11573                                                          HW sets a bit in BIST for for memory that fails
11574                                                         - 0: gmx#.inb.dpr512x78m4_bist
11575                                                         - 1: gmx#.outb.fif.dpr512x71m4_bist
11576                                                         - 2: gmx#.csr.gmi0.srf8x64m1_bist
11577                                                         - 3: gmx#.csr.gmi1.srf8x64m1_bist
11578                                                         - 4: gmx#.csr.gmi2.srf8x64m1_bist
11579                                                         - 5: 0
11580                                                         - 6: gmx#.csr.drf20x80m1_bist
11581                                                         - 7: gmx#.outb.stat.drf16x27m1_bist
11582                                                         - 8: gmx#.outb.stat.drf40x64m1_bist
11583                                                         - 9: 0 */
11584#else
11585        uint64_t status                  : 10;
11586        uint64_t reserved_10_63          : 54;
11587#endif
11588    } cn30xx;
11589    struct cvmx_gmxx_bist_cn30xx         cn31xx;
11590    struct cvmx_gmxx_bist_cn30xx         cn38xx;
11591    struct cvmx_gmxx_bist_cn30xx         cn38xxp2;
11592    struct cvmx_gmxx_bist_cn50xx
11593    {
11594#if __BYTE_ORDER == __BIG_ENDIAN
11595        uint64_t reserved_12_63          : 52;
11596        uint64_t status                  : 12;      /**< BIST Results.
11597                                                         HW sets a bit in BIST for for memory that fails */
11598#else
11599        uint64_t status                  : 12;
11600        uint64_t reserved_12_63          : 52;
11601#endif
11602    } cn50xx;
11603    struct cvmx_gmxx_bist_cn52xx
11604    {
11605#if __BYTE_ORDER == __BIG_ENDIAN
11606        uint64_t reserved_16_63          : 48;
11607        uint64_t status                  : 16;      /**< BIST Results.
11608                                                         HW sets a bit in BIST for for memory that fails
11609                                                         - 0: gmx#.inb.fif_bnk0
11610                                                         - 1: gmx#.inb.fif_bnk1
11611                                                         - 2: gmx#.inb.fif_bnk2
11612                                                         - 3: gmx#.inb.fif_bnk3
11613                                                         - 4: gmx#.outb.fif.fif_bnk0
11614                                                         - 5: gmx#.outb.fif.fif_bnk1
11615                                                         - 6: gmx#.outb.fif.fif_bnk2
11616                                                         - 7: gmx#.outb.fif.fif_bnk3
11617                                                         - 8: gmx#.csr.gmi0.srf8x64m1_bist
11618                                                         - 9: gmx#.csr.gmi1.srf8x64m1_bist
11619                                                         - 10: gmx#.csr.gmi2.srf8x64m1_bist
11620                                                         - 11: gmx#.csr.gmi3.srf8x64m1_bist
11621                                                         - 12: gmx#.csr.drf20x80m1_bist
11622                                                         - 13: gmx#.outb.stat.drf16x27m1_bist
11623                                                         - 14: gmx#.outb.stat.drf40x64m1_bist
11624                                                         - 15: xgmii.tx.drf16x38m1_async_bist */
11625#else
11626        uint64_t status                  : 16;
11627        uint64_t reserved_16_63          : 48;
11628#endif
11629    } cn52xx;
11630    struct cvmx_gmxx_bist_cn52xx         cn52xxp1;
11631    struct cvmx_gmxx_bist_cn52xx         cn56xx;
11632    struct cvmx_gmxx_bist_cn52xx         cn56xxp1;
11633    struct cvmx_gmxx_bist_s              cn58xx;
11634    struct cvmx_gmxx_bist_s              cn58xxp1;
11635} cvmx_gmxx_bist_t;
11636
11637
11638/**
11639 * cvmx_gmx#_clk_en
11640 *
11641 * DO NOT DOCUMENT THIS REGISTER - IT IS NOT OFFICIAL
11642 *
11643 */
11644typedef union
11645{
11646    uint64_t u64;
11647    struct cvmx_gmxx_clk_en_s
11648    {
11649#if __BYTE_ORDER == __BIG_ENDIAN
11650        uint64_t reserved_1_63           : 63;
11651        uint64_t clk_en                  : 1;       /**< Force the clock enables on */
11652#else
11653        uint64_t clk_en                  : 1;
11654        uint64_t reserved_1_63           : 63;
11655#endif
11656    } s;
11657    struct cvmx_gmxx_clk_en_s            cn52xx;
11658    struct cvmx_gmxx_clk_en_s            cn52xxp1;
11659    struct cvmx_gmxx_clk_en_s            cn56xx;
11660    struct cvmx_gmxx_clk_en_s            cn56xxp1;
11661} cvmx_gmxx_clk_en_t;
11662
11663
11664/**
11665 * cvmx_gmx#_hg2_control
11666 *
11667 * Notes:
11668 * The HiGig2 TX and RX enable would normally be both set together for HiGig2 messaging. However
11669 * setting just the TX or RX bit will result in only the HG2 message transmit or the receive
11670 * capability.
11671 * PHYS_EN and LOGL_EN bits when 1, allow link pause or back pressure to PKO as per received
11672 * HiGig2 message. When 0, link pause and back pressure to PKO in response to received messages
11673 * are disabled.
11674 *
11675 * GMX*_TX_XAUI_CTL[HG_EN] must be set to one(to enable HiGig) whenever either HG2TX_EN or HG2RX_EN
11676 * are set.
11677 *
11678 * GMX*_RX0_UDD_SKP[LEN] must be set to 16 (to select HiGig2) whenever either HG2TX_EN or HG2RX_EN
11679 * are set.
11680 *
11681 * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero
11682 * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol when
11683 * GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by GMX*_TX_XAUI_CTL[HG_EN]=1
11684 * and GMX*_RX0_UDD_SKP[LEN]=16.) The HW can only auto-generate backpressure via HiGig2 messages
11685 * (optionally, when HG2TX_EN=1) with the HiGig2 protocol.
11686 */
11687typedef union
11688{
11689    uint64_t u64;
11690    struct cvmx_gmxx_hg2_control_s
11691    {
11692#if __BYTE_ORDER == __BIG_ENDIAN
11693        uint64_t reserved_19_63          : 45;
11694        uint64_t hg2tx_en                : 1;       /**< Enable Transmission of HG2 phys and logl messages
11695                                                         When set, also disables HW auto-generated (802.3
11696                                                         and CBFC) pause frames. (OCTEON cannot generate
11697                                                         proper 802.3 or CBFC pause frames in HiGig2 mode.) */
11698        uint64_t hg2rx_en                : 1;       /**< Enable extraction and processing of HG2 message
11699                                                         packet from RX flow. Physical logical pause info
11700                                                         is used to pause physical link, back pressure PKO
11701                                                         HG2RX_EN must be set when HiGig2 messages are
11702                                                         present in the receive stream. */
11703        uint64_t phys_en                 : 1;       /**< 1 bit physical link pause enable for recevied
11704                                                         HiGig2 physical pause message */
11705        uint64_t logl_en                 : 16;      /**< 16 bit xof enables for recevied HiGig2 messages
11706                                                         or CBFC packets */
11707#else
11708        uint64_t logl_en                 : 16;
11709        uint64_t phys_en                 : 1;
11710        uint64_t hg2rx_en                : 1;
11711        uint64_t hg2tx_en                : 1;
11712        uint64_t reserved_19_63          : 45;
11713#endif
11714    } s;
11715    struct cvmx_gmxx_hg2_control_s       cn52xx;
11716    struct cvmx_gmxx_hg2_control_s       cn52xxp1;
11717    struct cvmx_gmxx_hg2_control_s       cn56xx;
11718} cvmx_gmxx_hg2_control_t;
11719
11720
11721/**
11722 * cvmx_gmx#_inf_mode
11723 *
11724 * GMX_INF_MODE = Interface Mode
11725 *
11726 */
11727typedef union
11728{
11729    uint64_t u64;
11730    struct cvmx_gmxx_inf_mode_s
11731    {
11732#if __BYTE_ORDER == __BIG_ENDIAN
11733        uint64_t reserved_10_63          : 54;
11734        uint64_t speed                   : 2;       /**< Interface Speed
11735                                                         - 0: 1.250GHz
11736                                                         - 1: 2.500GHz
11737                                                         - 2: 3.125GHz
11738                                                         - 3: 3.750GHz */
11739        uint64_t reserved_6_7            : 2;
11740        uint64_t mode                    : 2;       /**< Interface Electrical Operating Mode
11741                                                         - 0: Disabled (PCIe)
11742                                                         - 1: XAUI (IEEE 802.3-2005)
11743                                                         - 2: SGMII (v1.8)
11744                                                         - 3: PICMG3.1 */
11745        uint64_t reserved_3_3            : 1;
11746        uint64_t p0mii                   : 1;       /**< Port 0 Interface Mode
11747                                                         - 0: Port 0 is RGMII
11748                                                         - 1: Port 0 is MII */
11749        uint64_t en                      : 1;       /**< Interface Enable */
11750        uint64_t type                    : 1;       /**< Interface Mode
11751                                                         - 0: RGMII Mode
11752                                                         - 1: Spi4 Mode */
11753#else
11754        uint64_t type                    : 1;
11755        uint64_t en                      : 1;
11756        uint64_t p0mii                   : 1;
11757        uint64_t reserved_3_3            : 1;
11758        uint64_t mode                    : 2;
11759        uint64_t reserved_6_7            : 2;
11760        uint64_t speed                   : 2;
11761        uint64_t reserved_10_63          : 54;
11762#endif
11763    } s;
11764    struct cvmx_gmxx_inf_mode_cn30xx
11765    {
11766#if __BYTE_ORDER == __BIG_ENDIAN
11767        uint64_t reserved_3_63           : 61;
11768        uint64_t p0mii                   : 1;       /**< Port 0 Interface Mode
11769                                                         - 0: Port 0 is RGMII
11770                                                         - 1: Port 0 is MII */
11771        uint64_t en                      : 1;       /**< Interface Enable
11772                                                         Must be set to enable the packet interface.
11773                                                         Should be enabled before any other requests to
11774                                                         GMX including enabling port back pressure with
11775                                                         IPD_CTL_STATUS[PBP_EN] */
11776        uint64_t type                    : 1;       /**< Port 1/2 Interface Mode
11777                                                         - 0: Ports 1 and 2 are RGMII
11778                                                         - 1: Port  1 is GMII/MII, Port 2 is unused
11779                                                             GMII/MII is selected by GMX_PRT1_CFG[SPEED] */
11780#else
11781        uint64_t type                    : 1;
11782        uint64_t en                      : 1;
11783        uint64_t p0mii                   : 1;
11784        uint64_t reserved_3_63           : 61;
11785#endif
11786    } cn30xx;
11787    struct cvmx_gmxx_inf_mode_cn31xx
11788    {
11789#if __BYTE_ORDER == __BIG_ENDIAN
11790        uint64_t reserved_2_63           : 62;
11791        uint64_t en                      : 1;       /**< Interface Enable
11792                                                         Must be set to enable the packet interface.
11793                                                         Should be enabled before any other requests to
11794                                                         GMX including enabling port back pressure with
11795                                                         IPD_CTL_STATUS[PBP_EN] */
11796        uint64_t type                    : 1;       /**< Interface Mode
11797                                                         - 0: All three ports are RGMII ports
11798                                                         - 1: prt0 is RGMII, prt1 is GMII, and prt2 is unused */
11799#else
11800        uint64_t type                    : 1;
11801        uint64_t en                      : 1;
11802        uint64_t reserved_2_63           : 62;
11803#endif
11804    } cn31xx;
11805    struct cvmx_gmxx_inf_mode_cn31xx     cn38xx;
11806    struct cvmx_gmxx_inf_mode_cn31xx     cn38xxp2;
11807    struct cvmx_gmxx_inf_mode_cn30xx     cn50xx;
11808    struct cvmx_gmxx_inf_mode_cn52xx
11809    {
11810#if __BYTE_ORDER == __BIG_ENDIAN
11811        uint64_t reserved_10_63          : 54;
11812        uint64_t speed                   : 2;       /**< Interface Speed
11813                                                         - 0: 1.250GHz
11814                                                         - 1: 2.500GHz
11815                                                         - 2: 3.125GHz
11816                                                         - 3: 3.750GHz */
11817        uint64_t reserved_6_7            : 2;
11818        uint64_t mode                    : 2;       /**< Interface Electrical Operating Mode
11819                                                         - 0: Disabled (PCIe)
11820                                                         - 1: XAUI (IEEE 802.3-2005)
11821                                                         - 2: SGMII (v1.8)
11822                                                         - 3: PICMG3.1 */
11823        uint64_t reserved_2_3            : 2;
11824        uint64_t en                      : 1;       /**< Interface Enable
11825                                                         Must be set to enable the packet interface.
11826                                                         Should be enabled before any other requests to
11827                                                         GMX including enabling port back pressure with
11828                                                         IPD_CTL_STATUS[PBP_EN] */
11829        uint64_t type                    : 1;       /**< Interface Protocol Type
11830                                                         - 0: SGMII/1000Base-X
11831                                                         - 1: XAUI */
11832#else
11833        uint64_t type                    : 1;
11834        uint64_t en                      : 1;
11835        uint64_t reserved_2_3            : 2;
11836        uint64_t mode                    : 2;
11837        uint64_t reserved_6_7            : 2;
11838        uint64_t speed                   : 2;
11839        uint64_t reserved_10_63          : 54;
11840#endif
11841    } cn52xx;
11842    struct cvmx_gmxx_inf_mode_cn52xx     cn52xxp1;
11843    struct cvmx_gmxx_inf_mode_cn52xx     cn56xx;
11844    struct cvmx_gmxx_inf_mode_cn52xx     cn56xxp1;
11845    struct cvmx_gmxx_inf_mode_cn31xx     cn58xx;
11846    struct cvmx_gmxx_inf_mode_cn31xx     cn58xxp1;
11847} cvmx_gmxx_inf_mode_t;
11848
11849
11850/**
11851 * cvmx_gmx#_nxa_adr
11852 *
11853 * GMX_NXA_ADR = NXA Port Address
11854 *
11855 */
11856typedef union
11857{
11858    uint64_t u64;
11859    struct cvmx_gmxx_nxa_adr_s
11860    {
11861#if __BYTE_ORDER == __BIG_ENDIAN
11862        uint64_t reserved_6_63           : 58;
11863        uint64_t prt                     : 6;       /**< Logged address for NXA exceptions
11864                                                         The logged address will be from the first
11865                                                         exception that caused the problem.  NCB has
11866                                                         higher priority than PKO and will win. */
11867#else
11868        uint64_t prt                     : 6;
11869        uint64_t reserved_6_63           : 58;
11870#endif
11871    } s;
11872    struct cvmx_gmxx_nxa_adr_s           cn30xx;
11873    struct cvmx_gmxx_nxa_adr_s           cn31xx;
11874    struct cvmx_gmxx_nxa_adr_s           cn38xx;
11875    struct cvmx_gmxx_nxa_adr_s           cn38xxp2;
11876    struct cvmx_gmxx_nxa_adr_s           cn50xx;
11877    struct cvmx_gmxx_nxa_adr_s           cn52xx;
11878    struct cvmx_gmxx_nxa_adr_s           cn52xxp1;
11879    struct cvmx_gmxx_nxa_adr_s           cn56xx;
11880    struct cvmx_gmxx_nxa_adr_s           cn56xxp1;
11881    struct cvmx_gmxx_nxa_adr_s           cn58xx;
11882    struct cvmx_gmxx_nxa_adr_s           cn58xxp1;
11883} cvmx_gmxx_nxa_adr_t;
11884
11885
11886/**
11887 * cvmx_gmx#_prt#_cbfc_ctl
11888 *
11889 * ** HG2 message CSRs end
11890 *
11891 *
11892 * Notes:
11893 * XOFF for a specific port is XOFF<prt> = (PHYS_EN<prt> & PHYS_BP) | (LOGL_EN<prt> & LOGL_BP<prt>)
11894 *
11895 */
11896typedef union
11897{
11898    uint64_t u64;
11899    struct cvmx_gmxx_prtx_cbfc_ctl_s
11900    {
11901#if __BYTE_ORDER == __BIG_ENDIAN
11902        uint64_t phys_en                 : 16;      /**< Determines which ports will have physical
11903                                                         backpressure pause packets.
11904                                                         The value pplaced in the Class Enable Vector
11905                                                         field of the CBFC pause packet will be
11906                                                         PHYS_EN | LOGL_EN */
11907        uint64_t logl_en                 : 16;      /**< Determines which ports will have logical
11908                                                         backpressure pause packets.
11909                                                         The value pplaced in the Class Enable Vector
11910                                                         field of the CBFC pause packet will be
11911                                                         PHYS_EN | LOGL_EN */
11912        uint64_t phys_bp                 : 16;      /**< When RX_EN is set and the HW is backpressuring any
11913                                                         ports (from either CBFC pause packets or the
11914                                                         GMX_TX_OVR_BP[TX_PRT_BP] register) and all ports
11915                                                         indiciated by PHYS_BP are backpressured, simulate
11916                                                         physical backpressure by defering all packets on
11917                                                         the transmitter. */
11918        uint64_t reserved_4_15           : 12;
11919        uint64_t bck_en                  : 1;       /**< Forward CBFC Pause information to BP block */
11920        uint64_t drp_en                  : 1;       /**< Drop Control CBFC Pause Frames */
11921        uint64_t tx_en                   : 1;       /**< When set, allow for CBFC Pause Packets
11922                                                         Must be clear in HiGig2 mode i.e. when
11923                                                         GMX_TX_XAUI_CTL[HG_EN]=1 and
11924                                                         GMX_RX_UDD_SKP[SKIP]=16. */
11925        uint64_t rx_en                   : 1;       /**< When set, allow for CBFC Pause Packets
11926                                                         Must be clear in HiGig2 mode i.e. when
11927                                                         GMX_TX_XAUI_CTL[HG_EN]=1 and
11928                                                         GMX_RX_UDD_SKP[SKIP]=16. */
11929#else
11930        uint64_t rx_en                   : 1;
11931        uint64_t tx_en                   : 1;
11932        uint64_t drp_en                  : 1;
11933        uint64_t bck_en                  : 1;
11934        uint64_t reserved_4_15           : 12;
11935        uint64_t phys_bp                 : 16;
11936        uint64_t logl_en                 : 16;
11937        uint64_t phys_en                 : 16;
11938#endif
11939    } s;
11940    struct cvmx_gmxx_prtx_cbfc_ctl_s     cn52xx;
11941    struct cvmx_gmxx_prtx_cbfc_ctl_s     cn56xx;
11942} cvmx_gmxx_prtx_cbfc_ctl_t;
11943
11944
11945/**
11946 * cvmx_gmx#_prt#_cfg
11947 *
11948 * GMX_PRT_CFG = Port description
11949 *
11950 */
11951typedef union
11952{
11953    uint64_t u64;
11954    struct cvmx_gmxx_prtx_cfg_s
11955    {
11956#if __BYTE_ORDER == __BIG_ENDIAN
11957        uint64_t reserved_14_63          : 50;
11958        uint64_t tx_idle                 : 1;       /**< TX Machine is idle */
11959        uint64_t rx_idle                 : 1;       /**< RX Machine is idle */
11960        uint64_t reserved_9_11           : 3;
11961        uint64_t speed_msb               : 1;       /**< Link Speed MSB [SPEED_MSB:SPEED]
11962                                                         10 = 10Mbs operation
11963                                                         00 = 100Mbs operation
11964                                                         01 = 1000Mbs operation
11965                                                         11 = Reserved
11966                                                         (SGMII/1000Base-X only) */
11967        uint64_t reserved_4_7            : 4;
11968        uint64_t slottime                : 1;       /**< Slot Time for Half-Duplex operation
11969                                                         0 = 512 bitimes (10/100Mbs operation)
11970                                                         1 = 4096 bitimes (1000Mbs operation) */
11971        uint64_t duplex                  : 1;       /**< Duplex
11972                                                         0 = Half Duplex (collisions/extentions/bursts)
11973                                                         1 = Full Duplex */
11974        uint64_t speed                   : 1;       /**< Link Speed
11975                                                         0 = 10/100Mbs operation
11976                                                             (GMX_TX_CLK[CLK_CNT] > 1)
11977                                                         1 = 1000Mbs operation */
11978        uint64_t en                      : 1;       /**< Link Enable
11979                                                         When EN is clear, packets will not be received
11980                                                         or transmitted (including PAUSE and JAM packets).
11981                                                         If EN is cleared while a packet is currently
11982                                                         being received or transmitted, the packet will
11983                                                         be allowed to complete before the bus is idled.
11984                                                         On the RX side, subsequent packets in a burst
11985                                                         will be ignored. */
11986#else
11987        uint64_t en                      : 1;
11988        uint64_t speed                   : 1;
11989        uint64_t duplex                  : 1;
11990        uint64_t slottime                : 1;
11991        uint64_t reserved_4_7            : 4;
11992        uint64_t speed_msb               : 1;
11993        uint64_t reserved_9_11           : 3;
11994        uint64_t rx_idle                 : 1;
11995        uint64_t tx_idle                 : 1;
11996        uint64_t reserved_14_63          : 50;
11997#endif
11998    } s;
11999    struct cvmx_gmxx_prtx_cfg_cn30xx
12000    {
12001#if __BYTE_ORDER == __BIG_ENDIAN
12002        uint64_t reserved_4_63           : 60;
12003        uint64_t slottime                : 1;       /**< Slot Time for Half-Duplex operation
12004                                                         0 = 512 bitimes (10/100Mbs operation)
12005                                                         1 = 4096 bitimes (1000Mbs operation) */
12006        uint64_t duplex                  : 1;       /**< Duplex
12007                                                         0 = Half Duplex (collisions/extentions/bursts)
12008                                                         1 = Full Duplex */
12009        uint64_t speed                   : 1;       /**< Link Speed
12010                                                         0 = 10/100Mbs operation
12011                                                             (in RGMII mode, GMX_TX_CLK[CLK_CNT] >  1)
12012                                                             (in MII   mode, GMX_TX_CLK[CLK_CNT] == 1)
12013                                                         1 = 1000Mbs operation */
12014        uint64_t en                      : 1;       /**< Link Enable
12015                                                         When EN is clear, packets will not be received
12016                                                         or transmitted (including PAUSE and JAM packets).
12017                                                         If EN is cleared while a packet is currently
12018                                                         being received or transmitted, the packet will
12019                                                         be allowed to complete before the bus is idled.
12020                                                         On the RX side, subsequent packets in a burst
12021                                                         will be ignored. */
12022#else
12023        uint64_t en                      : 1;
12024        uint64_t speed                   : 1;
12025        uint64_t duplex                  : 1;
12026        uint64_t slottime                : 1;
12027        uint64_t reserved_4_63           : 60;
12028#endif
12029    } cn30xx;
12030    struct cvmx_gmxx_prtx_cfg_cn30xx     cn31xx;
12031    struct cvmx_gmxx_prtx_cfg_cn30xx     cn38xx;
12032    struct cvmx_gmxx_prtx_cfg_cn30xx     cn38xxp2;
12033    struct cvmx_gmxx_prtx_cfg_cn30xx     cn50xx;
12034    struct cvmx_gmxx_prtx_cfg_s          cn52xx;
12035    struct cvmx_gmxx_prtx_cfg_s          cn52xxp1;
12036    struct cvmx_gmxx_prtx_cfg_s          cn56xx;
12037    struct cvmx_gmxx_prtx_cfg_s          cn56xxp1;
12038    struct cvmx_gmxx_prtx_cfg_cn30xx     cn58xx;
12039    struct cvmx_gmxx_prtx_cfg_cn30xx     cn58xxp1;
12040} cvmx_gmxx_prtx_cfg_t;
12041
12042
12043/**
12044 * cvmx_gmx#_rx#_adr_cam0
12045 *
12046 * GMX_RX_ADR_CAM = Address Filtering Control
12047 *
12048 */
12049typedef union
12050{
12051    uint64_t u64;
12052    struct cvmx_gmxx_rxx_adr_cam0_s
12053    {
12054#if __BYTE_ORDER == __BIG_ENDIAN
12055        uint64_t adr                     : 64;      /**< The DMAC address to match on
12056                                                         Each entry contributes 8bits to one of 8 matchers
12057                                                         Write transactions to GMX_RX_ADR_CAM will not
12058                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12059                                                         The CAM matches against unicst or multicst DMAC
12060                                                         addresses. */
12061#else
12062        uint64_t adr                     : 64;
12063#endif
12064    } s;
12065    struct cvmx_gmxx_rxx_adr_cam0_s      cn30xx;
12066    struct cvmx_gmxx_rxx_adr_cam0_s      cn31xx;
12067    struct cvmx_gmxx_rxx_adr_cam0_s      cn38xx;
12068    struct cvmx_gmxx_rxx_adr_cam0_s      cn38xxp2;
12069    struct cvmx_gmxx_rxx_adr_cam0_s      cn50xx;
12070    struct cvmx_gmxx_rxx_adr_cam0_s      cn52xx;
12071    struct cvmx_gmxx_rxx_adr_cam0_s      cn52xxp1;
12072    struct cvmx_gmxx_rxx_adr_cam0_s      cn56xx;
12073    struct cvmx_gmxx_rxx_adr_cam0_s      cn56xxp1;
12074    struct cvmx_gmxx_rxx_adr_cam0_s      cn58xx;
12075    struct cvmx_gmxx_rxx_adr_cam0_s      cn58xxp1;
12076} cvmx_gmxx_rxx_adr_cam0_t;
12077
12078
12079/**
12080 * cvmx_gmx#_rx#_adr_cam1
12081 *
12082 * GMX_RX_ADR_CAM = Address Filtering Control
12083 *
12084 */
12085typedef union
12086{
12087    uint64_t u64;
12088    struct cvmx_gmxx_rxx_adr_cam1_s
12089    {
12090#if __BYTE_ORDER == __BIG_ENDIAN
12091        uint64_t adr                     : 64;      /**< The DMAC address to match on
12092                                                         Each entry contributes 8bits to one of 8 matchers
12093                                                         Write transactions to GMX_RX_ADR_CAM will not
12094                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12095                                                         The CAM matches against unicst or multicst DMAC
12096                                                         addresses. */
12097#else
12098        uint64_t adr                     : 64;
12099#endif
12100    } s;
12101    struct cvmx_gmxx_rxx_adr_cam1_s      cn30xx;
12102    struct cvmx_gmxx_rxx_adr_cam1_s      cn31xx;
12103    struct cvmx_gmxx_rxx_adr_cam1_s      cn38xx;
12104    struct cvmx_gmxx_rxx_adr_cam1_s      cn38xxp2;
12105    struct cvmx_gmxx_rxx_adr_cam1_s      cn50xx;
12106    struct cvmx_gmxx_rxx_adr_cam1_s      cn52xx;
12107    struct cvmx_gmxx_rxx_adr_cam1_s      cn52xxp1;
12108    struct cvmx_gmxx_rxx_adr_cam1_s      cn56xx;
12109    struct cvmx_gmxx_rxx_adr_cam1_s      cn56xxp1;
12110    struct cvmx_gmxx_rxx_adr_cam1_s      cn58xx;
12111    struct cvmx_gmxx_rxx_adr_cam1_s      cn58xxp1;
12112} cvmx_gmxx_rxx_adr_cam1_t;
12113
12114
12115/**
12116 * cvmx_gmx#_rx#_adr_cam2
12117 *
12118 * GMX_RX_ADR_CAM = Address Filtering Control
12119 *
12120 */
12121typedef union
12122{
12123    uint64_t u64;
12124    struct cvmx_gmxx_rxx_adr_cam2_s
12125    {
12126#if __BYTE_ORDER == __BIG_ENDIAN
12127        uint64_t adr                     : 64;      /**< The DMAC address to match on
12128                                                         Each entry contributes 8bits to one of 8 matchers
12129                                                         Write transactions to GMX_RX_ADR_CAM will not
12130                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12131                                                         The CAM matches against unicst or multicst DMAC
12132                                                         addresses. */
12133#else
12134        uint64_t adr                     : 64;
12135#endif
12136    } s;
12137    struct cvmx_gmxx_rxx_adr_cam2_s      cn30xx;
12138    struct cvmx_gmxx_rxx_adr_cam2_s      cn31xx;
12139    struct cvmx_gmxx_rxx_adr_cam2_s      cn38xx;
12140    struct cvmx_gmxx_rxx_adr_cam2_s      cn38xxp2;
12141    struct cvmx_gmxx_rxx_adr_cam2_s      cn50xx;
12142    struct cvmx_gmxx_rxx_adr_cam2_s      cn52xx;
12143    struct cvmx_gmxx_rxx_adr_cam2_s      cn52xxp1;
12144    struct cvmx_gmxx_rxx_adr_cam2_s      cn56xx;
12145    struct cvmx_gmxx_rxx_adr_cam2_s      cn56xxp1;
12146    struct cvmx_gmxx_rxx_adr_cam2_s      cn58xx;
12147    struct cvmx_gmxx_rxx_adr_cam2_s      cn58xxp1;
12148} cvmx_gmxx_rxx_adr_cam2_t;
12149
12150
12151/**
12152 * cvmx_gmx#_rx#_adr_cam3
12153 *
12154 * GMX_RX_ADR_CAM = Address Filtering Control
12155 *
12156 */
12157typedef union
12158{
12159    uint64_t u64;
12160    struct cvmx_gmxx_rxx_adr_cam3_s
12161    {
12162#if __BYTE_ORDER == __BIG_ENDIAN
12163        uint64_t adr                     : 64;      /**< The DMAC address to match on
12164                                                         Each entry contributes 8bits to one of 8 matchers
12165                                                         Write transactions to GMX_RX_ADR_CAM will not
12166                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12167                                                         The CAM matches against unicst or multicst DMAC
12168                                                         addresses. */
12169#else
12170        uint64_t adr                     : 64;
12171#endif
12172    } s;
12173    struct cvmx_gmxx_rxx_adr_cam3_s      cn30xx;
12174    struct cvmx_gmxx_rxx_adr_cam3_s      cn31xx;
12175    struct cvmx_gmxx_rxx_adr_cam3_s      cn38xx;
12176    struct cvmx_gmxx_rxx_adr_cam3_s      cn38xxp2;
12177    struct cvmx_gmxx_rxx_adr_cam3_s      cn50xx;
12178    struct cvmx_gmxx_rxx_adr_cam3_s      cn52xx;
12179    struct cvmx_gmxx_rxx_adr_cam3_s      cn52xxp1;
12180    struct cvmx_gmxx_rxx_adr_cam3_s      cn56xx;
12181    struct cvmx_gmxx_rxx_adr_cam3_s      cn56xxp1;
12182    struct cvmx_gmxx_rxx_adr_cam3_s      cn58xx;
12183    struct cvmx_gmxx_rxx_adr_cam3_s      cn58xxp1;
12184} cvmx_gmxx_rxx_adr_cam3_t;
12185
12186
12187/**
12188 * cvmx_gmx#_rx#_adr_cam4
12189 *
12190 * GMX_RX_ADR_CAM = Address Filtering Control
12191 *
12192 */
12193typedef union
12194{
12195    uint64_t u64;
12196    struct cvmx_gmxx_rxx_adr_cam4_s
12197    {
12198#if __BYTE_ORDER == __BIG_ENDIAN
12199        uint64_t adr                     : 64;      /**< The DMAC address to match on
12200                                                         Each entry contributes 8bits to one of 8 matchers
12201                                                         Write transactions to GMX_RX_ADR_CAM will not
12202                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12203                                                         The CAM matches against unicst or multicst DMAC
12204                                                         addresses. */
12205#else
12206        uint64_t adr                     : 64;
12207#endif
12208    } s;
12209    struct cvmx_gmxx_rxx_adr_cam4_s      cn30xx;
12210    struct cvmx_gmxx_rxx_adr_cam4_s      cn31xx;
12211    struct cvmx_gmxx_rxx_adr_cam4_s      cn38xx;
12212    struct cvmx_gmxx_rxx_adr_cam4_s      cn38xxp2;
12213    struct cvmx_gmxx_rxx_adr_cam4_s      cn50xx;
12214    struct cvmx_gmxx_rxx_adr_cam4_s      cn52xx;
12215    struct cvmx_gmxx_rxx_adr_cam4_s      cn52xxp1;
12216    struct cvmx_gmxx_rxx_adr_cam4_s      cn56xx;
12217    struct cvmx_gmxx_rxx_adr_cam4_s      cn56xxp1;
12218    struct cvmx_gmxx_rxx_adr_cam4_s      cn58xx;
12219    struct cvmx_gmxx_rxx_adr_cam4_s      cn58xxp1;
12220} cvmx_gmxx_rxx_adr_cam4_t;
12221
12222
12223/**
12224 * cvmx_gmx#_rx#_adr_cam5
12225 *
12226 * GMX_RX_ADR_CAM = Address Filtering Control
12227 *
12228 */
12229typedef union
12230{
12231    uint64_t u64;
12232    struct cvmx_gmxx_rxx_adr_cam5_s
12233    {
12234#if __BYTE_ORDER == __BIG_ENDIAN
12235        uint64_t adr                     : 64;      /**< The DMAC address to match on
12236                                                         Each entry contributes 8bits to one of 8 matchers
12237                                                         Write transactions to GMX_RX_ADR_CAM will not
12238                                                         change the CSR when GMX_PRT_CFG[EN] is enabled
12239                                                         The CAM matches against unicst or multicst DMAC
12240                                                         addresses. */
12241#else
12242        uint64_t adr                     : 64;
12243#endif
12244    } s;
12245    struct cvmx_gmxx_rxx_adr_cam5_s      cn30xx;
12246    struct cvmx_gmxx_rxx_adr_cam5_s      cn31xx;
12247    struct cvmx_gmxx_rxx_adr_cam5_s      cn38xx;
12248    struct cvmx_gmxx_rxx_adr_cam5_s      cn38xxp2;
12249    struct cvmx_gmxx_rxx_adr_cam5_s      cn50xx;
12250    struct cvmx_gmxx_rxx_adr_cam5_s      cn52xx;
12251    struct cvmx_gmxx_rxx_adr_cam5_s      cn52xxp1;
12252    struct cvmx_gmxx_rxx_adr_cam5_s      cn56xx;
12253    struct cvmx_gmxx_rxx_adr_cam5_s      cn56xxp1;
12254    struct cvmx_gmxx_rxx_adr_cam5_s      cn58xx;
12255    struct cvmx_gmxx_rxx_adr_cam5_s      cn58xxp1;
12256} cvmx_gmxx_rxx_adr_cam5_t;
12257
12258
12259/**
12260 * cvmx_gmx#_rx#_adr_cam_en
12261 *
12262 * GMX_RX_ADR_CAM_EN = Address Filtering Control Enable
12263 *
12264 */
12265typedef union
12266{
12267    uint64_t u64;
12268    struct cvmx_gmxx_rxx_adr_cam_en_s
12269    {
12270#if __BYTE_ORDER == __BIG_ENDIAN
12271        uint64_t reserved_8_63           : 56;
12272        uint64_t en                      : 8;       /**< CAM Entry Enables */
12273#else
12274        uint64_t en                      : 8;
12275        uint64_t reserved_8_63           : 56;
12276#endif
12277    } s;
12278    struct cvmx_gmxx_rxx_adr_cam_en_s    cn30xx;
12279    struct cvmx_gmxx_rxx_adr_cam_en_s    cn31xx;
12280    struct cvmx_gmxx_rxx_adr_cam_en_s    cn38xx;
12281    struct cvmx_gmxx_rxx_adr_cam_en_s    cn38xxp2;
12282    struct cvmx_gmxx_rxx_adr_cam_en_s    cn50xx;
12283    struct cvmx_gmxx_rxx_adr_cam_en_s    cn52xx;
12284    struct cvmx_gmxx_rxx_adr_cam_en_s    cn52xxp1;
12285    struct cvmx_gmxx_rxx_adr_cam_en_s    cn56xx;
12286    struct cvmx_gmxx_rxx_adr_cam_en_s    cn56xxp1;
12287    struct cvmx_gmxx_rxx_adr_cam_en_s    cn58xx;
12288    struct cvmx_gmxx_rxx_adr_cam_en_s    cn58xxp1;
12289} cvmx_gmxx_rxx_adr_cam_en_t;
12290
12291
12292/**
12293 * cvmx_gmx#_rx#_adr_ctl
12294 *
12295 * GMX_RX_ADR_CTL = Address Filtering Control
12296 *
12297 *
12298 * Notes:
12299 * * ALGORITHM
12300 * Here is some pseudo code that represents the address filter behavior.
12301 *
12302 *    @verbatim
12303 *    bool dmac_addr_filter(uint8 prt, uint48 dmac) [
12304 *      ASSERT(prt >= 0 && prt <= 3);
12305 *      if (is_bcst(dmac))                               // broadcast accept
12306 *        return (GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT);
12307 *      if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 1)   // multicast reject
12308 *        return REJECT;
12309 *      if (is_mcst(dmac) & GMX_RX[prt]_ADR_CTL[MCST] == 2)   // multicast accept
12310 *        return ACCEPT;
12311 *
12312 *      cam_hit = 0;
12313 *
12314 *      for (i=0; i<8; i++) [
12315 *        if (GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0)
12316 *          continue;
12317 *        uint48 unswizzled_mac_adr = 0x0;
12318 *        for (j=5; j>=0; j--) [
12319 *           unswizzled_mac_adr = (unswizzled_mac_adr << 8) | GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>];
12320 *        ]
12321 *        if (unswizzled_mac_adr == dmac) [
12322 *          cam_hit = 1;
12323 *          break;
12324 *        ]
12325 *      ]
12326 *
12327 *      if (cam_hit)
12328 *        return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT);
12329 *      else
12330 *        return (GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT);
12331 *    ]
12332 *    @endverbatim
12333 */
12334typedef union
12335{
12336    uint64_t u64;
12337    struct cvmx_gmxx_rxx_adr_ctl_s
12338    {
12339#if __BYTE_ORDER == __BIG_ENDIAN
12340        uint64_t reserved_4_63           : 60;
12341        uint64_t cam_mode                : 1;       /**< Allow or deny DMAC address filter
12342                                                         0 = reject the packet on DMAC address match
12343                                                         1 = accept the packet on DMAC address match */
12344        uint64_t mcst                    : 2;       /**< Multicast Mode
12345                                                         0 = Use the Address Filter CAM
12346                                                         1 = Force reject all multicast packets
12347                                                         2 = Force accept all multicast packets
12348                                                         3 = Reserved */
12349        uint64_t bcst                    : 1;       /**< Accept All Broadcast Packets */
12350#else
12351        uint64_t bcst                    : 1;
12352        uint64_t mcst                    : 2;
12353        uint64_t cam_mode                : 1;
12354        uint64_t reserved_4_63           : 60;
12355#endif
12356    } s;
12357    struct cvmx_gmxx_rxx_adr_ctl_s       cn30xx;
12358    struct cvmx_gmxx_rxx_adr_ctl_s       cn31xx;
12359    struct cvmx_gmxx_rxx_adr_ctl_s       cn38xx;
12360    struct cvmx_gmxx_rxx_adr_ctl_s       cn38xxp2;
12361    struct cvmx_gmxx_rxx_adr_ctl_s       cn50xx;
12362    struct cvmx_gmxx_rxx_adr_ctl_s       cn52xx;
12363    struct cvmx_gmxx_rxx_adr_ctl_s       cn52xxp1;
12364    struct cvmx_gmxx_rxx_adr_ctl_s       cn56xx;
12365    struct cvmx_gmxx_rxx_adr_ctl_s       cn56xxp1;
12366    struct cvmx_gmxx_rxx_adr_ctl_s       cn58xx;
12367    struct cvmx_gmxx_rxx_adr_ctl_s       cn58xxp1;
12368} cvmx_gmxx_rxx_adr_ctl_t;
12369
12370
12371/**
12372 * cvmx_gmx#_rx#_decision
12373 *
12374 * GMX_RX_DECISION = The byte count to decide when to accept or filter a packet
12375 *
12376 *
12377 * Notes:
12378 * As each byte in a packet is received by GMX, the L2 byte count is compared
12379 * against the GMX_RX_DECISION[CNT].  The L2 byte count is the number of bytes
12380 * from the beginning of the L2 header (DMAC).  In normal operation, the L2
12381 * header begins after the PREAMBLE+SFD (GMX_RX_FRM_CTL[PRE_CHK]=1) and any
12382 * optional UDD skip data (GMX_RX_UDD_SKP[LEN]).
12383 *
12384 * When GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
12385 * packet and would require UDD skip length to account for them.
12386 *
12387 *                                                 L2 Size
12388 * Port Mode             <GMX_RX_DECISION bytes (default=24)       >=GMX_RX_DECISION bytes (default=24)
12389 *
12390 * Full Duplex           accept packet                             apply filters
12391 *                       no filtering is applied                   accept packet based on DMAC and PAUSE packet filters
12392 *
12393 * Half Duplex           drop packet                               apply filters
12394 *                       packet is unconditionally dropped         accept packet based on DMAC
12395 *
12396 * where l2_size = MAX(0, total_packet_size - GMX_RX_UDD_SKP[LEN] - ((GMX_RX_FRM_CTL[PRE_CHK]==1)*8)
12397 */
12398typedef union
12399{
12400    uint64_t u64;
12401    struct cvmx_gmxx_rxx_decision_s
12402    {
12403#if __BYTE_ORDER == __BIG_ENDIAN
12404        uint64_t reserved_5_63           : 59;
12405        uint64_t cnt                     : 5;       /**< The byte count to decide when to accept or filter
12406                                                         a packet. */
12407#else
12408        uint64_t cnt                     : 5;
12409        uint64_t reserved_5_63           : 59;
12410#endif
12411    } s;
12412    struct cvmx_gmxx_rxx_decision_s      cn30xx;
12413    struct cvmx_gmxx_rxx_decision_s      cn31xx;
12414    struct cvmx_gmxx_rxx_decision_s      cn38xx;
12415    struct cvmx_gmxx_rxx_decision_s      cn38xxp2;
12416    struct cvmx_gmxx_rxx_decision_s      cn50xx;
12417    struct cvmx_gmxx_rxx_decision_s      cn52xx;
12418    struct cvmx_gmxx_rxx_decision_s      cn52xxp1;
12419    struct cvmx_gmxx_rxx_decision_s      cn56xx;
12420    struct cvmx_gmxx_rxx_decision_s      cn56xxp1;
12421    struct cvmx_gmxx_rxx_decision_s      cn58xx;
12422    struct cvmx_gmxx_rxx_decision_s      cn58xxp1;
12423} cvmx_gmxx_rxx_decision_t;
12424
12425
12426/**
12427 * cvmx_gmx#_rx#_frm_chk
12428 *
12429 * GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame
12430 *
12431 *
12432 * Notes:
12433 * If GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW.
12434 *
12435 * In XAUI mode prt0 is used for checking.
12436 */
12437typedef union
12438{
12439    uint64_t u64;
12440    struct cvmx_gmxx_rxx_frm_chk_s
12441    {
12442#if __BYTE_ORDER == __BIG_ENDIAN
12443        uint64_t reserved_10_63          : 54;
12444        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
12445        uint64_t skperr                  : 1;       /**< Skipper error */
12446        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
12447        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
12448        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
12449        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
12450        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
12451        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
12452        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
12453        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
12454#else
12455        uint64_t minerr                  : 1;
12456        uint64_t carext                  : 1;
12457        uint64_t maxerr                  : 1;
12458        uint64_t jabber                  : 1;
12459        uint64_t fcserr                  : 1;
12460        uint64_t alnerr                  : 1;
12461        uint64_t lenerr                  : 1;
12462        uint64_t rcverr                  : 1;
12463        uint64_t skperr                  : 1;
12464        uint64_t niberr                  : 1;
12465        uint64_t reserved_10_63          : 54;
12466#endif
12467    } s;
12468    struct cvmx_gmxx_rxx_frm_chk_s       cn30xx;
12469    struct cvmx_gmxx_rxx_frm_chk_s       cn31xx;
12470    struct cvmx_gmxx_rxx_frm_chk_s       cn38xx;
12471    struct cvmx_gmxx_rxx_frm_chk_s       cn38xxp2;
12472    struct cvmx_gmxx_rxx_frm_chk_cn50xx
12473    {
12474#if __BYTE_ORDER == __BIG_ENDIAN
12475        uint64_t reserved_10_63          : 54;
12476        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
12477        uint64_t skperr                  : 1;       /**< Skipper error */
12478        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
12479        uint64_t reserved_6_6            : 1;
12480        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
12481        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
12482        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
12483        uint64_t reserved_2_2            : 1;
12484        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
12485        uint64_t reserved_0_0            : 1;
12486#else
12487        uint64_t reserved_0_0            : 1;
12488        uint64_t carext                  : 1;
12489        uint64_t reserved_2_2            : 1;
12490        uint64_t jabber                  : 1;
12491        uint64_t fcserr                  : 1;
12492        uint64_t alnerr                  : 1;
12493        uint64_t reserved_6_6            : 1;
12494        uint64_t rcverr                  : 1;
12495        uint64_t skperr                  : 1;
12496        uint64_t niberr                  : 1;
12497        uint64_t reserved_10_63          : 54;
12498#endif
12499    } cn50xx;
12500    struct cvmx_gmxx_rxx_frm_chk_cn52xx
12501    {
12502#if __BYTE_ORDER == __BIG_ENDIAN
12503        uint64_t reserved_9_63           : 55;
12504        uint64_t skperr                  : 1;       /**< Skipper error */
12505        uint64_t rcverr                  : 1;       /**< Frame was received with Data reception error */
12506        uint64_t reserved_5_6            : 2;
12507        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
12508        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
12509        uint64_t reserved_2_2            : 1;
12510        uint64_t carext                  : 1;       /**< Carrier extend error
12511                                                         (SGMII/1000Base-X only) */
12512        uint64_t reserved_0_0            : 1;
12513#else
12514        uint64_t reserved_0_0            : 1;
12515        uint64_t carext                  : 1;
12516        uint64_t reserved_2_2            : 1;
12517        uint64_t jabber                  : 1;
12518        uint64_t fcserr                  : 1;
12519        uint64_t reserved_5_6            : 2;
12520        uint64_t rcverr                  : 1;
12521        uint64_t skperr                  : 1;
12522        uint64_t reserved_9_63           : 55;
12523#endif
12524    } cn52xx;
12525    struct cvmx_gmxx_rxx_frm_chk_cn52xx  cn52xxp1;
12526    struct cvmx_gmxx_rxx_frm_chk_cn52xx  cn56xx;
12527    struct cvmx_gmxx_rxx_frm_chk_cn52xx  cn56xxp1;
12528    struct cvmx_gmxx_rxx_frm_chk_s       cn58xx;
12529    struct cvmx_gmxx_rxx_frm_chk_s       cn58xxp1;
12530} cvmx_gmxx_rxx_frm_chk_t;
12531
12532
12533/**
12534 * cvmx_gmx#_rx#_frm_ctl
12535 *
12536 * GMX_RX_FRM_CTL = Frame Control
12537 *
12538 *
12539 * Notes:
12540 * * PRE_CHK
12541 *   When set, the RX state expects a typical frame consisting of
12542 *   INTER_FRAME=>PREAMBLE(x7)=>SFD(x1)=>DAT.  The state machine watches for
12543 *   this exact sequence in order to recognize a valid frame and push frame
12544 *   data into the Octane.  There must be exactly 7 PREAMBLE cycles followed by
12545 *   the single SFD cycle for the frame to be accepted.
12546 *
12547 *   When a problem does occur within the PREAMBLE seqeunce, the frame is
12548 *   marked as bad and not sent into the core.  The GMX_RX_INT_REG[PCTERR]
12549 *   interrupt is also raised.
12550 *
12551 * * PRE_STRP
12552 *   When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP
12553 *   determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
12554 *   core as part of the packet.
12555 *
12556 *   In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
12557 *   size when checking against the MIN and MAX bounds.  Furthermore, the bytes
12558 *   are skipped when locating the start of the L2 header for DMAC and Control
12559 *   frame recognition.
12560 *
12561 * * CTL_BCK/CTL_DRP
12562 *   These bits control how the HW handles incoming PAUSE packets.  Here are
12563 *   the most common modes of operation:
12564 *     CTL_BCK=1,CTL_DRP=1   - HW does it all
12565 *     CTL_BCK=0,CTL_DRP=0   - SW sees all pause frames
12566 *     CTL_BCK=0,CTL_DRP=1   - all pause frames are completely ignored
12567 *
12568 *   These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode.
12569 *   Since PAUSE packets only apply to fulldup operation, any PAUSE packet
12570 *   would constitute an exception which should be handled by the processing
12571 *   cores.  PAUSE packets should not be forwarded.
12572 */
12573typedef union
12574{
12575    uint64_t u64;
12576    struct cvmx_gmxx_rxx_frm_ctl_s
12577    {
12578#if __BYTE_ORDER == __BIG_ENDIAN
12579        uint64_t reserved_11_63          : 53;
12580        uint64_t null_dis                : 1;       /**< When set, do not modify the MOD bits on NULL ticks
12581                                                         due to PARITAL packets
12582                                                         In spi4 mode, all ports use prt0 for checking. */
12583        uint64_t pre_align               : 1;       /**< When set, PREAMBLE parser aligns the the SFD byte
12584                                                         regardless of the number of previous PREAMBLE
12585                                                         nibbles.  In this mode, PREAMBLE can be consumed
12586                                                         by the HW so when PRE_ALIGN is set, PRE_FREE,
12587                                                         PRE_STRP must be set for correct operation.
12588                                                         PRE_CHK must be set to enable this and all
12589                                                         PREAMBLE features. */
12590        uint64_t pad_len                 : 1;       /**< When set, disables the length check for non-min
12591                                                         sized pkts with padding in the client data
12592                                                         (PASS3 Only) */
12593        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts
12594                                                         (PASS2 only) */
12595        uint64_t pre_free                : 1;       /**< When set, PREAMBLE checking is  less strict.
12596                                                         0 - 254 cycles of PREAMBLE followed by SFD */
12597        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
12598        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
12599                                                         Multicast address */
12600        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
12601        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
12602        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
12603                                                         0=PREAMBLE+SFD is sent to core as part of frame
12604                                                         1=PREAMBLE+SFD is dropped */
12605        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
12606                                                         to begin every frame.  GMX checks that the
12607                                                         PREAMBLE is sent correctly */
12608#else
12609        uint64_t pre_chk                 : 1;
12610        uint64_t pre_strp                : 1;
12611        uint64_t ctl_drp                 : 1;
12612        uint64_t ctl_bck                 : 1;
12613        uint64_t ctl_mcst                : 1;
12614        uint64_t ctl_smac                : 1;
12615        uint64_t pre_free                : 1;
12616        uint64_t vlan_len                : 1;
12617        uint64_t pad_len                 : 1;
12618        uint64_t pre_align               : 1;
12619        uint64_t null_dis                : 1;
12620        uint64_t reserved_11_63          : 53;
12621#endif
12622    } s;
12623    struct cvmx_gmxx_rxx_frm_ctl_cn30xx
12624    {
12625#if __BYTE_ORDER == __BIG_ENDIAN
12626        uint64_t reserved_9_63           : 55;
12627        uint64_t pad_len                 : 1;       /**< When set, disables the length check for non-min
12628                                                         sized pkts with padding in the client data */
12629        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts */
12630        uint64_t pre_free                : 1;       /**< Allows for less strict PREAMBLE checking.
12631                                                         0-7 cycles of PREAMBLE followed by SFD (pass 1.0)
12632                                                         0-254 cycles of PREAMBLE followed by SFD (else) */
12633        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
12634        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
12635                                                         Multicast address */
12636        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
12637        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
12638        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
12639                                                         0=PREAMBLE+SFD is sent to core as part of frame
12640                                                         1=PREAMBLE+SFD is dropped */
12641        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
12642                                                         to begin every frame.  GMX checks that the
12643                                                         PREAMBLE is sent correctly */
12644#else
12645        uint64_t pre_chk                 : 1;
12646        uint64_t pre_strp                : 1;
12647        uint64_t ctl_drp                 : 1;
12648        uint64_t ctl_bck                 : 1;
12649        uint64_t ctl_mcst                : 1;
12650        uint64_t ctl_smac                : 1;
12651        uint64_t pre_free                : 1;
12652        uint64_t vlan_len                : 1;
12653        uint64_t pad_len                 : 1;
12654        uint64_t reserved_9_63           : 55;
12655#endif
12656    } cn30xx;
12657    struct cvmx_gmxx_rxx_frm_ctl_cn31xx
12658    {
12659#if __BYTE_ORDER == __BIG_ENDIAN
12660        uint64_t reserved_8_63           : 56;
12661        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts */
12662        uint64_t pre_free                : 1;       /**< Allows for less strict PREAMBLE checking.
12663                                                         0 - 7 cycles of PREAMBLE followed by SFD (pass1.0)
12664                                                         0 - 254 cycles of PREAMBLE followed by SFD (else) */
12665        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
12666        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
12667                                                         Multicast address */
12668        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
12669        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
12670        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
12671                                                         0=PREAMBLE+SFD is sent to core as part of frame
12672                                                         1=PREAMBLE+SFD is dropped */
12673        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
12674                                                         to begin every frame.  GMX checks that the
12675                                                         PREAMBLE is sent correctly */
12676#else
12677        uint64_t pre_chk                 : 1;
12678        uint64_t pre_strp                : 1;
12679        uint64_t ctl_drp                 : 1;
12680        uint64_t ctl_bck                 : 1;
12681        uint64_t ctl_mcst                : 1;
12682        uint64_t ctl_smac                : 1;
12683        uint64_t pre_free                : 1;
12684        uint64_t vlan_len                : 1;
12685        uint64_t reserved_8_63           : 56;
12686#endif
12687    } cn31xx;
12688    struct cvmx_gmxx_rxx_frm_ctl_cn30xx  cn38xx;
12689    struct cvmx_gmxx_rxx_frm_ctl_cn31xx  cn38xxp2;
12690    struct cvmx_gmxx_rxx_frm_ctl_cn50xx
12691    {
12692#if __BYTE_ORDER == __BIG_ENDIAN
12693        uint64_t reserved_11_63          : 53;
12694        uint64_t null_dis                : 1;       /**< When set, do not modify the MOD bits on NULL ticks
12695                                                         due to PARITAL packets */
12696        uint64_t pre_align               : 1;       /**< When set, PREAMBLE parser aligns the the SFD byte
12697                                                         regardless of the number of previous PREAMBLE
12698                                                         nibbles.  In this mode, PREAMBLE can be consumed
12699                                                         by the HW so when PRE_ALIGN is set, PRE_FREE,
12700                                                         PRE_STRP must be set for correct operation.
12701                                                         PRE_CHK must be set to enable this and all
12702                                                         PREAMBLE features. */
12703        uint64_t reserved_7_8            : 2;
12704        uint64_t pre_free                : 1;       /**< Allows for less strict PREAMBLE checking.
12705                                                         0-254 cycles of PREAMBLE followed by SFD */
12706        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
12707        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
12708                                                         Multicast address */
12709        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
12710        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
12711        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
12712                                                         0=PREAMBLE+SFD is sent to core as part of frame
12713                                                         1=PREAMBLE+SFD is dropped */
12714        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
12715                                                         to begin every frame.  GMX checks that the
12716                                                         PREAMBLE is sent correctly */
12717#else
12718        uint64_t pre_chk                 : 1;
12719        uint64_t pre_strp                : 1;
12720        uint64_t ctl_drp                 : 1;
12721        uint64_t ctl_bck                 : 1;
12722        uint64_t ctl_mcst                : 1;
12723        uint64_t ctl_smac                : 1;
12724        uint64_t pre_free                : 1;
12725        uint64_t reserved_7_8            : 2;
12726        uint64_t pre_align               : 1;
12727        uint64_t null_dis                : 1;
12728        uint64_t reserved_11_63          : 53;
12729#endif
12730    } cn50xx;
12731    struct cvmx_gmxx_rxx_frm_ctl_cn50xx  cn52xx;
12732    struct cvmx_gmxx_rxx_frm_ctl_cn50xx  cn52xxp1;
12733    struct cvmx_gmxx_rxx_frm_ctl_cn50xx  cn56xx;
12734    struct cvmx_gmxx_rxx_frm_ctl_cn56xxp1
12735    {
12736#if __BYTE_ORDER == __BIG_ENDIAN
12737        uint64_t reserved_10_63          : 54;
12738        uint64_t pre_align               : 1;       /**< When set, PREAMBLE parser aligns the the SFD byte
12739                                                         regardless of the number of previous PREAMBLE
12740                                                         nibbles.  In this mode, PRE_STRP should be set to
12741                                                         account for the variable nature of the PREAMBLE.
12742                                                         PRE_CHK must be set to enable this and all
12743                                                         PREAMBLE features.
12744                                                         (SGMII at 10/100Mbs only) */
12745        uint64_t reserved_7_8            : 2;
12746        uint64_t pre_free                : 1;       /**< When set, PREAMBLE checking is  less strict.
12747                                                         0 - 254 cycles of PREAMBLE followed by SFD
12748                                                         PRE_CHK must be set to enable this and all
12749                                                         PREAMBLE features.
12750                                                         (SGMII/1000Base-X only) */
12751        uint64_t ctl_smac                : 1;       /**< Control Pause Frames can match station SMAC */
12752        uint64_t ctl_mcst                : 1;       /**< Control Pause Frames can match globally assign
12753                                                         Multicast address */
12754        uint64_t ctl_bck                 : 1;       /**< Forward pause information to TX block */
12755        uint64_t ctl_drp                 : 1;       /**< Drop Control Pause Frames */
12756        uint64_t pre_strp                : 1;       /**< Strip off the preamble (when present)
12757                                                         0=PREAMBLE+SFD is sent to core as part of frame
12758                                                         1=PREAMBLE+SFD is dropped
12759                                                         PRE_CHK must be set to enable this and all
12760                                                         PREAMBLE features. */
12761        uint64_t pre_chk                 : 1;       /**< This port is configured to send PREAMBLE+SFD
12762                                                         to begin every frame.  GMX checks that the
12763                                                         PREAMBLE is sent correctly.
12764                                                         When GMX_TX_XAUI_CTL[HG_EN] is set, PRE_CHK
12765                                                         must be zero. */
12766#else
12767        uint64_t pre_chk                 : 1;
12768        uint64_t pre_strp                : 1;
12769        uint64_t ctl_drp                 : 1;
12770        uint64_t ctl_bck                 : 1;
12771        uint64_t ctl_mcst                : 1;
12772        uint64_t ctl_smac                : 1;
12773        uint64_t pre_free                : 1;
12774        uint64_t reserved_7_8            : 2;
12775        uint64_t pre_align               : 1;
12776        uint64_t reserved_10_63          : 54;
12777#endif
12778    } cn56xxp1;
12779    struct cvmx_gmxx_rxx_frm_ctl_s       cn58xx;
12780    struct cvmx_gmxx_rxx_frm_ctl_cn30xx  cn58xxp1;
12781} cvmx_gmxx_rxx_frm_ctl_t;
12782
12783
12784/**
12785 * cvmx_gmx#_rx#_frm_max
12786 *
12787 * GMX_RX_FRM_MAX = Frame Max length
12788 *
12789 *
12790 * Notes:
12791 * In spi4 mode, all spi4 ports use prt0 for checking.
12792 *
12793 * When changing the LEN field, be sure that LEN does not exceed
12794 * GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that
12795 * are within the maximum length parameter to be rejected because they exceed
12796 * the GMX_RX_JABBER[CNT] limit.
12797 */
12798typedef union
12799{
12800    uint64_t u64;
12801    struct cvmx_gmxx_rxx_frm_max_s
12802    {
12803#if __BYTE_ORDER == __BIG_ENDIAN
12804        uint64_t reserved_16_63          : 48;
12805        uint64_t len                     : 16;      /**< Byte count for Max-sized frame check
12806                                                         Failing packets set the MAXERR interrupt and are
12807                                                         optionally sent with opcode==MAXERR
12808                                                         LEN =< GMX_RX_JABBER[CNT] */
12809#else
12810        uint64_t len                     : 16;
12811        uint64_t reserved_16_63          : 48;
12812#endif
12813    } s;
12814    struct cvmx_gmxx_rxx_frm_max_s       cn30xx;
12815    struct cvmx_gmxx_rxx_frm_max_s       cn31xx;
12816    struct cvmx_gmxx_rxx_frm_max_s       cn38xx;
12817    struct cvmx_gmxx_rxx_frm_max_s       cn38xxp2;
12818    struct cvmx_gmxx_rxx_frm_max_s       cn58xx;
12819    struct cvmx_gmxx_rxx_frm_max_s       cn58xxp1;
12820} cvmx_gmxx_rxx_frm_max_t;
12821
12822
12823/**
12824 * cvmx_gmx#_rx#_frm_min
12825 *
12826 * GMX_RX_FRM_MIN = Frame Min length
12827 *
12828 *
12829 * Notes:
12830 * In spi4 mode, all spi4 ports use prt0 for checking.
12831 *
12832 */
12833typedef union
12834{
12835    uint64_t u64;
12836    struct cvmx_gmxx_rxx_frm_min_s
12837    {
12838#if __BYTE_ORDER == __BIG_ENDIAN
12839        uint64_t reserved_16_63          : 48;
12840        uint64_t len                     : 16;      /**< Byte count for Min-sized frame check
12841                                                         Failing packets set the MINERR interrupt and are
12842                                                         optionally sent with opcode==MINERR */
12843#else
12844        uint64_t len                     : 16;
12845        uint64_t reserved_16_63          : 48;
12846#endif
12847    } s;
12848    struct cvmx_gmxx_rxx_frm_min_s       cn30xx;
12849    struct cvmx_gmxx_rxx_frm_min_s       cn31xx;
12850    struct cvmx_gmxx_rxx_frm_min_s       cn38xx;
12851    struct cvmx_gmxx_rxx_frm_min_s       cn38xxp2;
12852    struct cvmx_gmxx_rxx_frm_min_s       cn58xx;
12853    struct cvmx_gmxx_rxx_frm_min_s       cn58xxp1;
12854} cvmx_gmxx_rxx_frm_min_t;
12855
12856
12857/**
12858 * cvmx_gmx#_rx#_ifg
12859 *
12860 * GMX_RX_IFG = RX Min IFG
12861 *
12862 */
12863typedef union
12864{
12865    uint64_t u64;
12866    struct cvmx_gmxx_rxx_ifg_s
12867    {
12868#if __BYTE_ORDER == __BIG_ENDIAN
12869        uint64_t reserved_4_63           : 60;
12870        uint64_t ifg                     : 4;       /**< Min IFG between packets used to determine IFGERR
12871                                                         1000Mbs, IFG==0.096us or 12 clks
12872                                                         100Mbs,  IFG==0.96us or 24 clks
12873                                                         10Mbs,   IFG==9.6us or 24 clks
12874                                                         In order to simplify the programming model,
12875                                                         IFG is doubled internally when
12876                                                         GMX_PRT_CFG[SPEED]==0. */
12877#else
12878        uint64_t ifg                     : 4;
12879        uint64_t reserved_4_63           : 60;
12880#endif
12881    } s;
12882    struct cvmx_gmxx_rxx_ifg_s           cn30xx;
12883    struct cvmx_gmxx_rxx_ifg_s           cn31xx;
12884    struct cvmx_gmxx_rxx_ifg_s           cn38xx;
12885    struct cvmx_gmxx_rxx_ifg_s           cn38xxp2;
12886    struct cvmx_gmxx_rxx_ifg_s           cn50xx;
12887    struct cvmx_gmxx_rxx_ifg_s           cn52xx;
12888    struct cvmx_gmxx_rxx_ifg_s           cn52xxp1;
12889    struct cvmx_gmxx_rxx_ifg_s           cn56xx;
12890    struct cvmx_gmxx_rxx_ifg_s           cn56xxp1;
12891    struct cvmx_gmxx_rxx_ifg_s           cn58xx;
12892    struct cvmx_gmxx_rxx_ifg_s           cn58xxp1;
12893} cvmx_gmxx_rxx_ifg_t;
12894
12895
12896/**
12897 * cvmx_gmx#_rx#_int_en
12898 *
12899 * GMX_RX_INT_EN = Interrupt Enable
12900 *
12901 *
12902 * Notes:
12903 * In XAUI mode prt0 is used for checking.
12904 *
12905 */
12906typedef union
12907{
12908    uint64_t u64;
12909    struct cvmx_gmxx_rxx_int_en_s
12910    {
12911#if __BYTE_ORDER == __BIG_ENDIAN
12912        uint64_t reserved_29_63          : 35;
12913        uint64_t hg2cc                   : 1;       /**< HiGig2 CRC8 or Control char error interrupt enable */
12914        uint64_t hg2fld                  : 1;       /**< HiGig2 Bad field error interrupt enable */
12915        uint64_t undat                   : 1;       /**< Unexpected Data
12916                                                         (XAUI Mode only) */
12917        uint64_t uneop                   : 1;       /**< Unexpected EOP
12918                                                         (XAUI Mode only) */
12919        uint64_t unsop                   : 1;       /**< Unexpected SOP
12920                                                         (XAUI Mode only) */
12921        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
12922                                                         than /T/.  The error propagation control
12923                                                         character /E/ will be included as part of the
12924                                                         frame and does not cause a frame termination.
12925                                                         (XAUI Mode only) */
12926        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
12927                                                         (XAUI Mode only) */
12928        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
12929                                                         (XAUI Mode only) */
12930        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
12931                                                         (XAUI Mode only) */
12932        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
12933        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
12934        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
12935        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
12936        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation */
12937        uint64_t coldet                  : 1;       /**< Collision Detection */
12938        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
12939        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
12940        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
12941        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow */
12942        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
12943        uint64_t skperr                  : 1;       /**< Skipper error */
12944        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
12945        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
12946        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
12947        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
12948        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
12949        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
12950        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
12951        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
12952#else
12953        uint64_t minerr                  : 1;
12954        uint64_t carext                  : 1;
12955        uint64_t maxerr                  : 1;
12956        uint64_t jabber                  : 1;
12957        uint64_t fcserr                  : 1;
12958        uint64_t alnerr                  : 1;
12959        uint64_t lenerr                  : 1;
12960        uint64_t rcverr                  : 1;
12961        uint64_t skperr                  : 1;
12962        uint64_t niberr                  : 1;
12963        uint64_t ovrerr                  : 1;
12964        uint64_t pcterr                  : 1;
12965        uint64_t rsverr                  : 1;
12966        uint64_t falerr                  : 1;
12967        uint64_t coldet                  : 1;
12968        uint64_t ifgerr                  : 1;
12969        uint64_t phy_link                : 1;
12970        uint64_t phy_spd                 : 1;
12971        uint64_t phy_dupx                : 1;
12972        uint64_t pause_drp               : 1;
12973        uint64_t loc_fault               : 1;
12974        uint64_t rem_fault               : 1;
12975        uint64_t bad_seq                 : 1;
12976        uint64_t bad_term                : 1;
12977        uint64_t unsop                   : 1;
12978        uint64_t uneop                   : 1;
12979        uint64_t undat                   : 1;
12980        uint64_t hg2fld                  : 1;
12981        uint64_t hg2cc                   : 1;
12982        uint64_t reserved_29_63          : 35;
12983#endif
12984    } s;
12985    struct cvmx_gmxx_rxx_int_en_cn30xx
12986    {
12987#if __BYTE_ORDER == __BIG_ENDIAN
12988        uint64_t reserved_19_63          : 45;
12989        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
12990        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
12991        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
12992        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation */
12993        uint64_t coldet                  : 1;       /**< Collision Detection */
12994        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
12995        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
12996        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
12997        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow */
12998        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
12999        uint64_t skperr                  : 1;       /**< Skipper error */
13000        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13001        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
13002        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13003        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13004        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13005        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
13006        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13007        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
13008#else
13009        uint64_t minerr                  : 1;
13010        uint64_t carext                  : 1;
13011        uint64_t maxerr                  : 1;
13012        uint64_t jabber                  : 1;
13013        uint64_t fcserr                  : 1;
13014        uint64_t alnerr                  : 1;
13015        uint64_t lenerr                  : 1;
13016        uint64_t rcverr                  : 1;
13017        uint64_t skperr                  : 1;
13018        uint64_t niberr                  : 1;
13019        uint64_t ovrerr                  : 1;
13020        uint64_t pcterr                  : 1;
13021        uint64_t rsverr                  : 1;
13022        uint64_t falerr                  : 1;
13023        uint64_t coldet                  : 1;
13024        uint64_t ifgerr                  : 1;
13025        uint64_t phy_link                : 1;
13026        uint64_t phy_spd                 : 1;
13027        uint64_t phy_dupx                : 1;
13028        uint64_t reserved_19_63          : 45;
13029#endif
13030    } cn30xx;
13031    struct cvmx_gmxx_rxx_int_en_cn30xx   cn31xx;
13032    struct cvmx_gmxx_rxx_int_en_cn30xx   cn38xx;
13033    struct cvmx_gmxx_rxx_int_en_cn30xx   cn38xxp2;
13034    struct cvmx_gmxx_rxx_int_en_cn50xx
13035    {
13036#if __BYTE_ORDER == __BIG_ENDIAN
13037        uint64_t reserved_20_63          : 44;
13038        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13039        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13040        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13041        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13042        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation */
13043        uint64_t coldet                  : 1;       /**< Collision Detection */
13044        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13045        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13046        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13047        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow */
13048        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13049        uint64_t skperr                  : 1;       /**< Skipper error */
13050        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13051        uint64_t reserved_6_6            : 1;
13052        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13053        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13054        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13055        uint64_t reserved_2_2            : 1;
13056        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13057        uint64_t reserved_0_0            : 1;
13058#else
13059        uint64_t reserved_0_0            : 1;
13060        uint64_t carext                  : 1;
13061        uint64_t reserved_2_2            : 1;
13062        uint64_t jabber                  : 1;
13063        uint64_t fcserr                  : 1;
13064        uint64_t alnerr                  : 1;
13065        uint64_t reserved_6_6            : 1;
13066        uint64_t rcverr                  : 1;
13067        uint64_t skperr                  : 1;
13068        uint64_t niberr                  : 1;
13069        uint64_t ovrerr                  : 1;
13070        uint64_t pcterr                  : 1;
13071        uint64_t rsverr                  : 1;
13072        uint64_t falerr                  : 1;
13073        uint64_t coldet                  : 1;
13074        uint64_t ifgerr                  : 1;
13075        uint64_t phy_link                : 1;
13076        uint64_t phy_spd                 : 1;
13077        uint64_t phy_dupx                : 1;
13078        uint64_t pause_drp               : 1;
13079        uint64_t reserved_20_63          : 44;
13080#endif
13081    } cn50xx;
13082    struct cvmx_gmxx_rxx_int_en_cn52xx
13083    {
13084#if __BYTE_ORDER == __BIG_ENDIAN
13085        uint64_t reserved_29_63          : 35;
13086        uint64_t hg2cc                   : 1;       /**< HiGig2 CRC8 or Control char error interrupt enable */
13087        uint64_t hg2fld                  : 1;       /**< HiGig2 Bad field error interrupt enable */
13088        uint64_t undat                   : 1;       /**< Unexpected Data
13089                                                         (XAUI Mode only) */
13090        uint64_t uneop                   : 1;       /**< Unexpected EOP
13091                                                         (XAUI Mode only) */
13092        uint64_t unsop                   : 1;       /**< Unexpected SOP
13093                                                         (XAUI Mode only) */
13094        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
13095                                                         than /T/.  The error propagation control
13096                                                         character /E/ will be included as part of the
13097                                                         frame and does not cause a frame termination.
13098                                                         (XAUI Mode only) */
13099        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
13100                                                         (XAUI Mode only) */
13101        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
13102                                                         (XAUI Mode only) */
13103        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
13104                                                         (XAUI Mode only) */
13105        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13106        uint64_t reserved_16_18          : 3;
13107        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13108                                                         (SGMII/1000Base-X only) */
13109        uint64_t coldet                  : 1;       /**< Collision Detection
13110                                                         (SGMII/1000Base-X half-duplex only) */
13111        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime
13112                                                         (SGMII/1000Base-X only) */
13113        uint64_t rsverr                  : 1;       /**< Reserved opcodes */
13114        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13115        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13116                                                         (SGMII/1000Base-X only) */
13117        uint64_t reserved_9_9            : 1;
13118        uint64_t skperr                  : 1;       /**< Skipper error */
13119        uint64_t rcverr                  : 1;       /**< Frame was received with Data reception error */
13120        uint64_t reserved_5_6            : 2;
13121        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13122        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13123        uint64_t reserved_2_2            : 1;
13124        uint64_t carext                  : 1;       /**< Carrier extend error
13125                                                         (SGMII/1000Base-X only) */
13126        uint64_t reserved_0_0            : 1;
13127#else
13128        uint64_t reserved_0_0            : 1;
13129        uint64_t carext                  : 1;
13130        uint64_t reserved_2_2            : 1;
13131        uint64_t jabber                  : 1;
13132        uint64_t fcserr                  : 1;
13133        uint64_t reserved_5_6            : 2;
13134        uint64_t rcverr                  : 1;
13135        uint64_t skperr                  : 1;
13136        uint64_t reserved_9_9            : 1;
13137        uint64_t ovrerr                  : 1;
13138        uint64_t pcterr                  : 1;
13139        uint64_t rsverr                  : 1;
13140        uint64_t falerr                  : 1;
13141        uint64_t coldet                  : 1;
13142        uint64_t ifgerr                  : 1;
13143        uint64_t reserved_16_18          : 3;
13144        uint64_t pause_drp               : 1;
13145        uint64_t loc_fault               : 1;
13146        uint64_t rem_fault               : 1;
13147        uint64_t bad_seq                 : 1;
13148        uint64_t bad_term                : 1;
13149        uint64_t unsop                   : 1;
13150        uint64_t uneop                   : 1;
13151        uint64_t undat                   : 1;
13152        uint64_t hg2fld                  : 1;
13153        uint64_t hg2cc                   : 1;
13154        uint64_t reserved_29_63          : 35;
13155#endif
13156    } cn52xx;
13157    struct cvmx_gmxx_rxx_int_en_cn52xx   cn52xxp1;
13158    struct cvmx_gmxx_rxx_int_en_cn52xx   cn56xx;
13159    struct cvmx_gmxx_rxx_int_en_cn56xxp1
13160    {
13161#if __BYTE_ORDER == __BIG_ENDIAN
13162        uint64_t reserved_27_63          : 37;
13163        uint64_t undat                   : 1;       /**< Unexpected Data
13164                                                         (XAUI Mode only) */
13165        uint64_t uneop                   : 1;       /**< Unexpected EOP
13166                                                         (XAUI Mode only) */
13167        uint64_t unsop                   : 1;       /**< Unexpected SOP
13168                                                         (XAUI Mode only) */
13169        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
13170                                                         than /T/.  The error propagation control
13171                                                         character /E/ will be included as part of the
13172                                                         frame and does not cause a frame termination.
13173                                                         (XAUI Mode only) */
13174        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
13175                                                         (XAUI Mode only) */
13176        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
13177                                                         (XAUI Mode only) */
13178        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
13179                                                         (XAUI Mode only) */
13180        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13181        uint64_t reserved_16_18          : 3;
13182        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13183                                                         (SGMII/1000Base-X only) */
13184        uint64_t coldet                  : 1;       /**< Collision Detection
13185                                                         (SGMII/1000Base-X half-duplex only) */
13186        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime
13187                                                         (SGMII/1000Base-X only) */
13188        uint64_t rsverr                  : 1;       /**< Reserved opcodes */
13189        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13190        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13191                                                         (SGMII/1000Base-X only) */
13192        uint64_t reserved_9_9            : 1;
13193        uint64_t skperr                  : 1;       /**< Skipper error */
13194        uint64_t rcverr                  : 1;       /**< Frame was received with Data reception error */
13195        uint64_t reserved_5_6            : 2;
13196        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13197        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13198        uint64_t reserved_2_2            : 1;
13199        uint64_t carext                  : 1;       /**< Carrier extend error
13200                                                         (SGMII/1000Base-X only) */
13201        uint64_t reserved_0_0            : 1;
13202#else
13203        uint64_t reserved_0_0            : 1;
13204        uint64_t carext                  : 1;
13205        uint64_t reserved_2_2            : 1;
13206        uint64_t jabber                  : 1;
13207        uint64_t fcserr                  : 1;
13208        uint64_t reserved_5_6            : 2;
13209        uint64_t rcverr                  : 1;
13210        uint64_t skperr                  : 1;
13211        uint64_t reserved_9_9            : 1;
13212        uint64_t ovrerr                  : 1;
13213        uint64_t pcterr                  : 1;
13214        uint64_t rsverr                  : 1;
13215        uint64_t falerr                  : 1;
13216        uint64_t coldet                  : 1;
13217        uint64_t ifgerr                  : 1;
13218        uint64_t reserved_16_18          : 3;
13219        uint64_t pause_drp               : 1;
13220        uint64_t loc_fault               : 1;
13221        uint64_t rem_fault               : 1;
13222        uint64_t bad_seq                 : 1;
13223        uint64_t bad_term                : 1;
13224        uint64_t unsop                   : 1;
13225        uint64_t uneop                   : 1;
13226        uint64_t undat                   : 1;
13227        uint64_t reserved_27_63          : 37;
13228#endif
13229    } cn56xxp1;
13230    struct cvmx_gmxx_rxx_int_en_cn58xx
13231    {
13232#if __BYTE_ORDER == __BIG_ENDIAN
13233        uint64_t reserved_20_63          : 44;
13234        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13235        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13236        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13237        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13238        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation */
13239        uint64_t coldet                  : 1;       /**< Collision Detection */
13240        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13241        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13242        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13243        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow */
13244        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13245        uint64_t skperr                  : 1;       /**< Skipper error */
13246        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13247        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
13248        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13249        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13250        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13251        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
13252        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13253        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
13254#else
13255        uint64_t minerr                  : 1;
13256        uint64_t carext                  : 1;
13257        uint64_t maxerr                  : 1;
13258        uint64_t jabber                  : 1;
13259        uint64_t fcserr                  : 1;
13260        uint64_t alnerr                  : 1;
13261        uint64_t lenerr                  : 1;
13262        uint64_t rcverr                  : 1;
13263        uint64_t skperr                  : 1;
13264        uint64_t niberr                  : 1;
13265        uint64_t ovrerr                  : 1;
13266        uint64_t pcterr                  : 1;
13267        uint64_t rsverr                  : 1;
13268        uint64_t falerr                  : 1;
13269        uint64_t coldet                  : 1;
13270        uint64_t ifgerr                  : 1;
13271        uint64_t phy_link                : 1;
13272        uint64_t phy_spd                 : 1;
13273        uint64_t phy_dupx                : 1;
13274        uint64_t pause_drp               : 1;
13275        uint64_t reserved_20_63          : 44;
13276#endif
13277    } cn58xx;
13278    struct cvmx_gmxx_rxx_int_en_cn58xx   cn58xxp1;
13279} cvmx_gmxx_rxx_int_en_t;
13280
13281
13282/**
13283 * cvmx_gmx#_rx#_int_reg
13284 *
13285 * GMX_RX_INT_REG = Interrupt Register
13286 *
13287 *
13288 * Notes:
13289 * (1) exceptions will only be raised to the control processor if the
13290 *     corresponding bit in the GMX_RX_INT_EN register is set.
13291 *
13292 * (2) exception conditions 10:0 can also set the rcv/opcode in the received
13293 *     packet's workQ entry.  The GMX_RX_FRM_CHK register provides a bit mask
13294 *     for configuring which conditions set the error.
13295 *
13296 * (3) in half duplex operation, the expectation is that collisions will appear
13297 *     as either MINERR o r CAREXT errors.
13298 *
13299 * (4) JABBER - An RX Jabber error indicates that a packet was received which
13300 *              is longer than the maximum allowed packet as defined by the
13301 *              system.  GMX will truncate the packet at the JABBER count.
13302 *              Failure to do so could lead to system instabilty.
13303 *
13304 * (5) NIBERR - This error is illegal at 1000Mbs speeds
13305 *              (GMX_RX_PRT_CFG[SPEED]==0) and will never assert.
13306 *
13307 * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS >
13308 *              GMX_RX_FRM_MAX.  For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS
13309 *              > GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED.
13310 *
13311 * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < GMX_RX_FRM_MIN.
13312 *
13313 * (8) ALNERR - Indicates that the packet received was not an integer number of
13314 *              bytes.  If FCS checking is enabled, ALNERR will only assert if
13315 *              the FCS is bad.  If FCS checking is disabled, ALNERR will
13316 *              assert in all non-integer frame cases.
13317 *
13318 * (9) Collisions - Collisions can only occur in half-duplex mode.  A collision
13319 *                  is assumed by the receiver when the slottime
13320 *                  (GMX_PRT_CFG[SLOTTIME]) is not satisfied.  In 10/100 mode,
13321 *                  this will result in a frame < SLOTTIME.  In 1000 mode, it
13322 *                  could result either in frame < SLOTTIME or a carrier extend
13323 *                  error with the SLOTTIME.  These conditions are visible by...
13324 *
13325 *                  . transfer ended before slottime - COLDET
13326 *                  . carrier extend error           - CAREXT
13327 *
13328 * (A) LENERR - Length errors occur when the received packet does not match the
13329 *              length field.  LENERR is only checked for packets between 64
13330 *              and 1500 bytes.  For untagged frames, the length must exact
13331 *              match.  For tagged frames the length or length+4 must match.
13332 *
13333 * (B) PCTERR - checks that the frame transtions from PREAMBLE=>SFD=>DATA.
13334 *              Does not check the number of PREAMBLE cycles.
13335 *
13336 * (C) OVRERR - Not to be included in the HRM
13337 *
13338 *              OVRERR is an architectural assertion check internal to GMX to
13339 *              make sure no assumption was violated.  In a correctly operating
13340 *              system, this interrupt can never fire.
13341 *
13342 *              GMX has an internal arbiter which selects which of 4 ports to
13343 *              buffer in the main RX FIFO.  If we normally buffer 8 bytes,
13344 *              then each port will typically push a tick every 8 cycles - if
13345 *              the packet interface is going as fast as possible.  If there
13346 *              are four ports, they push every two cycles.  So that's the
13347 *              assumption.  That the inbound module will always be able to
13348 *              consume the tick before another is produced.  If that doesn't
13349 *              happen - that's when OVRERR will assert.
13350 *
13351 * (D) In XAUI mode prt0 is used for interrupt logging.
13352 */
13353typedef union
13354{
13355    uint64_t u64;
13356    struct cvmx_gmxx_rxx_int_reg_s
13357    {
13358#if __BYTE_ORDER == __BIG_ENDIAN
13359        uint64_t reserved_29_63          : 35;
13360        uint64_t hg2cc                   : 1;       /**< HiGig2 received message CRC or Control char  error
13361                                                         Set when either CRC8 error detected or when
13362                                                         a Control Character is found in the message
13363                                                         bytes after the K.SOM
13364                                                         NOTE: HG2CC has higher priority than HG2FLD
13365                                                               i.e. a HiGig2 message that results in HG2CC
13366                                                               getting set, will never set HG2FLD. */
13367        uint64_t hg2fld                  : 1;       /**< HiGig2 received message field error, as below
13368                                                         1) MSG_TYPE field not 6'b00_0000
13369                                                            i.e. it is not a FLOW CONTROL message, which
13370                                                            is the only defined type for HiGig2
13371                                                         2) FWD_TYPE field not 2'b00 i.e. Link Level msg
13372                                                            which is the only defined type for HiGig2
13373                                                         3) FC_OBJECT field is neither 4'b0000 for
13374                                                            Physical Link nor 4'b0010 for Logical Link.
13375                                                            Those are the only two defined types in HiGig2 */
13376        uint64_t undat                   : 1;       /**< Unexpected Data
13377                                                         (XAUI Mode only) */
13378        uint64_t uneop                   : 1;       /**< Unexpected EOP
13379                                                         (XAUI Mode only) */
13380        uint64_t unsop                   : 1;       /**< Unexpected SOP
13381                                                         (XAUI Mode only) */
13382        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
13383                                                         than /T/.  The error propagation control
13384                                                         character /E/ will be included as part of the
13385                                                         frame and does not cause a frame termination.
13386                                                         (XAUI Mode only) */
13387        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
13388                                                         (XAUI Mode only) */
13389        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
13390                                                         (XAUI Mode only) */
13391        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
13392                                                         (XAUI Mode only) */
13393        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13394        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13395        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13396        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13397        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13398                                                         Does not necessarily indicate a failure */
13399        uint64_t coldet                  : 1;       /**< Collision Detection */
13400        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13401        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13402        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13403        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13404                                                         This interrupt should never assert */
13405        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13406        uint64_t skperr                  : 1;       /**< Skipper error */
13407        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13408        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
13409        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13410        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13411        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13412        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
13413        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13414        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
13415#else
13416        uint64_t minerr                  : 1;
13417        uint64_t carext                  : 1;
13418        uint64_t maxerr                  : 1;
13419        uint64_t jabber                  : 1;
13420        uint64_t fcserr                  : 1;
13421        uint64_t alnerr                  : 1;
13422        uint64_t lenerr                  : 1;
13423        uint64_t rcverr                  : 1;
13424        uint64_t skperr                  : 1;
13425        uint64_t niberr                  : 1;
13426        uint64_t ovrerr                  : 1;
13427        uint64_t pcterr                  : 1;
13428        uint64_t rsverr                  : 1;
13429        uint64_t falerr                  : 1;
13430        uint64_t coldet                  : 1;
13431        uint64_t ifgerr                  : 1;
13432        uint64_t phy_link                : 1;
13433        uint64_t phy_spd                 : 1;
13434        uint64_t phy_dupx                : 1;
13435        uint64_t pause_drp               : 1;
13436        uint64_t loc_fault               : 1;
13437        uint64_t rem_fault               : 1;
13438        uint64_t bad_seq                 : 1;
13439        uint64_t bad_term                : 1;
13440        uint64_t unsop                   : 1;
13441        uint64_t uneop                   : 1;
13442        uint64_t undat                   : 1;
13443        uint64_t hg2fld                  : 1;
13444        uint64_t hg2cc                   : 1;
13445        uint64_t reserved_29_63          : 35;
13446#endif
13447    } s;
13448    struct cvmx_gmxx_rxx_int_reg_cn30xx
13449    {
13450#if __BYTE_ORDER == __BIG_ENDIAN
13451        uint64_t reserved_19_63          : 45;
13452        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13453        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13454        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13455        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13456                                                         Does not necessarily indicate a failure */
13457        uint64_t coldet                  : 1;       /**< Collision Detection */
13458        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13459        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13460        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13461        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13462                                                         This interrupt should never assert */
13463        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13464        uint64_t skperr                  : 1;       /**< Skipper error */
13465        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13466        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
13467        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13468        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13469        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13470        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
13471        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13472        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
13473#else
13474        uint64_t minerr                  : 1;
13475        uint64_t carext                  : 1;
13476        uint64_t maxerr                  : 1;
13477        uint64_t jabber                  : 1;
13478        uint64_t fcserr                  : 1;
13479        uint64_t alnerr                  : 1;
13480        uint64_t lenerr                  : 1;
13481        uint64_t rcverr                  : 1;
13482        uint64_t skperr                  : 1;
13483        uint64_t niberr                  : 1;
13484        uint64_t ovrerr                  : 1;
13485        uint64_t pcterr                  : 1;
13486        uint64_t rsverr                  : 1;
13487        uint64_t falerr                  : 1;
13488        uint64_t coldet                  : 1;
13489        uint64_t ifgerr                  : 1;
13490        uint64_t phy_link                : 1;
13491        uint64_t phy_spd                 : 1;
13492        uint64_t phy_dupx                : 1;
13493        uint64_t reserved_19_63          : 45;
13494#endif
13495    } cn30xx;
13496    struct cvmx_gmxx_rxx_int_reg_cn30xx  cn31xx;
13497    struct cvmx_gmxx_rxx_int_reg_cn30xx  cn38xx;
13498    struct cvmx_gmxx_rxx_int_reg_cn30xx  cn38xxp2;
13499    struct cvmx_gmxx_rxx_int_reg_cn50xx
13500    {
13501#if __BYTE_ORDER == __BIG_ENDIAN
13502        uint64_t reserved_20_63          : 44;
13503        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13504        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13505        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13506        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13507        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13508                                                         Does not necessarily indicate a failure */
13509        uint64_t coldet                  : 1;       /**< Collision Detection */
13510        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13511        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13512        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13513        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13514                                                         This interrupt should never assert */
13515        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13516        uint64_t skperr                  : 1;       /**< Skipper error */
13517        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13518        uint64_t reserved_6_6            : 1;
13519        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13520        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13521        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13522        uint64_t reserved_2_2            : 1;
13523        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13524        uint64_t reserved_0_0            : 1;
13525#else
13526        uint64_t reserved_0_0            : 1;
13527        uint64_t carext                  : 1;
13528        uint64_t reserved_2_2            : 1;
13529        uint64_t jabber                  : 1;
13530        uint64_t fcserr                  : 1;
13531        uint64_t alnerr                  : 1;
13532        uint64_t reserved_6_6            : 1;
13533        uint64_t rcverr                  : 1;
13534        uint64_t skperr                  : 1;
13535        uint64_t niberr                  : 1;
13536        uint64_t ovrerr                  : 1;
13537        uint64_t pcterr                  : 1;
13538        uint64_t rsverr                  : 1;
13539        uint64_t falerr                  : 1;
13540        uint64_t coldet                  : 1;
13541        uint64_t ifgerr                  : 1;
13542        uint64_t phy_link                : 1;
13543        uint64_t phy_spd                 : 1;
13544        uint64_t phy_dupx                : 1;
13545        uint64_t pause_drp               : 1;
13546        uint64_t reserved_20_63          : 44;
13547#endif
13548    } cn50xx;
13549    struct cvmx_gmxx_rxx_int_reg_cn52xx
13550    {
13551#if __BYTE_ORDER == __BIG_ENDIAN
13552        uint64_t reserved_29_63          : 35;
13553        uint64_t hg2cc                   : 1;       /**< HiGig2 received message CRC or Control char  error
13554                                                         Set when either CRC8 error detected or when
13555                                                         a Control Character is found in the message
13556                                                         bytes after the K.SOM
13557                                                         NOTE: HG2CC has higher priority than HG2FLD
13558                                                               i.e. a HiGig2 message that results in HG2CC
13559                                                               getting set, will never set HG2FLD. */
13560        uint64_t hg2fld                  : 1;       /**< HiGig2 received message field error, as below
13561                                                         1) MSG_TYPE field not 6'b00_0000
13562                                                            i.e. it is not a FLOW CONTROL message, which
13563                                                            is the only defined type for HiGig2
13564                                                         2) FWD_TYPE field not 2'b00 i.e. Link Level msg
13565                                                            which is the only defined type for HiGig2
13566                                                         3) FC_OBJECT field is neither 4'b0000 for
13567                                                            Physical Link nor 4'b0010 for Logical Link.
13568                                                            Those are the only two defined types in HiGig2 */
13569        uint64_t undat                   : 1;       /**< Unexpected Data
13570                                                         (XAUI Mode only) */
13571        uint64_t uneop                   : 1;       /**< Unexpected EOP
13572                                                         (XAUI Mode only) */
13573        uint64_t unsop                   : 1;       /**< Unexpected SOP
13574                                                         (XAUI Mode only) */
13575        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
13576                                                         than /T/.  The error propagation control
13577                                                         character /E/ will be included as part of the
13578                                                         frame and does not cause a frame termination.
13579                                                         (XAUI Mode only) */
13580        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
13581                                                         (XAUI Mode only) */
13582        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
13583                                                         (XAUI Mode only) */
13584        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
13585                                                         (XAUI Mode only) */
13586        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13587        uint64_t reserved_16_18          : 3;
13588        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13589                                                         Does not necessarily indicate a failure
13590                                                         (SGMII/1000Base-X only) */
13591        uint64_t coldet                  : 1;       /**< Collision Detection
13592                                                         (SGMII/1000Base-X half-duplex only) */
13593        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime
13594                                                         (SGMII/1000Base-X only) */
13595        uint64_t rsverr                  : 1;       /**< Reserved opcodes */
13596        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol
13597                                                         In XAUI mode, the column of data that was bad
13598                                                         will be logged in GMX_RX_XAUI_BAD_COL */
13599        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13600                                                         This interrupt should never assert
13601                                                         (SGMII/1000Base-X only) */
13602        uint64_t reserved_9_9            : 1;
13603        uint64_t skperr                  : 1;       /**< Skipper error */
13604        uint64_t rcverr                  : 1;       /**< Frame was received with Data reception error */
13605        uint64_t reserved_5_6            : 2;
13606        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13607        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13608        uint64_t reserved_2_2            : 1;
13609        uint64_t carext                  : 1;       /**< Carrier extend error
13610                                                         (SGMII/1000Base-X only) */
13611        uint64_t reserved_0_0            : 1;
13612#else
13613        uint64_t reserved_0_0            : 1;
13614        uint64_t carext                  : 1;
13615        uint64_t reserved_2_2            : 1;
13616        uint64_t jabber                  : 1;
13617        uint64_t fcserr                  : 1;
13618        uint64_t reserved_5_6            : 2;
13619        uint64_t rcverr                  : 1;
13620        uint64_t skperr                  : 1;
13621        uint64_t reserved_9_9            : 1;
13622        uint64_t ovrerr                  : 1;
13623        uint64_t pcterr                  : 1;
13624        uint64_t rsverr                  : 1;
13625        uint64_t falerr                  : 1;
13626        uint64_t coldet                  : 1;
13627        uint64_t ifgerr                  : 1;
13628        uint64_t reserved_16_18          : 3;
13629        uint64_t pause_drp               : 1;
13630        uint64_t loc_fault               : 1;
13631        uint64_t rem_fault               : 1;
13632        uint64_t bad_seq                 : 1;
13633        uint64_t bad_term                : 1;
13634        uint64_t unsop                   : 1;
13635        uint64_t uneop                   : 1;
13636        uint64_t undat                   : 1;
13637        uint64_t hg2fld                  : 1;
13638        uint64_t hg2cc                   : 1;
13639        uint64_t reserved_29_63          : 35;
13640#endif
13641    } cn52xx;
13642    struct cvmx_gmxx_rxx_int_reg_cn52xx  cn52xxp1;
13643    struct cvmx_gmxx_rxx_int_reg_cn52xx  cn56xx;
13644    struct cvmx_gmxx_rxx_int_reg_cn56xxp1
13645    {
13646#if __BYTE_ORDER == __BIG_ENDIAN
13647        uint64_t reserved_27_63          : 37;
13648        uint64_t undat                   : 1;       /**< Unexpected Data
13649                                                         (XAUI Mode only) */
13650        uint64_t uneop                   : 1;       /**< Unexpected EOP
13651                                                         (XAUI Mode only) */
13652        uint64_t unsop                   : 1;       /**< Unexpected SOP
13653                                                         (XAUI Mode only) */
13654        uint64_t bad_term                : 1;       /**< Frame is terminated by control character other
13655                                                         than /T/.  The error propagation control
13656                                                         character /E/ will be included as part of the
13657                                                         frame and does not cause a frame termination.
13658                                                         (XAUI Mode only) */
13659        uint64_t bad_seq                 : 1;       /**< Reserved Sequence Deteted
13660                                                         (XAUI Mode only) */
13661        uint64_t rem_fault               : 1;       /**< Remote Fault Sequence Deteted
13662                                                         (XAUI Mode only) */
13663        uint64_t loc_fault               : 1;       /**< Local Fault Sequence Deteted
13664                                                         (XAUI Mode only) */
13665        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13666        uint64_t reserved_16_18          : 3;
13667        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13668                                                         Does not necessarily indicate a failure
13669                                                         (SGMII/1000Base-X only) */
13670        uint64_t coldet                  : 1;       /**< Collision Detection
13671                                                         (SGMII/1000Base-X half-duplex only) */
13672        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime
13673                                                         (SGMII/1000Base-X only) */
13674        uint64_t rsverr                  : 1;       /**< Reserved opcodes */
13675        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol
13676                                                         In XAUI mode, the column of data that was bad
13677                                                         will be logged in GMX_RX_XAUI_BAD_COL */
13678        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13679                                                         This interrupt should never assert
13680                                                         (SGMII/1000Base-X only) */
13681        uint64_t reserved_9_9            : 1;
13682        uint64_t skperr                  : 1;       /**< Skipper error */
13683        uint64_t rcverr                  : 1;       /**< Frame was received with Data reception error */
13684        uint64_t reserved_5_6            : 2;
13685        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13686        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13687        uint64_t reserved_2_2            : 1;
13688        uint64_t carext                  : 1;       /**< Carrier extend error
13689                                                         (SGMII/1000Base-X only) */
13690        uint64_t reserved_0_0            : 1;
13691#else
13692        uint64_t reserved_0_0            : 1;
13693        uint64_t carext                  : 1;
13694        uint64_t reserved_2_2            : 1;
13695        uint64_t jabber                  : 1;
13696        uint64_t fcserr                  : 1;
13697        uint64_t reserved_5_6            : 2;
13698        uint64_t rcverr                  : 1;
13699        uint64_t skperr                  : 1;
13700        uint64_t reserved_9_9            : 1;
13701        uint64_t ovrerr                  : 1;
13702        uint64_t pcterr                  : 1;
13703        uint64_t rsverr                  : 1;
13704        uint64_t falerr                  : 1;
13705        uint64_t coldet                  : 1;
13706        uint64_t ifgerr                  : 1;
13707        uint64_t reserved_16_18          : 3;
13708        uint64_t pause_drp               : 1;
13709        uint64_t loc_fault               : 1;
13710        uint64_t rem_fault               : 1;
13711        uint64_t bad_seq                 : 1;
13712        uint64_t bad_term                : 1;
13713        uint64_t unsop                   : 1;
13714        uint64_t uneop                   : 1;
13715        uint64_t undat                   : 1;
13716        uint64_t reserved_27_63          : 37;
13717#endif
13718    } cn56xxp1;
13719    struct cvmx_gmxx_rxx_int_reg_cn58xx
13720    {
13721#if __BYTE_ORDER == __BIG_ENDIAN
13722        uint64_t reserved_20_63          : 44;
13723        uint64_t pause_drp               : 1;       /**< Pause packet was dropped due to full GMX RX FIFO */
13724        uint64_t phy_dupx                : 1;       /**< Change in the RMGII inbound LinkDuplex */
13725        uint64_t phy_spd                 : 1;       /**< Change in the RMGII inbound LinkSpeed */
13726        uint64_t phy_link                : 1;       /**< Change in the RMGII inbound LinkStatus */
13727        uint64_t ifgerr                  : 1;       /**< Interframe Gap Violation
13728                                                         Does not necessarily indicate a failure */
13729        uint64_t coldet                  : 1;       /**< Collision Detection */
13730        uint64_t falerr                  : 1;       /**< False carrier error or extend error after slottime */
13731        uint64_t rsverr                  : 1;       /**< RGMII reserved opcodes */
13732        uint64_t pcterr                  : 1;       /**< Bad Preamble / Protocol */
13733        uint64_t ovrerr                  : 1;       /**< Internal Data Aggregation Overflow
13734                                                         This interrupt should never assert */
13735        uint64_t niberr                  : 1;       /**< Nibble error (hi_nibble != lo_nibble) */
13736        uint64_t skperr                  : 1;       /**< Skipper error */
13737        uint64_t rcverr                  : 1;       /**< Frame was received with RMGII Data reception error */
13738        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
13739        uint64_t alnerr                  : 1;       /**< Frame was received with an alignment error */
13740        uint64_t fcserr                  : 1;       /**< Frame was received with FCS/CRC error */
13741        uint64_t jabber                  : 1;       /**< Frame was received with length > sys_length */
13742        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
13743        uint64_t carext                  : 1;       /**< RGMII carrier extend error */
13744        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
13745#else
13746        uint64_t minerr                  : 1;
13747        uint64_t carext                  : 1;
13748        uint64_t maxerr                  : 1;
13749        uint64_t jabber                  : 1;
13750        uint64_t fcserr                  : 1;
13751        uint64_t alnerr                  : 1;
13752        uint64_t lenerr                  : 1;
13753        uint64_t rcverr                  : 1;
13754        uint64_t skperr                  : 1;
13755        uint64_t niberr                  : 1;
13756        uint64_t ovrerr                  : 1;
13757        uint64_t pcterr                  : 1;
13758        uint64_t rsverr                  : 1;
13759        uint64_t falerr                  : 1;
13760        uint64_t coldet                  : 1;
13761        uint64_t ifgerr                  : 1;
13762        uint64_t phy_link                : 1;
13763        uint64_t phy_spd                 : 1;
13764        uint64_t phy_dupx                : 1;
13765        uint64_t pause_drp               : 1;
13766        uint64_t reserved_20_63          : 44;
13767#endif
13768    } cn58xx;
13769    struct cvmx_gmxx_rxx_int_reg_cn58xx  cn58xxp1;
13770} cvmx_gmxx_rxx_int_reg_t;
13771
13772
13773/**
13774 * cvmx_gmx#_rx#_jabber
13775 *
13776 * GMX_RX_JABBER = The max size packet after which GMX will truncate
13777 *
13778 *
13779 * Notes:
13780 * CNT must be 8-byte aligned such that CNT[2:0] == 0
13781 *
13782 * The packet that will be sent to the packet input logic will have an
13783 * additionl 8 bytes if GMX_RX_FRM_CTL[PRE_CHK] is set and
13784 * GMX_RX_FRM_CTL[PRE_STRP] is clear.  The max packet that will be sent is
13785 * defined as...
13786 *
13787 *      max_sized_packet = GMX_RX_JABBER[CNT]+((GMX_RX_FRM_CTL[PRE_CHK] & !GMX_RX_FRM_CTL[PRE_STRP])*8)
13788 *
13789 * In XAUI mode prt0 is used for checking.
13790 */
13791typedef union
13792{
13793    uint64_t u64;
13794    struct cvmx_gmxx_rxx_jabber_s
13795    {
13796#if __BYTE_ORDER == __BIG_ENDIAN
13797        uint64_t reserved_16_63          : 48;
13798        uint64_t cnt                     : 16;      /**< Byte count for jabber check
13799                                                         Failing packets set the JABBER interrupt and are
13800                                                         optionally sent with opcode==JABBER
13801                                                         GMX will truncate the packet to CNT bytes
13802                                                         CNT >= GMX_RX_FRM_MAX[LEN] */
13803#else
13804        uint64_t cnt                     : 16;
13805        uint64_t reserved_16_63          : 48;
13806#endif
13807    } s;
13808    struct cvmx_gmxx_rxx_jabber_s        cn30xx;
13809    struct cvmx_gmxx_rxx_jabber_s        cn31xx;
13810    struct cvmx_gmxx_rxx_jabber_s        cn38xx;
13811    struct cvmx_gmxx_rxx_jabber_s        cn38xxp2;
13812    struct cvmx_gmxx_rxx_jabber_s        cn50xx;
13813    struct cvmx_gmxx_rxx_jabber_s        cn52xx;
13814    struct cvmx_gmxx_rxx_jabber_s        cn52xxp1;
13815    struct cvmx_gmxx_rxx_jabber_s        cn56xx;
13816    struct cvmx_gmxx_rxx_jabber_s        cn56xxp1;
13817    struct cvmx_gmxx_rxx_jabber_s        cn58xx;
13818    struct cvmx_gmxx_rxx_jabber_s        cn58xxp1;
13819} cvmx_gmxx_rxx_jabber_t;
13820
13821
13822/**
13823 * cvmx_gmx#_rx#_pause_drop_time
13824 *
13825 * GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition
13826 *
13827 */
13828typedef union
13829{
13830    uint64_t u64;
13831    struct cvmx_gmxx_rxx_pause_drop_time_s
13832    {
13833#if __BYTE_ORDER == __BIG_ENDIAN
13834        uint64_t reserved_16_63          : 48;
13835        uint64_t status                  : 16;      /**< Time extracted from the dropped PAUSE packet */
13836#else
13837        uint64_t status                  : 16;
13838        uint64_t reserved_16_63          : 48;
13839#endif
13840    } s;
13841    struct cvmx_gmxx_rxx_pause_drop_time_s cn50xx;
13842    struct cvmx_gmxx_rxx_pause_drop_time_s cn52xx;
13843    struct cvmx_gmxx_rxx_pause_drop_time_s cn52xxp1;
13844    struct cvmx_gmxx_rxx_pause_drop_time_s cn56xx;
13845    struct cvmx_gmxx_rxx_pause_drop_time_s cn56xxp1;
13846    struct cvmx_gmxx_rxx_pause_drop_time_s cn58xx;
13847    struct cvmx_gmxx_rxx_pause_drop_time_s cn58xxp1;
13848} cvmx_gmxx_rxx_pause_drop_time_t;
13849
13850
13851/**
13852 * cvmx_gmx#_rx#_rx_inbnd
13853 *
13854 * GMX_RX_INBND = RGMII InBand Link Status
13855 *
13856 *
13857 * Notes:
13858 * These fields are only valid if the attached PHY is operating in RGMII mode
13859 * and supports the optional in-band status (see section 3.4.1 of the RGMII
13860 * specification, version 1.3 for more information).
13861 */
13862typedef union
13863{
13864    uint64_t u64;
13865    struct cvmx_gmxx_rxx_rx_inbnd_s
13866    {
13867#if __BYTE_ORDER == __BIG_ENDIAN
13868        uint64_t reserved_4_63           : 60;
13869        uint64_t duplex                  : 1;       /**< RGMII Inbound LinkDuplex
13870                                                         0=half-duplex
13871                                                         1=full-duplex */
13872        uint64_t speed                   : 2;       /**< RGMII Inbound LinkSpeed
13873                                                         00=2.5MHz
13874                                                         01=25MHz
13875                                                         10=125MHz
13876                                                         11=Reserved */
13877        uint64_t status                  : 1;       /**< RGMII Inbound LinkStatus
13878                                                         0=down
13879                                                         1=up */
13880#else
13881        uint64_t status                  : 1;
13882        uint64_t speed                   : 2;
13883        uint64_t duplex                  : 1;
13884        uint64_t reserved_4_63           : 60;
13885#endif
13886    } s;
13887    struct cvmx_gmxx_rxx_rx_inbnd_s      cn30xx;
13888    struct cvmx_gmxx_rxx_rx_inbnd_s      cn31xx;
13889    struct cvmx_gmxx_rxx_rx_inbnd_s      cn38xx;
13890    struct cvmx_gmxx_rxx_rx_inbnd_s      cn38xxp2;
13891    struct cvmx_gmxx_rxx_rx_inbnd_s      cn50xx;
13892    struct cvmx_gmxx_rxx_rx_inbnd_s      cn58xx;
13893    struct cvmx_gmxx_rxx_rx_inbnd_s      cn58xxp1;
13894} cvmx_gmxx_rxx_rx_inbnd_t;
13895
13896
13897/**
13898 * cvmx_gmx#_rx#_stats_ctl
13899 *
13900 * GMX_RX_STATS_CTL = RX Stats Control register
13901 *
13902 */
13903typedef union
13904{
13905    uint64_t u64;
13906    struct cvmx_gmxx_rxx_stats_ctl_s
13907    {
13908#if __BYTE_ORDER == __BIG_ENDIAN
13909        uint64_t reserved_1_63           : 63;
13910        uint64_t rd_clr                  : 1;       /**< RX Stats registers will clear on reads */
13911#else
13912        uint64_t rd_clr                  : 1;
13913        uint64_t reserved_1_63           : 63;
13914#endif
13915    } s;
13916    struct cvmx_gmxx_rxx_stats_ctl_s     cn30xx;
13917    struct cvmx_gmxx_rxx_stats_ctl_s     cn31xx;
13918    struct cvmx_gmxx_rxx_stats_ctl_s     cn38xx;
13919    struct cvmx_gmxx_rxx_stats_ctl_s     cn38xxp2;
13920    struct cvmx_gmxx_rxx_stats_ctl_s     cn50xx;
13921    struct cvmx_gmxx_rxx_stats_ctl_s     cn52xx;
13922    struct cvmx_gmxx_rxx_stats_ctl_s     cn52xxp1;
13923    struct cvmx_gmxx_rxx_stats_ctl_s     cn56xx;
13924    struct cvmx_gmxx_rxx_stats_ctl_s     cn56xxp1;
13925    struct cvmx_gmxx_rxx_stats_ctl_s     cn58xx;
13926    struct cvmx_gmxx_rxx_stats_ctl_s     cn58xxp1;
13927} cvmx_gmxx_rxx_stats_ctl_t;
13928
13929
13930/**
13931 * cvmx_gmx#_rx#_stats_octs
13932 *
13933 * Notes:
13934 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
13935 * - Counters will wrap
13936 */
13937typedef union
13938{
13939    uint64_t u64;
13940    struct cvmx_gmxx_rxx_stats_octs_s
13941    {
13942#if __BYTE_ORDER == __BIG_ENDIAN
13943        uint64_t reserved_48_63          : 16;
13944        uint64_t cnt                     : 48;      /**< Octet count of received good packets */
13945#else
13946        uint64_t cnt                     : 48;
13947        uint64_t reserved_48_63          : 16;
13948#endif
13949    } s;
13950    struct cvmx_gmxx_rxx_stats_octs_s    cn30xx;
13951    struct cvmx_gmxx_rxx_stats_octs_s    cn31xx;
13952    struct cvmx_gmxx_rxx_stats_octs_s    cn38xx;
13953    struct cvmx_gmxx_rxx_stats_octs_s    cn38xxp2;
13954    struct cvmx_gmxx_rxx_stats_octs_s    cn50xx;
13955    struct cvmx_gmxx_rxx_stats_octs_s    cn52xx;
13956    struct cvmx_gmxx_rxx_stats_octs_s    cn52xxp1;
13957    struct cvmx_gmxx_rxx_stats_octs_s    cn56xx;
13958    struct cvmx_gmxx_rxx_stats_octs_s    cn56xxp1;
13959    struct cvmx_gmxx_rxx_stats_octs_s    cn58xx;
13960    struct cvmx_gmxx_rxx_stats_octs_s    cn58xxp1;
13961} cvmx_gmxx_rxx_stats_octs_t;
13962
13963
13964/**
13965 * cvmx_gmx#_rx#_stats_octs_ctl
13966 *
13967 * Notes:
13968 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
13969 * - Counters will wrap
13970 */
13971typedef union
13972{
13973    uint64_t u64;
13974    struct cvmx_gmxx_rxx_stats_octs_ctl_s
13975    {
13976#if __BYTE_ORDER == __BIG_ENDIAN
13977        uint64_t reserved_48_63          : 16;
13978        uint64_t cnt                     : 48;      /**< Octet count of received pause packets */
13979#else
13980        uint64_t cnt                     : 48;
13981        uint64_t reserved_48_63          : 16;
13982#endif
13983    } s;
13984    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn30xx;
13985    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn31xx;
13986    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xx;
13987    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn38xxp2;
13988    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn50xx;
13989    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xx;
13990    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn52xxp1;
13991    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xx;
13992    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn56xxp1;
13993    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xx;
13994    struct cvmx_gmxx_rxx_stats_octs_ctl_s cn58xxp1;
13995} cvmx_gmxx_rxx_stats_octs_ctl_t;
13996
13997
13998/**
13999 * cvmx_gmx#_rx#_stats_octs_dmac
14000 *
14001 * Notes:
14002 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14003 * - Counters will wrap
14004 */
14005typedef union
14006{
14007    uint64_t u64;
14008    struct cvmx_gmxx_rxx_stats_octs_dmac_s
14009    {
14010#if __BYTE_ORDER == __BIG_ENDIAN
14011        uint64_t reserved_48_63          : 16;
14012        uint64_t cnt                     : 48;      /**< Octet count of filtered dmac packets */
14013#else
14014        uint64_t cnt                     : 48;
14015        uint64_t reserved_48_63          : 16;
14016#endif
14017    } s;
14018    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn30xx;
14019    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn31xx;
14020    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xx;
14021    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn38xxp2;
14022    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn50xx;
14023    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xx;
14024    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn52xxp1;
14025    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xx;
14026    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn56xxp1;
14027    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xx;
14028    struct cvmx_gmxx_rxx_stats_octs_dmac_s cn58xxp1;
14029} cvmx_gmxx_rxx_stats_octs_dmac_t;
14030
14031
14032/**
14033 * cvmx_gmx#_rx#_stats_octs_drp
14034 *
14035 * Notes:
14036 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14037 * - Counters will wrap
14038 */
14039typedef union
14040{
14041    uint64_t u64;
14042    struct cvmx_gmxx_rxx_stats_octs_drp_s
14043    {
14044#if __BYTE_ORDER == __BIG_ENDIAN
14045        uint64_t reserved_48_63          : 16;
14046        uint64_t cnt                     : 48;      /**< Octet count of dropped packets */
14047#else
14048        uint64_t cnt                     : 48;
14049        uint64_t reserved_48_63          : 16;
14050#endif
14051    } s;
14052    struct cvmx_gmxx_rxx_stats_octs_drp_s cn30xx;
14053    struct cvmx_gmxx_rxx_stats_octs_drp_s cn31xx;
14054    struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xx;
14055    struct cvmx_gmxx_rxx_stats_octs_drp_s cn38xxp2;
14056    struct cvmx_gmxx_rxx_stats_octs_drp_s cn50xx;
14057    struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xx;
14058    struct cvmx_gmxx_rxx_stats_octs_drp_s cn52xxp1;
14059    struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xx;
14060    struct cvmx_gmxx_rxx_stats_octs_drp_s cn56xxp1;
14061    struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xx;
14062    struct cvmx_gmxx_rxx_stats_octs_drp_s cn58xxp1;
14063} cvmx_gmxx_rxx_stats_octs_drp_t;
14064
14065
14066/**
14067 * cvmx_gmx#_rx#_stats_pkts
14068 *
14069 * GMX_RX_STATS_PKTS
14070 *
14071 * Count of good received packets - packets that are not recognized as PAUSE
14072 * packets, dropped due the DMAC filter, dropped due FIFO full status, or
14073 * have any other OPCODE (FCS, Length, etc).
14074 *
14075 * Notes:
14076 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14077 * - Counters will wrap
14078 */
14079typedef union
14080{
14081    uint64_t u64;
14082    struct cvmx_gmxx_rxx_stats_pkts_s
14083    {
14084#if __BYTE_ORDER == __BIG_ENDIAN
14085        uint64_t reserved_32_63          : 32;
14086        uint64_t cnt                     : 32;      /**< Count of received good packets */
14087#else
14088        uint64_t cnt                     : 32;
14089        uint64_t reserved_32_63          : 32;
14090#endif
14091    } s;
14092    struct cvmx_gmxx_rxx_stats_pkts_s    cn30xx;
14093    struct cvmx_gmxx_rxx_stats_pkts_s    cn31xx;
14094    struct cvmx_gmxx_rxx_stats_pkts_s    cn38xx;
14095    struct cvmx_gmxx_rxx_stats_pkts_s    cn38xxp2;
14096    struct cvmx_gmxx_rxx_stats_pkts_s    cn50xx;
14097    struct cvmx_gmxx_rxx_stats_pkts_s    cn52xx;
14098    struct cvmx_gmxx_rxx_stats_pkts_s    cn52xxp1;
14099    struct cvmx_gmxx_rxx_stats_pkts_s    cn56xx;
14100    struct cvmx_gmxx_rxx_stats_pkts_s    cn56xxp1;
14101    struct cvmx_gmxx_rxx_stats_pkts_s    cn58xx;
14102    struct cvmx_gmxx_rxx_stats_pkts_s    cn58xxp1;
14103} cvmx_gmxx_rxx_stats_pkts_t;
14104
14105
14106/**
14107 * cvmx_gmx#_rx#_stats_pkts_bad
14108 *
14109 * GMX_RX_STATS_PKTS_BAD
14110 *
14111 * Count of all packets received with some error that were not dropped
14112 * either due to the dmac filter or lack of room in the receive FIFO.
14113 *
14114 * Notes:
14115 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14116 * - Counters will wrap
14117 */
14118typedef union
14119{
14120    uint64_t u64;
14121    struct cvmx_gmxx_rxx_stats_pkts_bad_s
14122    {
14123#if __BYTE_ORDER == __BIG_ENDIAN
14124        uint64_t reserved_32_63          : 32;
14125        uint64_t cnt                     : 32;      /**< Count of bad packets */
14126#else
14127        uint64_t cnt                     : 32;
14128        uint64_t reserved_32_63          : 32;
14129#endif
14130    } s;
14131    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn30xx;
14132    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn31xx;
14133    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xx;
14134    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn38xxp2;
14135    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn50xx;
14136    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xx;
14137    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn52xxp1;
14138    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xx;
14139    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn56xxp1;
14140    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xx;
14141    struct cvmx_gmxx_rxx_stats_pkts_bad_s cn58xxp1;
14142} cvmx_gmxx_rxx_stats_pkts_bad_t;
14143
14144
14145/**
14146 * cvmx_gmx#_rx#_stats_pkts_ctl
14147 *
14148 * GMX_RX_STATS_PKTS_CTL
14149 *
14150 * Count of all packets received that were recognized as Flow Control or
14151 * PAUSE packets.  PAUSE packets with any kind of error are counted in
14152 * GMX_RX_STATS_PKTS_BAD.  Pause packets can be optionally dropped or
14153 * forwarded based on the GMX_RX_FRM_CTL[CTL_DRP] bit.  This count
14154 * increments regardless of whether the packet is dropped.  Pause packets
14155 * will never be counted in GMX_RX_STATS_PKTS.  Packets dropped due the dmac
14156 * filter will be counted in GMX_RX_STATS_PKTS_DMAC and not here.
14157 *
14158 * Notes:
14159 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14160 * - Counters will wrap
14161 */
14162typedef union
14163{
14164    uint64_t u64;
14165    struct cvmx_gmxx_rxx_stats_pkts_ctl_s
14166    {
14167#if __BYTE_ORDER == __BIG_ENDIAN
14168        uint64_t reserved_32_63          : 32;
14169        uint64_t cnt                     : 32;      /**< Count of received pause packets */
14170#else
14171        uint64_t cnt                     : 32;
14172        uint64_t reserved_32_63          : 32;
14173#endif
14174    } s;
14175    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn30xx;
14176    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn31xx;
14177    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xx;
14178    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn38xxp2;
14179    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn50xx;
14180    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xx;
14181    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn52xxp1;
14182    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xx;
14183    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn56xxp1;
14184    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xx;
14185    struct cvmx_gmxx_rxx_stats_pkts_ctl_s cn58xxp1;
14186} cvmx_gmxx_rxx_stats_pkts_ctl_t;
14187
14188
14189/**
14190 * cvmx_gmx#_rx#_stats_pkts_dmac
14191 *
14192 * GMX_RX_STATS_PKTS_DMAC
14193 *
14194 * Count of all packets received that were dropped by the dmac filter.
14195 * Packets that match the DMAC will be dropped and counted here regardless
14196 * of if they were bad packets.  These packets will never be counted in
14197 * GMX_RX_STATS_PKTS.
14198 *
14199 * Some packets that were not able to satisify the DECISION_CNT may not
14200 * actually be dropped by Octeon, but they will be counted here as if they
14201 * were dropped.
14202 *
14203 * Notes:
14204 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14205 * - Counters will wrap
14206 */
14207typedef union
14208{
14209    uint64_t u64;
14210    struct cvmx_gmxx_rxx_stats_pkts_dmac_s
14211    {
14212#if __BYTE_ORDER == __BIG_ENDIAN
14213        uint64_t reserved_32_63          : 32;
14214        uint64_t cnt                     : 32;      /**< Count of filtered dmac packets */
14215#else
14216        uint64_t cnt                     : 32;
14217        uint64_t reserved_32_63          : 32;
14218#endif
14219    } s;
14220    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn30xx;
14221    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn31xx;
14222    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xx;
14223    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn38xxp2;
14224    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn50xx;
14225    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xx;
14226    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn52xxp1;
14227    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xx;
14228    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn56xxp1;
14229    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xx;
14230    struct cvmx_gmxx_rxx_stats_pkts_dmac_s cn58xxp1;
14231} cvmx_gmxx_rxx_stats_pkts_dmac_t;
14232
14233
14234/**
14235 * cvmx_gmx#_rx#_stats_pkts_drp
14236 *
14237 * GMX_RX_STATS_PKTS_DRP
14238 *
14239 * Count of all packets received that were dropped due to a full receive
14240 * FIFO.  This counts good and bad packets received - all packets dropped by
14241 * the FIFO.  It does not count packets dropped by the dmac or pause packet
14242 * filters.
14243 *
14244 * Notes:
14245 * - Cleared either by a write (of any value) or a read when GMX_RX_STATS_CTL[RD_CLR] is set
14246 * - Counters will wrap
14247 */
14248typedef union
14249{
14250    uint64_t u64;
14251    struct cvmx_gmxx_rxx_stats_pkts_drp_s
14252    {
14253#if __BYTE_ORDER == __BIG_ENDIAN
14254        uint64_t reserved_32_63          : 32;
14255        uint64_t cnt                     : 32;      /**< Count of dropped packets */
14256#else
14257        uint64_t cnt                     : 32;
14258        uint64_t reserved_32_63          : 32;
14259#endif
14260    } s;
14261    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn30xx;
14262    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn31xx;
14263    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xx;
14264    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn38xxp2;
14265    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn50xx;
14266    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xx;
14267    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn52xxp1;
14268    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xx;
14269    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn56xxp1;
14270    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xx;
14271    struct cvmx_gmxx_rxx_stats_pkts_drp_s cn58xxp1;
14272} cvmx_gmxx_rxx_stats_pkts_drp_t;
14273
14274
14275/**
14276 * cvmx_gmx#_rx#_udd_skp
14277 *
14278 * GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data
14279 *
14280 *
14281 * Notes:
14282 * (1) The skip bytes are part of the packet and will be sent down the NCB
14283 *     packet interface and will be handled by PKI.
14284 *
14285 * (2) The system can determine if the UDD bytes are included in the FCS check
14286 *     by using the FCSSEL field - if the FCS check is enabled.
14287 *
14288 * (3) Assume that the preamble/sfd is always at the start of the frame - even
14289 *     before UDD bytes.  In most cases, there will be no preamble in these
14290 *     cases since it will be packet interface in direct communication to
14291 *     another packet interface (MAC to MAC) without a PHY involved.
14292 *
14293 * (4) We can still do address filtering and control packet filtering is the
14294 *     user desires.
14295 *
14296 * (5) UDD_SKP must be 0 in half-duplex operation unless
14297 *     GMX_RX_FRM_CTL[PRE_CHK] is clear.  If GMX_RX_FRM_CTL[PRE_CHK] is clear,
14298 *     then UDD_SKP will normally be 8.
14299 *
14300 * (6) In all cases, the UDD bytes will be sent down the packet interface as
14301 *     part of the packet.  The UDD bytes are never stripped from the actual
14302 *     packet.
14303 *
14304 * (7) If LEN != 0, then GMX_RX_FRM_CHK[LENERR] will be disabled and GMX_RX_INT_REG[LENERR] will be zero
14305 */
14306typedef union
14307{
14308    uint64_t u64;
14309    struct cvmx_gmxx_rxx_udd_skp_s
14310    {
14311#if __BYTE_ORDER == __BIG_ENDIAN
14312        uint64_t reserved_9_63           : 55;
14313        uint64_t fcssel                  : 1;       /**< Include the skip bytes in the FCS calculation
14314                                                         0 = all skip bytes are included in FCS
14315                                                         1 = the skip bytes are not included in FCS */
14316        uint64_t reserved_7_7            : 1;
14317        uint64_t len                     : 7;       /**< Amount of User-defined data before the start of
14318                                                         the L2 data.  Zero means L2 comes first.
14319                                                         Max value is 64. */
14320#else
14321        uint64_t len                     : 7;
14322        uint64_t reserved_7_7            : 1;
14323        uint64_t fcssel                  : 1;
14324        uint64_t reserved_9_63           : 55;
14325#endif
14326    } s;
14327    struct cvmx_gmxx_rxx_udd_skp_s       cn30xx;
14328    struct cvmx_gmxx_rxx_udd_skp_s       cn31xx;
14329    struct cvmx_gmxx_rxx_udd_skp_s       cn38xx;
14330    struct cvmx_gmxx_rxx_udd_skp_s       cn38xxp2;
14331    struct cvmx_gmxx_rxx_udd_skp_s       cn50xx;
14332    struct cvmx_gmxx_rxx_udd_skp_s       cn52xx;
14333    struct cvmx_gmxx_rxx_udd_skp_s       cn52xxp1;
14334    struct cvmx_gmxx_rxx_udd_skp_s       cn56xx;
14335    struct cvmx_gmxx_rxx_udd_skp_s       cn56xxp1;
14336    struct cvmx_gmxx_rxx_udd_skp_s       cn58xx;
14337    struct cvmx_gmxx_rxx_udd_skp_s       cn58xxp1;
14338} cvmx_gmxx_rxx_udd_skp_t;
14339
14340
14341/**
14342 * cvmx_gmx#_rx_bp_drop#
14343 *
14344 * GMX_RX_BP_DROP = FIFO mark for packet drop
14345 *
14346 *
14347 * Notes:
14348 * The actual watermark is dynamic with respect to the GMX_RX_PRTS
14349 * register.  The GMX_RX_PRTS controls the depth of the port's
14350 * FIFO so as ports are added or removed, the drop point may change.
14351 *
14352 * In XAUI mode prt0 is used for checking.
14353 */
14354typedef union
14355{
14356    uint64_t u64;
14357    struct cvmx_gmxx_rx_bp_dropx_s
14358    {
14359#if __BYTE_ORDER == __BIG_ENDIAN
14360        uint64_t reserved_6_63           : 58;
14361        uint64_t mark                    : 6;       /**< Number of 8B ticks to reserve in the RX FIFO.
14362                                                         When the FIFO exceeds this count, packets will
14363                                                         be dropped and not buffered.
14364                                                         MARK should typically be programmed to ports+1.
14365                                                         Failure to program correctly can lead to system
14366                                                         instability.
14367                                                         Reset value for RGMII mode = 2
14368                                                         Reset value for Spi4 mode  = 17 */
14369#else
14370        uint64_t mark                    : 6;
14371        uint64_t reserved_6_63           : 58;
14372#endif
14373    } s;
14374    struct cvmx_gmxx_rx_bp_dropx_s       cn30xx;
14375    struct cvmx_gmxx_rx_bp_dropx_s       cn31xx;
14376    struct cvmx_gmxx_rx_bp_dropx_s       cn38xx;
14377    struct cvmx_gmxx_rx_bp_dropx_s       cn38xxp2;
14378    struct cvmx_gmxx_rx_bp_dropx_s       cn50xx;
14379    struct cvmx_gmxx_rx_bp_dropx_s       cn52xx;
14380    struct cvmx_gmxx_rx_bp_dropx_s       cn52xxp1;
14381    struct cvmx_gmxx_rx_bp_dropx_s       cn56xx;
14382    struct cvmx_gmxx_rx_bp_dropx_s       cn56xxp1;
14383    struct cvmx_gmxx_rx_bp_dropx_s       cn58xx;
14384    struct cvmx_gmxx_rx_bp_dropx_s       cn58xxp1;
14385} cvmx_gmxx_rx_bp_dropx_t;
14386
14387
14388/**
14389 * cvmx_gmx#_rx_bp_off#
14390 *
14391 * GMX_RX_BP_OFF = Lowater mark for packet drop
14392 *
14393 *
14394 * Notes:
14395 * In XAUI mode, prt0 is used for checking.
14396 *
14397 */
14398typedef union
14399{
14400    uint64_t u64;
14401    struct cvmx_gmxx_rx_bp_offx_s
14402    {
14403#if __BYTE_ORDER == __BIG_ENDIAN
14404        uint64_t reserved_6_63           : 58;
14405        uint64_t mark                    : 6;       /**< Water mark (8B ticks) to deassert backpressure */
14406#else
14407        uint64_t mark                    : 6;
14408        uint64_t reserved_6_63           : 58;
14409#endif
14410    } s;
14411    struct cvmx_gmxx_rx_bp_offx_s        cn30xx;
14412    struct cvmx_gmxx_rx_bp_offx_s        cn31xx;
14413    struct cvmx_gmxx_rx_bp_offx_s        cn38xx;
14414    struct cvmx_gmxx_rx_bp_offx_s        cn38xxp2;
14415    struct cvmx_gmxx_rx_bp_offx_s        cn50xx;
14416    struct cvmx_gmxx_rx_bp_offx_s        cn52xx;
14417    struct cvmx_gmxx_rx_bp_offx_s        cn52xxp1;
14418    struct cvmx_gmxx_rx_bp_offx_s        cn56xx;
14419    struct cvmx_gmxx_rx_bp_offx_s        cn56xxp1;
14420    struct cvmx_gmxx_rx_bp_offx_s        cn58xx;
14421    struct cvmx_gmxx_rx_bp_offx_s        cn58xxp1;
14422} cvmx_gmxx_rx_bp_offx_t;
14423
14424
14425/**
14426 * cvmx_gmx#_rx_bp_on#
14427 *
14428 * GMX_RX_BP_ON = Hiwater mark for port/interface backpressure
14429 *
14430 *
14431 * Notes:
14432 * In XAUI mode, prt0 is used for checking.
14433 *
14434 */
14435typedef union
14436{
14437    uint64_t u64;
14438    struct cvmx_gmxx_rx_bp_onx_s
14439    {
14440#if __BYTE_ORDER == __BIG_ENDIAN
14441        uint64_t reserved_9_63           : 55;
14442        uint64_t mark                    : 9;       /**< Hiwater mark (8B ticks) for backpressure.
14443                                                         In RGMII mode, the backpressure is given per
14444                                                         port.  In Spi4 mode, the backpressure is for the
14445                                                         entire interface.  GMX_RX_BP_ON must satisfy
14446                                                         BP_OFF <= BP_ON < (FIFO_SIZE - BP_DROP)
14447                                                         The reset value is half the FIFO.
14448                                                         Reset value RGMII mode = 0x40  (512bytes)
14449                                                         Reset value Spi4 mode  = 0x100 (2048bytes)
14450                                                         A value of zero will immediately assert back
14451                                                         pressure. */
14452#else
14453        uint64_t mark                    : 9;
14454        uint64_t reserved_9_63           : 55;
14455#endif
14456    } s;
14457    struct cvmx_gmxx_rx_bp_onx_s         cn30xx;
14458    struct cvmx_gmxx_rx_bp_onx_s         cn31xx;
14459    struct cvmx_gmxx_rx_bp_onx_s         cn38xx;
14460    struct cvmx_gmxx_rx_bp_onx_s         cn38xxp2;
14461    struct cvmx_gmxx_rx_bp_onx_s         cn50xx;
14462    struct cvmx_gmxx_rx_bp_onx_s         cn52xx;
14463    struct cvmx_gmxx_rx_bp_onx_s         cn52xxp1;
14464    struct cvmx_gmxx_rx_bp_onx_s         cn56xx;
14465    struct cvmx_gmxx_rx_bp_onx_s         cn56xxp1;
14466    struct cvmx_gmxx_rx_bp_onx_s         cn58xx;
14467    struct cvmx_gmxx_rx_bp_onx_s         cn58xxp1;
14468} cvmx_gmxx_rx_bp_onx_t;
14469
14470
14471/**
14472 * cvmx_gmx#_rx_hg2_status
14473 *
14474 * ** HG2 message CSRs
14475 *
14476 */
14477typedef union
14478{
14479    uint64_t u64;
14480    struct cvmx_gmxx_rx_hg2_status_s
14481    {
14482#if __BYTE_ORDER == __BIG_ENDIAN
14483        uint64_t reserved_48_63          : 16;
14484        uint64_t phtim2go                : 16;      /**< Physical time to go for removal of physical link
14485                                                         pause. Initial value from received HiGig2 msg pkt
14486                                                         Non-zero only when physical back pressure active */
14487        uint64_t xof                     : 16;      /**< 16 bit xof back pressure vector from HiGig2 msg pkt
14488                                                         or from CBFC packets.
14489                                                         Non-zero only when logical back pressure is active
14490                                                         All bits will be 0 when LGTIM2GO=0 */
14491        uint64_t lgtim2go                : 16;      /**< Logical packet flow back pressure time remaining
14492                                                         Initial value set from xof time field of HiGig2
14493                                                         message packet received or a function of the
14494                                                         enabled and current timers for CBFC packets.
14495                                                         Non-zero only when logical back pressure is active */
14496#else
14497        uint64_t lgtim2go                : 16;
14498        uint64_t xof                     : 16;
14499        uint64_t phtim2go                : 16;
14500        uint64_t reserved_48_63          : 16;
14501#endif
14502    } s;
14503    struct cvmx_gmxx_rx_hg2_status_s     cn52xx;
14504    struct cvmx_gmxx_rx_hg2_status_s     cn52xxp1;
14505    struct cvmx_gmxx_rx_hg2_status_s     cn56xx;
14506} cvmx_gmxx_rx_hg2_status_t;
14507
14508
14509/**
14510 * cvmx_gmx#_rx_pass_en
14511 *
14512 * GMX_RX_PASS_EN = Packet pass through mode enable
14513 *
14514 * When both Octane ports are running in Spi4 mode, packets can be directly
14515 * passed from one SPX interface to the other without being processed by the
14516 * core or PP's.  The register has one bit for each port to enable the pass
14517 * through feature.
14518 *
14519 * Notes:
14520 * (1) Can only be used in dual Spi4 configs
14521 *
14522 * (2) The mapped pass through output port cannot be the destination port for
14523 *     any Octane core traffic.
14524 */
14525typedef union
14526{
14527    uint64_t u64;
14528    struct cvmx_gmxx_rx_pass_en_s
14529    {
14530#if __BYTE_ORDER == __BIG_ENDIAN
14531        uint64_t reserved_16_63          : 48;
14532        uint64_t en                      : 16;      /**< Which ports to configure in pass through mode */
14533#else
14534        uint64_t en                      : 16;
14535        uint64_t reserved_16_63          : 48;
14536#endif
14537    } s;
14538    struct cvmx_gmxx_rx_pass_en_s        cn38xx;
14539    struct cvmx_gmxx_rx_pass_en_s        cn38xxp2;
14540    struct cvmx_gmxx_rx_pass_en_s        cn58xx;
14541    struct cvmx_gmxx_rx_pass_en_s        cn58xxp1;
14542} cvmx_gmxx_rx_pass_en_t;
14543
14544
14545/**
14546 * cvmx_gmx#_rx_pass_map#
14547 *
14548 * GMX_RX_PASS_MAP = Packet pass through port map
14549 *
14550 */
14551typedef union
14552{
14553    uint64_t u64;
14554    struct cvmx_gmxx_rx_pass_mapx_s
14555    {
14556#if __BYTE_ORDER == __BIG_ENDIAN
14557        uint64_t reserved_4_63           : 60;
14558        uint64_t dprt                    : 4;       /**< Destination port to map Spi pass through traffic */
14559#else
14560        uint64_t dprt                    : 4;
14561        uint64_t reserved_4_63           : 60;
14562#endif
14563    } s;
14564    struct cvmx_gmxx_rx_pass_mapx_s      cn38xx;
14565    struct cvmx_gmxx_rx_pass_mapx_s      cn38xxp2;
14566    struct cvmx_gmxx_rx_pass_mapx_s      cn58xx;
14567    struct cvmx_gmxx_rx_pass_mapx_s      cn58xxp1;
14568} cvmx_gmxx_rx_pass_mapx_t;
14569
14570
14571/**
14572 * cvmx_gmx#_rx_prt_info
14573 *
14574 * GMX_RX_PRT_INFO = Report the RX status for port
14575 *
14576 *
14577 * Notes:
14578 * In XAUI mode, only the lsb (corresponding to port0) of DROP and COMMIT are used.
14579 *
14580 */
14581typedef union
14582{
14583    uint64_t u64;
14584    struct cvmx_gmxx_rx_prt_info_s
14585    {
14586#if __BYTE_ORDER == __BIG_ENDIAN
14587        uint64_t reserved_32_63          : 32;
14588        uint64_t drop                    : 16;      /**< Per port indication that data was dropped
14589                                                         (PASS3 only) */
14590        uint64_t commit                  : 16;      /**< Per port indication that SOP was accepted
14591                                                         (PASS3 only) */
14592#else
14593        uint64_t commit                  : 16;
14594        uint64_t drop                    : 16;
14595        uint64_t reserved_32_63          : 32;
14596#endif
14597    } s;
14598    struct cvmx_gmxx_rx_prt_info_cn30xx
14599    {
14600#if __BYTE_ORDER == __BIG_ENDIAN
14601        uint64_t reserved_19_63          : 45;
14602        uint64_t drop                    : 3;       /**< Per port indication that data was dropped */
14603        uint64_t reserved_3_15           : 13;
14604        uint64_t commit                  : 3;       /**< Per port indication that SOP was accepted */
14605#else
14606        uint64_t commit                  : 3;
14607        uint64_t reserved_3_15           : 13;
14608        uint64_t drop                    : 3;
14609        uint64_t reserved_19_63          : 45;
14610#endif
14611    } cn30xx;
14612    struct cvmx_gmxx_rx_prt_info_cn30xx  cn31xx;
14613    struct cvmx_gmxx_rx_prt_info_s       cn38xx;
14614    struct cvmx_gmxx_rx_prt_info_cn30xx  cn50xx;
14615    struct cvmx_gmxx_rx_prt_info_cn52xx
14616    {
14617#if __BYTE_ORDER == __BIG_ENDIAN
14618        uint64_t reserved_20_63          : 44;
14619        uint64_t drop                    : 4;       /**< Per port indication that data was dropped */
14620        uint64_t reserved_4_15           : 12;
14621        uint64_t commit                  : 4;       /**< Per port indication that SOP was accepted */
14622#else
14623        uint64_t commit                  : 4;
14624        uint64_t reserved_4_15           : 12;
14625        uint64_t drop                    : 4;
14626        uint64_t reserved_20_63          : 44;
14627#endif
14628    } cn52xx;
14629    struct cvmx_gmxx_rx_prt_info_cn52xx  cn52xxp1;
14630    struct cvmx_gmxx_rx_prt_info_cn52xx  cn56xx;
14631    struct cvmx_gmxx_rx_prt_info_cn52xx  cn56xxp1;
14632    struct cvmx_gmxx_rx_prt_info_s       cn58xx;
14633    struct cvmx_gmxx_rx_prt_info_s       cn58xxp1;
14634} cvmx_gmxx_rx_prt_info_t;
14635
14636
14637/**
14638 * cvmx_gmx#_rx_prts
14639 *
14640 * GMX_RX_PRTS = Number of FIFOs to carve the RX buffer into
14641 *
14642 *
14643 * Notes:
14644 * GMX_RX_PRTS is unused in XAUI mode since the RX buffer is always unified.
14645 *
14646 */
14647typedef union
14648{
14649    uint64_t u64;
14650    struct cvmx_gmxx_rx_prts_s
14651    {
14652#if __BYTE_ORDER == __BIG_ENDIAN
14653        uint64_t reserved_3_63           : 61;
14654        uint64_t prts                    : 3;       /**< In RGMII mode, the RX buffer can be carved into
14655                                                         several logical buffers depending on the number
14656                                                         or implemented ports.
14657                                                         0 or 1 port  = 512ticks / 4096bytes
14658                                                         2 ports      = 256ticks / 2048bytes
14659                                                         3 or 4 ports = 128ticks / 1024bytes */
14660#else
14661        uint64_t prts                    : 3;
14662        uint64_t reserved_3_63           : 61;
14663#endif
14664    } s;
14665    struct cvmx_gmxx_rx_prts_s           cn30xx;
14666    struct cvmx_gmxx_rx_prts_s           cn31xx;
14667    struct cvmx_gmxx_rx_prts_s           cn38xx;
14668    struct cvmx_gmxx_rx_prts_s           cn38xxp2;
14669    struct cvmx_gmxx_rx_prts_s           cn50xx;
14670    struct cvmx_gmxx_rx_prts_s           cn52xx;
14671    struct cvmx_gmxx_rx_prts_s           cn52xxp1;
14672    struct cvmx_gmxx_rx_prts_s           cn56xx;
14673    struct cvmx_gmxx_rx_prts_s           cn56xxp1;
14674    struct cvmx_gmxx_rx_prts_s           cn58xx;
14675    struct cvmx_gmxx_rx_prts_s           cn58xxp1;
14676} cvmx_gmxx_rx_prts_t;
14677
14678
14679/**
14680 * cvmx_gmx#_rx_tx_status
14681 *
14682 * GMX_RX_TX_STATUS = GMX RX/TX Status
14683 *
14684 */
14685typedef union
14686{
14687    uint64_t u64;
14688    struct cvmx_gmxx_rx_tx_status_s
14689    {
14690#if __BYTE_ORDER == __BIG_ENDIAN
14691        uint64_t reserved_7_63           : 57;
14692        uint64_t tx                      : 3;       /**< Transmit data since last read */
14693        uint64_t reserved_3_3            : 1;
14694        uint64_t rx                      : 3;       /**< Receive data since last read */
14695#else
14696        uint64_t rx                      : 3;
14697        uint64_t reserved_3_3            : 1;
14698        uint64_t tx                      : 3;
14699        uint64_t reserved_7_63           : 57;
14700#endif
14701    } s;
14702    struct cvmx_gmxx_rx_tx_status_s      cn30xx;
14703    struct cvmx_gmxx_rx_tx_status_s      cn31xx;
14704    struct cvmx_gmxx_rx_tx_status_s      cn50xx;
14705} cvmx_gmxx_rx_tx_status_t;
14706
14707
14708/**
14709 * cvmx_gmx#_rx_xaui_bad_col
14710 */
14711typedef union
14712{
14713    uint64_t u64;
14714    struct cvmx_gmxx_rx_xaui_bad_col_s
14715    {
14716#if __BYTE_ORDER == __BIG_ENDIAN
14717        uint64_t reserved_40_63          : 24;
14718        uint64_t val                     : 1;       /**< Set when GMX_RX_INT_REG[PCTERR] is set.
14719                                                         (XAUI mode only) */
14720        uint64_t state                   : 3;       /**< When GMX_RX_INT_REG[PCTERR] is set, STATE will
14721                                                         conatin the receive state at the time of the
14722                                                         error.
14723                                                         (XAUI mode only) */
14724        uint64_t lane_rxc                : 4;       /**< When GMX_RX_INT_REG[PCTERR] is set, LANE_RXC will
14725                                                         conatin the XAUI column at the time of the error.
14726                                                         (XAUI mode only) */
14727        uint64_t lane_rxd                : 32;      /**< When GMX_RX_INT_REG[PCTERR] is set, LANE_RXD will
14728                                                         conatin the XAUI column at the time of the error.
14729                                                         (XAUI mode only) */
14730#else
14731        uint64_t lane_rxd                : 32;
14732        uint64_t lane_rxc                : 4;
14733        uint64_t state                   : 3;
14734        uint64_t val                     : 1;
14735        uint64_t reserved_40_63          : 24;
14736#endif
14737    } s;
14738    struct cvmx_gmxx_rx_xaui_bad_col_s   cn52xx;
14739    struct cvmx_gmxx_rx_xaui_bad_col_s   cn52xxp1;
14740    struct cvmx_gmxx_rx_xaui_bad_col_s   cn56xx;
14741    struct cvmx_gmxx_rx_xaui_bad_col_s   cn56xxp1;
14742} cvmx_gmxx_rx_xaui_bad_col_t;
14743
14744
14745/**
14746 * cvmx_gmx#_rx_xaui_ctl
14747 */
14748typedef union
14749{
14750    uint64_t u64;
14751    struct cvmx_gmxx_rx_xaui_ctl_s
14752    {
14753#if __BYTE_ORDER == __BIG_ENDIAN
14754        uint64_t reserved_2_63           : 62;
14755        uint64_t status                  : 2;       /**< Link Status
14756                                                         0=Link OK
14757                                                         1=Local Fault
14758                                                         2=Remote Fault
14759                                                         3=Reserved
14760                                                         (XAUI mode only) */
14761#else
14762        uint64_t status                  : 2;
14763        uint64_t reserved_2_63           : 62;
14764#endif
14765    } s;
14766    struct cvmx_gmxx_rx_xaui_ctl_s       cn52xx;
14767    struct cvmx_gmxx_rx_xaui_ctl_s       cn52xxp1;
14768    struct cvmx_gmxx_rx_xaui_ctl_s       cn56xx;
14769    struct cvmx_gmxx_rx_xaui_ctl_s       cn56xxp1;
14770} cvmx_gmxx_rx_xaui_ctl_t;
14771
14772
14773/**
14774 * cvmx_gmx#_smac#
14775 *
14776 * GMX_SMAC = Packet SMAC
14777 *
14778 */
14779typedef union
14780{
14781    uint64_t u64;
14782    struct cvmx_gmxx_smacx_s
14783    {
14784#if __BYTE_ORDER == __BIG_ENDIAN
14785        uint64_t reserved_48_63          : 16;
14786        uint64_t smac                    : 48;      /**< The SMAC field is used for generating and
14787                                                         accepting Control Pause packets */
14788#else
14789        uint64_t smac                    : 48;
14790        uint64_t reserved_48_63          : 16;
14791#endif
14792    } s;
14793    struct cvmx_gmxx_smacx_s             cn30xx;
14794    struct cvmx_gmxx_smacx_s             cn31xx;
14795    struct cvmx_gmxx_smacx_s             cn38xx;
14796    struct cvmx_gmxx_smacx_s             cn38xxp2;
14797    struct cvmx_gmxx_smacx_s             cn50xx;
14798    struct cvmx_gmxx_smacx_s             cn52xx;
14799    struct cvmx_gmxx_smacx_s             cn52xxp1;
14800    struct cvmx_gmxx_smacx_s             cn56xx;
14801    struct cvmx_gmxx_smacx_s             cn56xxp1;
14802    struct cvmx_gmxx_smacx_s             cn58xx;
14803    struct cvmx_gmxx_smacx_s             cn58xxp1;
14804} cvmx_gmxx_smacx_t;
14805
14806
14807/**
14808 * cvmx_gmx#_stat_bp
14809 *
14810 * GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation
14811 *
14812 */
14813typedef union
14814{
14815    uint64_t u64;
14816    struct cvmx_gmxx_stat_bp_s
14817    {
14818#if __BYTE_ORDER == __BIG_ENDIAN
14819        uint64_t reserved_17_63          : 47;
14820        uint64_t bp                      : 1;       /**< Current BP state */
14821        uint64_t cnt                     : 16;      /**< Number of cycles that BP has been asserted
14822                                                         Saturating counter */
14823#else
14824        uint64_t cnt                     : 16;
14825        uint64_t bp                      : 1;
14826        uint64_t reserved_17_63          : 47;
14827#endif
14828    } s;
14829    struct cvmx_gmxx_stat_bp_s           cn30xx;
14830    struct cvmx_gmxx_stat_bp_s           cn31xx;
14831    struct cvmx_gmxx_stat_bp_s           cn38xx;
14832    struct cvmx_gmxx_stat_bp_s           cn38xxp2;
14833    struct cvmx_gmxx_stat_bp_s           cn50xx;
14834    struct cvmx_gmxx_stat_bp_s           cn52xx;
14835    struct cvmx_gmxx_stat_bp_s           cn52xxp1;
14836    struct cvmx_gmxx_stat_bp_s           cn56xx;
14837    struct cvmx_gmxx_stat_bp_s           cn56xxp1;
14838    struct cvmx_gmxx_stat_bp_s           cn58xx;
14839    struct cvmx_gmxx_stat_bp_s           cn58xxp1;
14840} cvmx_gmxx_stat_bp_t;
14841
14842
14843/**
14844 * cvmx_gmx#_tx#_append
14845 *
14846 * GMX_TX_APPEND = Packet TX Append Control
14847 *
14848 */
14849typedef union
14850{
14851    uint64_t u64;
14852    struct cvmx_gmxx_txx_append_s
14853    {
14854#if __BYTE_ORDER == __BIG_ENDIAN
14855        uint64_t reserved_4_63           : 60;
14856        uint64_t force_fcs               : 1;       /**< Append the Ethernet FCS on each pause packet
14857                                                         When FCS is clear
14858                                                         This implies that FCS==0 and PAD==0
14859                                                         (PASS2 only) */
14860        uint64_t fcs                     : 1;       /**< Append the Ethernet FCS on each packet */
14861        uint64_t pad                     : 1;       /**< Append PAD bytes such that min sized */
14862        uint64_t preamble                : 1;       /**< Prepend the Ethernet preamble on each transfer */
14863#else
14864        uint64_t preamble                : 1;
14865        uint64_t pad                     : 1;
14866        uint64_t fcs                     : 1;
14867        uint64_t force_fcs               : 1;
14868        uint64_t reserved_4_63           : 60;
14869#endif
14870    } s;
14871    struct cvmx_gmxx_txx_append_s        cn30xx;
14872    struct cvmx_gmxx_txx_append_s        cn31xx;
14873    struct cvmx_gmxx_txx_append_s        cn38xx;
14874    struct cvmx_gmxx_txx_append_s        cn38xxp2;
14875    struct cvmx_gmxx_txx_append_s        cn50xx;
14876    struct cvmx_gmxx_txx_append_s        cn52xx;
14877    struct cvmx_gmxx_txx_append_s        cn52xxp1;
14878    struct cvmx_gmxx_txx_append_s        cn56xx;
14879    struct cvmx_gmxx_txx_append_s        cn56xxp1;
14880    struct cvmx_gmxx_txx_append_s        cn58xx;
14881    struct cvmx_gmxx_txx_append_s        cn58xxp1;
14882} cvmx_gmxx_txx_append_t;
14883
14884
14885/**
14886 * cvmx_gmx#_tx#_burst
14887 *
14888 * GMX_TX_BURST = Packet TX Burst Counter
14889 *
14890 */
14891typedef union
14892{
14893    uint64_t u64;
14894    struct cvmx_gmxx_txx_burst_s
14895    {
14896#if __BYTE_ORDER == __BIG_ENDIAN
14897        uint64_t reserved_16_63          : 48;
14898        uint64_t burst                   : 16;      /**< Burst (refer to 802.3 to set correctly)
14899                                                         10/100Mbs: 0x0
14900                                                         1000Mbs:   0x2000 */
14901#else
14902        uint64_t burst                   : 16;
14903        uint64_t reserved_16_63          : 48;
14904#endif
14905    } s;
14906    struct cvmx_gmxx_txx_burst_s         cn30xx;
14907    struct cvmx_gmxx_txx_burst_s         cn31xx;
14908    struct cvmx_gmxx_txx_burst_s         cn38xx;
14909    struct cvmx_gmxx_txx_burst_s         cn38xxp2;
14910    struct cvmx_gmxx_txx_burst_s         cn50xx;
14911    struct cvmx_gmxx_txx_burst_s         cn52xx;
14912    struct cvmx_gmxx_txx_burst_s         cn52xxp1;
14913    struct cvmx_gmxx_txx_burst_s         cn56xx;
14914    struct cvmx_gmxx_txx_burst_s         cn56xxp1;
14915    struct cvmx_gmxx_txx_burst_s         cn58xx;
14916    struct cvmx_gmxx_txx_burst_s         cn58xxp1;
14917} cvmx_gmxx_txx_burst_t;
14918
14919
14920/**
14921 * cvmx_gmx#_tx#_cbfc_xoff
14922 */
14923typedef union
14924{
14925    uint64_t u64;
14926    struct cvmx_gmxx_txx_cbfc_xoff_s
14927    {
14928#if __BYTE_ORDER == __BIG_ENDIAN
14929        uint64_t reserved_16_63          : 48;
14930        uint64_t xoff                    : 16;      /**< Which ports to backpressure
14931                                                         Do not write in HiGig2 mode i.e. when
14932                                                         GMX_TX_XAUI_CTL[HG_EN]=1 and
14933                                                         GMX_RX_UDD_SKP[SKIP]=16. */
14934#else
14935        uint64_t xoff                    : 16;
14936        uint64_t reserved_16_63          : 48;
14937#endif
14938    } s;
14939    struct cvmx_gmxx_txx_cbfc_xoff_s     cn52xx;
14940    struct cvmx_gmxx_txx_cbfc_xoff_s     cn56xx;
14941} cvmx_gmxx_txx_cbfc_xoff_t;
14942
14943
14944/**
14945 * cvmx_gmx#_tx#_cbfc_xon
14946 */
14947typedef union
14948{
14949    uint64_t u64;
14950    struct cvmx_gmxx_txx_cbfc_xon_s
14951    {
14952#if __BYTE_ORDER == __BIG_ENDIAN
14953        uint64_t reserved_16_63          : 48;
14954        uint64_t xon                     : 16;      /**< Which ports to stop backpressure
14955                                                         Do not write in HiGig2 mode i.e. when
14956                                                         GMX_TX_XAUI_CTL[HG_EN]=1 and
14957                                                         GMX_RX_UDD_SKP[SKIP]=16. */
14958#else
14959        uint64_t xon                     : 16;
14960        uint64_t reserved_16_63          : 48;
14961#endif
14962    } s;
14963    struct cvmx_gmxx_txx_cbfc_xon_s      cn52xx;
14964    struct cvmx_gmxx_txx_cbfc_xon_s      cn56xx;
14965} cvmx_gmxx_txx_cbfc_xon_t;
14966
14967
14968/**
14969 * cvmx_gmx#_tx#_clk
14970 *
14971 * Per Port
14972 *
14973 *
14974 * GMX_TX_CLK = RGMII TX Clock Generation Register
14975 *
14976 * Notes:
14977 * Programming Restrictions:
14978 *  (1) In RGMII mode, if GMX_PRT_CFG[SPEED]==0, then CLK_CNT must be > 1.
14979 *  (2) In MII mode, CLK_CNT == 1
14980 *  (3) In RGMII or GMII mode, if CLK_CNT==0, Octeon will not generate a tx clock.
14981 *
14982 * RGMII Example:
14983 *  Given a 125MHz PLL reference clock...
14984 *   CLK_CNT ==  1 ==> 125.0MHz TXC clock period (8ns* 1)
14985 *   CLK_CNT ==  5 ==>  25.0MHz TXC clock period (8ns* 5)
14986 *   CLK_CNT == 50 ==>   2.5MHz TXC clock period (8ns*50)
14987 */
14988typedef union
14989{
14990    uint64_t u64;
14991    struct cvmx_gmxx_txx_clk_s
14992    {
14993#if __BYTE_ORDER == __BIG_ENDIAN
14994        uint64_t reserved_6_63           : 58;
14995        uint64_t clk_cnt                 : 6;       /**< Controls the RGMII TXC frequency
14996                                                         When PLL is used, TXC(phase) =
14997                                                          spi4_tx_pll_ref_clk(period)/2*CLK_CNT
14998                                                         When PLL bypass is used, TXC(phase) =
14999                                                          spi4_tx_pll_ref_clk(period)*2*CLK_CNT
15000                                                         NOTE: CLK_CNT==0 will not generate any clock
15001                                                         if CLK_CNT > 1 if GMX_PRT_CFG[SPEED]==0 */
15002#else
15003        uint64_t clk_cnt                 : 6;
15004        uint64_t reserved_6_63           : 58;
15005#endif
15006    } s;
15007    struct cvmx_gmxx_txx_clk_s           cn30xx;
15008    struct cvmx_gmxx_txx_clk_s           cn31xx;
15009    struct cvmx_gmxx_txx_clk_s           cn38xx;
15010    struct cvmx_gmxx_txx_clk_s           cn38xxp2;
15011    struct cvmx_gmxx_txx_clk_s           cn50xx;
15012    struct cvmx_gmxx_txx_clk_s           cn58xx;
15013    struct cvmx_gmxx_txx_clk_s           cn58xxp1;
15014} cvmx_gmxx_txx_clk_t;
15015
15016
15017/**
15018 * cvmx_gmx#_tx#_ctl
15019 *
15020 * GMX_TX_CTL = TX Control register
15021 *
15022 */
15023typedef union
15024{
15025    uint64_t u64;
15026    struct cvmx_gmxx_txx_ctl_s
15027    {
15028#if __BYTE_ORDER == __BIG_ENDIAN
15029        uint64_t reserved_2_63           : 62;
15030        uint64_t xsdef_en                : 1;       /**< Enables the excessive deferral check for stats
15031                                                         and interrupts
15032                                                         (PASS2 only) */
15033        uint64_t xscol_en                : 1;       /**< Enables the excessive collision check for stats
15034                                                         and interrupts
15035                                                         (PASS2 only) */
15036#else
15037        uint64_t xscol_en                : 1;
15038        uint64_t xsdef_en                : 1;
15039        uint64_t reserved_2_63           : 62;
15040#endif
15041    } s;
15042    struct cvmx_gmxx_txx_ctl_s           cn30xx;
15043    struct cvmx_gmxx_txx_ctl_s           cn31xx;
15044    struct cvmx_gmxx_txx_ctl_s           cn38xx;
15045    struct cvmx_gmxx_txx_ctl_s           cn38xxp2;
15046    struct cvmx_gmxx_txx_ctl_s           cn50xx;
15047    struct cvmx_gmxx_txx_ctl_s           cn52xx;
15048    struct cvmx_gmxx_txx_ctl_s           cn52xxp1;
15049    struct cvmx_gmxx_txx_ctl_s           cn56xx;
15050    struct cvmx_gmxx_txx_ctl_s           cn56xxp1;
15051    struct cvmx_gmxx_txx_ctl_s           cn58xx;
15052    struct cvmx_gmxx_txx_ctl_s           cn58xxp1;
15053} cvmx_gmxx_txx_ctl_t;
15054
15055
15056/**
15057 * cvmx_gmx#_tx#_min_pkt
15058 *
15059 * GMX_TX_MIN_PKT = Packet TX Min Size Packet (PAD upto min size)
15060 *
15061 */
15062typedef union
15063{
15064    uint64_t u64;
15065    struct cvmx_gmxx_txx_min_pkt_s
15066    {
15067#if __BYTE_ORDER == __BIG_ENDIAN
15068        uint64_t reserved_8_63           : 56;
15069        uint64_t min_size                : 8;       /**< Min frame in bytes before the FCS is applied
15070                                                         Padding is only appened when GMX_TX_APPEND[PAD]
15071                                                         for the coresponding RGMII port is set. */
15072#else
15073        uint64_t min_size                : 8;
15074        uint64_t reserved_8_63           : 56;
15075#endif
15076    } s;
15077    struct cvmx_gmxx_txx_min_pkt_s       cn30xx;
15078    struct cvmx_gmxx_txx_min_pkt_s       cn31xx;
15079    struct cvmx_gmxx_txx_min_pkt_s       cn38xx;
15080    struct cvmx_gmxx_txx_min_pkt_s       cn38xxp2;
15081    struct cvmx_gmxx_txx_min_pkt_s       cn50xx;
15082    struct cvmx_gmxx_txx_min_pkt_s       cn52xx;
15083    struct cvmx_gmxx_txx_min_pkt_s       cn52xxp1;
15084    struct cvmx_gmxx_txx_min_pkt_s       cn56xx;
15085    struct cvmx_gmxx_txx_min_pkt_s       cn56xxp1;
15086    struct cvmx_gmxx_txx_min_pkt_s       cn58xx;
15087    struct cvmx_gmxx_txx_min_pkt_s       cn58xxp1;
15088} cvmx_gmxx_txx_min_pkt_t;
15089
15090
15091/**
15092 * cvmx_gmx#_tx#_pause_pkt_interval
15093 *
15094 * GMX_TX_PAUSE_PKT_INTERVAL = Packet TX Pause Packet transmission interval - how often PAUSE packets will be sent
15095 *
15096 *
15097 * Notes:
15098 * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and
15099 * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
15100 * designer.  It is suggested that TIME be much greater than INTERVAL and
15101 * GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
15102 * count and then when the backpressure condition is lifted, a PAUSE packet
15103 * with TIME==0 will be sent indicating that Octane is ready for additional
15104 * data.
15105 *
15106 * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is
15107 * suggested that TIME and INTERVAL are programmed such that they satisify the
15108 * following rule...
15109 *
15110 *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
15111 *
15112 * where largest_pkt_size is that largest packet that the system can send
15113 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
15114 * of the PAUSE packet (normally 64B).
15115 */
15116typedef union
15117{
15118    uint64_t u64;
15119    struct cvmx_gmxx_txx_pause_pkt_interval_s
15120    {
15121#if __BYTE_ORDER == __BIG_ENDIAN
15122        uint64_t reserved_16_63          : 48;
15123        uint64_t interval                : 16;      /**< Arbitrate for a pause packet every (INTERVAL*512)
15124                                                         bit-times.
15125                                                         Normally, 0 < INTERVAL < GMX_TX_PAUSE_PKT_TIME
15126                                                         INTERVAL=0, will only send a single PAUSE packet
15127                                                         for each backpressure event */
15128#else
15129        uint64_t interval                : 16;
15130        uint64_t reserved_16_63          : 48;
15131#endif
15132    } s;
15133    struct cvmx_gmxx_txx_pause_pkt_interval_s cn30xx;
15134    struct cvmx_gmxx_txx_pause_pkt_interval_s cn31xx;
15135    struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xx;
15136    struct cvmx_gmxx_txx_pause_pkt_interval_s cn38xxp2;
15137    struct cvmx_gmxx_txx_pause_pkt_interval_s cn50xx;
15138    struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xx;
15139    struct cvmx_gmxx_txx_pause_pkt_interval_s cn52xxp1;
15140    struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xx;
15141    struct cvmx_gmxx_txx_pause_pkt_interval_s cn56xxp1;
15142    struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xx;
15143    struct cvmx_gmxx_txx_pause_pkt_interval_s cn58xxp1;
15144} cvmx_gmxx_txx_pause_pkt_interval_t;
15145
15146
15147/**
15148 * cvmx_gmx#_tx#_pause_pkt_time
15149 *
15150 * GMX_TX_PAUSE_PKT_TIME = Packet TX Pause Packet pause_time field
15151 *
15152 *
15153 * Notes:
15154 * Choosing proper values of GMX_TX_PAUSE_PKT_TIME[TIME] and
15155 * GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
15156 * designer.  It is suggested that TIME be much greater than INTERVAL and
15157 * GMX_TX_PAUSE_ZERO[SEND] be set.  This allows a periodic refresh of the PAUSE
15158 * count and then when the backpressure condition is lifted, a PAUSE packet
15159 * with TIME==0 will be sent indicating that Octane is ready for additional
15160 * data.
15161 *
15162 * If the system chooses to not set GMX_TX_PAUSE_ZERO[SEND], then it is
15163 * suggested that TIME and INTERVAL are programmed such that they satisify the
15164 * following rule...
15165 *
15166 *    INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
15167 *
15168 * where largest_pkt_size is that largest packet that the system can send
15169 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
15170 * of the PAUSE packet (normally 64B).
15171 */
15172typedef union
15173{
15174    uint64_t u64;
15175    struct cvmx_gmxx_txx_pause_pkt_time_s
15176    {
15177#if __BYTE_ORDER == __BIG_ENDIAN
15178        uint64_t reserved_16_63          : 48;
15179        uint64_t time                    : 16;      /**< The pause_time field placed is outbnd pause pkts
15180                                                         pause_time is in 512 bit-times
15181                                                         Normally, TIME > GMX_TX_PAUSE_PKT_INTERVAL */
15182#else
15183        uint64_t time                    : 16;
15184        uint64_t reserved_16_63          : 48;
15185#endif
15186    } s;
15187    struct cvmx_gmxx_txx_pause_pkt_time_s cn30xx;
15188    struct cvmx_gmxx_txx_pause_pkt_time_s cn31xx;
15189    struct cvmx_gmxx_txx_pause_pkt_time_s cn38xx;
15190    struct cvmx_gmxx_txx_pause_pkt_time_s cn38xxp2;
15191    struct cvmx_gmxx_txx_pause_pkt_time_s cn50xx;
15192    struct cvmx_gmxx_txx_pause_pkt_time_s cn52xx;
15193    struct cvmx_gmxx_txx_pause_pkt_time_s cn52xxp1;
15194    struct cvmx_gmxx_txx_pause_pkt_time_s cn56xx;
15195    struct cvmx_gmxx_txx_pause_pkt_time_s cn56xxp1;
15196    struct cvmx_gmxx_txx_pause_pkt_time_s cn58xx;
15197    struct cvmx_gmxx_txx_pause_pkt_time_s cn58xxp1;
15198} cvmx_gmxx_txx_pause_pkt_time_t;
15199
15200
15201/**
15202 * cvmx_gmx#_tx#_pause_togo
15203 *
15204 * GMX_TX_PAUSE_TOGO = Packet TX Amount of time remaining to backpressure
15205 *
15206 */
15207typedef union
15208{
15209    uint64_t u64;
15210    struct cvmx_gmxx_txx_pause_togo_s
15211    {
15212#if __BYTE_ORDER == __BIG_ENDIAN
15213        uint64_t reserved_32_63          : 32;
15214        uint64_t msg_time                : 16;      /**< Amount of time remaining to backpressure
15215                                                         From the higig2 physical message pause timer
15216                                                         (only valid on port0) */
15217        uint64_t time                    : 16;      /**< Amount of time remaining to backpressure */
15218#else
15219        uint64_t time                    : 16;
15220        uint64_t msg_time                : 16;
15221        uint64_t reserved_32_63          : 32;
15222#endif
15223    } s;
15224    struct cvmx_gmxx_txx_pause_togo_cn30xx
15225    {
15226#if __BYTE_ORDER == __BIG_ENDIAN
15227        uint64_t reserved_16_63          : 48;
15228        uint64_t time                    : 16;      /**< Amount of time remaining to backpressure */
15229#else
15230        uint64_t time                    : 16;
15231        uint64_t reserved_16_63          : 48;
15232#endif
15233    } cn30xx;
15234    struct cvmx_gmxx_txx_pause_togo_cn30xx cn31xx;
15235    struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xx;
15236    struct cvmx_gmxx_txx_pause_togo_cn30xx cn38xxp2;
15237    struct cvmx_gmxx_txx_pause_togo_cn30xx cn50xx;
15238    struct cvmx_gmxx_txx_pause_togo_s    cn52xx;
15239    struct cvmx_gmxx_txx_pause_togo_s    cn52xxp1;
15240    struct cvmx_gmxx_txx_pause_togo_s    cn56xx;
15241    struct cvmx_gmxx_txx_pause_togo_cn30xx cn56xxp1;
15242    struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xx;
15243    struct cvmx_gmxx_txx_pause_togo_cn30xx cn58xxp1;
15244} cvmx_gmxx_txx_pause_togo_t;
15245
15246
15247/**
15248 * cvmx_gmx#_tx#_pause_zero
15249 *
15250 * GMX_TX_PAUSE_ZERO = Packet TX Amount of time remaining to backpressure
15251 *
15252 */
15253typedef union
15254{
15255    uint64_t u64;
15256    struct cvmx_gmxx_txx_pause_zero_s
15257    {
15258#if __BYTE_ORDER == __BIG_ENDIAN
15259        uint64_t reserved_1_63           : 63;
15260        uint64_t send                    : 1;       /**< When backpressure condition clear, send PAUSE
15261                                                         packet with pause_time of zero to enable the
15262                                                         channel */
15263#else
15264        uint64_t send                    : 1;
15265        uint64_t reserved_1_63           : 63;
15266#endif
15267    } s;
15268    struct cvmx_gmxx_txx_pause_zero_s    cn30xx;
15269    struct cvmx_gmxx_txx_pause_zero_s    cn31xx;
15270    struct cvmx_gmxx_txx_pause_zero_s    cn38xx;
15271    struct cvmx_gmxx_txx_pause_zero_s    cn38xxp2;
15272    struct cvmx_gmxx_txx_pause_zero_s    cn50xx;
15273    struct cvmx_gmxx_txx_pause_zero_s    cn52xx;
15274    struct cvmx_gmxx_txx_pause_zero_s    cn52xxp1;
15275    struct cvmx_gmxx_txx_pause_zero_s    cn56xx;
15276    struct cvmx_gmxx_txx_pause_zero_s    cn56xxp1;
15277    struct cvmx_gmxx_txx_pause_zero_s    cn58xx;
15278    struct cvmx_gmxx_txx_pause_zero_s    cn58xxp1;
15279} cvmx_gmxx_txx_pause_zero_t;
15280
15281
15282/**
15283 * cvmx_gmx#_tx#_sgmii_ctl
15284 */
15285typedef union
15286{
15287    uint64_t u64;
15288    struct cvmx_gmxx_txx_sgmii_ctl_s
15289    {
15290#if __BYTE_ORDER == __BIG_ENDIAN
15291        uint64_t reserved_1_63           : 63;
15292        uint64_t align                   : 1;       /**< Align the transmission to even cycles
15293                                                         0 = Data can be sent on any cycle
15294                                                             Possible to for the TX PCS machine to drop
15295                                                             first byte of preamble
15296                                                         1 = Data will only be sent on even cycles
15297                                                             There will be no loss of data
15298                                                         (SGMII/1000Base-X only) */
15299#else
15300        uint64_t align                   : 1;
15301        uint64_t reserved_1_63           : 63;
15302#endif
15303    } s;
15304    struct cvmx_gmxx_txx_sgmii_ctl_s     cn52xx;
15305    struct cvmx_gmxx_txx_sgmii_ctl_s     cn52xxp1;
15306    struct cvmx_gmxx_txx_sgmii_ctl_s     cn56xx;
15307    struct cvmx_gmxx_txx_sgmii_ctl_s     cn56xxp1;
15308} cvmx_gmxx_txx_sgmii_ctl_t;
15309
15310
15311/**
15312 * cvmx_gmx#_tx#_slot
15313 *
15314 * GMX_TX_SLOT = Packet TX Slottime Counter
15315 *
15316 */
15317typedef union
15318{
15319    uint64_t u64;
15320    struct cvmx_gmxx_txx_slot_s
15321    {
15322#if __BYTE_ORDER == __BIG_ENDIAN
15323        uint64_t reserved_10_63          : 54;
15324        uint64_t slot                    : 10;      /**< Slottime (refer to 802.3 to set correctly)
15325                                                         10/100Mbs: 0x40
15326                                                         1000Mbs:   0x200 */
15327#else
15328        uint64_t slot                    : 10;
15329        uint64_t reserved_10_63          : 54;
15330#endif
15331    } s;
15332    struct cvmx_gmxx_txx_slot_s          cn30xx;
15333    struct cvmx_gmxx_txx_slot_s          cn31xx;
15334    struct cvmx_gmxx_txx_slot_s          cn38xx;
15335    struct cvmx_gmxx_txx_slot_s          cn38xxp2;
15336    struct cvmx_gmxx_txx_slot_s          cn50xx;
15337    struct cvmx_gmxx_txx_slot_s          cn52xx;
15338    struct cvmx_gmxx_txx_slot_s          cn52xxp1;
15339    struct cvmx_gmxx_txx_slot_s          cn56xx;
15340    struct cvmx_gmxx_txx_slot_s          cn56xxp1;
15341    struct cvmx_gmxx_txx_slot_s          cn58xx;
15342    struct cvmx_gmxx_txx_slot_s          cn58xxp1;
15343} cvmx_gmxx_txx_slot_t;
15344
15345
15346/**
15347 * cvmx_gmx#_tx#_soft_pause
15348 *
15349 * GMX_TX_SOFT_PAUSE = Packet TX Software Pause
15350 *
15351 */
15352typedef union
15353{
15354    uint64_t u64;
15355    struct cvmx_gmxx_txx_soft_pause_s
15356    {
15357#if __BYTE_ORDER == __BIG_ENDIAN
15358        uint64_t reserved_16_63          : 48;
15359        uint64_t time                    : 16;      /**< Back off the TX bus for (TIME*512) bit-times */
15360#else
15361        uint64_t time                    : 16;
15362        uint64_t reserved_16_63          : 48;
15363#endif
15364    } s;
15365    struct cvmx_gmxx_txx_soft_pause_s    cn30xx;
15366    struct cvmx_gmxx_txx_soft_pause_s    cn31xx;
15367    struct cvmx_gmxx_txx_soft_pause_s    cn38xx;
15368    struct cvmx_gmxx_txx_soft_pause_s    cn38xxp2;
15369    struct cvmx_gmxx_txx_soft_pause_s    cn50xx;
15370    struct cvmx_gmxx_txx_soft_pause_s    cn52xx;
15371    struct cvmx_gmxx_txx_soft_pause_s    cn52xxp1;
15372    struct cvmx_gmxx_txx_soft_pause_s    cn56xx;
15373    struct cvmx_gmxx_txx_soft_pause_s    cn56xxp1;
15374    struct cvmx_gmxx_txx_soft_pause_s    cn58xx;
15375    struct cvmx_gmxx_txx_soft_pause_s    cn58xxp1;
15376} cvmx_gmxx_txx_soft_pause_t;
15377
15378
15379/**
15380 * cvmx_gmx#_tx#_stat0
15381 *
15382 * GMX_TX_STAT0 = GMX_TX_STATS_XSDEF / GMX_TX_STATS_XSCOL
15383 *
15384 *
15385 * Notes:
15386 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15387 * - Counters will wrap
15388 */
15389typedef union
15390{
15391    uint64_t u64;
15392    struct cvmx_gmxx_txx_stat0_s
15393    {
15394#if __BYTE_ORDER == __BIG_ENDIAN
15395        uint64_t xsdef                   : 32;      /**< Number of packets dropped (never successfully
15396                                                         sent) due to excessive deferal */
15397        uint64_t xscol                   : 32;      /**< Number of packets dropped (never successfully
15398                                                         sent) due to excessive collision.  Defined by
15399                                                         GMX_TX_COL_ATTEMPT[LIMIT]. */
15400#else
15401        uint64_t xscol                   : 32;
15402        uint64_t xsdef                   : 32;
15403#endif
15404    } s;
15405    struct cvmx_gmxx_txx_stat0_s         cn30xx;
15406    struct cvmx_gmxx_txx_stat0_s         cn31xx;
15407    struct cvmx_gmxx_txx_stat0_s         cn38xx;
15408    struct cvmx_gmxx_txx_stat0_s         cn38xxp2;
15409    struct cvmx_gmxx_txx_stat0_s         cn50xx;
15410    struct cvmx_gmxx_txx_stat0_s         cn52xx;
15411    struct cvmx_gmxx_txx_stat0_s         cn52xxp1;
15412    struct cvmx_gmxx_txx_stat0_s         cn56xx;
15413    struct cvmx_gmxx_txx_stat0_s         cn56xxp1;
15414    struct cvmx_gmxx_txx_stat0_s         cn58xx;
15415    struct cvmx_gmxx_txx_stat0_s         cn58xxp1;
15416} cvmx_gmxx_txx_stat0_t;
15417
15418
15419/**
15420 * cvmx_gmx#_tx#_stat1
15421 *
15422 * GMX_TX_STAT1 = GMX_TX_STATS_SCOL  / GMX_TX_STATS_MCOL
15423 *
15424 *
15425 * Notes:
15426 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15427 * - Counters will wrap
15428 */
15429typedef union
15430{
15431    uint64_t u64;
15432    struct cvmx_gmxx_txx_stat1_s
15433    {
15434#if __BYTE_ORDER == __BIG_ENDIAN
15435        uint64_t scol                    : 32;      /**< Number of packets sent with a single collision */
15436        uint64_t mcol                    : 32;      /**< Number of packets sent with multiple collisions
15437                                                         but < GMX_TX_COL_ATTEMPT[LIMIT]. */
15438#else
15439        uint64_t mcol                    : 32;
15440        uint64_t scol                    : 32;
15441#endif
15442    } s;
15443    struct cvmx_gmxx_txx_stat1_s         cn30xx;
15444    struct cvmx_gmxx_txx_stat1_s         cn31xx;
15445    struct cvmx_gmxx_txx_stat1_s         cn38xx;
15446    struct cvmx_gmxx_txx_stat1_s         cn38xxp2;
15447    struct cvmx_gmxx_txx_stat1_s         cn50xx;
15448    struct cvmx_gmxx_txx_stat1_s         cn52xx;
15449    struct cvmx_gmxx_txx_stat1_s         cn52xxp1;
15450    struct cvmx_gmxx_txx_stat1_s         cn56xx;
15451    struct cvmx_gmxx_txx_stat1_s         cn56xxp1;
15452    struct cvmx_gmxx_txx_stat1_s         cn58xx;
15453    struct cvmx_gmxx_txx_stat1_s         cn58xxp1;
15454} cvmx_gmxx_txx_stat1_t;
15455
15456
15457/**
15458 * cvmx_gmx#_tx#_stat2
15459 *
15460 * GMX_TX_STAT2 = GMX_TX_STATS_OCTS
15461 *
15462 *
15463 * Notes:
15464 * - Octect counts are the sum of all data transmitted on the wire including
15465 *   packet data, pad bytes, fcs bytes, pause bytes, and jam bytes.  The octect
15466 *   counts do not include PREAMBLE byte or EXTEND cycles.
15467 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15468 * - Counters will wrap
15469 */
15470typedef union
15471{
15472    uint64_t u64;
15473    struct cvmx_gmxx_txx_stat2_s
15474    {
15475#if __BYTE_ORDER == __BIG_ENDIAN
15476        uint64_t reserved_48_63          : 16;
15477        uint64_t octs                    : 48;      /**< Number of total octets sent on the interface.
15478                                                         Does not count octets from frames that were
15479                                                         truncated due to collisions in halfdup mode. */
15480#else
15481        uint64_t octs                    : 48;
15482        uint64_t reserved_48_63          : 16;
15483#endif
15484    } s;
15485    struct cvmx_gmxx_txx_stat2_s         cn30xx;
15486    struct cvmx_gmxx_txx_stat2_s         cn31xx;
15487    struct cvmx_gmxx_txx_stat2_s         cn38xx;
15488    struct cvmx_gmxx_txx_stat2_s         cn38xxp2;
15489    struct cvmx_gmxx_txx_stat2_s         cn50xx;
15490    struct cvmx_gmxx_txx_stat2_s         cn52xx;
15491    struct cvmx_gmxx_txx_stat2_s         cn52xxp1;
15492    struct cvmx_gmxx_txx_stat2_s         cn56xx;
15493    struct cvmx_gmxx_txx_stat2_s         cn56xxp1;
15494    struct cvmx_gmxx_txx_stat2_s         cn58xx;
15495    struct cvmx_gmxx_txx_stat2_s         cn58xxp1;
15496} cvmx_gmxx_txx_stat2_t;
15497
15498
15499/**
15500 * cvmx_gmx#_tx#_stat3
15501 *
15502 * GMX_TX_STAT3 = GMX_TX_STATS_PKTS
15503 *
15504 *
15505 * Notes:
15506 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15507 * - Counters will wrap
15508 */
15509typedef union
15510{
15511    uint64_t u64;
15512    struct cvmx_gmxx_txx_stat3_s
15513    {
15514#if __BYTE_ORDER == __BIG_ENDIAN
15515        uint64_t reserved_32_63          : 32;
15516        uint64_t pkts                    : 32;      /**< Number of total frames sent on the interface.
15517                                                         Does not count frames that were truncated due to
15518                                                          collisions in halfdup mode. */
15519#else
15520        uint64_t pkts                    : 32;
15521        uint64_t reserved_32_63          : 32;
15522#endif
15523    } s;
15524    struct cvmx_gmxx_txx_stat3_s         cn30xx;
15525    struct cvmx_gmxx_txx_stat3_s         cn31xx;
15526    struct cvmx_gmxx_txx_stat3_s         cn38xx;
15527    struct cvmx_gmxx_txx_stat3_s         cn38xxp2;
15528    struct cvmx_gmxx_txx_stat3_s         cn50xx;
15529    struct cvmx_gmxx_txx_stat3_s         cn52xx;
15530    struct cvmx_gmxx_txx_stat3_s         cn52xxp1;
15531    struct cvmx_gmxx_txx_stat3_s         cn56xx;
15532    struct cvmx_gmxx_txx_stat3_s         cn56xxp1;
15533    struct cvmx_gmxx_txx_stat3_s         cn58xx;
15534    struct cvmx_gmxx_txx_stat3_s         cn58xxp1;
15535} cvmx_gmxx_txx_stat3_t;
15536
15537
15538/**
15539 * cvmx_gmx#_tx#_stat4
15540 *
15541 * GMX_TX_STAT4 = GMX_TX_STATS_HIST1 (64) / GMX_TX_STATS_HIST0 (<64)
15542 *
15543 *
15544 * Notes:
15545 * - Packet length is the sum of all data transmitted on the wire for the given
15546 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
15547 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
15548 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15549 * - Counters will wrap
15550 */
15551typedef union
15552{
15553    uint64_t u64;
15554    struct cvmx_gmxx_txx_stat4_s
15555    {
15556#if __BYTE_ORDER == __BIG_ENDIAN
15557        uint64_t hist1                   : 32;      /**< Number of packets sent with an octet count of 64. */
15558        uint64_t hist0                   : 32;      /**< Number of packets sent with an octet count
15559                                                         of < 64. */
15560#else
15561        uint64_t hist0                   : 32;
15562        uint64_t hist1                   : 32;
15563#endif
15564    } s;
15565    struct cvmx_gmxx_txx_stat4_s         cn30xx;
15566    struct cvmx_gmxx_txx_stat4_s         cn31xx;
15567    struct cvmx_gmxx_txx_stat4_s         cn38xx;
15568    struct cvmx_gmxx_txx_stat4_s         cn38xxp2;
15569    struct cvmx_gmxx_txx_stat4_s         cn50xx;
15570    struct cvmx_gmxx_txx_stat4_s         cn52xx;
15571    struct cvmx_gmxx_txx_stat4_s         cn52xxp1;
15572    struct cvmx_gmxx_txx_stat4_s         cn56xx;
15573    struct cvmx_gmxx_txx_stat4_s         cn56xxp1;
15574    struct cvmx_gmxx_txx_stat4_s         cn58xx;
15575    struct cvmx_gmxx_txx_stat4_s         cn58xxp1;
15576} cvmx_gmxx_txx_stat4_t;
15577
15578
15579/**
15580 * cvmx_gmx#_tx#_stat5
15581 *
15582 * GMX_TX_STAT5 = GMX_TX_STATS_HIST3 (128- 255) / GMX_TX_STATS_HIST2 (65- 127)
15583 *
15584 *
15585 * Notes:
15586 * - Packet length is the sum of all data transmitted on the wire for the given
15587 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
15588 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
15589 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15590 * - Counters will wrap
15591 */
15592typedef union
15593{
15594    uint64_t u64;
15595    struct cvmx_gmxx_txx_stat5_s
15596    {
15597#if __BYTE_ORDER == __BIG_ENDIAN
15598        uint64_t hist3                   : 32;      /**< Number of packets sent with an octet count of
15599                                                         128 - 255. */
15600        uint64_t hist2                   : 32;      /**< Number of packets sent with an octet count of
15601                                                         65 - 127. */
15602#else
15603        uint64_t hist2                   : 32;
15604        uint64_t hist3                   : 32;
15605#endif
15606    } s;
15607    struct cvmx_gmxx_txx_stat5_s         cn30xx;
15608    struct cvmx_gmxx_txx_stat5_s         cn31xx;
15609    struct cvmx_gmxx_txx_stat5_s         cn38xx;
15610    struct cvmx_gmxx_txx_stat5_s         cn38xxp2;
15611    struct cvmx_gmxx_txx_stat5_s         cn50xx;
15612    struct cvmx_gmxx_txx_stat5_s         cn52xx;
15613    struct cvmx_gmxx_txx_stat5_s         cn52xxp1;
15614    struct cvmx_gmxx_txx_stat5_s         cn56xx;
15615    struct cvmx_gmxx_txx_stat5_s         cn56xxp1;
15616    struct cvmx_gmxx_txx_stat5_s         cn58xx;
15617    struct cvmx_gmxx_txx_stat5_s         cn58xxp1;
15618} cvmx_gmxx_txx_stat5_t;
15619
15620
15621/**
15622 * cvmx_gmx#_tx#_stat6
15623 *
15624 * GMX_TX_STAT6 = GMX_TX_STATS_HIST5 (512-1023) / GMX_TX_STATS_HIST4 (256-511)
15625 *
15626 *
15627 * Notes:
15628 * - Packet length is the sum of all data transmitted on the wire for the given
15629 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
15630 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
15631 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15632 * - Counters will wrap
15633 */
15634typedef union
15635{
15636    uint64_t u64;
15637    struct cvmx_gmxx_txx_stat6_s
15638    {
15639#if __BYTE_ORDER == __BIG_ENDIAN
15640        uint64_t hist5                   : 32;      /**< Number of packets sent with an octet count of
15641                                                         512 - 1023. */
15642        uint64_t hist4                   : 32;      /**< Number of packets sent with an octet count of
15643                                                         256 - 511. */
15644#else
15645        uint64_t hist4                   : 32;
15646        uint64_t hist5                   : 32;
15647#endif
15648    } s;
15649    struct cvmx_gmxx_txx_stat6_s         cn30xx;
15650    struct cvmx_gmxx_txx_stat6_s         cn31xx;
15651    struct cvmx_gmxx_txx_stat6_s         cn38xx;
15652    struct cvmx_gmxx_txx_stat6_s         cn38xxp2;
15653    struct cvmx_gmxx_txx_stat6_s         cn50xx;
15654    struct cvmx_gmxx_txx_stat6_s         cn52xx;
15655    struct cvmx_gmxx_txx_stat6_s         cn52xxp1;
15656    struct cvmx_gmxx_txx_stat6_s         cn56xx;
15657    struct cvmx_gmxx_txx_stat6_s         cn56xxp1;
15658    struct cvmx_gmxx_txx_stat6_s         cn58xx;
15659    struct cvmx_gmxx_txx_stat6_s         cn58xxp1;
15660} cvmx_gmxx_txx_stat6_t;
15661
15662
15663/**
15664 * cvmx_gmx#_tx#_stat7
15665 *
15666 * GMX_TX_STAT7 = GMX_TX_STATS_HIST7 (1024-1518) / GMX_TX_STATS_HIST6 (>1518)
15667 *
15668 *
15669 * Notes:
15670 * - Packet length is the sum of all data transmitted on the wire for the given
15671 *   packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
15672 *   bytes.  The octect counts do not include PREAMBLE byte or EXTEND cycles.
15673 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15674 * - Counters will wrap
15675 */
15676typedef union
15677{
15678    uint64_t u64;
15679    struct cvmx_gmxx_txx_stat7_s
15680    {
15681#if __BYTE_ORDER == __BIG_ENDIAN
15682        uint64_t hist7                   : 32;      /**< Number of packets sent with an octet count
15683                                                         of > 1518. */
15684        uint64_t hist6                   : 32;      /**< Number of packets sent with an octet count of
15685                                                         1024 - 1518. */
15686#else
15687        uint64_t hist6                   : 32;
15688        uint64_t hist7                   : 32;
15689#endif
15690    } s;
15691    struct cvmx_gmxx_txx_stat7_s         cn30xx;
15692    struct cvmx_gmxx_txx_stat7_s         cn31xx;
15693    struct cvmx_gmxx_txx_stat7_s         cn38xx;
15694    struct cvmx_gmxx_txx_stat7_s         cn38xxp2;
15695    struct cvmx_gmxx_txx_stat7_s         cn50xx;
15696    struct cvmx_gmxx_txx_stat7_s         cn52xx;
15697    struct cvmx_gmxx_txx_stat7_s         cn52xxp1;
15698    struct cvmx_gmxx_txx_stat7_s         cn56xx;
15699    struct cvmx_gmxx_txx_stat7_s         cn56xxp1;
15700    struct cvmx_gmxx_txx_stat7_s         cn58xx;
15701    struct cvmx_gmxx_txx_stat7_s         cn58xxp1;
15702} cvmx_gmxx_txx_stat7_t;
15703
15704
15705/**
15706 * cvmx_gmx#_tx#_stat8
15707 *
15708 * GMX_TX_STAT8 = GMX_TX_STATS_MCST  / GMX_TX_STATS_BCST
15709 *
15710 *
15711 * Notes:
15712 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15713 * - Counters will wrap
15714 * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the
15715 *   packet.  GMX assumes that the DMAC lies in the first 6 bytes of the packet
15716 *   as per the 802.3 frame definition.  If the system requires additional data
15717 *   before the L2 header, then the MCST and BCST counters may not reflect
15718 *   reality and should be ignored by software.
15719 */
15720typedef union
15721{
15722    uint64_t u64;
15723    struct cvmx_gmxx_txx_stat8_s
15724    {
15725#if __BYTE_ORDER == __BIG_ENDIAN
15726        uint64_t mcst                    : 32;      /**< Number of packets sent to multicast DMAC.
15727                                                         Does not include BCST packets. */
15728        uint64_t bcst                    : 32;      /**< Number of packets sent to broadcast DMAC.
15729                                                         Does not include MCST packets. */
15730#else
15731        uint64_t bcst                    : 32;
15732        uint64_t mcst                    : 32;
15733#endif
15734    } s;
15735    struct cvmx_gmxx_txx_stat8_s         cn30xx;
15736    struct cvmx_gmxx_txx_stat8_s         cn31xx;
15737    struct cvmx_gmxx_txx_stat8_s         cn38xx;
15738    struct cvmx_gmxx_txx_stat8_s         cn38xxp2;
15739    struct cvmx_gmxx_txx_stat8_s         cn50xx;
15740    struct cvmx_gmxx_txx_stat8_s         cn52xx;
15741    struct cvmx_gmxx_txx_stat8_s         cn52xxp1;
15742    struct cvmx_gmxx_txx_stat8_s         cn56xx;
15743    struct cvmx_gmxx_txx_stat8_s         cn56xxp1;
15744    struct cvmx_gmxx_txx_stat8_s         cn58xx;
15745    struct cvmx_gmxx_txx_stat8_s         cn58xxp1;
15746} cvmx_gmxx_txx_stat8_t;
15747
15748
15749/**
15750 * cvmx_gmx#_tx#_stat9
15751 *
15752 * GMX_TX_STAT9 = GMX_TX_STATS_UNDFLW / GMX_TX_STATS_CTL
15753 *
15754 *
15755 * Notes:
15756 * - Cleared either by a write (of any value) or a read when GMX_TX_STATS_CTL[RD_CLR] is set
15757 * - Counters will wrap
15758 */
15759typedef union
15760{
15761    uint64_t u64;
15762    struct cvmx_gmxx_txx_stat9_s
15763    {
15764#if __BYTE_ORDER == __BIG_ENDIAN
15765        uint64_t undflw                  : 32;      /**< Number of underflow packets */
15766        uint64_t ctl                     : 32;      /**< Number of Control packets (PAUSE flow control)
15767                                                         generated by GMX.  It does not include control
15768                                                         packets forwarded or generated by the PP's. */
15769#else
15770        uint64_t ctl                     : 32;
15771        uint64_t undflw                  : 32;
15772#endif
15773    } s;
15774    struct cvmx_gmxx_txx_stat9_s         cn30xx;
15775    struct cvmx_gmxx_txx_stat9_s         cn31xx;
15776    struct cvmx_gmxx_txx_stat9_s         cn38xx;
15777    struct cvmx_gmxx_txx_stat9_s         cn38xxp2;
15778    struct cvmx_gmxx_txx_stat9_s         cn50xx;
15779    struct cvmx_gmxx_txx_stat9_s         cn52xx;
15780    struct cvmx_gmxx_txx_stat9_s         cn52xxp1;
15781    struct cvmx_gmxx_txx_stat9_s         cn56xx;
15782    struct cvmx_gmxx_txx_stat9_s         cn56xxp1;
15783    struct cvmx_gmxx_txx_stat9_s         cn58xx;
15784    struct cvmx_gmxx_txx_stat9_s         cn58xxp1;
15785} cvmx_gmxx_txx_stat9_t;
15786
15787
15788/**
15789 * cvmx_gmx#_tx#_stats_ctl
15790 *
15791 * GMX_TX_STATS_CTL = TX Stats Control register
15792 *
15793 */
15794typedef union
15795{
15796    uint64_t u64;
15797    struct cvmx_gmxx_txx_stats_ctl_s
15798    {
15799#if __BYTE_ORDER == __BIG_ENDIAN
15800        uint64_t reserved_1_63           : 63;
15801        uint64_t rd_clr                  : 1;       /**< Stats registers will clear on reads */
15802#else
15803        uint64_t rd_clr                  : 1;
15804        uint64_t reserved_1_63           : 63;
15805#endif
15806    } s;
15807    struct cvmx_gmxx_txx_stats_ctl_s     cn30xx;
15808    struct cvmx_gmxx_txx_stats_ctl_s     cn31xx;
15809    struct cvmx_gmxx_txx_stats_ctl_s     cn38xx;
15810    struct cvmx_gmxx_txx_stats_ctl_s     cn38xxp2;
15811    struct cvmx_gmxx_txx_stats_ctl_s     cn50xx;
15812    struct cvmx_gmxx_txx_stats_ctl_s     cn52xx;
15813    struct cvmx_gmxx_txx_stats_ctl_s     cn52xxp1;
15814    struct cvmx_gmxx_txx_stats_ctl_s     cn56xx;
15815    struct cvmx_gmxx_txx_stats_ctl_s     cn56xxp1;
15816    struct cvmx_gmxx_txx_stats_ctl_s     cn58xx;
15817    struct cvmx_gmxx_txx_stats_ctl_s     cn58xxp1;
15818} cvmx_gmxx_txx_stats_ctl_t;
15819
15820
15821/**
15822 * cvmx_gmx#_tx#_thresh
15823 *
15824 * Per Port
15825 *
15826 *
15827 * GMX_TX_THRESH = Packet TX Threshold
15828 *
15829 * Notes:
15830 * In XAUI mode, prt0 is used for checking.  Since XAUI mode uses a single TX FIFO and is higher data rate, recommended value is 0x80.
15831 *
15832 */
15833typedef union
15834{
15835    uint64_t u64;
15836    struct cvmx_gmxx_txx_thresh_s
15837    {
15838#if __BYTE_ORDER == __BIG_ENDIAN
15839        uint64_t reserved_9_63           : 55;
15840        uint64_t cnt                     : 9;       /**< Number of 16B ticks to accumulate in the TX FIFO
15841                                                         before sending on the RGMII interface
15842                                                         This register should be large enough to prevent
15843                                                         underflow on the RGMII interface and must never
15844                                                         be set to zero.  This register cannot exceed the
15845                                                         the TX FIFO depth which is...
15846                                                          GMX_TX_PRTS==0,1:  CNT MAX = 0x100
15847                                                          GMX_TX_PRTS==2  :  CNT MAX = 0x080
15848                                                          GMX_TX_PRTS==3,4:  CNT MAX = 0x040 */
15849#else
15850        uint64_t cnt                     : 9;
15851        uint64_t reserved_9_63           : 55;
15852#endif
15853    } s;
15854    struct cvmx_gmxx_txx_thresh_cn30xx
15855    {
15856#if __BYTE_ORDER == __BIG_ENDIAN
15857        uint64_t reserved_7_63           : 57;
15858        uint64_t cnt                     : 7;       /**< Number of 16B ticks to accumulate in the TX FIFO
15859                                                         before sending on the RGMII interface
15860                                                         This register should be large enough to prevent
15861                                                         underflow on the RGMII interface and must never
15862                                                         be set below 4.  This register cannot exceed the
15863                                                         the TX FIFO depth which is 64 16B entries. */
15864#else
15865        uint64_t cnt                     : 7;
15866        uint64_t reserved_7_63           : 57;
15867#endif
15868    } cn30xx;
15869    struct cvmx_gmxx_txx_thresh_cn30xx   cn31xx;
15870    struct cvmx_gmxx_txx_thresh_s        cn38xx;
15871    struct cvmx_gmxx_txx_thresh_s        cn38xxp2;
15872    struct cvmx_gmxx_txx_thresh_cn30xx   cn50xx;
15873    struct cvmx_gmxx_txx_thresh_s        cn52xx;
15874    struct cvmx_gmxx_txx_thresh_s        cn52xxp1;
15875    struct cvmx_gmxx_txx_thresh_s        cn56xx;
15876    struct cvmx_gmxx_txx_thresh_s        cn56xxp1;
15877    struct cvmx_gmxx_txx_thresh_s        cn58xx;
15878    struct cvmx_gmxx_txx_thresh_s        cn58xxp1;
15879} cvmx_gmxx_txx_thresh_t;
15880
15881
15882/**
15883 * cvmx_gmx#_tx_bp
15884 *
15885 * GMX_TX_BP = Packet Interface TX BackPressure Register
15886 *
15887 *
15888 * Notes:
15889 * In XAUI mode, only the lsb (corresponding to port0) of BP is used.
15890 *
15891 */
15892typedef union
15893{
15894    uint64_t u64;
15895    struct cvmx_gmxx_tx_bp_s
15896    {
15897#if __BYTE_ORDER == __BIG_ENDIAN
15898        uint64_t reserved_4_63           : 60;
15899        uint64_t bp                      : 4;       /**< Per port BackPressure status
15900                                                         0=Port is available
15901                                                         1=Port should be back pressured */
15902#else
15903        uint64_t bp                      : 4;
15904        uint64_t reserved_4_63           : 60;
15905#endif
15906    } s;
15907    struct cvmx_gmxx_tx_bp_cn30xx
15908    {
15909#if __BYTE_ORDER == __BIG_ENDIAN
15910        uint64_t reserved_3_63           : 61;
15911        uint64_t bp                      : 3;       /**< Per port BackPressure status
15912                                                         0=Port is available
15913                                                         1=Port should be back pressured */
15914#else
15915        uint64_t bp                      : 3;
15916        uint64_t reserved_3_63           : 61;
15917#endif
15918    } cn30xx;
15919    struct cvmx_gmxx_tx_bp_cn30xx        cn31xx;
15920    struct cvmx_gmxx_tx_bp_s             cn38xx;
15921    struct cvmx_gmxx_tx_bp_s             cn38xxp2;
15922    struct cvmx_gmxx_tx_bp_cn30xx        cn50xx;
15923    struct cvmx_gmxx_tx_bp_s             cn52xx;
15924    struct cvmx_gmxx_tx_bp_s             cn52xxp1;
15925    struct cvmx_gmxx_tx_bp_s             cn56xx;
15926    struct cvmx_gmxx_tx_bp_s             cn56xxp1;
15927    struct cvmx_gmxx_tx_bp_s             cn58xx;
15928    struct cvmx_gmxx_tx_bp_s             cn58xxp1;
15929} cvmx_gmxx_tx_bp_t;
15930
15931
15932/**
15933 * cvmx_gmx#_tx_clk_msk#
15934 *
15935 * GMX_TX_CLK_MSK = GMX Clock Select
15936 *
15937 */
15938typedef union
15939{
15940    uint64_t u64;
15941    struct cvmx_gmxx_tx_clk_mskx_s
15942    {
15943#if __BYTE_ORDER == __BIG_ENDIAN
15944        uint64_t reserved_1_63           : 63;
15945        uint64_t msk                     : 1;       /**< Write this bit to a 1 when switching clks */
15946#else
15947        uint64_t msk                     : 1;
15948        uint64_t reserved_1_63           : 63;
15949#endif
15950    } s;
15951    struct cvmx_gmxx_tx_clk_mskx_s       cn30xx;
15952    struct cvmx_gmxx_tx_clk_mskx_s       cn50xx;
15953} cvmx_gmxx_tx_clk_mskx_t;
15954
15955
15956/**
15957 * cvmx_gmx#_tx_col_attempt
15958 *
15959 * GMX_TX_COL_ATTEMPT = Packet TX collision attempts before dropping frame
15960 *
15961 */
15962typedef union
15963{
15964    uint64_t u64;
15965    struct cvmx_gmxx_tx_col_attempt_s
15966    {
15967#if __BYTE_ORDER == __BIG_ENDIAN
15968        uint64_t reserved_5_63           : 59;
15969        uint64_t limit                   : 5;       /**< Collision Attempts */
15970#else
15971        uint64_t limit                   : 5;
15972        uint64_t reserved_5_63           : 59;
15973#endif
15974    } s;
15975    struct cvmx_gmxx_tx_col_attempt_s    cn30xx;
15976    struct cvmx_gmxx_tx_col_attempt_s    cn31xx;
15977    struct cvmx_gmxx_tx_col_attempt_s    cn38xx;
15978    struct cvmx_gmxx_tx_col_attempt_s    cn38xxp2;
15979    struct cvmx_gmxx_tx_col_attempt_s    cn50xx;
15980    struct cvmx_gmxx_tx_col_attempt_s    cn52xx;
15981    struct cvmx_gmxx_tx_col_attempt_s    cn52xxp1;
15982    struct cvmx_gmxx_tx_col_attempt_s    cn56xx;
15983    struct cvmx_gmxx_tx_col_attempt_s    cn56xxp1;
15984    struct cvmx_gmxx_tx_col_attempt_s    cn58xx;
15985    struct cvmx_gmxx_tx_col_attempt_s    cn58xxp1;
15986} cvmx_gmxx_tx_col_attempt_t;
15987
15988
15989/**
15990 * cvmx_gmx#_tx_corrupt
15991 *
15992 * GMX_TX_CORRUPT = TX - Corrupt TX packets with the ERR bit set
15993 *
15994 *
15995 * Notes:
15996 * Packets sent from PKO with the ERR wire asserted will be corrupted by
15997 * the transmitter if CORRUPT[prt] is set (XAUI uses prt==0).
15998 *
15999 * Corruption means that GMX will send a bad FCS value.  If GMX_TX_APPEND[FCS]
16000 * is clear then no FCS is sent and the GMX cannot corrupt it.  The corrupt FCS
16001 * value is 0xeeeeeeee for SGMII/1000Base-X and 4 bytes of the error
16002 * propagation code in XAUI mode.
16003 */
16004typedef union
16005{
16006    uint64_t u64;
16007    struct cvmx_gmxx_tx_corrupt_s
16008    {
16009#if __BYTE_ORDER == __BIG_ENDIAN
16010        uint64_t reserved_4_63           : 60;
16011        uint64_t corrupt                 : 4;       /**< Per port error propagation
16012                                                         0=Never corrupt packets
16013                                                         1=Corrupt packets with ERR */
16014#else
16015        uint64_t corrupt                 : 4;
16016        uint64_t reserved_4_63           : 60;
16017#endif
16018    } s;
16019    struct cvmx_gmxx_tx_corrupt_cn30xx
16020    {
16021#if __BYTE_ORDER == __BIG_ENDIAN
16022        uint64_t reserved_3_63           : 61;
16023        uint64_t corrupt                 : 3;       /**< Per port error propagation
16024                                                         0=Never corrupt packets
16025                                                         1=Corrupt packets with ERR */
16026#else
16027        uint64_t corrupt                 : 3;
16028        uint64_t reserved_3_63           : 61;
16029#endif
16030    } cn30xx;
16031    struct cvmx_gmxx_tx_corrupt_cn30xx   cn31xx;
16032    struct cvmx_gmxx_tx_corrupt_s        cn38xx;
16033    struct cvmx_gmxx_tx_corrupt_s        cn38xxp2;
16034    struct cvmx_gmxx_tx_corrupt_cn30xx   cn50xx;
16035    struct cvmx_gmxx_tx_corrupt_s        cn52xx;
16036    struct cvmx_gmxx_tx_corrupt_s        cn52xxp1;
16037    struct cvmx_gmxx_tx_corrupt_s        cn56xx;
16038    struct cvmx_gmxx_tx_corrupt_s        cn56xxp1;
16039    struct cvmx_gmxx_tx_corrupt_s        cn58xx;
16040    struct cvmx_gmxx_tx_corrupt_s        cn58xxp1;
16041} cvmx_gmxx_tx_corrupt_t;
16042
16043
16044/**
16045 * cvmx_gmx#_tx_hg2_reg1
16046 *
16047 * Notes:
16048 * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in
16049 * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address of
16050 * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of
16051 * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior.
16052 * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values.
16053 */
16054typedef union
16055{
16056    uint64_t u64;
16057    struct cvmx_gmxx_tx_hg2_reg1_s
16058    {
16059#if __BYTE_ORDER == __BIG_ENDIAN
16060        uint64_t reserved_16_63          : 48;
16061        uint64_t tx_xof                  : 16;      /**< TX HiGig2 message for logical link pause when any
16062                                                         bit value changes
16063                                                          Only write in HiGig2 mode i.e. when
16064                                                          GMX_TX_XAUI_CTL[HG_EN]=1 and
16065                                                          GMX_RX_UDD_SKP[SKIP]=16. */
16066#else
16067        uint64_t tx_xof                  : 16;
16068        uint64_t reserved_16_63          : 48;
16069#endif
16070    } s;
16071    struct cvmx_gmxx_tx_hg2_reg1_s       cn52xx;
16072    struct cvmx_gmxx_tx_hg2_reg1_s       cn52xxp1;
16073    struct cvmx_gmxx_tx_hg2_reg1_s       cn56xx;
16074} cvmx_gmxx_tx_hg2_reg1_t;
16075
16076
16077/**
16078 * cvmx_gmx#_tx_hg2_reg2
16079 *
16080 * Notes:
16081 * The TX_XOF[15:0] field in GMX(0)_TX_HG2_REG1 and the TX_XON[15:0] field in
16082 * GMX(0)_TX_HG2_REG2 register map to the same 16 physical flops. When written with address  of
16083 * GMX(0)_TX_HG2_REG1, it will exhibit write 1 to set behavior and when written with address of
16084 * GMX(0)_TX_HG2_REG2, it will exhibit write 1 to clear behavior.
16085 * For reads, either address will return the $GMX(0)_TX_HG2_REG1 values.
16086 */
16087typedef union
16088{
16089    uint64_t u64;
16090    struct cvmx_gmxx_tx_hg2_reg2_s
16091    {
16092#if __BYTE_ORDER == __BIG_ENDIAN
16093        uint64_t reserved_16_63          : 48;
16094        uint64_t tx_xon                  : 16;      /**< TX HiGig2 message for logical link pause when any
16095                                                         bit value changes
16096                                                          Only write in HiGig2 mode i.e. when
16097                                                          GMX_TX_XAUI_CTL[HG_EN]=1 and
16098                                                          GMX_RX_UDD_SKP[SKIP]=16. */
16099#else
16100        uint64_t tx_xon                  : 16;
16101        uint64_t reserved_16_63          : 48;
16102#endif
16103    } s;
16104    struct cvmx_gmxx_tx_hg2_reg2_s       cn52xx;
16105    struct cvmx_gmxx_tx_hg2_reg2_s       cn52xxp1;
16106    struct cvmx_gmxx_tx_hg2_reg2_s       cn56xx;
16107} cvmx_gmxx_tx_hg2_reg2_t;
16108
16109
16110/**
16111 * cvmx_gmx#_tx_ifg
16112 *
16113 * GMX_TX_IFG = Packet TX Interframe Gap
16114 *
16115 *
16116 * Notes:
16117 * * Programming IFG1 and IFG2.
16118 *
16119 * For 10/100/1000Mbs half-duplex systems that require IEEE 802.3
16120 * compatibility, IFG1 must be in the range of 1-8, IFG2 must be in the range
16121 * of 4-12, and the IFG1+IFG2 sum must be 12.
16122 *
16123 * For 10/100/1000Mbs full-duplex systems that require IEEE 802.3
16124 * compatibility, IFG1 must be in the range of 1-11, IFG2 must be in the range
16125 * of 1-11, and the IFG1+IFG2 sum must be 12.
16126 *
16127 * For XAUI/10Gbs systems that require IEEE 802.3 compatibility, the
16128 * IFG1+IFG2 sum must be 12.  IFG1[1:0] and IFG2[1:0] must be zero.
16129 *
16130 * For all other systems, IFG1 and IFG2 can be any value in the range of
16131 * 1-15.  Allowing for a total possible IFG sum of 2-30.
16132 */
16133typedef union
16134{
16135    uint64_t u64;
16136    struct cvmx_gmxx_tx_ifg_s
16137    {
16138#if __BYTE_ORDER == __BIG_ENDIAN
16139        uint64_t reserved_8_63           : 56;
16140        uint64_t ifg2                    : 4;       /**< 1/3 of the interframe gap timing (in IFG2*8 bits)
16141                                                         If CRS is detected during IFG2, then the
16142                                                         interFrameSpacing timer is not reset and a frame
16143                                                         is transmited once the timer expires. */
16144        uint64_t ifg1                    : 4;       /**< 2/3 of the interframe gap timing (in IFG1*8 bits)
16145                                                         If CRS is detected during IFG1, then the
16146                                                         interFrameSpacing timer is reset and a frame is
16147                                                         not transmited. */
16148#else
16149        uint64_t ifg1                    : 4;
16150        uint64_t ifg2                    : 4;
16151        uint64_t reserved_8_63           : 56;
16152#endif
16153    } s;
16154    struct cvmx_gmxx_tx_ifg_s            cn30xx;
16155    struct cvmx_gmxx_tx_ifg_s            cn31xx;
16156    struct cvmx_gmxx_tx_ifg_s            cn38xx;
16157    struct cvmx_gmxx_tx_ifg_s            cn38xxp2;
16158    struct cvmx_gmxx_tx_ifg_s            cn50xx;
16159    struct cvmx_gmxx_tx_ifg_s            cn52xx;
16160    struct cvmx_gmxx_tx_ifg_s            cn52xxp1;
16161    struct cvmx_gmxx_tx_ifg_s            cn56xx;
16162    struct cvmx_gmxx_tx_ifg_s            cn56xxp1;
16163    struct cvmx_gmxx_tx_ifg_s            cn58xx;
16164    struct cvmx_gmxx_tx_ifg_s            cn58xxp1;
16165} cvmx_gmxx_tx_ifg_t;
16166
16167
16168/**
16169 * cvmx_gmx#_tx_int_en
16170 *
16171 * GMX_TX_INT_EN = Interrupt Enable
16172 *
16173 *
16174 * Notes:
16175 * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used.
16176 *
16177 */
16178typedef union
16179{
16180    uint64_t u64;
16181    struct cvmx_gmxx_tx_int_en_s
16182    {
16183#if __BYTE_ORDER == __BIG_ENDIAN
16184        uint64_t reserved_20_63          : 44;
16185        uint64_t late_col                : 4;       /**< TX Late Collision
16186                                                         (PASS3 only) */
16187        uint64_t xsdef                   : 4;       /**< TX Excessive deferral (RGMII/halfdup mode only)
16188                                                         (PASS2 only) */
16189        uint64_t xscol                   : 4;       /**< TX Excessive collisions (RGMII/halfdup mode only)
16190                                                         (PASS2 only) */
16191        uint64_t reserved_6_7            : 2;
16192        uint64_t undflw                  : 4;       /**< TX Underflow (RGMII mode only) */
16193        uint64_t ncb_nxa                 : 1;       /**< Port address out-of-range from NCB Interface */
16194        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16195#else
16196        uint64_t pko_nxa                 : 1;
16197        uint64_t ncb_nxa                 : 1;
16198        uint64_t undflw                  : 4;
16199        uint64_t reserved_6_7            : 2;
16200        uint64_t xscol                   : 4;
16201        uint64_t xsdef                   : 4;
16202        uint64_t late_col                : 4;
16203        uint64_t reserved_20_63          : 44;
16204#endif
16205    } s;
16206    struct cvmx_gmxx_tx_int_en_cn30xx
16207    {
16208#if __BYTE_ORDER == __BIG_ENDIAN
16209        uint64_t reserved_19_63          : 45;
16210        uint64_t late_col                : 3;       /**< TX Late Collision */
16211        uint64_t reserved_15_15          : 1;
16212        uint64_t xsdef                   : 3;       /**< TX Excessive deferral (RGMII/halfdup mode only) */
16213        uint64_t reserved_11_11          : 1;
16214        uint64_t xscol                   : 3;       /**< TX Excessive collisions (RGMII/halfdup mode only) */
16215        uint64_t reserved_5_7            : 3;
16216        uint64_t undflw                  : 3;       /**< TX Underflow (RGMII mode only) */
16217        uint64_t reserved_1_1            : 1;
16218        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16219#else
16220        uint64_t pko_nxa                 : 1;
16221        uint64_t reserved_1_1            : 1;
16222        uint64_t undflw                  : 3;
16223        uint64_t reserved_5_7            : 3;
16224        uint64_t xscol                   : 3;
16225        uint64_t reserved_11_11          : 1;
16226        uint64_t xsdef                   : 3;
16227        uint64_t reserved_15_15          : 1;
16228        uint64_t late_col                : 3;
16229        uint64_t reserved_19_63          : 45;
16230#endif
16231    } cn30xx;
16232    struct cvmx_gmxx_tx_int_en_cn31xx
16233    {
16234#if __BYTE_ORDER == __BIG_ENDIAN
16235        uint64_t reserved_15_63          : 49;
16236        uint64_t xsdef                   : 3;       /**< TX Excessive deferral (RGMII/halfdup mode only) */
16237        uint64_t reserved_11_11          : 1;
16238        uint64_t xscol                   : 3;       /**< TX Excessive collisions (RGMII/halfdup mode only) */
16239        uint64_t reserved_5_7            : 3;
16240        uint64_t undflw                  : 3;       /**< TX Underflow (RGMII mode only) */
16241        uint64_t reserved_1_1            : 1;
16242        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16243#else
16244        uint64_t pko_nxa                 : 1;
16245        uint64_t reserved_1_1            : 1;
16246        uint64_t undflw                  : 3;
16247        uint64_t reserved_5_7            : 3;
16248        uint64_t xscol                   : 3;
16249        uint64_t reserved_11_11          : 1;
16250        uint64_t xsdef                   : 3;
16251        uint64_t reserved_15_63          : 49;
16252#endif
16253    } cn31xx;
16254    struct cvmx_gmxx_tx_int_en_s         cn38xx;
16255    struct cvmx_gmxx_tx_int_en_cn38xxp2
16256    {
16257#if __BYTE_ORDER == __BIG_ENDIAN
16258        uint64_t reserved_16_63          : 48;
16259        uint64_t xsdef                   : 4;       /**< TX Excessive deferral (RGMII/halfdup mode only)
16260                                                         (PASS2 only) */
16261        uint64_t xscol                   : 4;       /**< TX Excessive collisions (RGMII/halfdup mode only)
16262                                                         (PASS2 only) */
16263        uint64_t reserved_6_7            : 2;
16264        uint64_t undflw                  : 4;       /**< TX Underflow (RGMII mode only) */
16265        uint64_t ncb_nxa                 : 1;       /**< Port address out-of-range from NCB Interface */
16266        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16267#else
16268        uint64_t pko_nxa                 : 1;
16269        uint64_t ncb_nxa                 : 1;
16270        uint64_t undflw                  : 4;
16271        uint64_t reserved_6_7            : 2;
16272        uint64_t xscol                   : 4;
16273        uint64_t xsdef                   : 4;
16274        uint64_t reserved_16_63          : 48;
16275#endif
16276    } cn38xxp2;
16277    struct cvmx_gmxx_tx_int_en_cn30xx    cn50xx;
16278    struct cvmx_gmxx_tx_int_en_cn52xx
16279    {
16280#if __BYTE_ORDER == __BIG_ENDIAN
16281        uint64_t reserved_20_63          : 44;
16282        uint64_t late_col                : 4;       /**< TX Late Collision
16283                                                         (SGMII/1000Base-X half-duplex only) */
16284        uint64_t xsdef                   : 4;       /**< TX Excessive deferral
16285                                                         (SGMII/1000Base-X half-duplex only) */
16286        uint64_t xscol                   : 4;       /**< TX Excessive collisions
16287                                                         (SGMII/1000Base-X half-duplex only) */
16288        uint64_t reserved_6_7            : 2;
16289        uint64_t undflw                  : 4;       /**< TX Underflow */
16290        uint64_t reserved_1_1            : 1;
16291        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16292#else
16293        uint64_t pko_nxa                 : 1;
16294        uint64_t reserved_1_1            : 1;
16295        uint64_t undflw                  : 4;
16296        uint64_t reserved_6_7            : 2;
16297        uint64_t xscol                   : 4;
16298        uint64_t xsdef                   : 4;
16299        uint64_t late_col                : 4;
16300        uint64_t reserved_20_63          : 44;
16301#endif
16302    } cn52xx;
16303    struct cvmx_gmxx_tx_int_en_cn52xx    cn52xxp1;
16304    struct cvmx_gmxx_tx_int_en_cn52xx    cn56xx;
16305    struct cvmx_gmxx_tx_int_en_cn52xx    cn56xxp1;
16306    struct cvmx_gmxx_tx_int_en_s         cn58xx;
16307    struct cvmx_gmxx_tx_int_en_s         cn58xxp1;
16308} cvmx_gmxx_tx_int_en_t;
16309
16310
16311/**
16312 * cvmx_gmx#_tx_int_reg
16313 *
16314 * GMX_TX_INT_REG = Interrupt Register
16315 *
16316 *
16317 * Notes:
16318 * In XAUI mode, only the lsb (corresponding to port0) of UNDFLW is used.
16319 *
16320 */
16321typedef union
16322{
16323    uint64_t u64;
16324    struct cvmx_gmxx_tx_int_reg_s
16325    {
16326#if __BYTE_ORDER == __BIG_ENDIAN
16327        uint64_t reserved_20_63          : 44;
16328        uint64_t late_col                : 4;       /**< TX Late Collision
16329                                                         (PASS3 only) */
16330        uint64_t xsdef                   : 4;       /**< TX Excessive deferral (RGMII/halfdup mode only)
16331                                                         (PASS2 only) */
16332        uint64_t xscol                   : 4;       /**< TX Excessive collisions (RGMII/halfdup mode only)
16333                                                         (PASS2 only) */
16334        uint64_t reserved_6_7            : 2;
16335        uint64_t undflw                  : 4;       /**< TX Underflow (RGMII mode only) */
16336        uint64_t ncb_nxa                 : 1;       /**< Port address out-of-range from NCB Interface */
16337        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16338#else
16339        uint64_t pko_nxa                 : 1;
16340        uint64_t ncb_nxa                 : 1;
16341        uint64_t undflw                  : 4;
16342        uint64_t reserved_6_7            : 2;
16343        uint64_t xscol                   : 4;
16344        uint64_t xsdef                   : 4;
16345        uint64_t late_col                : 4;
16346        uint64_t reserved_20_63          : 44;
16347#endif
16348    } s;
16349    struct cvmx_gmxx_tx_int_reg_cn30xx
16350    {
16351#if __BYTE_ORDER == __BIG_ENDIAN
16352        uint64_t reserved_19_63          : 45;
16353        uint64_t late_col                : 3;       /**< TX Late Collision */
16354        uint64_t reserved_15_15          : 1;
16355        uint64_t xsdef                   : 3;       /**< TX Excessive deferral (RGMII/halfdup mode only) */
16356        uint64_t reserved_11_11          : 1;
16357        uint64_t xscol                   : 3;       /**< TX Excessive collisions (RGMII/halfdup mode only) */
16358        uint64_t reserved_5_7            : 3;
16359        uint64_t undflw                  : 3;       /**< TX Underflow (RGMII mode only) */
16360        uint64_t reserved_1_1            : 1;
16361        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16362#else
16363        uint64_t pko_nxa                 : 1;
16364        uint64_t reserved_1_1            : 1;
16365        uint64_t undflw                  : 3;
16366        uint64_t reserved_5_7            : 3;
16367        uint64_t xscol                   : 3;
16368        uint64_t reserved_11_11          : 1;
16369        uint64_t xsdef                   : 3;
16370        uint64_t reserved_15_15          : 1;
16371        uint64_t late_col                : 3;
16372        uint64_t reserved_19_63          : 45;
16373#endif
16374    } cn30xx;
16375    struct cvmx_gmxx_tx_int_reg_cn31xx
16376    {
16377#if __BYTE_ORDER == __BIG_ENDIAN
16378        uint64_t reserved_15_63          : 49;
16379        uint64_t xsdef                   : 3;       /**< TX Excessive deferral (RGMII/halfdup mode only) */
16380        uint64_t reserved_11_11          : 1;
16381        uint64_t xscol                   : 3;       /**< TX Excessive collisions (RGMII/halfdup mode only) */
16382        uint64_t reserved_5_7            : 3;
16383        uint64_t undflw                  : 3;       /**< TX Underflow (RGMII mode only) */
16384        uint64_t reserved_1_1            : 1;
16385        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16386#else
16387        uint64_t pko_nxa                 : 1;
16388        uint64_t reserved_1_1            : 1;
16389        uint64_t undflw                  : 3;
16390        uint64_t reserved_5_7            : 3;
16391        uint64_t xscol                   : 3;
16392        uint64_t reserved_11_11          : 1;
16393        uint64_t xsdef                   : 3;
16394        uint64_t reserved_15_63          : 49;
16395#endif
16396    } cn31xx;
16397    struct cvmx_gmxx_tx_int_reg_s        cn38xx;
16398    struct cvmx_gmxx_tx_int_reg_cn38xxp2
16399    {
16400#if __BYTE_ORDER == __BIG_ENDIAN
16401        uint64_t reserved_16_63          : 48;
16402        uint64_t xsdef                   : 4;       /**< TX Excessive deferral (RGMII/halfdup mode only)
16403                                                         (PASS2 only) */
16404        uint64_t xscol                   : 4;       /**< TX Excessive collisions (RGMII/halfdup mode only)
16405                                                         (PASS2 only) */
16406        uint64_t reserved_6_7            : 2;
16407        uint64_t undflw                  : 4;       /**< TX Underflow (RGMII mode only) */
16408        uint64_t ncb_nxa                 : 1;       /**< Port address out-of-range from NCB Interface */
16409        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16410#else
16411        uint64_t pko_nxa                 : 1;
16412        uint64_t ncb_nxa                 : 1;
16413        uint64_t undflw                  : 4;
16414        uint64_t reserved_6_7            : 2;
16415        uint64_t xscol                   : 4;
16416        uint64_t xsdef                   : 4;
16417        uint64_t reserved_16_63          : 48;
16418#endif
16419    } cn38xxp2;
16420    struct cvmx_gmxx_tx_int_reg_cn30xx   cn50xx;
16421    struct cvmx_gmxx_tx_int_reg_cn52xx
16422    {
16423#if __BYTE_ORDER == __BIG_ENDIAN
16424        uint64_t reserved_20_63          : 44;
16425        uint64_t late_col                : 4;       /**< TX Late Collision
16426                                                         (SGMII/1000Base-X half-duplex only) */
16427        uint64_t xsdef                   : 4;       /**< TX Excessive deferral
16428                                                         (SGMII/1000Base-X half-duplex only) */
16429        uint64_t xscol                   : 4;       /**< TX Excessive collisions
16430                                                         (SGMII/1000Base-X half-duplex only) */
16431        uint64_t reserved_6_7            : 2;
16432        uint64_t undflw                  : 4;       /**< TX Underflow */
16433        uint64_t reserved_1_1            : 1;
16434        uint64_t pko_nxa                 : 1;       /**< Port address out-of-range from PKO Interface */
16435#else
16436        uint64_t pko_nxa                 : 1;
16437        uint64_t reserved_1_1            : 1;
16438        uint64_t undflw                  : 4;
16439        uint64_t reserved_6_7            : 2;
16440        uint64_t xscol                   : 4;
16441        uint64_t xsdef                   : 4;
16442        uint64_t late_col                : 4;
16443        uint64_t reserved_20_63          : 44;
16444#endif
16445    } cn52xx;
16446    struct cvmx_gmxx_tx_int_reg_cn52xx   cn52xxp1;
16447    struct cvmx_gmxx_tx_int_reg_cn52xx   cn56xx;
16448    struct cvmx_gmxx_tx_int_reg_cn52xx   cn56xxp1;
16449    struct cvmx_gmxx_tx_int_reg_s        cn58xx;
16450    struct cvmx_gmxx_tx_int_reg_s        cn58xxp1;
16451} cvmx_gmxx_tx_int_reg_t;
16452
16453
16454/**
16455 * cvmx_gmx#_tx_jam
16456 *
16457 * GMX_TX_JAM = Packet TX Jam Pattern
16458 *
16459 */
16460typedef union
16461{
16462    uint64_t u64;
16463    struct cvmx_gmxx_tx_jam_s
16464    {
16465#if __BYTE_ORDER == __BIG_ENDIAN
16466        uint64_t reserved_8_63           : 56;
16467        uint64_t jam                     : 8;       /**< Jam pattern */
16468#else
16469        uint64_t jam                     : 8;
16470        uint64_t reserved_8_63           : 56;
16471#endif
16472    } s;
16473    struct cvmx_gmxx_tx_jam_s            cn30xx;
16474    struct cvmx_gmxx_tx_jam_s            cn31xx;
16475    struct cvmx_gmxx_tx_jam_s            cn38xx;
16476    struct cvmx_gmxx_tx_jam_s            cn38xxp2;
16477    struct cvmx_gmxx_tx_jam_s            cn50xx;
16478    struct cvmx_gmxx_tx_jam_s            cn52xx;
16479    struct cvmx_gmxx_tx_jam_s            cn52xxp1;
16480    struct cvmx_gmxx_tx_jam_s            cn56xx;
16481    struct cvmx_gmxx_tx_jam_s            cn56xxp1;
16482    struct cvmx_gmxx_tx_jam_s            cn58xx;
16483    struct cvmx_gmxx_tx_jam_s            cn58xxp1;
16484} cvmx_gmxx_tx_jam_t;
16485
16486
16487/**
16488 * cvmx_gmx#_tx_lfsr
16489 *
16490 * GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff
16491 *
16492 */
16493typedef union
16494{
16495    uint64_t u64;
16496    struct cvmx_gmxx_tx_lfsr_s
16497    {
16498#if __BYTE_ORDER == __BIG_ENDIAN
16499        uint64_t reserved_16_63          : 48;
16500        uint64_t lfsr                    : 16;      /**< The current state of the LFSR used to feed random
16501                                                         numbers to compute truncated binary exponential
16502                                                         backoff. */
16503#else
16504        uint64_t lfsr                    : 16;
16505        uint64_t reserved_16_63          : 48;
16506#endif
16507    } s;
16508    struct cvmx_gmxx_tx_lfsr_s           cn30xx;
16509    struct cvmx_gmxx_tx_lfsr_s           cn31xx;
16510    struct cvmx_gmxx_tx_lfsr_s           cn38xx;
16511    struct cvmx_gmxx_tx_lfsr_s           cn38xxp2;
16512    struct cvmx_gmxx_tx_lfsr_s           cn50xx;
16513    struct cvmx_gmxx_tx_lfsr_s           cn52xx;
16514    struct cvmx_gmxx_tx_lfsr_s           cn52xxp1;
16515    struct cvmx_gmxx_tx_lfsr_s           cn56xx;
16516    struct cvmx_gmxx_tx_lfsr_s           cn56xxp1;
16517    struct cvmx_gmxx_tx_lfsr_s           cn58xx;
16518    struct cvmx_gmxx_tx_lfsr_s           cn58xxp1;
16519} cvmx_gmxx_tx_lfsr_t;
16520
16521
16522/**
16523 * cvmx_gmx#_tx_ovr_bp
16524 *
16525 * GMX_TX_OVR_BP = Packet Interface TX Override BackPressure
16526 *
16527 *
16528 * Notes:
16529 * In XAUI mode, only the lsb (corresponding to port0) of EN, BP, and IGN_FULL are used.
16530 *
16531 * GMX*_TX_OVR_BP[EN<0>] must be set to one and GMX*_TX_OVR_BP[BP<0>] must be cleared to zero
16532 * (to forcibly disable HW-automatic 802.3 pause packet generation) with the HiGig2 Protocol
16533 * when GMX*_HG2_CONTROL[HG2TX_EN]=0. (The HiGig2 protocol is indicated by
16534 * GMX*_TX_XAUI_CTL[HG_EN]=1 and GMX*_RX0_UDD_SKP[LEN]=16.) HW can only auto-generate backpressure
16535 * through HiGig2 messages (optionally, when GMX*_HG2_CONTROL[HG2TX_EN]=1) with the HiGig2
16536 * protocol.
16537 */
16538typedef union
16539{
16540    uint64_t u64;
16541    struct cvmx_gmxx_tx_ovr_bp_s
16542    {
16543#if __BYTE_ORDER == __BIG_ENDIAN
16544        uint64_t reserved_48_63          : 16;
16545        uint64_t tx_prt_bp               : 16;      /**< Per port BP sent to PKO
16546                                                         0=Port is available
16547                                                         1=Port should be back pressured */
16548        uint64_t reserved_12_31          : 20;
16549        uint64_t en                      : 4;       /**< Per port Enable back pressure override */
16550        uint64_t bp                      : 4;       /**< Per port BackPressure status to use
16551                                                         0=Port is available
16552                                                         1=Port should be back pressured */
16553        uint64_t ign_full                : 4;       /**< Ignore the RX FIFO full when computing BP */
16554#else
16555        uint64_t ign_full                : 4;
16556        uint64_t bp                      : 4;
16557        uint64_t en                      : 4;
16558        uint64_t reserved_12_31          : 20;
16559        uint64_t tx_prt_bp               : 16;
16560        uint64_t reserved_48_63          : 16;
16561#endif
16562    } s;
16563    struct cvmx_gmxx_tx_ovr_bp_cn30xx
16564    {
16565#if __BYTE_ORDER == __BIG_ENDIAN
16566        uint64_t reserved_11_63          : 53;
16567        uint64_t en                      : 3;       /**< Per port Enable back pressure override */
16568        uint64_t reserved_7_7            : 1;
16569        uint64_t bp                      : 3;       /**< Per port BackPressure status to use
16570                                                         0=Port is available
16571                                                         1=Port should be back pressured */
16572        uint64_t reserved_3_3            : 1;
16573        uint64_t ign_full                : 3;       /**< Ignore the RX FIFO full when computing BP */
16574#else
16575        uint64_t ign_full                : 3;
16576        uint64_t reserved_3_3            : 1;
16577        uint64_t bp                      : 3;
16578        uint64_t reserved_7_7            : 1;
16579        uint64_t en                      : 3;
16580        uint64_t reserved_11_63          : 53;
16581#endif
16582    } cn30xx;
16583    struct cvmx_gmxx_tx_ovr_bp_cn30xx    cn31xx;
16584    struct cvmx_gmxx_tx_ovr_bp_cn38xx
16585    {
16586#if __BYTE_ORDER == __BIG_ENDIAN
16587        uint64_t reserved_12_63          : 52;
16588        uint64_t en                      : 4;       /**< Per port Enable back pressure override */
16589        uint64_t bp                      : 4;       /**< Per port BackPressure status to use
16590                                                         0=Port is available
16591                                                         1=Port should be back pressured */
16592        uint64_t ign_full                : 4;       /**< Ignore the RX FIFO full when computing BP */
16593#else
16594        uint64_t ign_full                : 4;
16595        uint64_t bp                      : 4;
16596        uint64_t en                      : 4;
16597        uint64_t reserved_12_63          : 52;
16598#endif
16599    } cn38xx;
16600    struct cvmx_gmxx_tx_ovr_bp_cn38xx    cn38xxp2;
16601    struct cvmx_gmxx_tx_ovr_bp_cn30xx    cn50xx;
16602    struct cvmx_gmxx_tx_ovr_bp_s         cn52xx;
16603    struct cvmx_gmxx_tx_ovr_bp_s         cn52xxp1;
16604    struct cvmx_gmxx_tx_ovr_bp_s         cn56xx;
16605    struct cvmx_gmxx_tx_ovr_bp_s         cn56xxp1;
16606    struct cvmx_gmxx_tx_ovr_bp_cn38xx    cn58xx;
16607    struct cvmx_gmxx_tx_ovr_bp_cn38xx    cn58xxp1;
16608} cvmx_gmxx_tx_ovr_bp_t;
16609
16610
16611/**
16612 * cvmx_gmx#_tx_pause_pkt_dmac
16613 *
16614 * GMX_TX_PAUSE_PKT_DMAC = Packet TX Pause Packet DMAC field
16615 *
16616 */
16617typedef union
16618{
16619    uint64_t u64;
16620    struct cvmx_gmxx_tx_pause_pkt_dmac_s
16621    {
16622#if __BYTE_ORDER == __BIG_ENDIAN
16623        uint64_t reserved_48_63          : 16;
16624        uint64_t dmac                    : 48;      /**< The DMAC field placed is outbnd pause pkts */
16625#else
16626        uint64_t dmac                    : 48;
16627        uint64_t reserved_48_63          : 16;
16628#endif
16629    } s;
16630    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn30xx;
16631    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn31xx;
16632    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xx;
16633    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn38xxp2;
16634    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn50xx;
16635    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xx;
16636    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn52xxp1;
16637    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xx;
16638    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn56xxp1;
16639    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xx;
16640    struct cvmx_gmxx_tx_pause_pkt_dmac_s cn58xxp1;
16641} cvmx_gmxx_tx_pause_pkt_dmac_t;
16642
16643
16644/**
16645 * cvmx_gmx#_tx_pause_pkt_type
16646 *
16647 * GMX_TX_PAUSE_PKT_TYPE = Packet Interface TX Pause Packet TYPE field
16648 *
16649 */
16650typedef union
16651{
16652    uint64_t u64;
16653    struct cvmx_gmxx_tx_pause_pkt_type_s
16654    {
16655#if __BYTE_ORDER == __BIG_ENDIAN
16656        uint64_t reserved_16_63          : 48;
16657        uint64_t type                    : 16;      /**< The TYPE field placed is outbnd pause pkts */
16658#else
16659        uint64_t type                    : 16;
16660        uint64_t reserved_16_63          : 48;
16661#endif
16662    } s;
16663    struct cvmx_gmxx_tx_pause_pkt_type_s cn30xx;
16664    struct cvmx_gmxx_tx_pause_pkt_type_s cn31xx;
16665    struct cvmx_gmxx_tx_pause_pkt_type_s cn38xx;
16666    struct cvmx_gmxx_tx_pause_pkt_type_s cn38xxp2;
16667    struct cvmx_gmxx_tx_pause_pkt_type_s cn50xx;
16668    struct cvmx_gmxx_tx_pause_pkt_type_s cn52xx;
16669    struct cvmx_gmxx_tx_pause_pkt_type_s cn52xxp1;
16670    struct cvmx_gmxx_tx_pause_pkt_type_s cn56xx;
16671    struct cvmx_gmxx_tx_pause_pkt_type_s cn56xxp1;
16672    struct cvmx_gmxx_tx_pause_pkt_type_s cn58xx;
16673    struct cvmx_gmxx_tx_pause_pkt_type_s cn58xxp1;
16674} cvmx_gmxx_tx_pause_pkt_type_t;
16675
16676
16677/**
16678 * cvmx_gmx#_tx_prts
16679 *
16680 * Common
16681 *
16682 *
16683 * GMX_TX_PRTS = TX Ports
16684 *
16685 * Notes:
16686 * * The value programmed for PRTS is the number of the highest architected
16687 * port number on the interface, plus 1.  For example, if port 2 is the
16688 * highest architected port, then the programmed value should be 3 since
16689 * there are 3 ports in the system - 0, 1, and 2.
16690 */
16691typedef union
16692{
16693    uint64_t u64;
16694    struct cvmx_gmxx_tx_prts_s
16695    {
16696#if __BYTE_ORDER == __BIG_ENDIAN
16697        uint64_t reserved_5_63           : 59;
16698        uint64_t prts                    : 5;       /**< Number of ports allowed on the interface */
16699#else
16700        uint64_t prts                    : 5;
16701        uint64_t reserved_5_63           : 59;
16702#endif
16703    } s;
16704    struct cvmx_gmxx_tx_prts_s           cn30xx;
16705    struct cvmx_gmxx_tx_prts_s           cn31xx;
16706    struct cvmx_gmxx_tx_prts_s           cn38xx;
16707    struct cvmx_gmxx_tx_prts_s           cn38xxp2;
16708    struct cvmx_gmxx_tx_prts_s           cn50xx;
16709    struct cvmx_gmxx_tx_prts_s           cn52xx;
16710    struct cvmx_gmxx_tx_prts_s           cn52xxp1;
16711    struct cvmx_gmxx_tx_prts_s           cn56xx;
16712    struct cvmx_gmxx_tx_prts_s           cn56xxp1;
16713    struct cvmx_gmxx_tx_prts_s           cn58xx;
16714    struct cvmx_gmxx_tx_prts_s           cn58xxp1;
16715} cvmx_gmxx_tx_prts_t;
16716
16717
16718/**
16719 * cvmx_gmx#_tx_spi_ctl
16720 *
16721 * GMX_TX_SPI_CTL = Spi4 TX ModesSpi4
16722 *
16723 */
16724typedef union
16725{
16726    uint64_t u64;
16727    struct cvmx_gmxx_tx_spi_ctl_s
16728    {
16729#if __BYTE_ORDER == __BIG_ENDIAN
16730        uint64_t reserved_2_63           : 62;
16731        uint64_t tpa_clr                 : 1;       /**< TPA Clear Mode
16732                                                         Clear credit counter when satisifed status */
16733        uint64_t cont_pkt                : 1;       /**< Contiguous Packet Mode
16734                                                         Finish one packet before switching to another
16735                                                         Cannot be set in Spi4 pass-through mode */
16736#else
16737        uint64_t cont_pkt                : 1;
16738        uint64_t tpa_clr                 : 1;
16739        uint64_t reserved_2_63           : 62;
16740#endif
16741    } s;
16742    struct cvmx_gmxx_tx_spi_ctl_s        cn38xx;
16743    struct cvmx_gmxx_tx_spi_ctl_s        cn38xxp2;
16744    struct cvmx_gmxx_tx_spi_ctl_s        cn58xx;
16745    struct cvmx_gmxx_tx_spi_ctl_s        cn58xxp1;
16746} cvmx_gmxx_tx_spi_ctl_t;
16747
16748
16749/**
16750 * cvmx_gmx#_tx_spi_drain
16751 *
16752 * GMX_TX_SPI_DRAIN = Drain out Spi TX FIFO
16753 *
16754 */
16755typedef union
16756{
16757    uint64_t u64;
16758    struct cvmx_gmxx_tx_spi_drain_s
16759    {
16760#if __BYTE_ORDER == __BIG_ENDIAN
16761        uint64_t reserved_16_63          : 48;
16762        uint64_t drain                   : 16;      /**< Per port drain control
16763                                                         0=Normal operation
16764                                                         1=GMX TX will be popped, but no valid data will
16765                                                           be sent to SPX.  Credits are correctly returned
16766                                                           to PKO.  STX_IGN_CAL should be set to ignore
16767                                                           TPA and not stall due to back-pressure.
16768                                                         (PASS3 only) */
16769#else
16770        uint64_t drain                   : 16;
16771        uint64_t reserved_16_63          : 48;
16772#endif
16773    } s;
16774    struct cvmx_gmxx_tx_spi_drain_s      cn38xx;
16775    struct cvmx_gmxx_tx_spi_drain_s      cn58xx;
16776    struct cvmx_gmxx_tx_spi_drain_s      cn58xxp1;
16777} cvmx_gmxx_tx_spi_drain_t;
16778
16779
16780/**
16781 * cvmx_gmx#_tx_spi_max
16782 *
16783 * GMX_TX_SPI_MAX = RGMII TX Spi4 MAX
16784 *
16785 */
16786typedef union
16787{
16788    uint64_t u64;
16789    struct cvmx_gmxx_tx_spi_max_s
16790    {
16791#if __BYTE_ORDER == __BIG_ENDIAN
16792        uint64_t reserved_23_63          : 41;
16793        uint64_t slice                   : 7;       /**< Number of 16B blocks to transmit in a burst before
16794                                                         switching to the next port. SLICE does not always
16795                                                         limit the burst length transmitted by OCTEON.
16796                                                         Depending on the traffic pattern and
16797                                                         GMX_TX_SPI_ROUND programming, the next port could
16798                                                         be the same as the current port. In this case,
16799                                                         OCTEON may merge multiple sub-SLICE bursts into
16800                                                         one contiguous burst that is longer than SLICE
16801                                                         (as long as the burst does not cross a packet
16802                                                         boundary).
16803                                                         SLICE must be programmed to be >=
16804                                                           GMX_TX_SPI_THRESH[THRESH]
16805                                                         If SLICE==0, then the transmitter will tend to
16806                                                         send the complete packet. The port will only
16807                                                         switch if credits are exhausted or PKO cannot
16808                                                         keep up.
16809                                                         (90nm ONLY) */
16810        uint64_t max2                    : 8;       /**< MAX2 (per Spi4.2 spec) */
16811        uint64_t max1                    : 8;       /**< MAX1 (per Spi4.2 spec)
16812                                                         MAX1 >= GMX_TX_SPI_THRESH[THRESH] */
16813#else
16814        uint64_t max1                    : 8;
16815        uint64_t max2                    : 8;
16816        uint64_t slice                   : 7;
16817        uint64_t reserved_23_63          : 41;
16818#endif
16819    } s;
16820    struct cvmx_gmxx_tx_spi_max_cn38xx
16821    {
16822#if __BYTE_ORDER == __BIG_ENDIAN
16823        uint64_t reserved_16_63          : 48;
16824        uint64_t max2                    : 8;       /**< MAX2 (per Spi4.2 spec) */
16825        uint64_t max1                    : 8;       /**< MAX1 (per Spi4.2 spec)
16826                                                         MAX1 >= GMX_TX_SPI_THRESH[THRESH] */
16827#else
16828        uint64_t max1                    : 8;
16829        uint64_t max2                    : 8;
16830        uint64_t reserved_16_63          : 48;
16831#endif
16832    } cn38xx;
16833    struct cvmx_gmxx_tx_spi_max_cn38xx   cn38xxp2;
16834    struct cvmx_gmxx_tx_spi_max_s        cn58xx;
16835    struct cvmx_gmxx_tx_spi_max_s        cn58xxp1;
16836} cvmx_gmxx_tx_spi_max_t;
16837
16838
16839/**
16840 * cvmx_gmx#_tx_spi_round#
16841 *
16842 * GMX_TX_SPI_ROUND = Controls SPI4 TX Arbitration
16843 *
16844 */
16845typedef union
16846{
16847    uint64_t u64;
16848    struct cvmx_gmxx_tx_spi_roundx_s
16849    {
16850#if __BYTE_ORDER == __BIG_ENDIAN
16851        uint64_t reserved_16_63          : 48;
16852        uint64_t round                   : 16;      /**< Which Spi ports participate in each arbitration
16853                                                          round.  Each bit corresponds to a spi port
16854                                                         - 0: this port will arb in this round
16855                                                         - 1: this port will not arb in this round
16856                                                          (90nm ONLY) */
16857#else
16858        uint64_t round                   : 16;
16859        uint64_t reserved_16_63          : 48;
16860#endif
16861    } s;
16862    struct cvmx_gmxx_tx_spi_roundx_s     cn58xx;
16863    struct cvmx_gmxx_tx_spi_roundx_s     cn58xxp1;
16864} cvmx_gmxx_tx_spi_roundx_t;
16865
16866
16867/**
16868 * cvmx_gmx#_tx_spi_thresh
16869 *
16870 * GMX_TX_SPI_THRESH = RGMII TX Spi4 Transmit Threshold
16871 *
16872 *
16873 * Notes:
16874 * Note: zero will map to 0x20
16875 *
16876 * This will normally creates Spi4 traffic bursts at least THRESH in length.
16877 * If dclk > eclk, then this rule may not always hold and Octeon may split
16878 * transfers into smaller bursts - some of which could be as short as 16B.
16879 * Octeon will never violate the Spi4.2 spec and send a non-EOP burst that is
16880 * not a multiple of 16B.
16881 */
16882typedef union
16883{
16884    uint64_t u64;
16885    struct cvmx_gmxx_tx_spi_thresh_s
16886    {
16887#if __BYTE_ORDER == __BIG_ENDIAN
16888        uint64_t reserved_6_63           : 58;
16889        uint64_t thresh                  : 6;       /**< Transmit threshold in 16B blocks - cannot be zero
16890                                                         THRESH <= TX_FIFO size   (in non-passthrough mode)
16891                                                         THRESH <= TX_FIFO size-2 (in passthrough mode)
16892                                                         THRESH <= GMX_TX_SPI_MAX[MAX1]
16893                                                         THRESH <= GMX_TX_SPI_MAX[MAX2], if not then is it
16894                                                          possible for Octeon to send a Spi4 data burst of
16895                                                          MAX2 <= burst <= THRESH 16B ticks
16896                                                         GMX_TX_SPI_MAX[SLICE] must be programmed to be >=
16897                                                           THRESH */
16898#else
16899        uint64_t thresh                  : 6;
16900        uint64_t reserved_6_63           : 58;
16901#endif
16902    } s;
16903    struct cvmx_gmxx_tx_spi_thresh_s     cn38xx;
16904    struct cvmx_gmxx_tx_spi_thresh_s     cn38xxp2;
16905    struct cvmx_gmxx_tx_spi_thresh_s     cn58xx;
16906    struct cvmx_gmxx_tx_spi_thresh_s     cn58xxp1;
16907} cvmx_gmxx_tx_spi_thresh_t;
16908
16909
16910/**
16911 * cvmx_gmx#_tx_xaui_ctl
16912 */
16913typedef union
16914{
16915    uint64_t u64;
16916    struct cvmx_gmxx_tx_xaui_ctl_s
16917    {
16918#if __BYTE_ORDER == __BIG_ENDIAN
16919        uint64_t reserved_11_63          : 53;
16920        uint64_t hg_pause_hgi            : 2;       /**< HGI Field for HW generated HiGig pause packets
16921                                                         (XAUI mode only) */
16922        uint64_t hg_en                   : 1;       /**< Enable HiGig Mode
16923                                                         When HG_EN is set, the following must be set:
16924                                                          GMX_RX_FRM_CTL[PRE_CHK] == 0
16925                                                          GMX_RX_UDD_SKP[FCSSEL] == 0
16926                                                          GMX_RX_UDD_SKP[SKIP] == 12 or 16
16927                                                          GMX_TX_APPEND[PREAMBLE] == 0
16928                                                           (depending on the HiGig header size)
16929                                                         (XAUI mode only) */
16930        uint64_t reserved_7_7            : 1;
16931        uint64_t ls_byp                  : 1;       /**< Bypass the link status as determined by the XGMII
16932                                                         receiver and set the link status of the
16933                                                         transmitter to LS.
16934                                                         (XAUI mode only) */
16935        uint64_t ls                      : 2;       /**< Link Status
16936                                                         0 = Link Ok
16937                                                             Link runs normally. RS passes MAC data to PCS
16938                                                         1 = Local Fault
16939                                                             RS layer sends continuous remote fault
16940                                                              sequences.
16941                                                         2 = Remote Fault
16942                                                             RS layer sends continuous idles sequences
16943                                                         (XAUI mode only) */
16944        uint64_t reserved_2_3            : 2;
16945        uint64_t uni_en                  : 1;       /**< Enable Unidirectional Mode (IEEE Clause 66)
16946                                                         (XAUI mode only) */
16947        uint64_t dic_en                  : 1;       /**< Enable the deficit idle counter for IFG averaging
16948                                                         (XAUI mode only) */
16949#else
16950        uint64_t dic_en                  : 1;
16951        uint64_t uni_en                  : 1;
16952        uint64_t reserved_2_3            : 2;
16953        uint64_t ls                      : 2;
16954        uint64_t ls_byp                  : 1;
16955        uint64_t reserved_7_7            : 1;
16956        uint64_t hg_en                   : 1;
16957        uint64_t hg_pause_hgi            : 2;
16958        uint64_t reserved_11_63          : 53;
16959#endif
16960    } s;
16961    struct cvmx_gmxx_tx_xaui_ctl_s       cn52xx;
16962    struct cvmx_gmxx_tx_xaui_ctl_s       cn52xxp1;
16963    struct cvmx_gmxx_tx_xaui_ctl_s       cn56xx;
16964    struct cvmx_gmxx_tx_xaui_ctl_s       cn56xxp1;
16965} cvmx_gmxx_tx_xaui_ctl_t;
16966
16967
16968/**
16969 * cvmx_gmx#_xaui_ext_loopback
16970 */
16971typedef union
16972{
16973    uint64_t u64;
16974    struct cvmx_gmxx_xaui_ext_loopback_s
16975    {
16976#if __BYTE_ORDER == __BIG_ENDIAN
16977        uint64_t reserved_5_63           : 59;
16978        uint64_t en                      : 1;       /**< Loopback enable
16979                                                         Puts the packet interface in external loopback
16980                                                         mode on the XAUI bus in which the RX lines are
16981                                                         reflected on the TX lines.
16982                                                         (XAUI mode only) */
16983        uint64_t thresh                  : 4;       /**< Threshhold on the TX FIFO
16984                                                         SW must only write the typical value.  Any other
16985                                                         value will cause loopback mode not to function
16986                                                         correctly.
16987                                                         (XAUI mode only) */
16988#else
16989        uint64_t thresh                  : 4;
16990        uint64_t en                      : 1;
16991        uint64_t reserved_5_63           : 59;
16992#endif
16993    } s;
16994    struct cvmx_gmxx_xaui_ext_loopback_s cn52xx;
16995    struct cvmx_gmxx_xaui_ext_loopback_s cn52xxp1;
16996    struct cvmx_gmxx_xaui_ext_loopback_s cn56xx;
16997    struct cvmx_gmxx_xaui_ext_loopback_s cn56xxp1;
16998} cvmx_gmxx_xaui_ext_loopback_t;
16999
17000
17001/**
17002 * cvmx_gpio_bit_cfg#
17003 */
17004typedef union
17005{
17006    uint64_t u64;
17007    struct cvmx_gpio_bit_cfgx_s
17008    {
17009#if __BYTE_ORDER == __BIG_ENDIAN
17010        uint64_t reserved_15_63          : 49;
17011        uint64_t clk_gen                 : 1;       /**< When TX_OE is set, GPIO pin becomes a clock */
17012        uint64_t clk_sel                 : 2;       /**< Selects which of the 4 GPIO clock generators */
17013        uint64_t fil_sel                 : 4;       /**< Global counter bit-select (controls sample rate) */
17014        uint64_t fil_cnt                 : 4;       /**< Number of consecutive samples to change state */
17015        uint64_t int_type                : 1;       /**< Type of interrupt
17016                                                         0 = level (default)
17017                                                         1 = rising edge */
17018        uint64_t int_en                  : 1;       /**< Bit mask to indicate which bits to raise interrupt */
17019        uint64_t rx_xor                  : 1;       /**< Invert the GPIO pin */
17020        uint64_t tx_oe                   : 1;       /**< Drive the GPIO pin as an output pin */
17021#else
17022        uint64_t tx_oe                   : 1;
17023        uint64_t rx_xor                  : 1;
17024        uint64_t int_en                  : 1;
17025        uint64_t int_type                : 1;
17026        uint64_t fil_cnt                 : 4;
17027        uint64_t fil_sel                 : 4;
17028        uint64_t clk_sel                 : 2;
17029        uint64_t clk_gen                 : 1;
17030        uint64_t reserved_15_63          : 49;
17031#endif
17032    } s;
17033    struct cvmx_gpio_bit_cfgx_cn30xx
17034    {
17035#if __BYTE_ORDER == __BIG_ENDIAN
17036        uint64_t reserved_12_63          : 52;
17037        uint64_t fil_sel                 : 4;       /**< Global counter bit-select (controls sample rate) */
17038        uint64_t fil_cnt                 : 4;       /**< Number of consecutive samples to change state */
17039        uint64_t int_type                : 1;       /**< Type of interrupt
17040                                                         0 = level (default)
17041                                                         1 = rising edge */
17042        uint64_t int_en                  : 1;       /**< Bit mask to indicate which bits to raise interrupt */
17043        uint64_t rx_xor                  : 1;       /**< Invert the GPIO pin */
17044        uint64_t tx_oe                   : 1;       /**< Drive the GPIO pin as an output pin */
17045#else
17046        uint64_t tx_oe                   : 1;
17047        uint64_t rx_xor                  : 1;
17048        uint64_t int_en                  : 1;
17049        uint64_t int_type                : 1;
17050        uint64_t fil_cnt                 : 4;
17051        uint64_t fil_sel                 : 4;
17052        uint64_t reserved_12_63          : 52;
17053#endif
17054    } cn30xx;
17055    struct cvmx_gpio_bit_cfgx_cn30xx     cn31xx;
17056    struct cvmx_gpio_bit_cfgx_cn30xx     cn38xx;
17057    struct cvmx_gpio_bit_cfgx_cn30xx     cn38xxp2;
17058    struct cvmx_gpio_bit_cfgx_cn30xx     cn50xx;
17059    struct cvmx_gpio_bit_cfgx_s          cn52xx;
17060    struct cvmx_gpio_bit_cfgx_s          cn52xxp1;
17061    struct cvmx_gpio_bit_cfgx_s          cn56xx;
17062    struct cvmx_gpio_bit_cfgx_s          cn56xxp1;
17063    struct cvmx_gpio_bit_cfgx_cn30xx     cn58xx;
17064    struct cvmx_gpio_bit_cfgx_cn30xx     cn58xxp1;
17065} cvmx_gpio_bit_cfgx_t;
17066
17067
17068/**
17069 * cvmx_gpio_boot_ena
17070 */
17071typedef union
17072{
17073    uint64_t u64;
17074    struct cvmx_gpio_boot_ena_s
17075    {
17076#if __BYTE_ORDER == __BIG_ENDIAN
17077        uint64_t reserved_12_63          : 52;
17078        uint64_t boot_ena                : 4;       /**< Drive boot bus chip enables [7:4] on gpio [11:8] */
17079        uint64_t reserved_0_7            : 8;
17080#else
17081        uint64_t reserved_0_7            : 8;
17082        uint64_t boot_ena                : 4;
17083        uint64_t reserved_12_63          : 52;
17084#endif
17085    } s;
17086    struct cvmx_gpio_boot_ena_s          cn30xx;
17087    struct cvmx_gpio_boot_ena_s          cn31xx;
17088    struct cvmx_gpio_boot_ena_s          cn50xx;
17089} cvmx_gpio_boot_ena_t;
17090
17091
17092/**
17093 * cvmx_gpio_clk_gen#
17094 */
17095typedef union
17096{
17097    uint64_t u64;
17098    struct cvmx_gpio_clk_genx_s
17099    {
17100#if __BYTE_ORDER == __BIG_ENDIAN
17101        uint64_t reserved_32_63          : 32;
17102        uint64_t n                       : 32;      /**< Determines the frequency of the GPIO clk generator
17103                                                         NOTE: Fgpio_clk = Feclk * N / 2^32
17104                                                               N = (Fgpio_clk / Feclk) * 2^32
17105                                                         NOTE: writing N == 0 stops the clock generator
17106                                                         N  should be <= 2^31-1. */
17107#else
17108        uint64_t n                       : 32;
17109        uint64_t reserved_32_63          : 32;
17110#endif
17111    } s;
17112    struct cvmx_gpio_clk_genx_s          cn52xx;
17113    struct cvmx_gpio_clk_genx_s          cn52xxp1;
17114    struct cvmx_gpio_clk_genx_s          cn56xx;
17115    struct cvmx_gpio_clk_genx_s          cn56xxp1;
17116} cvmx_gpio_clk_genx_t;
17117
17118
17119/**
17120 * cvmx_gpio_dbg_ena
17121 */
17122typedef union
17123{
17124    uint64_t u64;
17125    struct cvmx_gpio_dbg_ena_s
17126    {
17127#if __BYTE_ORDER == __BIG_ENDIAN
17128        uint64_t reserved_21_63          : 43;
17129        uint64_t dbg_ena                 : 21;      /**< Enable the debug port to be driven on the gpio */
17130#else
17131        uint64_t dbg_ena                 : 21;
17132        uint64_t reserved_21_63          : 43;
17133#endif
17134    } s;
17135    struct cvmx_gpio_dbg_ena_s           cn30xx;
17136    struct cvmx_gpio_dbg_ena_s           cn31xx;
17137    struct cvmx_gpio_dbg_ena_s           cn50xx;
17138} cvmx_gpio_dbg_ena_t;
17139
17140
17141/**
17142 * cvmx_gpio_int_clr
17143 */
17144typedef union
17145{
17146    uint64_t u64;
17147    struct cvmx_gpio_int_clr_s
17148    {
17149#if __BYTE_ORDER == __BIG_ENDIAN
17150        uint64_t reserved_16_63          : 48;
17151        uint64_t type                    : 16;      /**< Clear the interrupt rising edge detector */
17152#else
17153        uint64_t type                    : 16;
17154        uint64_t reserved_16_63          : 48;
17155#endif
17156    } s;
17157    struct cvmx_gpio_int_clr_s           cn30xx;
17158    struct cvmx_gpio_int_clr_s           cn31xx;
17159    struct cvmx_gpio_int_clr_s           cn38xx;
17160    struct cvmx_gpio_int_clr_s           cn38xxp2;
17161    struct cvmx_gpio_int_clr_s           cn50xx;
17162    struct cvmx_gpio_int_clr_s           cn52xx;
17163    struct cvmx_gpio_int_clr_s           cn52xxp1;
17164    struct cvmx_gpio_int_clr_s           cn56xx;
17165    struct cvmx_gpio_int_clr_s           cn56xxp1;
17166    struct cvmx_gpio_int_clr_s           cn58xx;
17167    struct cvmx_gpio_int_clr_s           cn58xxp1;
17168} cvmx_gpio_int_clr_t;
17169
17170
17171/**
17172 * cvmx_gpio_rx_dat
17173 */
17174typedef union
17175{
17176    uint64_t u64;
17177    struct cvmx_gpio_rx_dat_s
17178    {
17179#if __BYTE_ORDER == __BIG_ENDIAN
17180        uint64_t reserved_24_63          : 40;
17181        uint64_t dat                     : 24;      /**< GPIO Read Data */
17182#else
17183        uint64_t dat                     : 24;
17184        uint64_t reserved_24_63          : 40;
17185#endif
17186    } s;
17187    struct cvmx_gpio_rx_dat_s            cn30xx;
17188    struct cvmx_gpio_rx_dat_s            cn31xx;
17189    struct cvmx_gpio_rx_dat_cn38xx
17190    {
17191#if __BYTE_ORDER == __BIG_ENDIAN
17192        uint64_t reserved_16_63          : 48;
17193        uint64_t dat                     : 16;      /**< GPIO Read Data */
17194#else
17195        uint64_t dat                     : 16;
17196        uint64_t reserved_16_63          : 48;
17197#endif
17198    } cn38xx;
17199    struct cvmx_gpio_rx_dat_cn38xx       cn38xxp2;
17200    struct cvmx_gpio_rx_dat_s            cn50xx;
17201    struct cvmx_gpio_rx_dat_cn38xx       cn52xx;
17202    struct cvmx_gpio_rx_dat_cn38xx       cn52xxp1;
17203    struct cvmx_gpio_rx_dat_cn38xx       cn56xx;
17204    struct cvmx_gpio_rx_dat_cn38xx       cn56xxp1;
17205    struct cvmx_gpio_rx_dat_cn38xx       cn58xx;
17206    struct cvmx_gpio_rx_dat_cn38xx       cn58xxp1;
17207} cvmx_gpio_rx_dat_t;
17208
17209
17210/**
17211 * cvmx_gpio_tx_clr
17212 */
17213typedef union
17214{
17215    uint64_t u64;
17216    struct cvmx_gpio_tx_clr_s
17217    {
17218#if __BYTE_ORDER == __BIG_ENDIAN
17219        uint64_t reserved_24_63          : 40;
17220        uint64_t clr                     : 24;      /**< Bit mask to indicate which bits to drive to '0'. */
17221#else
17222        uint64_t clr                     : 24;
17223        uint64_t reserved_24_63          : 40;
17224#endif
17225    } s;
17226    struct cvmx_gpio_tx_clr_s            cn30xx;
17227    struct cvmx_gpio_tx_clr_s            cn31xx;
17228    struct cvmx_gpio_tx_clr_cn38xx
17229    {
17230#if __BYTE_ORDER == __BIG_ENDIAN
17231        uint64_t reserved_16_63          : 48;
17232        uint64_t clr                     : 16;      /**< Bit mask to indicate which bits to drive to '0'. */
17233#else
17234        uint64_t clr                     : 16;
17235        uint64_t reserved_16_63          : 48;
17236#endif
17237    } cn38xx;
17238    struct cvmx_gpio_tx_clr_cn38xx       cn38xxp2;
17239    struct cvmx_gpio_tx_clr_s            cn50xx;
17240    struct cvmx_gpio_tx_clr_cn38xx       cn52xx;
17241    struct cvmx_gpio_tx_clr_cn38xx       cn52xxp1;
17242    struct cvmx_gpio_tx_clr_cn38xx       cn56xx;
17243    struct cvmx_gpio_tx_clr_cn38xx       cn56xxp1;
17244    struct cvmx_gpio_tx_clr_cn38xx       cn58xx;
17245    struct cvmx_gpio_tx_clr_cn38xx       cn58xxp1;
17246} cvmx_gpio_tx_clr_t;
17247
17248
17249/**
17250 * cvmx_gpio_tx_set
17251 */
17252typedef union
17253{
17254    uint64_t u64;
17255    struct cvmx_gpio_tx_set_s
17256    {
17257#if __BYTE_ORDER == __BIG_ENDIAN
17258        uint64_t reserved_24_63          : 40;
17259        uint64_t set                     : 24;      /**< Bit mask to indicate which bits to drive to '1'. */
17260#else
17261        uint64_t set                     : 24;
17262        uint64_t reserved_24_63          : 40;
17263#endif
17264    } s;
17265    struct cvmx_gpio_tx_set_s            cn30xx;
17266    struct cvmx_gpio_tx_set_s            cn31xx;
17267    struct cvmx_gpio_tx_set_cn38xx
17268    {
17269#if __BYTE_ORDER == __BIG_ENDIAN
17270        uint64_t reserved_16_63          : 48;
17271        uint64_t set                     : 16;      /**< Bit mask to indicate which bits to drive to '1'. */
17272#else
17273        uint64_t set                     : 16;
17274        uint64_t reserved_16_63          : 48;
17275#endif
17276    } cn38xx;
17277    struct cvmx_gpio_tx_set_cn38xx       cn38xxp2;
17278    struct cvmx_gpio_tx_set_s            cn50xx;
17279    struct cvmx_gpio_tx_set_cn38xx       cn52xx;
17280    struct cvmx_gpio_tx_set_cn38xx       cn52xxp1;
17281    struct cvmx_gpio_tx_set_cn38xx       cn56xx;
17282    struct cvmx_gpio_tx_set_cn38xx       cn56xxp1;
17283    struct cvmx_gpio_tx_set_cn38xx       cn58xx;
17284    struct cvmx_gpio_tx_set_cn38xx       cn58xxp1;
17285} cvmx_gpio_tx_set_t;
17286
17287
17288/**
17289 * cvmx_gpio_xbit_cfg#
17290 */
17291typedef union
17292{
17293    uint64_t u64;
17294    struct cvmx_gpio_xbit_cfgx_s
17295    {
17296#if __BYTE_ORDER == __BIG_ENDIAN
17297        uint64_t reserved_12_63          : 52;
17298        uint64_t fil_sel                 : 4;       /**< Global counter bit-select (controls sample rate) */
17299        uint64_t fil_cnt                 : 4;       /**< Number of consecutive samples to change state */
17300        uint64_t reserved_2_3            : 2;
17301        uint64_t rx_xor                  : 1;       /**< Invert the GPIO pin */
17302        uint64_t tx_oe                   : 1;       /**< Drive the GPIO pin as an output pin */
17303#else
17304        uint64_t tx_oe                   : 1;
17305        uint64_t rx_xor                  : 1;
17306        uint64_t reserved_2_3            : 2;
17307        uint64_t fil_cnt                 : 4;
17308        uint64_t fil_sel                 : 4;
17309        uint64_t reserved_12_63          : 52;
17310#endif
17311    } s;
17312    struct cvmx_gpio_xbit_cfgx_s         cn30xx;
17313    struct cvmx_gpio_xbit_cfgx_s         cn31xx;
17314    struct cvmx_gpio_xbit_cfgx_s         cn50xx;
17315} cvmx_gpio_xbit_cfgx_t;
17316
17317
17318/**
17319 * cvmx_iob_bist_status
17320 *
17321 * IOB_BIST_STATUS = BIST Status of IOB Memories
17322 *
17323 * The result of the BIST run on the IOB memories.
17324 */
17325typedef union
17326{
17327    uint64_t u64;
17328    struct cvmx_iob_bist_status_s
17329    {
17330#if __BYTE_ORDER == __BIG_ENDIAN
17331        uint64_t reserved_18_63          : 46;
17332        uint64_t icnrcb                  : 1;       /**< icnr_cb_reg_fifo_bist_status */
17333        uint64_t icr0                    : 1;       /**< icr_bist_req_fifo0_status */
17334        uint64_t icr1                    : 1;       /**< icr_bist_req_fifo1_status */
17335        uint64_t icnr1                   : 1;       /**< icnr_reg_mem1_bist_status */
17336        uint64_t icnr0                   : 1;       /**< icnr_reg_mem0_bist_status */
17337        uint64_t ibdr0                   : 1;       /**< ibdr_bist_req_fifo0_status */
17338        uint64_t ibdr1                   : 1;       /**< ibdr_bist_req_fifo1_status */
17339        uint64_t ibr0                    : 1;       /**< ibr_bist_rsp_fifo0_status */
17340        uint64_t ibr1                    : 1;       /**< ibr_bist_rsp_fifo1_status */
17341        uint64_t icnrt                   : 1;       /**< icnr_tag_cb_reg_fifo_bist_status */
17342        uint64_t ibrq0                   : 1;       /**< ibrq_bist_req_fifo0_status */
17343        uint64_t ibrq1                   : 1;       /**< ibrq_bist_req_fifo1_status */
17344        uint64_t icrn0                   : 1;       /**< icr_ncb_bist_mem0_status */
17345        uint64_t icrn1                   : 1;       /**< icr_ncb_bist_mem1_status */
17346        uint64_t icrp0                   : 1;       /**< icr_pko_bist_mem0_status */
17347        uint64_t icrp1                   : 1;       /**< icr_pko_bist_mem1_status */
17348        uint64_t ibd                     : 1;       /**< ibd_bist_mem0_status */
17349        uint64_t icd                     : 1;       /**< icd_ncb_fifo_bist_status */
17350#else
17351        uint64_t icd                     : 1;
17352        uint64_t ibd                     : 1;
17353        uint64_t icrp1                   : 1;
17354        uint64_t icrp0                   : 1;
17355        uint64_t icrn1                   : 1;
17356        uint64_t icrn0                   : 1;
17357        uint64_t ibrq1                   : 1;
17358        uint64_t ibrq0                   : 1;
17359        uint64_t icnrt                   : 1;
17360        uint64_t ibr1                    : 1;
17361        uint64_t ibr0                    : 1;
17362        uint64_t ibdr1                   : 1;
17363        uint64_t ibdr0                   : 1;
17364        uint64_t icnr0                   : 1;
17365        uint64_t icnr1                   : 1;
17366        uint64_t icr1                    : 1;
17367        uint64_t icr0                    : 1;
17368        uint64_t icnrcb                  : 1;
17369        uint64_t reserved_18_63          : 46;
17370#endif
17371    } s;
17372    struct cvmx_iob_bist_status_s        cn30xx;
17373    struct cvmx_iob_bist_status_s        cn31xx;
17374    struct cvmx_iob_bist_status_s        cn38xx;
17375    struct cvmx_iob_bist_status_s        cn38xxp2;
17376    struct cvmx_iob_bist_status_s        cn50xx;
17377    struct cvmx_iob_bist_status_s        cn52xx;
17378    struct cvmx_iob_bist_status_s        cn52xxp1;
17379    struct cvmx_iob_bist_status_s        cn56xx;
17380    struct cvmx_iob_bist_status_s        cn56xxp1;
17381    struct cvmx_iob_bist_status_s        cn58xx;
17382    struct cvmx_iob_bist_status_s        cn58xxp1;
17383} cvmx_iob_bist_status_t;
17384
17385
17386/**
17387 * cvmx_iob_ctl_status
17388 *
17389 * IOB Control Status = IOB Control and Status Register
17390 *
17391 * Provides control for IOB functions.
17392 */
17393typedef union
17394{
17395    uint64_t u64;
17396    struct cvmx_iob_ctl_status_s
17397    {
17398#if __BYTE_ORDER == __BIG_ENDIAN
17399        uint64_t reserved_6_63           : 58;
17400        uint64_t rr_mode                 : 1;       /**< When set to '1' will enable Round-Robin mode of next
17401                                                         transaction that could arbitrate for the XMB. */
17402        uint64_t outb_mat                : 1;       /**< Was a match on the outbound bus to the inb pattern
17403                                                         matchers. PASS2 FIELD. */
17404        uint64_t inb_mat                 : 1;       /**< Was a match on the inbound bus to the inb pattern
17405                                                         matchers. PASS2 FIELD. */
17406        uint64_t pko_enb                 : 1;       /**< Toggles the endian style of the FAU for the PKO.
17407                                                         '0' is for big-endian and '1' is for little-endian. */
17408        uint64_t dwb_enb                 : 1;       /**< Enables the DWB function of the IOB. */
17409        uint64_t fau_end                 : 1;       /**< Toggles the endian style of the FAU. '0' is for
17410                                                         big-endian and '1' is for little-endian. */
17411#else
17412        uint64_t fau_end                 : 1;
17413        uint64_t dwb_enb                 : 1;
17414        uint64_t pko_enb                 : 1;
17415        uint64_t inb_mat                 : 1;
17416        uint64_t outb_mat                : 1;
17417        uint64_t rr_mode                 : 1;
17418        uint64_t reserved_6_63           : 58;
17419#endif
17420    } s;
17421    struct cvmx_iob_ctl_status_cn30xx
17422    {
17423#if __BYTE_ORDER == __BIG_ENDIAN
17424        uint64_t reserved_5_63           : 59;
17425        uint64_t outb_mat                : 1;       /**< Was a match on the outbound bus to the inb pattern
17426                                                         matchers. */
17427        uint64_t inb_mat                 : 1;       /**< Was a match on the inbound bus to the inb pattern
17428                                                         matchers. */
17429        uint64_t pko_enb                 : 1;       /**< Toggles the endian style of the FAU for the PKO.
17430                                                         '0' is for big-endian and '1' is for little-endian. */
17431        uint64_t dwb_enb                 : 1;       /**< Enables the DWB function of the IOB. */
17432        uint64_t fau_end                 : 1;       /**< Toggles the endian style of the FAU. '0' is for
17433                                                         big-endian and '1' is for little-endian. */
17434#else
17435        uint64_t fau_end                 : 1;
17436        uint64_t dwb_enb                 : 1;
17437        uint64_t pko_enb                 : 1;
17438        uint64_t inb_mat                 : 1;
17439        uint64_t outb_mat                : 1;
17440        uint64_t reserved_5_63           : 59;
17441#endif
17442    } cn30xx;
17443    struct cvmx_iob_ctl_status_cn30xx    cn31xx;
17444    struct cvmx_iob_ctl_status_cn30xx    cn38xx;
17445    struct cvmx_iob_ctl_status_cn30xx    cn38xxp2;
17446    struct cvmx_iob_ctl_status_cn30xx    cn50xx;
17447    struct cvmx_iob_ctl_status_s         cn52xx;
17448    struct cvmx_iob_ctl_status_cn30xx    cn52xxp1;
17449    struct cvmx_iob_ctl_status_cn30xx    cn56xx;
17450    struct cvmx_iob_ctl_status_cn30xx    cn56xxp1;
17451    struct cvmx_iob_ctl_status_cn30xx    cn58xx;
17452    struct cvmx_iob_ctl_status_cn30xx    cn58xxp1;
17453} cvmx_iob_ctl_status_t;
17454
17455
17456/**
17457 * cvmx_iob_dwb_pri_cnt
17458 *
17459 * DWB To CMB Priority Counter = Don't Write Back to CMB Priority Counter Enable and Timer Value
17460 *
17461 * Enables and supplies the timeout count for raising the priority of Don't Write Back request to the L2C.
17462 */
17463typedef union
17464{
17465    uint64_t u64;
17466    struct cvmx_iob_dwb_pri_cnt_s
17467    {
17468#if __BYTE_ORDER == __BIG_ENDIAN
17469        uint64_t reserved_16_63          : 48;
17470        uint64_t cnt_enb                 : 1;       /**< Enables the raising of CMB access priority
17471                                                         when CNT_VAL is reached. */
17472        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
17473                                                         the priority for access to CMB. */
17474#else
17475        uint64_t cnt_val                 : 15;
17476        uint64_t cnt_enb                 : 1;
17477        uint64_t reserved_16_63          : 48;
17478#endif
17479    } s;
17480    struct cvmx_iob_dwb_pri_cnt_s        cn38xx;
17481    struct cvmx_iob_dwb_pri_cnt_s        cn38xxp2;
17482    struct cvmx_iob_dwb_pri_cnt_s        cn52xx;
17483    struct cvmx_iob_dwb_pri_cnt_s        cn52xxp1;
17484    struct cvmx_iob_dwb_pri_cnt_s        cn56xx;
17485    struct cvmx_iob_dwb_pri_cnt_s        cn56xxp1;
17486    struct cvmx_iob_dwb_pri_cnt_s        cn58xx;
17487    struct cvmx_iob_dwb_pri_cnt_s        cn58xxp1;
17488} cvmx_iob_dwb_pri_cnt_t;
17489
17490
17491/**
17492 * cvmx_iob_fau_timeout
17493 *
17494 * FAU Timeout = Fetch and Add Unit Tag-Switch Timeout
17495 *
17496 * How many clokc ticks the FAU unit will wait for a tag-switch before timeing out.
17497 * for Queue 0.
17498 */
17499typedef union
17500{
17501    uint64_t u64;
17502    struct cvmx_iob_fau_timeout_s
17503    {
17504#if __BYTE_ORDER == __BIG_ENDIAN
17505        uint64_t reserved_13_63          : 51;
17506        uint64_t tout_enb                : 1;       /**< The enable for the FAU timeout feature.
17507                                                         '1' will enable the timeout, '0' will disable. */
17508        uint64_t tout_val                : 12;      /**< When a tag request arrives from the PP a timer is
17509                                                         started associate with that PP. The timer which
17510                                                         increments every 256 eclks is compared to TOUT_VAL.
17511                                                         When the two are equal the IOB will flag the tag
17512                                                         request to complete as a time-out tag operation.
17513                                                         The 256 count timer used to increment the PP
17514                                                         associated timer is always running so the first
17515                                                         increment of the PP associated timer may occur any
17516                                                         where within the first 256 eclks.  Note that '0'
17517                                                         is an illegal value. */
17518#else
17519        uint64_t tout_val                : 12;
17520        uint64_t tout_enb                : 1;
17521        uint64_t reserved_13_63          : 51;
17522#endif
17523    } s;
17524    struct cvmx_iob_fau_timeout_s        cn30xx;
17525    struct cvmx_iob_fau_timeout_s        cn31xx;
17526    struct cvmx_iob_fau_timeout_s        cn38xx;
17527    struct cvmx_iob_fau_timeout_s        cn38xxp2;
17528    struct cvmx_iob_fau_timeout_s        cn50xx;
17529    struct cvmx_iob_fau_timeout_s        cn52xx;
17530    struct cvmx_iob_fau_timeout_s        cn52xxp1;
17531    struct cvmx_iob_fau_timeout_s        cn56xx;
17532    struct cvmx_iob_fau_timeout_s        cn56xxp1;
17533    struct cvmx_iob_fau_timeout_s        cn58xx;
17534    struct cvmx_iob_fau_timeout_s        cn58xxp1;
17535} cvmx_iob_fau_timeout_t;
17536
17537
17538/**
17539 * cvmx_iob_i2c_pri_cnt
17540 *
17541 * IPD To CMB Store Priority Counter = IPD to CMB Store Priority Counter Enable and Timer Value
17542 *
17543 * Enables and supplies the timeout count for raising the priority of IPD Store access to the CMB.
17544 */
17545typedef union
17546{
17547    uint64_t u64;
17548    struct cvmx_iob_i2c_pri_cnt_s
17549    {
17550#if __BYTE_ORDER == __BIG_ENDIAN
17551        uint64_t reserved_16_63          : 48;
17552        uint64_t cnt_enb                 : 1;       /**< Enables the raising of CMB access priority
17553                                                         when CNT_VAL is reached. */
17554        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
17555                                                         the priority for access to CMB. */
17556#else
17557        uint64_t cnt_val                 : 15;
17558        uint64_t cnt_enb                 : 1;
17559        uint64_t reserved_16_63          : 48;
17560#endif
17561    } s;
17562    struct cvmx_iob_i2c_pri_cnt_s        cn38xx;
17563    struct cvmx_iob_i2c_pri_cnt_s        cn38xxp2;
17564    struct cvmx_iob_i2c_pri_cnt_s        cn52xx;
17565    struct cvmx_iob_i2c_pri_cnt_s        cn52xxp1;
17566    struct cvmx_iob_i2c_pri_cnt_s        cn56xx;
17567    struct cvmx_iob_i2c_pri_cnt_s        cn56xxp1;
17568    struct cvmx_iob_i2c_pri_cnt_s        cn58xx;
17569    struct cvmx_iob_i2c_pri_cnt_s        cn58xxp1;
17570} cvmx_iob_i2c_pri_cnt_t;
17571
17572
17573/**
17574 * cvmx_iob_inb_control_match
17575 *
17576 * IOB_INB_CONTROL_MATCH = IOB Inbound Control Match
17577 *
17578 * Match pattern for the inbound control to set the INB_MATCH_BIT. PASS-2 Register
17579 */
17580typedef union
17581{
17582    uint64_t u64;
17583    struct cvmx_iob_inb_control_match_s
17584    {
17585#if __BYTE_ORDER == __BIG_ENDIAN
17586        uint64_t reserved_29_63          : 35;
17587        uint64_t mask                    : 8;       /**< Pattern to match on the inbound NCB. */
17588        uint64_t opc                     : 4;       /**< Pattern to match on the inbound NCB. */
17589        uint64_t dst                     : 9;       /**< Pattern to match on the inbound NCB. */
17590        uint64_t src                     : 8;       /**< Pattern to match on the inbound NCB. */
17591#else
17592        uint64_t src                     : 8;
17593        uint64_t dst                     : 9;
17594        uint64_t opc                     : 4;
17595        uint64_t mask                    : 8;
17596        uint64_t reserved_29_63          : 35;
17597#endif
17598    } s;
17599    struct cvmx_iob_inb_control_match_s  cn30xx;
17600    struct cvmx_iob_inb_control_match_s  cn31xx;
17601    struct cvmx_iob_inb_control_match_s  cn38xx;
17602    struct cvmx_iob_inb_control_match_s  cn38xxp2;
17603    struct cvmx_iob_inb_control_match_s  cn50xx;
17604    struct cvmx_iob_inb_control_match_s  cn52xx;
17605    struct cvmx_iob_inb_control_match_s  cn52xxp1;
17606    struct cvmx_iob_inb_control_match_s  cn56xx;
17607    struct cvmx_iob_inb_control_match_s  cn56xxp1;
17608    struct cvmx_iob_inb_control_match_s  cn58xx;
17609    struct cvmx_iob_inb_control_match_s  cn58xxp1;
17610} cvmx_iob_inb_control_match_t;
17611
17612
17613/**
17614 * cvmx_iob_inb_control_match_enb
17615 *
17616 * IOB_INB_CONTROL_MATCH_ENB = IOB Inbound Control Match Enable
17617 *
17618 * Enables the match of the corresponding bit in the IOB_INB_CONTROL_MATCH reister. PASS-2 Register
17619 */
17620typedef union
17621{
17622    uint64_t u64;
17623    struct cvmx_iob_inb_control_match_enb_s
17624    {
17625#if __BYTE_ORDER == __BIG_ENDIAN
17626        uint64_t reserved_29_63          : 35;
17627        uint64_t mask                    : 8;       /**< Pattern to match on the inbound NCB. */
17628        uint64_t opc                     : 4;       /**< Pattern to match on the inbound NCB. */
17629        uint64_t dst                     : 9;       /**< Pattern to match on the inbound NCB. */
17630        uint64_t src                     : 8;       /**< Pattern to match on the inbound NCB. */
17631#else
17632        uint64_t src                     : 8;
17633        uint64_t dst                     : 9;
17634        uint64_t opc                     : 4;
17635        uint64_t mask                    : 8;
17636        uint64_t reserved_29_63          : 35;
17637#endif
17638    } s;
17639    struct cvmx_iob_inb_control_match_enb_s cn30xx;
17640    struct cvmx_iob_inb_control_match_enb_s cn31xx;
17641    struct cvmx_iob_inb_control_match_enb_s cn38xx;
17642    struct cvmx_iob_inb_control_match_enb_s cn38xxp2;
17643    struct cvmx_iob_inb_control_match_enb_s cn50xx;
17644    struct cvmx_iob_inb_control_match_enb_s cn52xx;
17645    struct cvmx_iob_inb_control_match_enb_s cn52xxp1;
17646    struct cvmx_iob_inb_control_match_enb_s cn56xx;
17647    struct cvmx_iob_inb_control_match_enb_s cn56xxp1;
17648    struct cvmx_iob_inb_control_match_enb_s cn58xx;
17649    struct cvmx_iob_inb_control_match_enb_s cn58xxp1;
17650} cvmx_iob_inb_control_match_enb_t;
17651
17652
17653/**
17654 * cvmx_iob_inb_data_match
17655 *
17656 * IOB_INB_DATA_MATCH = IOB Inbound Data Match
17657 *
17658 * Match pattern for the inbound data to set the INB_MATCH_BIT. PASS-2 Register
17659 */
17660typedef union
17661{
17662    uint64_t u64;
17663    struct cvmx_iob_inb_data_match_s
17664    {
17665#if __BYTE_ORDER == __BIG_ENDIAN
17666        uint64_t data                    : 64;      /**< Pattern to match on the inbound NCB. */
17667#else
17668        uint64_t data                    : 64;
17669#endif
17670    } s;
17671    struct cvmx_iob_inb_data_match_s     cn30xx;
17672    struct cvmx_iob_inb_data_match_s     cn31xx;
17673    struct cvmx_iob_inb_data_match_s     cn38xx;
17674    struct cvmx_iob_inb_data_match_s     cn38xxp2;
17675    struct cvmx_iob_inb_data_match_s     cn50xx;
17676    struct cvmx_iob_inb_data_match_s     cn52xx;
17677    struct cvmx_iob_inb_data_match_s     cn52xxp1;
17678    struct cvmx_iob_inb_data_match_s     cn56xx;
17679    struct cvmx_iob_inb_data_match_s     cn56xxp1;
17680    struct cvmx_iob_inb_data_match_s     cn58xx;
17681    struct cvmx_iob_inb_data_match_s     cn58xxp1;
17682} cvmx_iob_inb_data_match_t;
17683
17684
17685/**
17686 * cvmx_iob_inb_data_match_enb
17687 *
17688 * IOB_INB_DATA_MATCH_ENB = IOB Inbound Data Match Enable
17689 *
17690 * Enables the match of the corresponding bit in the IOB_INB_DATA_MATCH reister. PASS-2 Register
17691 */
17692typedef union
17693{
17694    uint64_t u64;
17695    struct cvmx_iob_inb_data_match_enb_s
17696    {
17697#if __BYTE_ORDER == __BIG_ENDIAN
17698        uint64_t data                    : 64;      /**< Bit to enable match of. */
17699#else
17700        uint64_t data                    : 64;
17701#endif
17702    } s;
17703    struct cvmx_iob_inb_data_match_enb_s cn30xx;
17704    struct cvmx_iob_inb_data_match_enb_s cn31xx;
17705    struct cvmx_iob_inb_data_match_enb_s cn38xx;
17706    struct cvmx_iob_inb_data_match_enb_s cn38xxp2;
17707    struct cvmx_iob_inb_data_match_enb_s cn50xx;
17708    struct cvmx_iob_inb_data_match_enb_s cn52xx;
17709    struct cvmx_iob_inb_data_match_enb_s cn52xxp1;
17710    struct cvmx_iob_inb_data_match_enb_s cn56xx;
17711    struct cvmx_iob_inb_data_match_enb_s cn56xxp1;
17712    struct cvmx_iob_inb_data_match_enb_s cn58xx;
17713    struct cvmx_iob_inb_data_match_enb_s cn58xxp1;
17714} cvmx_iob_inb_data_match_enb_t;
17715
17716
17717/**
17718 * cvmx_iob_int_enb
17719 *
17720 * IOB_INT_ENB = IOB's Interrupt Enable
17721 *
17722 * The IOB's interrupt enable register. This is a PASS-2 register.
17723 */
17724typedef union
17725{
17726    uint64_t u64;
17727    struct cvmx_iob_int_enb_s
17728    {
17729#if __BYTE_ORDER == __BIG_ENDIAN
17730        uint64_t reserved_6_63           : 58;
17731        uint64_t p_dat                   : 1;       /**< When set (1) and bit 5 of the IOB_INT_SUM
17732                                                         register is asserted the IOB will assert an
17733                                                         interrupt. */
17734        uint64_t np_dat                  : 1;       /**< When set (1) and bit 4 of the IOB_INT_SUM
17735                                                         register is asserted the IOB will assert an
17736                                                         interrupt. */
17737        uint64_t p_eop                   : 1;       /**< When set (1) and bit 3 of the IOB_INT_SUM
17738                                                         register is asserted the IOB will assert an
17739                                                         interrupt. */
17740        uint64_t p_sop                   : 1;       /**< When set (1) and bit 2 of the IOB_INT_SUM
17741                                                         register is asserted the IOB will assert an
17742                                                         interrupt. */
17743        uint64_t np_eop                  : 1;       /**< When set (1) and bit 1 of the IOB_INT_SUM
17744                                                         register is asserted the IOB will assert an
17745                                                         interrupt. */
17746        uint64_t np_sop                  : 1;       /**< When set (1) and bit 0 of the IOB_INT_SUM
17747                                                         register is asserted the IOB will assert an
17748                                                         interrupt. */
17749#else
17750        uint64_t np_sop                  : 1;
17751        uint64_t np_eop                  : 1;
17752        uint64_t p_sop                   : 1;
17753        uint64_t p_eop                   : 1;
17754        uint64_t np_dat                  : 1;
17755        uint64_t p_dat                   : 1;
17756        uint64_t reserved_6_63           : 58;
17757#endif
17758    } s;
17759    struct cvmx_iob_int_enb_cn30xx
17760    {
17761#if __BYTE_ORDER == __BIG_ENDIAN
17762        uint64_t reserved_4_63           : 60;
17763        uint64_t p_eop                   : 1;       /**< When set (1) and bit 3 of the IOB_INT_SUM
17764                                                         register is asserted the IOB will assert an
17765                                                         interrupt. */
17766        uint64_t p_sop                   : 1;       /**< When set (1) and bit 2 of the IOB_INT_SUM
17767                                                         register is asserted the IOB will assert an
17768                                                         interrupt. */
17769        uint64_t np_eop                  : 1;       /**< When set (1) and bit 1 of the IOB_INT_SUM
17770                                                         register is asserted the IOB will assert an
17771                                                         interrupt. */
17772        uint64_t np_sop                  : 1;       /**< When set (1) and bit 0 of the IOB_INT_SUM
17773                                                         register is asserted the IOB will assert an
17774                                                         interrupt. */
17775#else
17776        uint64_t np_sop                  : 1;
17777        uint64_t np_eop                  : 1;
17778        uint64_t p_sop                   : 1;
17779        uint64_t p_eop                   : 1;
17780        uint64_t reserved_4_63           : 60;
17781#endif
17782    } cn30xx;
17783    struct cvmx_iob_int_enb_cn30xx       cn31xx;
17784    struct cvmx_iob_int_enb_cn30xx       cn38xx;
17785    struct cvmx_iob_int_enb_cn30xx       cn38xxp2;
17786    struct cvmx_iob_int_enb_s            cn50xx;
17787    struct cvmx_iob_int_enb_s            cn52xx;
17788    struct cvmx_iob_int_enb_s            cn52xxp1;
17789    struct cvmx_iob_int_enb_s            cn56xx;
17790    struct cvmx_iob_int_enb_s            cn56xxp1;
17791    struct cvmx_iob_int_enb_s            cn58xx;
17792    struct cvmx_iob_int_enb_s            cn58xxp1;
17793} cvmx_iob_int_enb_t;
17794
17795
17796/**
17797 * cvmx_iob_int_sum
17798 *
17799 * IOB_INT_SUM = IOB's Interrupt Summary Register
17800 *
17801 * Contains the diffrent interrupt summary bits of the IOB. This is a PASS-2 register.
17802 */
17803typedef union
17804{
17805    uint64_t u64;
17806    struct cvmx_iob_int_sum_s
17807    {
17808#if __BYTE_ORDER == __BIG_ENDIAN
17809        uint64_t reserved_6_63           : 58;
17810        uint64_t p_dat                   : 1;       /**< Set when a data arrives before a SOP for the same
17811                                                         port for a passthrough packet.
17812                                                         The first detected error associated with bits [5:0]
17813                                                         of this register will only be set here. A new bit
17814                                                         can be set when the previous reported bit is cleared. */
17815        uint64_t np_dat                  : 1;       /**< Set when a data arrives before a SOP for the same
17816                                                         port for a non-passthrough packet.
17817                                                         The first detected error associated with bits [5:0]
17818                                                         of this register will only be set here. A new bit
17819                                                         can be set when the previous reported bit is cleared. */
17820        uint64_t p_eop                   : 1;       /**< Set when a EOP is followed by an EOP for the same
17821                                                         port for a passthrough packet.
17822                                                         The first detected error associated with bits [5:0]
17823                                                         of this register will only be set here. A new bit
17824                                                         can be set when the previous reported bit is cleared. */
17825        uint64_t p_sop                   : 1;       /**< Set when a SOP is followed by an SOP for the same
17826                                                         port for a passthrough packet.
17827                                                         The first detected error associated with bits [5:0]
17828                                                         of this register will only be set here. A new bit
17829                                                         can be set when the previous reported bit is cleared. */
17830        uint64_t np_eop                  : 1;       /**< Set when a EOP is followed by an EOP for the same
17831                                                         port for a non-passthrough packet.
17832                                                         The first detected error associated with bits [5:0]
17833                                                         of this register will only be set here. A new bit
17834                                                         can be set when the previous reported bit is cleared. */
17835        uint64_t np_sop                  : 1;       /**< Set when a SOP is followed by an SOP for the same
17836                                                         port for a non-passthrough packet.
17837                                                         The first detected error associated with bits [5:0]
17838                                                         of this register will only be set here. A new bit
17839                                                         can be set when the previous reported bit is cleared. */
17840#else
17841        uint64_t np_sop                  : 1;
17842        uint64_t np_eop                  : 1;
17843        uint64_t p_sop                   : 1;
17844        uint64_t p_eop                   : 1;
17845        uint64_t np_dat                  : 1;
17846        uint64_t p_dat                   : 1;
17847        uint64_t reserved_6_63           : 58;
17848#endif
17849    } s;
17850    struct cvmx_iob_int_sum_cn30xx
17851    {
17852#if __BYTE_ORDER == __BIG_ENDIAN
17853        uint64_t reserved_4_63           : 60;
17854        uint64_t p_eop                   : 1;       /**< Set when a EOP is followed by an EOP for the same
17855                                                         port for a passthrough packet.
17856                                                         The first detected error associated with bits [3:0]
17857                                                         of this register will only be set here. A new bit
17858                                                         can be set when the previous reported bit is cleared. */
17859        uint64_t p_sop                   : 1;       /**< Set when a SOP is followed by an SOP for the same
17860                                                         port for a passthrough packet.
17861                                                         The first detected error associated with bits [3:0]
17862                                                         of this register will only be set here. A new bit
17863                                                         can be set when the previous reported bit is cleared. */
17864        uint64_t np_eop                  : 1;       /**< Set when a EOP is followed by an EOP for the same
17865                                                         port for a non-passthrough packet.
17866                                                         The first detected error associated with bits [3:0]
17867                                                         of this register will only be set here. A new bit
17868                                                         can be set when the previous reported bit is cleared. */
17869        uint64_t np_sop                  : 1;       /**< Set when a SOP is followed by an SOP for the same
17870                                                         port for a non-passthrough packet.
17871                                                         The first detected error associated with bits [3:0]
17872                                                         of this register will only be set here. A new bit
17873                                                         can be set when the previous reported bit is cleared. */
17874#else
17875        uint64_t np_sop                  : 1;
17876        uint64_t np_eop                  : 1;
17877        uint64_t p_sop                   : 1;
17878        uint64_t p_eop                   : 1;
17879        uint64_t reserved_4_63           : 60;
17880#endif
17881    } cn30xx;
17882    struct cvmx_iob_int_sum_cn30xx       cn31xx;
17883    struct cvmx_iob_int_sum_cn30xx       cn38xx;
17884    struct cvmx_iob_int_sum_cn30xx       cn38xxp2;
17885    struct cvmx_iob_int_sum_s            cn50xx;
17886    struct cvmx_iob_int_sum_s            cn52xx;
17887    struct cvmx_iob_int_sum_s            cn52xxp1;
17888    struct cvmx_iob_int_sum_s            cn56xx;
17889    struct cvmx_iob_int_sum_s            cn56xxp1;
17890    struct cvmx_iob_int_sum_s            cn58xx;
17891    struct cvmx_iob_int_sum_s            cn58xxp1;
17892} cvmx_iob_int_sum_t;
17893
17894
17895/**
17896 * cvmx_iob_n2c_l2c_pri_cnt
17897 *
17898 * NCB To CMB L2C Priority Counter = NCB to CMB L2C Priority Counter Enable and Timer Value
17899 *
17900 * Enables and supplies the timeout count for raising the priority of NCB Store/Load access to the CMB.
17901 */
17902typedef union
17903{
17904    uint64_t u64;
17905    struct cvmx_iob_n2c_l2c_pri_cnt_s
17906    {
17907#if __BYTE_ORDER == __BIG_ENDIAN
17908        uint64_t reserved_16_63          : 48;
17909        uint64_t cnt_enb                 : 1;       /**< Enables the raising of CMB access priority
17910                                                         when CNT_VAL is reached. */
17911        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
17912                                                         the priority for access to CMB. */
17913#else
17914        uint64_t cnt_val                 : 15;
17915        uint64_t cnt_enb                 : 1;
17916        uint64_t reserved_16_63          : 48;
17917#endif
17918    } s;
17919    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn38xx;
17920    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn38xxp2;
17921    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn52xx;
17922    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn52xxp1;
17923    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn56xx;
17924    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn56xxp1;
17925    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn58xx;
17926    struct cvmx_iob_n2c_l2c_pri_cnt_s    cn58xxp1;
17927} cvmx_iob_n2c_l2c_pri_cnt_t;
17928
17929
17930/**
17931 * cvmx_iob_n2c_rsp_pri_cnt
17932 *
17933 * NCB To CMB Response Priority Counter = NCB to CMB Response Priority Counter Enable and Timer Value
17934 *
17935 * Enables and supplies the timeout count for raising the priority of NCB Responses access to the CMB.
17936 */
17937typedef union
17938{
17939    uint64_t u64;
17940    struct cvmx_iob_n2c_rsp_pri_cnt_s
17941    {
17942#if __BYTE_ORDER == __BIG_ENDIAN
17943        uint64_t reserved_16_63          : 48;
17944        uint64_t cnt_enb                 : 1;       /**< Enables the raising of CMB access priority
17945                                                         when CNT_VAL is reached. */
17946        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
17947                                                         the priority for access to CMB. */
17948#else
17949        uint64_t cnt_val                 : 15;
17950        uint64_t cnt_enb                 : 1;
17951        uint64_t reserved_16_63          : 48;
17952#endif
17953    } s;
17954    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn38xx;
17955    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn38xxp2;
17956    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn52xx;
17957    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn52xxp1;
17958    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn56xx;
17959    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn56xxp1;
17960    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn58xx;
17961    struct cvmx_iob_n2c_rsp_pri_cnt_s    cn58xxp1;
17962} cvmx_iob_n2c_rsp_pri_cnt_t;
17963
17964
17965/**
17966 * cvmx_iob_outb_com_pri_cnt
17967 *
17968 * Commit To NCB Priority Counter = Commit to NCB Priority Counter Enable and Timer Value
17969 *
17970 * Enables and supplies the timeout count for raising the priority of Commit request to the Outbound NCB.
17971 */
17972typedef union
17973{
17974    uint64_t u64;
17975    struct cvmx_iob_outb_com_pri_cnt_s
17976    {
17977#if __BYTE_ORDER == __BIG_ENDIAN
17978        uint64_t reserved_16_63          : 48;
17979        uint64_t cnt_enb                 : 1;       /**< Enables the raising of NCB access priority
17980                                                         when CNT_VAL is reached. */
17981        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
17982                                                         the priority for access to NCB. */
17983#else
17984        uint64_t cnt_val                 : 15;
17985        uint64_t cnt_enb                 : 1;
17986        uint64_t reserved_16_63          : 48;
17987#endif
17988    } s;
17989    struct cvmx_iob_outb_com_pri_cnt_s   cn38xx;
17990    struct cvmx_iob_outb_com_pri_cnt_s   cn38xxp2;
17991    struct cvmx_iob_outb_com_pri_cnt_s   cn52xx;
17992    struct cvmx_iob_outb_com_pri_cnt_s   cn52xxp1;
17993    struct cvmx_iob_outb_com_pri_cnt_s   cn56xx;
17994    struct cvmx_iob_outb_com_pri_cnt_s   cn56xxp1;
17995    struct cvmx_iob_outb_com_pri_cnt_s   cn58xx;
17996    struct cvmx_iob_outb_com_pri_cnt_s   cn58xxp1;
17997} cvmx_iob_outb_com_pri_cnt_t;
17998
17999
18000/**
18001 * cvmx_iob_outb_control_match
18002 *
18003 * IOB_OUTB_CONTROL_MATCH = IOB Outbound Control Match
18004 *
18005 * Match pattern for the outbound control to set the OUTB_MATCH_BIT. PASS-2 Register
18006 */
18007typedef union
18008{
18009    uint64_t u64;
18010    struct cvmx_iob_outb_control_match_s
18011    {
18012#if __BYTE_ORDER == __BIG_ENDIAN
18013        uint64_t reserved_26_63          : 38;
18014        uint64_t mask                    : 8;       /**< Pattern to match on the outbound NCB. */
18015        uint64_t eot                     : 1;       /**< Pattern to match on the outbound NCB. */
18016        uint64_t dst                     : 8;       /**< Pattern to match on the outbound NCB. */
18017        uint64_t src                     : 9;       /**< Pattern to match on the outbound NCB. */
18018#else
18019        uint64_t src                     : 9;
18020        uint64_t dst                     : 8;
18021        uint64_t eot                     : 1;
18022        uint64_t mask                    : 8;
18023        uint64_t reserved_26_63          : 38;
18024#endif
18025    } s;
18026    struct cvmx_iob_outb_control_match_s cn30xx;
18027    struct cvmx_iob_outb_control_match_s cn31xx;
18028    struct cvmx_iob_outb_control_match_s cn38xx;
18029    struct cvmx_iob_outb_control_match_s cn38xxp2;
18030    struct cvmx_iob_outb_control_match_s cn50xx;
18031    struct cvmx_iob_outb_control_match_s cn52xx;
18032    struct cvmx_iob_outb_control_match_s cn52xxp1;
18033    struct cvmx_iob_outb_control_match_s cn56xx;
18034    struct cvmx_iob_outb_control_match_s cn56xxp1;
18035    struct cvmx_iob_outb_control_match_s cn58xx;
18036    struct cvmx_iob_outb_control_match_s cn58xxp1;
18037} cvmx_iob_outb_control_match_t;
18038
18039
18040/**
18041 * cvmx_iob_outb_control_match_enb
18042 *
18043 * IOB_OUTB_CONTROL_MATCH_ENB = IOB Outbound Control Match Enable
18044 *
18045 * Enables the match of the corresponding bit in the IOB_OUTB_CONTROL_MATCH reister. PASS-2 Register
18046 */
18047typedef union
18048{
18049    uint64_t u64;
18050    struct cvmx_iob_outb_control_match_enb_s
18051    {
18052#if __BYTE_ORDER == __BIG_ENDIAN
18053        uint64_t reserved_26_63          : 38;
18054        uint64_t mask                    : 8;       /**< Pattern to match on the outbound NCB. */
18055        uint64_t eot                     : 1;       /**< Pattern to match on the outbound NCB. */
18056        uint64_t dst                     : 8;       /**< Pattern to match on the outbound NCB. */
18057        uint64_t src                     : 9;       /**< Pattern to match on the outbound NCB. */
18058#else
18059        uint64_t src                     : 9;
18060        uint64_t dst                     : 8;
18061        uint64_t eot                     : 1;
18062        uint64_t mask                    : 8;
18063        uint64_t reserved_26_63          : 38;
18064#endif
18065    } s;
18066    struct cvmx_iob_outb_control_match_enb_s cn30xx;
18067    struct cvmx_iob_outb_control_match_enb_s cn31xx;
18068    struct cvmx_iob_outb_control_match_enb_s cn38xx;
18069    struct cvmx_iob_outb_control_match_enb_s cn38xxp2;
18070    struct cvmx_iob_outb_control_match_enb_s cn50xx;
18071    struct cvmx_iob_outb_control_match_enb_s cn52xx;
18072    struct cvmx_iob_outb_control_match_enb_s cn52xxp1;
18073    struct cvmx_iob_outb_control_match_enb_s cn56xx;
18074    struct cvmx_iob_outb_control_match_enb_s cn56xxp1;
18075    struct cvmx_iob_outb_control_match_enb_s cn58xx;
18076    struct cvmx_iob_outb_control_match_enb_s cn58xxp1;
18077} cvmx_iob_outb_control_match_enb_t;
18078
18079
18080/**
18081 * cvmx_iob_outb_data_match
18082 *
18083 * IOB_OUTB_DATA_MATCH = IOB Outbound Data Match
18084 *
18085 * Match pattern for the outbound data to set the OUTB_MATCH_BIT. PASS-2 Register
18086 */
18087typedef union
18088{
18089    uint64_t u64;
18090    struct cvmx_iob_outb_data_match_s
18091    {
18092#if __BYTE_ORDER == __BIG_ENDIAN
18093        uint64_t data                    : 64;      /**< Pattern to match on the outbound NCB. */
18094#else
18095        uint64_t data                    : 64;
18096#endif
18097    } s;
18098    struct cvmx_iob_outb_data_match_s    cn30xx;
18099    struct cvmx_iob_outb_data_match_s    cn31xx;
18100    struct cvmx_iob_outb_data_match_s    cn38xx;
18101    struct cvmx_iob_outb_data_match_s    cn38xxp2;
18102    struct cvmx_iob_outb_data_match_s    cn50xx;
18103    struct cvmx_iob_outb_data_match_s    cn52xx;
18104    struct cvmx_iob_outb_data_match_s    cn52xxp1;
18105    struct cvmx_iob_outb_data_match_s    cn56xx;
18106    struct cvmx_iob_outb_data_match_s    cn56xxp1;
18107    struct cvmx_iob_outb_data_match_s    cn58xx;
18108    struct cvmx_iob_outb_data_match_s    cn58xxp1;
18109} cvmx_iob_outb_data_match_t;
18110
18111
18112/**
18113 * cvmx_iob_outb_data_match_enb
18114 *
18115 * IOB_OUTB_DATA_MATCH_ENB = IOB Outbound Data Match Enable
18116 *
18117 * Enables the match of the corresponding bit in the IOB_OUTB_DATA_MATCH reister. PASS-2 Register
18118 */
18119typedef union
18120{
18121    uint64_t u64;
18122    struct cvmx_iob_outb_data_match_enb_s
18123    {
18124#if __BYTE_ORDER == __BIG_ENDIAN
18125        uint64_t data                    : 64;      /**< Bit to enable match of. */
18126#else
18127        uint64_t data                    : 64;
18128#endif
18129    } s;
18130    struct cvmx_iob_outb_data_match_enb_s cn30xx;
18131    struct cvmx_iob_outb_data_match_enb_s cn31xx;
18132    struct cvmx_iob_outb_data_match_enb_s cn38xx;
18133    struct cvmx_iob_outb_data_match_enb_s cn38xxp2;
18134    struct cvmx_iob_outb_data_match_enb_s cn50xx;
18135    struct cvmx_iob_outb_data_match_enb_s cn52xx;
18136    struct cvmx_iob_outb_data_match_enb_s cn52xxp1;
18137    struct cvmx_iob_outb_data_match_enb_s cn56xx;
18138    struct cvmx_iob_outb_data_match_enb_s cn56xxp1;
18139    struct cvmx_iob_outb_data_match_enb_s cn58xx;
18140    struct cvmx_iob_outb_data_match_enb_s cn58xxp1;
18141} cvmx_iob_outb_data_match_enb_t;
18142
18143
18144/**
18145 * cvmx_iob_outb_fpa_pri_cnt
18146 *
18147 * FPA To NCB Priority Counter = FPA Returns to NCB Priority Counter Enable and Timer Value
18148 *
18149 * Enables and supplies the timeout count for raising the priority of FPA Rreturn Page request to the Outbound NCB.
18150 */
18151typedef union
18152{
18153    uint64_t u64;
18154    struct cvmx_iob_outb_fpa_pri_cnt_s
18155    {
18156#if __BYTE_ORDER == __BIG_ENDIAN
18157        uint64_t reserved_16_63          : 48;
18158        uint64_t cnt_enb                 : 1;       /**< Enables the raising of NCB access priority
18159                                                         when CNT_VAL is reached. */
18160        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
18161                                                         the priority for access to NCB. */
18162#else
18163        uint64_t cnt_val                 : 15;
18164        uint64_t cnt_enb                 : 1;
18165        uint64_t reserved_16_63          : 48;
18166#endif
18167    } s;
18168    struct cvmx_iob_outb_fpa_pri_cnt_s   cn38xx;
18169    struct cvmx_iob_outb_fpa_pri_cnt_s   cn38xxp2;
18170    struct cvmx_iob_outb_fpa_pri_cnt_s   cn52xx;
18171    struct cvmx_iob_outb_fpa_pri_cnt_s   cn52xxp1;
18172    struct cvmx_iob_outb_fpa_pri_cnt_s   cn56xx;
18173    struct cvmx_iob_outb_fpa_pri_cnt_s   cn56xxp1;
18174    struct cvmx_iob_outb_fpa_pri_cnt_s   cn58xx;
18175    struct cvmx_iob_outb_fpa_pri_cnt_s   cn58xxp1;
18176} cvmx_iob_outb_fpa_pri_cnt_t;
18177
18178
18179/**
18180 * cvmx_iob_outb_req_pri_cnt
18181 *
18182 * Request To NCB Priority Counter = Request to NCB Priority Counter Enable and Timer Value
18183 *
18184 * Enables and supplies the timeout count for raising the priority of Request transfers to the Outbound NCB.
18185 */
18186typedef union
18187{
18188    uint64_t u64;
18189    struct cvmx_iob_outb_req_pri_cnt_s
18190    {
18191#if __BYTE_ORDER == __BIG_ENDIAN
18192        uint64_t reserved_16_63          : 48;
18193        uint64_t cnt_enb                 : 1;       /**< Enables the raising of NCB access priority
18194                                                         when CNT_VAL is reached. */
18195        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
18196                                                         the priority for access to NCB. */
18197#else
18198        uint64_t cnt_val                 : 15;
18199        uint64_t cnt_enb                 : 1;
18200        uint64_t reserved_16_63          : 48;
18201#endif
18202    } s;
18203    struct cvmx_iob_outb_req_pri_cnt_s   cn38xx;
18204    struct cvmx_iob_outb_req_pri_cnt_s   cn38xxp2;
18205    struct cvmx_iob_outb_req_pri_cnt_s   cn52xx;
18206    struct cvmx_iob_outb_req_pri_cnt_s   cn52xxp1;
18207    struct cvmx_iob_outb_req_pri_cnt_s   cn56xx;
18208    struct cvmx_iob_outb_req_pri_cnt_s   cn56xxp1;
18209    struct cvmx_iob_outb_req_pri_cnt_s   cn58xx;
18210    struct cvmx_iob_outb_req_pri_cnt_s   cn58xxp1;
18211} cvmx_iob_outb_req_pri_cnt_t;
18212
18213
18214/**
18215 * cvmx_iob_p2c_req_pri_cnt
18216 *
18217 * PKO To CMB Response Priority Counter = PKO to CMB Response Priority Counter Enable and Timer Value
18218 *
18219 * Enables and supplies the timeout count for raising the priority of PKO Load access to the CMB.
18220 */
18221typedef union
18222{
18223    uint64_t u64;
18224    struct cvmx_iob_p2c_req_pri_cnt_s
18225    {
18226#if __BYTE_ORDER == __BIG_ENDIAN
18227        uint64_t reserved_16_63          : 48;
18228        uint64_t cnt_enb                 : 1;       /**< Enables the raising of CMB access priority
18229                                                         when CNT_VAL is reached. */
18230        uint64_t cnt_val                 : 15;      /**< Number of core clocks to wait before raising
18231                                                         the priority for access to CMB. */
18232#else
18233        uint64_t cnt_val                 : 15;
18234        uint64_t cnt_enb                 : 1;
18235        uint64_t reserved_16_63          : 48;
18236#endif
18237    } s;
18238    struct cvmx_iob_p2c_req_pri_cnt_s    cn38xx;
18239    struct cvmx_iob_p2c_req_pri_cnt_s    cn38xxp2;
18240    struct cvmx_iob_p2c_req_pri_cnt_s    cn52xx;
18241    struct cvmx_iob_p2c_req_pri_cnt_s    cn52xxp1;
18242    struct cvmx_iob_p2c_req_pri_cnt_s    cn56xx;
18243    struct cvmx_iob_p2c_req_pri_cnt_s    cn56xxp1;
18244    struct cvmx_iob_p2c_req_pri_cnt_s    cn58xx;
18245    struct cvmx_iob_p2c_req_pri_cnt_s    cn58xxp1;
18246} cvmx_iob_p2c_req_pri_cnt_t;
18247
18248
18249/**
18250 * cvmx_iob_pkt_err
18251 *
18252 * IOB_PKT_ERR = IOB Packet Error Register
18253 *
18254 * Provides status about the failing packet recevie error. This is a PASS-2 register.
18255 */
18256typedef union
18257{
18258    uint64_t u64;
18259    struct cvmx_iob_pkt_err_s
18260    {
18261#if __BYTE_ORDER == __BIG_ENDIAN
18262        uint64_t reserved_6_63           : 58;
18263        uint64_t port                    : 6;       /**< When IOB_INT_SUM[3:0] bit is set, this field
18264                                                         latches the failing port associate with the
18265                                                         IOB_INT_SUM[3:0] bit set. */
18266#else
18267        uint64_t port                    : 6;
18268        uint64_t reserved_6_63           : 58;
18269#endif
18270    } s;
18271    struct cvmx_iob_pkt_err_s            cn30xx;
18272    struct cvmx_iob_pkt_err_s            cn31xx;
18273    struct cvmx_iob_pkt_err_s            cn38xx;
18274    struct cvmx_iob_pkt_err_s            cn38xxp2;
18275    struct cvmx_iob_pkt_err_s            cn50xx;
18276    struct cvmx_iob_pkt_err_s            cn52xx;
18277    struct cvmx_iob_pkt_err_s            cn52xxp1;
18278    struct cvmx_iob_pkt_err_s            cn56xx;
18279    struct cvmx_iob_pkt_err_s            cn56xxp1;
18280    struct cvmx_iob_pkt_err_s            cn58xx;
18281    struct cvmx_iob_pkt_err_s            cn58xxp1;
18282} cvmx_iob_pkt_err_t;
18283
18284
18285/**
18286 * cvmx_iob_to_cmb_credits
18287 *
18288 * IOB_TO_CMB_CREDITS = IOB To CMB Credits
18289 *
18290 * Controls the number of reads and writes that may be outstanding to the L2C (via the CMB).
18291 */
18292typedef union
18293{
18294    uint64_t u64;
18295    struct cvmx_iob_to_cmb_credits_s
18296    {
18297#if __BYTE_ORDER == __BIG_ENDIAN
18298        uint64_t reserved_9_63           : 55;
18299        uint64_t pko_rd                  : 3;       /**< Number of PKO reads that can be out to L2C where
18300                                                         0 == 8-credits. */
18301        uint64_t ncb_rd                  : 3;       /**< Number of NCB reads that can be out to L2C where
18302                                                         0 == 8-credits. */
18303        uint64_t ncb_wr                  : 3;       /**< Number of NCB/PKI writes that can be out to L2C
18304                                                         where 0 == 8-credits. */
18305#else
18306        uint64_t ncb_wr                  : 3;
18307        uint64_t ncb_rd                  : 3;
18308        uint64_t pko_rd                  : 3;
18309        uint64_t reserved_9_63           : 55;
18310#endif
18311    } s;
18312    struct cvmx_iob_to_cmb_credits_s     cn52xx;
18313} cvmx_iob_to_cmb_credits_t;
18314
18315
18316/**
18317 * cvmx_ipd_1st_mbuff_skip
18318 *
18319 * IPD_1ST_MBUFF_SKIP = IPD First MBUFF Word Skip Size
18320 *
18321 * The number of words that the IPD will skip when writing the first MBUFF.
18322 */
18323typedef union
18324{
18325    uint64_t u64;
18326    struct cvmx_ipd_1st_mbuff_skip_s
18327    {
18328#if __BYTE_ORDER == __BIG_ENDIAN
18329        uint64_t reserved_6_63           : 58;
18330        uint64_t skip_sz                 : 6;       /**< The number of 8-byte words from the top of the
18331                                                         1st MBUFF that the IPD will store the next-pointer.
18332                                                         Legal values are 0 to 32, where the MAX value
18333                                                         is also limited to:
18334                                                         IPD_PACKET_MBUFF_SIZE[MB_SIZE] - 18. */
18335#else
18336        uint64_t skip_sz                 : 6;
18337        uint64_t reserved_6_63           : 58;
18338#endif
18339    } s;
18340    struct cvmx_ipd_1st_mbuff_skip_s     cn30xx;
18341    struct cvmx_ipd_1st_mbuff_skip_s     cn31xx;
18342    struct cvmx_ipd_1st_mbuff_skip_s     cn38xx;
18343    struct cvmx_ipd_1st_mbuff_skip_s     cn38xxp2;
18344    struct cvmx_ipd_1st_mbuff_skip_s     cn50xx;
18345    struct cvmx_ipd_1st_mbuff_skip_s     cn52xx;
18346    struct cvmx_ipd_1st_mbuff_skip_s     cn52xxp1;
18347    struct cvmx_ipd_1st_mbuff_skip_s     cn56xx;
18348    struct cvmx_ipd_1st_mbuff_skip_s     cn56xxp1;
18349    struct cvmx_ipd_1st_mbuff_skip_s     cn58xx;
18350    struct cvmx_ipd_1st_mbuff_skip_s     cn58xxp1;
18351} cvmx_ipd_1st_mbuff_skip_t;
18352
18353
18354/**
18355 * cvmx_ipd_1st_next_ptr_back
18356 *
18357 * IPD_1st_NEXT_PTR_BACK = IPD First Next Pointer Back Values
18358 *
18359 * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF
18360 */
18361typedef union
18362{
18363    uint64_t u64;
18364    struct cvmx_ipd_1st_next_ptr_back_s
18365    {
18366#if __BYTE_ORDER == __BIG_ENDIAN
18367        uint64_t reserved_4_63           : 60;
18368        uint64_t back                    : 4;       /**< Used to find head of buffer from the nxt-hdr-ptr. */
18369#else
18370        uint64_t back                    : 4;
18371        uint64_t reserved_4_63           : 60;
18372#endif
18373    } s;
18374    struct cvmx_ipd_1st_next_ptr_back_s  cn30xx;
18375    struct cvmx_ipd_1st_next_ptr_back_s  cn31xx;
18376    struct cvmx_ipd_1st_next_ptr_back_s  cn38xx;
18377    struct cvmx_ipd_1st_next_ptr_back_s  cn38xxp2;
18378    struct cvmx_ipd_1st_next_ptr_back_s  cn50xx;
18379    struct cvmx_ipd_1st_next_ptr_back_s  cn52xx;
18380    struct cvmx_ipd_1st_next_ptr_back_s  cn52xxp1;
18381    struct cvmx_ipd_1st_next_ptr_back_s  cn56xx;
18382    struct cvmx_ipd_1st_next_ptr_back_s  cn56xxp1;
18383    struct cvmx_ipd_1st_next_ptr_back_s  cn58xx;
18384    struct cvmx_ipd_1st_next_ptr_back_s  cn58xxp1;
18385} cvmx_ipd_1st_next_ptr_back_t;
18386
18387
18388/**
18389 * cvmx_ipd_2nd_next_ptr_back
18390 *
18391 * IPD_2nd_NEXT_PTR_BACK = IPD Second Next Pointer Back Value
18392 *
18393 * Contains the Back Field for use in creating the Next Pointer Header for the First MBUF
18394 */
18395typedef union
18396{
18397    uint64_t u64;
18398    struct cvmx_ipd_2nd_next_ptr_back_s
18399    {
18400#if __BYTE_ORDER == __BIG_ENDIAN
18401        uint64_t reserved_4_63           : 60;
18402        uint64_t back                    : 4;       /**< Used to find head of buffer from the nxt-hdr-ptr. */
18403#else
18404        uint64_t back                    : 4;
18405        uint64_t reserved_4_63           : 60;
18406#endif
18407    } s;
18408    struct cvmx_ipd_2nd_next_ptr_back_s  cn30xx;
18409    struct cvmx_ipd_2nd_next_ptr_back_s  cn31xx;
18410    struct cvmx_ipd_2nd_next_ptr_back_s  cn38xx;
18411    struct cvmx_ipd_2nd_next_ptr_back_s  cn38xxp2;
18412    struct cvmx_ipd_2nd_next_ptr_back_s  cn50xx;
18413    struct cvmx_ipd_2nd_next_ptr_back_s  cn52xx;
18414    struct cvmx_ipd_2nd_next_ptr_back_s  cn52xxp1;
18415    struct cvmx_ipd_2nd_next_ptr_back_s  cn56xx;
18416    struct cvmx_ipd_2nd_next_ptr_back_s  cn56xxp1;
18417    struct cvmx_ipd_2nd_next_ptr_back_s  cn58xx;
18418    struct cvmx_ipd_2nd_next_ptr_back_s  cn58xxp1;
18419} cvmx_ipd_2nd_next_ptr_back_t;
18420
18421
18422/**
18423 * cvmx_ipd_bist_status
18424 *
18425 * IPD_BIST_STATUS = IPD BIST STATUS
18426 *
18427 * BIST Status for IPD's Memories.
18428 */
18429typedef union
18430{
18431    uint64_t u64;
18432    struct cvmx_ipd_bist_status_s
18433    {
18434#if __BYTE_ORDER == __BIG_ENDIAN
18435        uint64_t reserved_18_63          : 46;
18436        uint64_t csr_mem                 : 1;       /**< CSR Register Memory Bist Status. */
18437        uint64_t csr_ncmd                : 1;       /**< CSR NCB Commands Memory Bist Status. */
18438        uint64_t pwq_wqed                : 1;       /**< PWQ PIP WQE DONE Memory Bist Status. */
18439        uint64_t pwq_wp1                 : 1;       /**< PWQ WQE PAGE1 PTR Memory Bist Status. */
18440        uint64_t pwq_pow                 : 1;       /**< PWQ POW MEM Memory Bist Status. */
18441        uint64_t ipq_pbe1                : 1;       /**< IPQ PBE1 Memory Bist Status. */
18442        uint64_t ipq_pbe0                : 1;       /**< IPQ PBE0 Memory Bist Status. */
18443        uint64_t pbm3                    : 1;       /**< PBM3 Memory Bist Status. */
18444        uint64_t pbm2                    : 1;       /**< PBM2 Memory Bist Status. */
18445        uint64_t pbm1                    : 1;       /**< PBM1 Memory Bist Status. */
18446        uint64_t pbm0                    : 1;       /**< PBM0 Memory Bist Status. */
18447        uint64_t pbm_word                : 1;       /**< PBM_WORD Memory Bist Status. */
18448        uint64_t pwq1                    : 1;       /**< PWQ1 Memory Bist Status. */
18449        uint64_t pwq0                    : 1;       /**< PWQ0 Memory Bist Status. */
18450        uint64_t prc_off                 : 1;       /**< PRC_OFF Memory Bist Status. */
18451        uint64_t ipd_old                 : 1;       /**< IPD_OLD Memory Bist Status. */
18452        uint64_t ipd_new                 : 1;       /**< IPD_NEW Memory Bist Status. */
18453        uint64_t pwp                     : 1;       /**< PWP Memory Bist Status. */
18454#else
18455        uint64_t pwp                     : 1;
18456        uint64_t ipd_new                 : 1;
18457        uint64_t ipd_old                 : 1;
18458        uint64_t prc_off                 : 1;
18459        uint64_t pwq0                    : 1;
18460        uint64_t pwq1                    : 1;
18461        uint64_t pbm_word                : 1;
18462        uint64_t pbm0                    : 1;
18463        uint64_t pbm1                    : 1;
18464        uint64_t pbm2                    : 1;
18465        uint64_t pbm3                    : 1;
18466        uint64_t ipq_pbe0                : 1;
18467        uint64_t ipq_pbe1                : 1;
18468        uint64_t pwq_pow                 : 1;
18469        uint64_t pwq_wp1                 : 1;
18470        uint64_t pwq_wqed                : 1;
18471        uint64_t csr_ncmd                : 1;
18472        uint64_t csr_mem                 : 1;
18473        uint64_t reserved_18_63          : 46;
18474#endif
18475    } s;
18476    struct cvmx_ipd_bist_status_cn30xx
18477    {
18478#if __BYTE_ORDER == __BIG_ENDIAN
18479        uint64_t reserved_16_63          : 48;
18480        uint64_t pwq_wqed                : 1;       /**< PWQ PIP WQE DONE Memory Bist Status. */
18481        uint64_t pwq_wp1                 : 1;       /**< PWQ WQE PAGE1 PTR Memory Bist Status. */
18482        uint64_t pwq_pow                 : 1;       /**< PWQ POW MEM Memory Bist Status. */
18483        uint64_t ipq_pbe1                : 1;       /**< IPQ PBE1 Memory Bist Status. */
18484        uint64_t ipq_pbe0                : 1;       /**< IPQ PBE0 Memory Bist Status. */
18485        uint64_t pbm3                    : 1;       /**< PBM3 Memory Bist Status. */
18486        uint64_t pbm2                    : 1;       /**< PBM2 Memory Bist Status. */
18487        uint64_t pbm1                    : 1;       /**< PBM1 Memory Bist Status. */
18488        uint64_t pbm0                    : 1;       /**< PBM0 Memory Bist Status. */
18489        uint64_t pbm_word                : 1;       /**< PBM_WORD Memory Bist Status. */
18490        uint64_t pwq1                    : 1;       /**< PWQ1 Memory Bist Status. */
18491        uint64_t pwq0                    : 1;       /**< PWQ0 Memory Bist Status. */
18492        uint64_t prc_off                 : 1;       /**< PRC_OFF Memory Bist Status. */
18493        uint64_t ipd_old                 : 1;       /**< IPD_OLD Memory Bist Status. */
18494        uint64_t ipd_new                 : 1;       /**< IPD_NEW Memory Bist Status. */
18495        uint64_t pwp                     : 1;       /**< PWP Memory Bist Status. */
18496#else
18497        uint64_t pwp                     : 1;
18498        uint64_t ipd_new                 : 1;
18499        uint64_t ipd_old                 : 1;
18500        uint64_t prc_off                 : 1;
18501        uint64_t pwq0                    : 1;
18502        uint64_t pwq1                    : 1;
18503        uint64_t pbm_word                : 1;
18504        uint64_t pbm0                    : 1;
18505        uint64_t pbm1                    : 1;
18506        uint64_t pbm2                    : 1;
18507        uint64_t pbm3                    : 1;
18508        uint64_t ipq_pbe0                : 1;
18509        uint64_t ipq_pbe1                : 1;
18510        uint64_t pwq_pow                 : 1;
18511        uint64_t pwq_wp1                 : 1;
18512        uint64_t pwq_wqed                : 1;
18513        uint64_t reserved_16_63          : 48;
18514#endif
18515    } cn30xx;
18516    struct cvmx_ipd_bist_status_cn30xx   cn31xx;
18517    struct cvmx_ipd_bist_status_cn30xx   cn38xx;
18518    struct cvmx_ipd_bist_status_cn30xx   cn38xxp2;
18519    struct cvmx_ipd_bist_status_cn30xx   cn50xx;
18520    struct cvmx_ipd_bist_status_s        cn52xx;
18521    struct cvmx_ipd_bist_status_s        cn52xxp1;
18522    struct cvmx_ipd_bist_status_s        cn56xx;
18523    struct cvmx_ipd_bist_status_s        cn56xxp1;
18524    struct cvmx_ipd_bist_status_cn30xx   cn58xx;
18525    struct cvmx_ipd_bist_status_cn30xx   cn58xxp1;
18526} cvmx_ipd_bist_status_t;
18527
18528
18529/**
18530 * cvmx_ipd_bp_prt_red_end
18531 *
18532 * IPD_BP_PRT_RED_END = IPD Backpressure Port RED Enable
18533 *
18534 * When IPD applies backpressure to a PORT and the corresponding bit in this register is set,
18535 * the RED Unit will drop packets for that port.
18536 */
18537typedef union
18538{
18539    uint64_t u64;
18540    struct cvmx_ipd_bp_prt_red_end_s
18541    {
18542#if __BYTE_ORDER == __BIG_ENDIAN
18543        uint64_t reserved_40_63          : 24;
18544        uint64_t prt_enb                 : 40;      /**< The port corresponding to the bit position in this
18545                                                         field, will allow RED to drop back when port level
18546                                                         backpressure is applied to the port. The applying
18547                                                         of port-level backpressure for this RED dropping
18548                                                         does not take into consideration the value of
18549                                                         IPD_PORTX_BP_PAGE_CNT[BP_ENB]. */
18550#else
18551        uint64_t prt_enb                 : 40;
18552        uint64_t reserved_40_63          : 24;
18553#endif
18554    } s;
18555    struct cvmx_ipd_bp_prt_red_end_cn30xx
18556    {
18557#if __BYTE_ORDER == __BIG_ENDIAN
18558        uint64_t reserved_36_63          : 28;
18559        uint64_t prt_enb                 : 36;      /**< The port corresponding to the bit position in this
18560                                                         field, will allow RED to drop back when port level
18561                                                         backpressure is applied to the port. The applying
18562                                                         of port-level backpressure for this RED dropping
18563                                                         does not take into consideration the value of
18564                                                         IPD_PORTX_BP_PAGE_CNT[BP_ENB]. */
18565#else
18566        uint64_t prt_enb                 : 36;
18567        uint64_t reserved_36_63          : 28;
18568#endif
18569    } cn30xx;
18570    struct cvmx_ipd_bp_prt_red_end_cn30xx cn31xx;
18571    struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xx;
18572    struct cvmx_ipd_bp_prt_red_end_cn30xx cn38xxp2;
18573    struct cvmx_ipd_bp_prt_red_end_cn30xx cn50xx;
18574    struct cvmx_ipd_bp_prt_red_end_s     cn52xx;
18575    struct cvmx_ipd_bp_prt_red_end_s     cn52xxp1;
18576    struct cvmx_ipd_bp_prt_red_end_s     cn56xx;
18577    struct cvmx_ipd_bp_prt_red_end_s     cn56xxp1;
18578    struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xx;
18579    struct cvmx_ipd_bp_prt_red_end_cn30xx cn58xxp1;
18580} cvmx_ipd_bp_prt_red_end_t;
18581
18582
18583/**
18584 * cvmx_ipd_clk_count
18585 *
18586 * IPD_CLK_COUNT = IPD Clock Count
18587 *
18588 * Counts the number of core clocks periods since the de-asserition of reset.
18589 */
18590typedef union
18591{
18592    uint64_t u64;
18593    struct cvmx_ipd_clk_count_s
18594    {
18595#if __BYTE_ORDER == __BIG_ENDIAN
18596        uint64_t clk_cnt                 : 64;      /**< This counter will be zeroed when reset is applied
18597                                                         and will increment every rising edgge of the
18598                                                         core-clock. PASS2 FIELD. */
18599#else
18600        uint64_t clk_cnt                 : 64;
18601#endif
18602    } s;
18603    struct cvmx_ipd_clk_count_s          cn30xx;
18604    struct cvmx_ipd_clk_count_s          cn31xx;
18605    struct cvmx_ipd_clk_count_s          cn38xx;
18606    struct cvmx_ipd_clk_count_s          cn38xxp2;
18607    struct cvmx_ipd_clk_count_s          cn50xx;
18608    struct cvmx_ipd_clk_count_s          cn52xx;
18609    struct cvmx_ipd_clk_count_s          cn52xxp1;
18610    struct cvmx_ipd_clk_count_s          cn56xx;
18611    struct cvmx_ipd_clk_count_s          cn56xxp1;
18612    struct cvmx_ipd_clk_count_s          cn58xx;
18613    struct cvmx_ipd_clk_count_s          cn58xxp1;
18614} cvmx_ipd_clk_count_t;
18615
18616
18617/**
18618 * cvmx_ipd_ctl_status
18619 *
18620 * IPD_CTL_STATUS = IPS'd Control Status Register
18621 *
18622 * The number of words in a MBUFF used for packet data store.
18623 */
18624typedef union
18625{
18626    uint64_t u64;
18627    struct cvmx_ipd_ctl_status_s
18628    {
18629#if __BYTE_ORDER == __BIG_ENDIAN
18630        uint64_t reserved_15_63          : 49;
18631        uint64_t no_wptr                 : 1;       /**< When set '1' the WQE pointers will not be used and
18632                                                         the WQE will be located at the front of the packet. */
18633        uint64_t pq_apkt                 : 1;       /**< When set IPD_PORT_QOS_X_CNT WILL be incremented
18634                                                         by one for every work queue entry that is sent to
18635                                                         POW. */
18636        uint64_t pq_nabuf                : 1;       /**< When set IPD_PORT_QOS_X_CNT WILL NOT be
18637                                                         incremented when IPD allocates a buffer for a
18638                                                         packet. */
18639        uint64_t ipd_full                : 1;       /**< When clear '0' the IPD acts normaly.
18640                                                         When set '1' the IPD drive the IPD_BUFF_FULL line to
18641                                                         the IOB-arbiter, telling it to not give grants to
18642                                                         NCB devices sending packet data. */
18643        uint64_t pkt_off                 : 1;       /**< When clear '0' the IPD working normaly,
18644                                                         buffering the received packet data. When set '1'
18645                                                         the IPD will not buffer the received packet data. */
18646        uint64_t len_m8                  : 1;       /**< Setting of this bit will subtract 8 from the
18647                                                         data-length field in the header written wo the
18648                                                         POW and the top of a MBUFF.
18649                                                         OCTEAN PASS2 generates a length that includes the
18650                                                         length of the data + 8 for the header-field. By
18651                                                         setting this bit the 8 for the instr-field will
18652                                                         not be included in the length field of the header.
18653                                                         NOTE: IPD is compliant with the spec when this
18654                                                         field is '1'. */
18655        uint64_t reset                   : 1;       /**< When set '1' causes a reset of the IPD, except
18656                                                         RSL. */
18657        uint64_t addpkt                  : 1;       /**< When IPD_CTL_STATUS[ADDPKT] is set,
18658                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18659                                                         WILL be incremented by one for every work
18660                                                         queue entry that is sent to POW.
18661                                                         PASS-2 Field. */
18662        uint64_t naddbuf                 : 1;       /**< When IPD_CTL_STATUS[NADDBUF] is set,
18663                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18664                                                         WILL NOT be incremented when IPD allocates a
18665                                                         buffer for a packet on the port.
18666                                                         PASS-2 Field. */
18667        uint64_t pkt_lend                : 1;       /**< Changes PKT to little endian writes to L2C */
18668        uint64_t wqe_lend                : 1;       /**< Changes WQE to little endian writes to L2C */
18669        uint64_t pbp_en                  : 1;       /**< Port back pressure enable. When set '1' enables
18670                                                         the sending of port level backpressure to the
18671                                                         Octane input-ports. Once enabled the sending of
18672                                                         port-level-backpressure can not be disabled by
18673                                                         changing the value of this bit. */
18674        cvmx_ipd_mode_t opc_mode         : 2;       /**< 0 ==> All packet data (and next buffer pointers)
18675                                                         is written through to memory.
18676                                                         1 ==> All packet data (and next buffer pointers) is
18677                                                         written into the cache.
18678                                                         2 ==> The first aligned cache block holding the
18679                                                         packet data (and initial next buffer pointer) is
18680                                                         written to the L2 cache, all remaining cache blocks
18681                                                         are not written to the L2 cache.
18682                                                         3 ==> The first two aligned cache blocks holding
18683                                                         the packet data (and initial next buffer pointer)
18684                                                         are written to the L2 cache, all remaining cache
18685                                                         blocks are not written to the L2 cache. */
18686        uint64_t ipd_en                  : 1;       /**< When set '1' enable the operation of the IPD.
18687                                                         When clear '0', the IPD will appear to the
18688                                                         IOB-arbiter to be applying backpressure, this
18689                                                         causes the IOB-Arbiter to not send grants to NCB
18690                                                         devices requesting to send packet data to the IPD. */
18691#else
18692        uint64_t ipd_en                  : 1;
18693        cvmx_ipd_mode_t opc_mode         : 2;
18694        uint64_t pbp_en                  : 1;
18695        uint64_t wqe_lend                : 1;
18696        uint64_t pkt_lend                : 1;
18697        uint64_t naddbuf                 : 1;
18698        uint64_t addpkt                  : 1;
18699        uint64_t reset                   : 1;
18700        uint64_t len_m8                  : 1;
18701        uint64_t pkt_off                 : 1;
18702        uint64_t ipd_full                : 1;
18703        uint64_t pq_nabuf                : 1;
18704        uint64_t pq_apkt                 : 1;
18705        uint64_t no_wptr                 : 1;
18706        uint64_t reserved_15_63          : 49;
18707#endif
18708    } s;
18709    struct cvmx_ipd_ctl_status_cn30xx
18710    {
18711#if __BYTE_ORDER == __BIG_ENDIAN
18712        uint64_t reserved_10_63          : 54;
18713        uint64_t len_m8                  : 1;       /**< Setting of this bit will subtract 8 from the
18714                                                         data-length field in the header written wo the
18715                                                         POW and the top of a MBUFF.
18716                                                         OCTEAN generates a length that includes the
18717                                                         length of the data + 8 for the header-field. By
18718                                                         setting this bit the 8 for the instr-field will
18719                                                         not be included in the length field of the header.
18720                                                         NOTE: IPD is compliant with the spec when this
18721                                                         field is '1'. */
18722        uint64_t reset                   : 1;       /**< When set '1' causes a reset of the IPD, except
18723                                                         RSL. */
18724        uint64_t addpkt                  : 1;       /**< When IPD_CTL_STATUS[ADDPKT] is set,
18725                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18726                                                         WILL be incremented by one for every work
18727                                                         queue entry that is sent to POW. */
18728        uint64_t naddbuf                 : 1;       /**< When IPD_CTL_STATUS[NADDBUF] is set,
18729                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18730                                                         WILL NOT be incremented when IPD allocates a
18731                                                         buffer for a packet on the port. */
18732        uint64_t pkt_lend                : 1;       /**< Changes PKT to little endian writes to L2C */
18733        uint64_t wqe_lend                : 1;       /**< Changes WQE to little endian writes to L2C */
18734        uint64_t pbp_en                  : 1;       /**< Port back pressure enable. When set '1' enables
18735                                                         the sending of port level backpressure to the
18736                                                         Octane input-ports. Once enabled the sending of
18737                                                         port-level-backpressure can not be disabled by
18738                                                         changing the value of this bit.
18739                                                         GMXX_INF_MODE[EN] must be set to '1' for each
18740                                                         packet interface which requires port back pressure
18741                                                         prior to setting PBP_EN to '1'. */
18742        cvmx_ipd_mode_t opc_mode         : 2;       /**< 0 ==> All packet data (and next buffer pointers)
18743                                                         is written through to memory.
18744                                                         1 ==> All packet data (and next buffer pointers) is
18745                                                         written into the cache.
18746                                                         2 ==> The first aligned cache block holding the
18747                                                         packet data (and initial next buffer pointer) is
18748                                                         written to the L2 cache, all remaining cache blocks
18749                                                         are not written to the L2 cache.
18750                                                         3 ==> The first two aligned cache blocks holding
18751                                                         the packet data (and initial next buffer pointer)
18752                                                         are written to the L2 cache, all remaining cache
18753                                                         blocks are not written to the L2 cache. */
18754        uint64_t ipd_en                  : 1;       /**< When set '1' enable the operation of the IPD. */
18755#else
18756        uint64_t ipd_en                  : 1;
18757        cvmx_ipd_mode_t opc_mode         : 2;
18758        uint64_t pbp_en                  : 1;
18759        uint64_t wqe_lend                : 1;
18760        uint64_t pkt_lend                : 1;
18761        uint64_t naddbuf                 : 1;
18762        uint64_t addpkt                  : 1;
18763        uint64_t reset                   : 1;
18764        uint64_t len_m8                  : 1;
18765        uint64_t reserved_10_63          : 54;
18766#endif
18767    } cn30xx;
18768    struct cvmx_ipd_ctl_status_cn30xx    cn31xx;
18769    struct cvmx_ipd_ctl_status_cn30xx    cn38xx;
18770    struct cvmx_ipd_ctl_status_cn38xxp2
18771    {
18772#if __BYTE_ORDER == __BIG_ENDIAN
18773        uint64_t reserved_9_63           : 55;
18774        uint64_t reset                   : 1;       /**< When set '1' causes a reset of the IPD, except
18775                                                         RSL. */
18776        uint64_t addpkt                  : 1;       /**< When IPD_CTL_STATUS[ADDPKT] is set,
18777                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18778                                                         WILL be incremented by one for every work
18779                                                         queue entry that is sent to POW.
18780                                                         PASS-2 Field. */
18781        uint64_t naddbuf                 : 1;       /**< When IPD_CTL_STATUS[NADDBUF] is set,
18782                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18783                                                         WILL NOT be incremented when IPD allocates a
18784                                                         buffer for a packet on the port.
18785                                                         PASS-2 Field. */
18786        uint64_t pkt_lend                : 1;       /**< Changes PKT to little endian writes to L2C */
18787        uint64_t wqe_lend                : 1;       /**< Changes WQE to little endian writes to L2C */
18788        uint64_t pbp_en                  : 1;       /**< Port back pressure enable. When set '1' enables
18789                                                         the sending of port level backpressure to the
18790                                                         Octane input-ports. Once enabled the sending of
18791                                                         port-level-backpressure can not be disabled by
18792                                                         changing the value of this bit. */
18793        cvmx_ipd_mode_t opc_mode         : 2;       /**< 0 ==> All packet data (and next buffer pointers)
18794                                                         is written through to memory.
18795                                                         1 ==> All packet data (and next buffer pointers) is
18796                                                         written into the cache.
18797                                                         2 ==> The first aligned cache block holding the
18798                                                         packet data (and initial next buffer pointer) is
18799                                                         written to the L2 cache, all remaining cache blocks
18800                                                         are not written to the L2 cache.
18801                                                         3 ==> The first two aligned cache blocks holding
18802                                                         the packet data (and initial next buffer pointer)
18803                                                         are written to the L2 cache, all remaining cache
18804                                                         blocks are not written to the L2 cache. */
18805        uint64_t ipd_en                  : 1;       /**< When set '1' enable the operation of the IPD. */
18806#else
18807        uint64_t ipd_en                  : 1;
18808        cvmx_ipd_mode_t opc_mode         : 2;
18809        uint64_t pbp_en                  : 1;
18810        uint64_t wqe_lend                : 1;
18811        uint64_t pkt_lend                : 1;
18812        uint64_t naddbuf                 : 1;
18813        uint64_t addpkt                  : 1;
18814        uint64_t reset                   : 1;
18815        uint64_t reserved_9_63           : 55;
18816#endif
18817    } cn38xxp2;
18818    struct cvmx_ipd_ctl_status_s         cn50xx;
18819    struct cvmx_ipd_ctl_status_s         cn52xx;
18820    struct cvmx_ipd_ctl_status_s         cn52xxp1;
18821    struct cvmx_ipd_ctl_status_s         cn56xx;
18822    struct cvmx_ipd_ctl_status_s         cn56xxp1;
18823    struct cvmx_ipd_ctl_status_cn58xx
18824    {
18825#if __BYTE_ORDER == __BIG_ENDIAN
18826        uint64_t reserved_12_63          : 52;
18827        uint64_t ipd_full                : 1;       /**< When clear '0' the IPD acts normaly.
18828                                                         When set '1' the IPD drive the IPD_BUFF_FULL line to
18829                                                         the IOB-arbiter, telling it to not give grants to
18830                                                         NCB devices sending packet data. */
18831        uint64_t pkt_off                 : 1;       /**< When clear '0' the IPD working normaly,
18832                                                         buffering the received packet data. When set '1'
18833                                                         the IPD will not buffer the received packet data. */
18834        uint64_t len_m8                  : 1;       /**< Setting of this bit will subtract 8 from the
18835                                                         data-length field in the header written wo the
18836                                                         POW and the top of a MBUFF.
18837                                                         OCTEAN PASS2 generates a length that includes the
18838                                                         length of the data + 8 for the header-field. By
18839                                                         setting this bit the 8 for the instr-field will
18840                                                         not be included in the length field of the header.
18841                                                         NOTE: IPD is compliant with the spec when this
18842                                                         field is '1'. */
18843        uint64_t reset                   : 1;       /**< When set '1' causes a reset of the IPD, except
18844                                                         RSL. */
18845        uint64_t addpkt                  : 1;       /**< When IPD_CTL_STATUS[ADDPKT] is set,
18846                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18847                                                         WILL be incremented by one for every work
18848                                                         queue entry that is sent to POW.
18849                                                         PASS-2 Field. */
18850        uint64_t naddbuf                 : 1;       /**< When IPD_CTL_STATUS[NADDBUF] is set,
18851                                                         IPD_PORT_BP_COUNTERS_PAIR(port)[CNT_VAL]
18852                                                         WILL NOT be incremented when IPD allocates a
18853                                                         buffer for a packet on the port.
18854                                                         PASS-2 Field. */
18855        uint64_t pkt_lend                : 1;       /**< Changes PKT to little endian writes to L2C */
18856        uint64_t wqe_lend                : 1;       /**< Changes WQE to little endian writes to L2C */
18857        uint64_t pbp_en                  : 1;       /**< Port back pressure enable. When set '1' enables
18858                                                         the sending of port level backpressure to the
18859                                                         Octane input-ports. Once enabled the sending of
18860                                                         port-level-backpressure can not be disabled by
18861                                                         changing the value of this bit. */
18862        cvmx_ipd_mode_t opc_mode         : 2;       /**< 0 ==> All packet data (and next buffer pointers)
18863                                                         is written through to memory.
18864                                                         1 ==> All packet data (and next buffer pointers) is
18865                                                         written into the cache.
18866                                                         2 ==> The first aligned cache block holding the
18867                                                         packet data (and initial next buffer pointer) is
18868                                                         written to the L2 cache, all remaining cache blocks
18869                                                         are not written to the L2 cache.
18870                                                         3 ==> The first two aligned cache blocks holding
18871                                                         the packet data (and initial next buffer pointer)
18872                                                         are written to the L2 cache, all remaining cache
18873                                                         blocks are not written to the L2 cache. */
18874        uint64_t ipd_en                  : 1;       /**< When set '1' enable the operation of the IPD.
18875                                                         When clear '0', the IPD will appear to the
18876                                                         IOB-arbiter to be applying backpressure, this
18877                                                         causes the IOB-Arbiter to not send grants to NCB
18878                                                         devices requesting to send packet data to the IPD. */
18879#else
18880        uint64_t ipd_en                  : 1;
18881        cvmx_ipd_mode_t opc_mode         : 2;
18882        uint64_t pbp_en                  : 1;
18883        uint64_t wqe_lend                : 1;
18884        uint64_t pkt_lend                : 1;
18885        uint64_t naddbuf                 : 1;
18886        uint64_t addpkt                  : 1;
18887        uint64_t reset                   : 1;
18888        uint64_t len_m8                  : 1;
18889        uint64_t pkt_off                 : 1;
18890        uint64_t ipd_full                : 1;
18891        uint64_t reserved_12_63          : 52;
18892#endif
18893    } cn58xx;
18894    struct cvmx_ipd_ctl_status_cn58xx    cn58xxp1;
18895} cvmx_ipd_ctl_status_t;
18896
18897
18898/**
18899 * cvmx_ipd_int_enb
18900 *
18901 * IPD_INTERRUPT_ENB = IPD Interrupt Enable Register
18902 *
18903 * Used to enable the various interrupting conditions of IPD
18904 */
18905typedef union
18906{
18907    uint64_t u64;
18908    struct cvmx_ipd_int_enb_s
18909    {
18910#if __BYTE_ORDER == __BIG_ENDIAN
18911        uint64_t reserved_12_63          : 52;
18912        uint64_t pq_sub                  : 1;       /**< Allows an interrupt to be sent when the
18913                                                         corresponding bit in the IPD_INT_SUM is set. */
18914        uint64_t pq_add                  : 1;       /**< Allows an interrupt to be sent when the
18915                                                         corresponding bit in the IPD_INT_SUM is set. */
18916        uint64_t bc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18917                                                         corresponding bit in the IPD_INT_SUM is set.
18918                                                         This is a PASS-3 Field. */
18919        uint64_t d_coll                  : 1;       /**< Allows an interrupt to be sent when the
18920                                                         corresponding bit in the IPD_INT_SUM is set.
18921                                                         This is a PASS-3 Field. */
18922        uint64_t c_coll                  : 1;       /**< Allows an interrupt to be sent when the
18923                                                         corresponding bit in the IPD_INT_SUM is set.
18924                                                         This is a PASS-3 Field. */
18925        uint64_t cc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18926                                                         corresponding bit in the IPD_INT_SUM is set.
18927                                                         This is a PASS-3 Field. */
18928        uint64_t dc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18929                                                         corresponding bit in the IPD_INT_SUM is set.
18930                                                         This is a PASS-3 Field. */
18931        uint64_t bp_sub                  : 1;       /**< Enables interrupts when a backpressure subtract
18932                                                         has an illegal value. */
18933        uint64_t prc_par3                : 1;       /**< Enable parity error interrupts for bits
18934                                                         [127:96] of the PBM memory. */
18935        uint64_t prc_par2                : 1;       /**< Enable parity error interrupts for bits
18936                                                         [95:64] of the PBM memory. */
18937        uint64_t prc_par1                : 1;       /**< Enable parity error interrupts for bits
18938                                                         [63:32] of the PBM memory. */
18939        uint64_t prc_par0                : 1;       /**< Enable parity error interrupts for bits
18940                                                         [31:0] of the PBM memory. */
18941#else
18942        uint64_t prc_par0                : 1;
18943        uint64_t prc_par1                : 1;
18944        uint64_t prc_par2                : 1;
18945        uint64_t prc_par3                : 1;
18946        uint64_t bp_sub                  : 1;
18947        uint64_t dc_ovr                  : 1;
18948        uint64_t cc_ovr                  : 1;
18949        uint64_t c_coll                  : 1;
18950        uint64_t d_coll                  : 1;
18951        uint64_t bc_ovr                  : 1;
18952        uint64_t pq_add                  : 1;
18953        uint64_t pq_sub                  : 1;
18954        uint64_t reserved_12_63          : 52;
18955#endif
18956    } s;
18957    struct cvmx_ipd_int_enb_cn30xx
18958    {
18959#if __BYTE_ORDER == __BIG_ENDIAN
18960        uint64_t reserved_5_63           : 59;
18961        uint64_t bp_sub                  : 1;       /**< Enables interrupts when a backpressure subtract
18962                                                         has an illegal value. */
18963        uint64_t prc_par3                : 1;       /**< Enable parity error interrupts for bits
18964                                                         [127:96] of the PBM memory. */
18965        uint64_t prc_par2                : 1;       /**< Enable parity error interrupts for bits
18966                                                         [95:64] of the PBM memory. */
18967        uint64_t prc_par1                : 1;       /**< Enable parity error interrupts for bits
18968                                                         [63:32] of the PBM memory. */
18969        uint64_t prc_par0                : 1;       /**< Enable parity error interrupts for bits
18970                                                         [31:0] of the PBM memory. */
18971#else
18972        uint64_t prc_par0                : 1;
18973        uint64_t prc_par1                : 1;
18974        uint64_t prc_par2                : 1;
18975        uint64_t prc_par3                : 1;
18976        uint64_t bp_sub                  : 1;
18977        uint64_t reserved_5_63           : 59;
18978#endif
18979    } cn30xx;
18980    struct cvmx_ipd_int_enb_cn30xx       cn31xx;
18981    struct cvmx_ipd_int_enb_cn38xx
18982    {
18983#if __BYTE_ORDER == __BIG_ENDIAN
18984        uint64_t reserved_10_63          : 54;
18985        uint64_t bc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18986                                                         corresponding bit in the IPD_INT_SUM is set.
18987                                                         This is a PASS-3 Field. */
18988        uint64_t d_coll                  : 1;       /**< Allows an interrupt to be sent when the
18989                                                         corresponding bit in the IPD_INT_SUM is set.
18990                                                         This is a PASS-3 Field. */
18991        uint64_t c_coll                  : 1;       /**< Allows an interrupt to be sent when the
18992                                                         corresponding bit in the IPD_INT_SUM is set.
18993                                                         This is a PASS-3 Field. */
18994        uint64_t cc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18995                                                         corresponding bit in the IPD_INT_SUM is set.
18996                                                         This is a PASS-3 Field. */
18997        uint64_t dc_ovr                  : 1;       /**< Allows an interrupt to be sent when the
18998                                                         corresponding bit in the IPD_INT_SUM is set.
18999                                                         This is a PASS-3 Field. */
19000        uint64_t bp_sub                  : 1;       /**< Enables interrupts when a backpressure subtract
19001                                                         has an illegal value. */
19002        uint64_t prc_par3                : 1;       /**< Enable parity error interrupts for bits
19003                                                         [127:96] of the PBM memory. */
19004        uint64_t prc_par2                : 1;       /**< Enable parity error interrupts for bits
19005                                                         [95:64] of the PBM memory. */
19006        uint64_t prc_par1                : 1;       /**< Enable parity error interrupts for bits
19007                                                         [63:32] of the PBM memory. */
19008        uint64_t prc_par0                : 1;       /**< Enable parity error interrupts for bits
19009                                                         [31:0] of the PBM memory. */
19010#else
19011        uint64_t prc_par0                : 1;
19012        uint64_t prc_par1                : 1;
19013        uint64_t prc_par2                : 1;
19014        uint64_t prc_par3                : 1;
19015        uint64_t bp_sub                  : 1;
19016        uint64_t dc_ovr                  : 1;
19017        uint64_t cc_ovr                  : 1;
19018        uint64_t c_coll                  : 1;
19019        uint64_t d_coll                  : 1;
19020        uint64_t bc_ovr                  : 1;
19021        uint64_t reserved_10_63          : 54;
19022#endif
19023    } cn38xx;
19024    struct cvmx_ipd_int_enb_cn30xx       cn38xxp2;
19025    struct cvmx_ipd_int_enb_cn38xx       cn50xx;
19026    struct cvmx_ipd_int_enb_s            cn52xx;
19027    struct cvmx_ipd_int_enb_s            cn52xxp1;
19028    struct cvmx_ipd_int_enb_s            cn56xx;
19029    struct cvmx_ipd_int_enb_s            cn56xxp1;
19030    struct cvmx_ipd_int_enb_cn38xx       cn58xx;
19031    struct cvmx_ipd_int_enb_cn38xx       cn58xxp1;
19032} cvmx_ipd_int_enb_t;
19033
19034
19035/**
19036 * cvmx_ipd_int_sum
19037 *
19038 * IPD_INTERRUPT_SUM = IPD Interrupt Summary Register
19039 *
19040 * Set when an interrupt condition occurs, write '1' to clear.
19041 */
19042typedef union
19043{
19044    uint64_t u64;
19045    struct cvmx_ipd_int_sum_s
19046    {
19047#if __BYTE_ORDER == __BIG_ENDIAN
19048        uint64_t reserved_12_63          : 52;
19049        uint64_t pq_sub                  : 1;       /**< Set when a port-qos does an sub to the count
19050                                                         that causes the counter to wrap. */
19051        uint64_t pq_add                  : 1;       /**< Set when a port-qos does an add to the count
19052                                                         that causes the counter to wrap. */
19053        uint64_t bc_ovr                  : 1;       /**< Set when the byte-count to send to IOB overflows.
19054                                                         This is a PASS-3 Field. */
19055        uint64_t d_coll                  : 1;       /**< Set when the packet/WQE data to be sent to IOB
19056                                                         collides.
19057                                                         This is a PASS-3 Field. */
19058        uint64_t c_coll                  : 1;       /**< Set when the packet/WQE commands to be sent to IOB
19059                                                         collides.
19060                                                         This is a PASS-3 Field. */
19061        uint64_t cc_ovr                  : 1;       /**< Set when the command credits to the IOB overflow.
19062                                                         This is a PASS-3 Field. */
19063        uint64_t dc_ovr                  : 1;       /**< Set when the data credits to the IOB overflow.
19064                                                         This is a PASS-3 Field. */
19065        uint64_t bp_sub                  : 1;       /**< Set when a backpressure subtract is done with a
19066                                                         supplied illegal value. */
19067        uint64_t prc_par3                : 1;       /**< Set when a parity error is dected for bits
19068                                                         [127:96] of the PBM memory. */
19069        uint64_t prc_par2                : 1;       /**< Set when a parity error is dected for bits
19070                                                         [95:64] of the PBM memory. */
19071        uint64_t prc_par1                : 1;       /**< Set when a parity error is dected for bits
19072                                                         [63:32] of the PBM memory. */
19073        uint64_t prc_par0                : 1;       /**< Set when a parity error is dected for bits
19074                                                         [31:0] of the PBM memory. */
19075#else
19076        uint64_t prc_par0                : 1;
19077        uint64_t prc_par1                : 1;
19078        uint64_t prc_par2                : 1;
19079        uint64_t prc_par3                : 1;
19080        uint64_t bp_sub                  : 1;
19081        uint64_t dc_ovr                  : 1;
19082        uint64_t cc_ovr                  : 1;
19083        uint64_t c_coll                  : 1;
19084        uint64_t d_coll                  : 1;
19085        uint64_t bc_ovr                  : 1;
19086        uint64_t pq_add                  : 1;
19087        uint64_t pq_sub                  : 1;
19088        uint64_t reserved_12_63          : 52;
19089#endif
19090    } s;
19091    struct cvmx_ipd_int_sum_cn30xx
19092    {
19093#if __BYTE_ORDER == __BIG_ENDIAN
19094        uint64_t reserved_5_63           : 59;
19095        uint64_t bp_sub                  : 1;       /**< Set when a backpressure subtract is done with a
19096                                                         supplied illegal value. */
19097        uint64_t prc_par3                : 1;       /**< Set when a parity error is dected for bits
19098                                                         [127:96] of the PBM memory. */
19099        uint64_t prc_par2                : 1;       /**< Set when a parity error is dected for bits
19100                                                         [95:64] of the PBM memory. */
19101        uint64_t prc_par1                : 1;       /**< Set when a parity error is dected for bits
19102                                                         [63:32] of the PBM memory. */
19103        uint64_t prc_par0                : 1;       /**< Set when a parity error is dected for bits
19104                                                         [31:0] of the PBM memory. */
19105#else
19106        uint64_t prc_par0                : 1;
19107        uint64_t prc_par1                : 1;
19108        uint64_t prc_par2                : 1;
19109        uint64_t prc_par3                : 1;
19110        uint64_t bp_sub                  : 1;
19111        uint64_t reserved_5_63           : 59;
19112#endif
19113    } cn30xx;
19114    struct cvmx_ipd_int_sum_cn30xx       cn31xx;
19115    struct cvmx_ipd_int_sum_cn38xx
19116    {
19117#if __BYTE_ORDER == __BIG_ENDIAN
19118        uint64_t reserved_10_63          : 54;
19119        uint64_t bc_ovr                  : 1;       /**< Set when the byte-count to send to IOB overflows.
19120                                                         This is a PASS-3 Field. */
19121        uint64_t d_coll                  : 1;       /**< Set when the packet/WQE data to be sent to IOB
19122                                                         collides.
19123                                                         This is a PASS-3 Field. */
19124        uint64_t c_coll                  : 1;       /**< Set when the packet/WQE commands to be sent to IOB
19125                                                         collides.
19126                                                         This is a PASS-3 Field. */
19127        uint64_t cc_ovr                  : 1;       /**< Set when the command credits to the IOB overflow.
19128                                                         This is a PASS-3 Field. */
19129        uint64_t dc_ovr                  : 1;       /**< Set when the data credits to the IOB overflow.
19130                                                         This is a PASS-3 Field. */
19131        uint64_t bp_sub                  : 1;       /**< Set when a backpressure subtract is done with a
19132                                                         supplied illegal value. */
19133        uint64_t prc_par3                : 1;       /**< Set when a parity error is dected for bits
19134                                                         [127:96] of the PBM memory. */
19135        uint64_t prc_par2                : 1;       /**< Set when a parity error is dected for bits
19136                                                         [95:64] of the PBM memory. */
19137        uint64_t prc_par1                : 1;       /**< Set when a parity error is dected for bits
19138                                                         [63:32] of the PBM memory. */
19139        uint64_t prc_par0                : 1;       /**< Set when a parity error is dected for bits
19140                                                         [31:0] of the PBM memory. */
19141#else
19142        uint64_t prc_par0                : 1;
19143        uint64_t prc_par1                : 1;
19144        uint64_t prc_par2                : 1;
19145        uint64_t prc_par3                : 1;
19146        uint64_t bp_sub                  : 1;
19147        uint64_t dc_ovr                  : 1;
19148        uint64_t cc_ovr                  : 1;
19149        uint64_t c_coll                  : 1;
19150        uint64_t d_coll                  : 1;
19151        uint64_t bc_ovr                  : 1;
19152        uint64_t reserved_10_63          : 54;
19153#endif
19154    } cn38xx;
19155    struct cvmx_ipd_int_sum_cn30xx       cn38xxp2;
19156    struct cvmx_ipd_int_sum_cn38xx       cn50xx;
19157    struct cvmx_ipd_int_sum_s            cn52xx;
19158    struct cvmx_ipd_int_sum_s            cn52xxp1;
19159    struct cvmx_ipd_int_sum_s            cn56xx;
19160    struct cvmx_ipd_int_sum_s            cn56xxp1;
19161    struct cvmx_ipd_int_sum_cn38xx       cn58xx;
19162    struct cvmx_ipd_int_sum_cn38xx       cn58xxp1;
19163} cvmx_ipd_int_sum_t;
19164
19165
19166/**
19167 * cvmx_ipd_not_1st_mbuff_skip
19168 *
19169 * IPD_NOT_1ST_MBUFF_SKIP = IPD Not First MBUFF Word Skip Size
19170 *
19171 * The number of words that the IPD will skip when writing any MBUFF that is not the first.
19172 */
19173typedef union
19174{
19175    uint64_t u64;
19176    struct cvmx_ipd_not_1st_mbuff_skip_s
19177    {
19178#if __BYTE_ORDER == __BIG_ENDIAN
19179        uint64_t reserved_6_63           : 58;
19180        uint64_t skip_sz                 : 6;       /**< The number of 8-byte words from the top of any
19181                                                         MBUFF, that is not the 1st MBUFF, that the IPD
19182                                                         will write the next-pointer.
19183                                                         Legal values are 0 to 32, where the MAX value
19184                                                         is also limited to:
19185                                                         IPD_PACKET_MBUFF_SIZE[MB_SIZE] - 16. */
19186#else
19187        uint64_t skip_sz                 : 6;
19188        uint64_t reserved_6_63           : 58;
19189#endif
19190    } s;
19191    struct cvmx_ipd_not_1st_mbuff_skip_s cn30xx;
19192    struct cvmx_ipd_not_1st_mbuff_skip_s cn31xx;
19193    struct cvmx_ipd_not_1st_mbuff_skip_s cn38xx;
19194    struct cvmx_ipd_not_1st_mbuff_skip_s cn38xxp2;
19195    struct cvmx_ipd_not_1st_mbuff_skip_s cn50xx;
19196    struct cvmx_ipd_not_1st_mbuff_skip_s cn52xx;
19197    struct cvmx_ipd_not_1st_mbuff_skip_s cn52xxp1;
19198    struct cvmx_ipd_not_1st_mbuff_skip_s cn56xx;
19199    struct cvmx_ipd_not_1st_mbuff_skip_s cn56xxp1;
19200    struct cvmx_ipd_not_1st_mbuff_skip_s cn58xx;
19201    struct cvmx_ipd_not_1st_mbuff_skip_s cn58xxp1;
19202} cvmx_ipd_not_1st_mbuff_skip_t;
19203
19204
19205/**
19206 * cvmx_ipd_packet_mbuff_size
19207 *
19208 * IPD_PACKET_MBUFF_SIZE = IPD's PACKET MUBUF Size In Words
19209 *
19210 * The number of words in a MBUFF used for packet data store.
19211 */
19212typedef union
19213{
19214    uint64_t u64;
19215    struct cvmx_ipd_packet_mbuff_size_s
19216    {
19217#if __BYTE_ORDER == __BIG_ENDIAN
19218        uint64_t reserved_12_63          : 52;
19219        uint64_t mb_size                 : 12;      /**< The number of 8-byte words in a MBUF.
19220                                                         This must be a number in the range of 32 to
19221                                                         2048.
19222                                                         This is also the size of the FPA's
19223                                                         Queue-0 Free-Page. */
19224#else
19225        uint64_t mb_size                 : 12;
19226        uint64_t reserved_12_63          : 52;
19227#endif
19228    } s;
19229    struct cvmx_ipd_packet_mbuff_size_s  cn30xx;
19230    struct cvmx_ipd_packet_mbuff_size_s  cn31xx;
19231    struct cvmx_ipd_packet_mbuff_size_s  cn38xx;
19232    struct cvmx_ipd_packet_mbuff_size_s  cn38xxp2;
19233    struct cvmx_ipd_packet_mbuff_size_s  cn50xx;
19234    struct cvmx_ipd_packet_mbuff_size_s  cn52xx;
19235    struct cvmx_ipd_packet_mbuff_size_s  cn52xxp1;
19236    struct cvmx_ipd_packet_mbuff_size_s  cn56xx;
19237    struct cvmx_ipd_packet_mbuff_size_s  cn56xxp1;
19238    struct cvmx_ipd_packet_mbuff_size_s  cn58xx;
19239    struct cvmx_ipd_packet_mbuff_size_s  cn58xxp1;
19240} cvmx_ipd_packet_mbuff_size_t;
19241
19242
19243/**
19244 * cvmx_ipd_pkt_ptr_valid
19245 *
19246 * IPD_PKT_PTR_VALID = IPD's Packet Pointer Valid
19247 *
19248 * The value of the packet-pointer fetched and in the valid register.
19249 */
19250typedef union
19251{
19252    uint64_t u64;
19253    struct cvmx_ipd_pkt_ptr_valid_s
19254    {
19255#if __BYTE_ORDER == __BIG_ENDIAN
19256        uint64_t reserved_29_63          : 35;
19257        uint64_t ptr                     : 29;      /**< Pointer value. */
19258#else
19259        uint64_t ptr                     : 29;
19260        uint64_t reserved_29_63          : 35;
19261#endif
19262    } s;
19263    struct cvmx_ipd_pkt_ptr_valid_s      cn30xx;
19264    struct cvmx_ipd_pkt_ptr_valid_s      cn31xx;
19265    struct cvmx_ipd_pkt_ptr_valid_s      cn38xx;
19266    struct cvmx_ipd_pkt_ptr_valid_s      cn50xx;
19267    struct cvmx_ipd_pkt_ptr_valid_s      cn52xx;
19268    struct cvmx_ipd_pkt_ptr_valid_s      cn52xxp1;
19269    struct cvmx_ipd_pkt_ptr_valid_s      cn56xx;
19270    struct cvmx_ipd_pkt_ptr_valid_s      cn56xxp1;
19271    struct cvmx_ipd_pkt_ptr_valid_s      cn58xx;
19272    struct cvmx_ipd_pkt_ptr_valid_s      cn58xxp1;
19273} cvmx_ipd_pkt_ptr_valid_t;
19274
19275
19276/**
19277 * cvmx_ipd_port#_bp_page_cnt
19278 *
19279 * IPD_PORTX_BP_PAGE_CNT = IPD Port Backpressure Page Count
19280 *
19281 * The number of pages in use by the port that when exceeded, backpressure will be applied to the port.
19282 */
19283typedef union
19284{
19285    uint64_t u64;
19286    struct cvmx_ipd_portx_bp_page_cnt_s
19287    {
19288#if __BYTE_ORDER == __BIG_ENDIAN
19289        uint64_t reserved_18_63          : 46;
19290        uint64_t bp_enb                  : 1;       /**< When set '1' BP will be applied, if '0' BP will
19291                                                         not be applied to port. */
19292        uint64_t page_cnt                : 17;      /**< The number of page pointers assigned to
19293                                                         the port, that when exceeded will cause
19294                                                         back-pressure to be applied to the port.
19295                                                         This value is in 256 page-pointer increments,
19296                                                         (i.e. 0 = 0-page-ptrs, 1 = 256-page-ptrs,..) */
19297#else
19298        uint64_t page_cnt                : 17;
19299        uint64_t bp_enb                  : 1;
19300        uint64_t reserved_18_63          : 46;
19301#endif
19302    } s;
19303    struct cvmx_ipd_portx_bp_page_cnt_s  cn30xx;
19304    struct cvmx_ipd_portx_bp_page_cnt_s  cn31xx;
19305    struct cvmx_ipd_portx_bp_page_cnt_s  cn38xx;
19306    struct cvmx_ipd_portx_bp_page_cnt_s  cn38xxp2;
19307    struct cvmx_ipd_portx_bp_page_cnt_s  cn50xx;
19308    struct cvmx_ipd_portx_bp_page_cnt_s  cn52xx;
19309    struct cvmx_ipd_portx_bp_page_cnt_s  cn52xxp1;
19310    struct cvmx_ipd_portx_bp_page_cnt_s  cn56xx;
19311    struct cvmx_ipd_portx_bp_page_cnt_s  cn56xxp1;
19312    struct cvmx_ipd_portx_bp_page_cnt_s  cn58xx;
19313    struct cvmx_ipd_portx_bp_page_cnt_s  cn58xxp1;
19314} cvmx_ipd_portx_bp_page_cnt_t;
19315
19316
19317/**
19318 * cvmx_ipd_port#_bp_page_cnt2
19319 *
19320 * IPD_PORTX_BP_PAGE_CNT2 = IPD Port Backpressure Page Count
19321 *
19322 * The number of pages in use by the port that when exceeded, backpressure will be applied to the port.
19323 */
19324typedef union
19325{
19326    uint64_t u64;
19327    struct cvmx_ipd_portx_bp_page_cnt2_s
19328    {
19329#if __BYTE_ORDER == __BIG_ENDIAN
19330        uint64_t reserved_18_63          : 46;
19331        uint64_t bp_enb                  : 1;       /**< When set '1' BP will be applied, if '0' BP will
19332                                                         not be applied to port. */
19333        uint64_t page_cnt                : 17;      /**< The number of page pointers assigned to
19334                                                         the port, that when exceeded will cause
19335                                                         back-pressure to be applied to the port.
19336                                                         This value is in 256 page-pointer increments,
19337                                                         (i.e. 0 = 0-page-ptrs, 1 = 256-page-ptrs,..) */
19338#else
19339        uint64_t page_cnt                : 17;
19340        uint64_t bp_enb                  : 1;
19341        uint64_t reserved_18_63          : 46;
19342#endif
19343    } s;
19344    struct cvmx_ipd_portx_bp_page_cnt2_s cn52xx;
19345    struct cvmx_ipd_portx_bp_page_cnt2_s cn52xxp1;
19346    struct cvmx_ipd_portx_bp_page_cnt2_s cn56xx;
19347    struct cvmx_ipd_portx_bp_page_cnt2_s cn56xxp1;
19348} cvmx_ipd_portx_bp_page_cnt2_t;
19349
19350
19351/**
19352 * cvmx_ipd_port_bp_counters2_pair#
19353 *
19354 * IPD_PORT_BP_COUNTERS2_PAIRX = MBUF Counters port Ports used to generate Back Pressure Per Port.
19355 *
19356 */
19357typedef union
19358{
19359    uint64_t u64;
19360    struct cvmx_ipd_port_bp_counters2_pairx_s
19361    {
19362#if __BYTE_ORDER == __BIG_ENDIAN
19363        uint64_t reserved_25_63          : 39;
19364        uint64_t cnt_val                 : 25;      /**< Number of MBUFs being used by data on this port. */
19365#else
19366        uint64_t cnt_val                 : 25;
19367        uint64_t reserved_25_63          : 39;
19368#endif
19369    } s;
19370    struct cvmx_ipd_port_bp_counters2_pairx_s cn52xx;
19371    struct cvmx_ipd_port_bp_counters2_pairx_s cn52xxp1;
19372    struct cvmx_ipd_port_bp_counters2_pairx_s cn56xx;
19373    struct cvmx_ipd_port_bp_counters2_pairx_s cn56xxp1;
19374} cvmx_ipd_port_bp_counters2_pairx_t;
19375
19376
19377/**
19378 * cvmx_ipd_port_bp_counters_pair#
19379 *
19380 * IPD_PORT_BP_COUNTERS_PAIRX = MBUF Counters port Ports used to generate Back Pressure Per Port.
19381 *
19382 */
19383typedef union
19384{
19385    uint64_t u64;
19386    struct cvmx_ipd_port_bp_counters_pairx_s
19387    {
19388#if __BYTE_ORDER == __BIG_ENDIAN
19389        uint64_t reserved_25_63          : 39;
19390        uint64_t cnt_val                 : 25;      /**< Number of MBUFs being used by data on this port. */
19391#else
19392        uint64_t cnt_val                 : 25;
19393        uint64_t reserved_25_63          : 39;
19394#endif
19395    } s;
19396    struct cvmx_ipd_port_bp_counters_pairx_s cn30xx;
19397    struct cvmx_ipd_port_bp_counters_pairx_s cn31xx;
19398    struct cvmx_ipd_port_bp_counters_pairx_s cn38xx;
19399    struct cvmx_ipd_port_bp_counters_pairx_s cn38xxp2;
19400    struct cvmx_ipd_port_bp_counters_pairx_s cn50xx;
19401    struct cvmx_ipd_port_bp_counters_pairx_s cn52xx;
19402    struct cvmx_ipd_port_bp_counters_pairx_s cn52xxp1;
19403    struct cvmx_ipd_port_bp_counters_pairx_s cn56xx;
19404    struct cvmx_ipd_port_bp_counters_pairx_s cn56xxp1;
19405    struct cvmx_ipd_port_bp_counters_pairx_s cn58xx;
19406    struct cvmx_ipd_port_bp_counters_pairx_s cn58xxp1;
19407} cvmx_ipd_port_bp_counters_pairx_t;
19408
19409
19410/**
19411 * cvmx_ipd_port_qos_#_cnt
19412 *
19413 * IPD_PORT_QOS_X_CNT = IPD PortX QOS-0 Count
19414 *
19415 * A counter per port/qos. Counter are originzed in sequence where the first 8 counter (0-7) belong to Port-0
19416 * QOS 0-7 respectively followed by port 1 at (8-15), etc
19417 * Ports 0-3, 36-39
19418 */
19419typedef union
19420{
19421    uint64_t u64;
19422    struct cvmx_ipd_port_qos_x_cnt_s
19423    {
19424#if __BYTE_ORDER == __BIG_ENDIAN
19425        uint64_t wmark                   : 32;      /**< When the field CNT after being modified is equal to
19426                                                         or crosses this value (i.e. value was greater than
19427                                                         then becomes less then, or value was less than and
19428                                                         becomes greater than) the cooresponding bit in
19429                                                         IPD_PORT_QOS_INTX is set. */
19430        uint64_t cnt                     : 32;      /**< The packet related count that is incremented as
19431                                                         specified by IPD_SUB_PORT_QOS_CNT. */
19432#else
19433        uint64_t cnt                     : 32;
19434        uint64_t wmark                   : 32;
19435#endif
19436    } s;
19437    struct cvmx_ipd_port_qos_x_cnt_s     cn52xx;
19438    struct cvmx_ipd_port_qos_x_cnt_s     cn52xxp1;
19439    struct cvmx_ipd_port_qos_x_cnt_s     cn56xx;
19440    struct cvmx_ipd_port_qos_x_cnt_s     cn56xxp1;
19441} cvmx_ipd_port_qos_x_cnt_t;
19442
19443
19444/**
19445 * cvmx_ipd_port_qos_int#
19446 *
19447 * IPD_PORT_QOS_INTX = IPD PORT-QOS Interrupt
19448 *
19449 * See the description for IPD_PORT_QOS_X_CNT
19450 *
19451 * 0=P0-7; 1=P8-15; 2=P16-23; 3=P24-31; 4=P32-39; 5=P40-47; 6=P48-55; 7=P56-63
19452 * Only ports used are: P0-3, and P32-39. Therefore only IPD_PORT_QOS_INT0[31:0] and IPD_PORT_QOS_INT4[63:0] exist.
19453 * Unused registers and register fields are reserved.
19454 */
19455typedef union
19456{
19457    uint64_t u64;
19458    struct cvmx_ipd_port_qos_intx_s
19459    {
19460#if __BYTE_ORDER == __BIG_ENDIAN
19461        uint64_t intr                    : 64;      /**< Interrupt bits. */
19462#else
19463        uint64_t intr                    : 64;
19464#endif
19465    } s;
19466    struct cvmx_ipd_port_qos_intx_s      cn52xx;
19467    struct cvmx_ipd_port_qos_intx_s      cn52xxp1;
19468    struct cvmx_ipd_port_qos_intx_s      cn56xx;
19469    struct cvmx_ipd_port_qos_intx_s      cn56xxp1;
19470} cvmx_ipd_port_qos_intx_t;
19471
19472
19473/**
19474 * cvmx_ipd_port_qos_int_enb#
19475 *
19476 * IPD_PORT_QOS_INT_ENBX = IPD PORT-QOS Interrupt Enable
19477 *
19478 * When the IPD_PORT_QOS_INTX[\#] is '1' and IPD_PORT_QOS_INT_ENBX[\#] is '1' a interrupt will be generated.
19479 */
19480typedef union
19481{
19482    uint64_t u64;
19483    struct cvmx_ipd_port_qos_int_enbx_s
19484    {
19485#if __BYTE_ORDER == __BIG_ENDIAN
19486        uint64_t enb                     : 64;      /**< Enable bits. */
19487#else
19488        uint64_t enb                     : 64;
19489#endif
19490    } s;
19491    struct cvmx_ipd_port_qos_int_enbx_s  cn52xx;
19492    struct cvmx_ipd_port_qos_int_enbx_s  cn52xxp1;
19493    struct cvmx_ipd_port_qos_int_enbx_s  cn56xx;
19494    struct cvmx_ipd_port_qos_int_enbx_s  cn56xxp1;
19495} cvmx_ipd_port_qos_int_enbx_t;
19496
19497
19498/**
19499 * cvmx_ipd_prc_hold_ptr_fifo_ctl
19500 *
19501 * IPD_PRC_HOLD_PTR_FIFO_CTL = IPD's PRC Holding Pointer FIFO Control
19502 *
19503 * Allows reading of the Page-Pointers stored in the IPD's PRC Holding Fifo.
19504 */
19505typedef union
19506{
19507    uint64_t u64;
19508    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s
19509    {
19510#if __BYTE_ORDER == __BIG_ENDIAN
19511        uint64_t reserved_39_63          : 25;
19512        uint64_t max_pkt                 : 3;       /**< Maximum number of Packet-Pointers that COULD be
19513                                                         in the FIFO. */
19514        uint64_t praddr                  : 3;       /**< Present Packet-Pointer read address. */
19515        uint64_t ptr                     : 29;      /**< The output of the prc-holding-fifo. */
19516        uint64_t cena                    : 1;       /**< Active low Chip Enable that controls the
19517                                                         MUX-select that steers [RADDR] to the fifo.
19518                                                         *WARNING - Setting this field to '0' will allow
19519                                                         reading of the memories thorugh the PTR field,
19520                                                         but will cause unpredictable operation of the IPD
19521                                                         under normal operation. */
19522        uint64_t raddr                   : 3;       /**< Sets the address to read from in the holding.
19523                                                         fifo in the PRC. This FIFO holds Packet-Pointers
19524                                                         to be used for packet data storage. */
19525#else
19526        uint64_t raddr                   : 3;
19527        uint64_t cena                    : 1;
19528        uint64_t ptr                     : 29;
19529        uint64_t praddr                  : 3;
19530        uint64_t max_pkt                 : 3;
19531        uint64_t reserved_39_63          : 25;
19532#endif
19533    } s;
19534    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn30xx;
19535    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn31xx;
19536    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn38xx;
19537    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn50xx;
19538    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xx;
19539    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn52xxp1;
19540    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xx;
19541    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn56xxp1;
19542    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xx;
19543    struct cvmx_ipd_prc_hold_ptr_fifo_ctl_s cn58xxp1;
19544} cvmx_ipd_prc_hold_ptr_fifo_ctl_t;
19545
19546
19547/**
19548 * cvmx_ipd_prc_port_ptr_fifo_ctl
19549 *
19550 * IPD_PRC_PORT_PTR_FIFO_CTL = IPD's PRC PORT Pointer FIFO Control
19551 *
19552 * Allows reading of the Page-Pointers stored in the IPD's PRC PORT Fifo.
19553 */
19554typedef union
19555{
19556    uint64_t u64;
19557    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s
19558    {
19559#if __BYTE_ORDER == __BIG_ENDIAN
19560        uint64_t reserved_44_63          : 20;
19561        uint64_t max_pkt                 : 7;       /**< Maximum number of Packet-Pointers that are in
19562                                                         in the FIFO. */
19563        uint64_t ptr                     : 29;      /**< The output of the prc-port-ptr-fifo. */
19564        uint64_t cena                    : 1;       /**< Active low Chip Enable to the read port of the
19565                                                         pwp_fifo. This bit also controls the MUX-select
19566                                                         that steers [RADDR] to the pwp_fifo.
19567                                                         *WARNING - Setting this field to '0' will allow
19568                                                         reading of the memories thorugh the PTR field,
19569                                                         but will cause unpredictable operation of the IPD
19570                                                         under normal operation. */
19571        uint64_t raddr                   : 7;       /**< Sets the address to read from in the port
19572                                                         fifo in the PRC. This FIFO holds Packet-Pointers
19573                                                         to be used for packet data storage. */
19574#else
19575        uint64_t raddr                   : 7;
19576        uint64_t cena                    : 1;
19577        uint64_t ptr                     : 29;
19578        uint64_t max_pkt                 : 7;
19579        uint64_t reserved_44_63          : 20;
19580#endif
19581    } s;
19582    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn30xx;
19583    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn31xx;
19584    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn38xx;
19585    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn50xx;
19586    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xx;
19587    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn52xxp1;
19588    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xx;
19589    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn56xxp1;
19590    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xx;
19591    struct cvmx_ipd_prc_port_ptr_fifo_ctl_s cn58xxp1;
19592} cvmx_ipd_prc_port_ptr_fifo_ctl_t;
19593
19594
19595/**
19596 * cvmx_ipd_ptr_count
19597 *
19598 * IPD_PTR_COUNT = IPD Page Pointer Count
19599 *
19600 * Shows the number of WQE and Packet Page Pointers stored in the IPD.
19601 */
19602typedef union
19603{
19604    uint64_t u64;
19605    struct cvmx_ipd_ptr_count_s
19606    {
19607#if __BYTE_ORDER == __BIG_ENDIAN
19608        uint64_t reserved_19_63          : 45;
19609        uint64_t pktv_cnt                : 1;       /**< PKT Ptr Valid. PASS2 Field */
19610        uint64_t wqev_cnt                : 1;       /**< WQE Ptr Valid. This value is '1' when a WQE
19611                                                         is being for use by the IPD. The value of this
19612                                                         field shoould be added to tha value of the
19613                                                         WQE_PCNT field, of this register, for a total
19614                                                         count of the WQE Page Pointers being held by IPD.
19615                                                         PASS2 Field. */
19616        uint64_t pfif_cnt                : 3;       /**< See PKT_PCNT. */
19617        uint64_t pkt_pcnt                : 7;       /**< This value plus PFIF_CNT plus 36 is the number
19618                                                         of PKT Page Pointers in IPD. */
19619        uint64_t wqe_pcnt                : 7;       /**< Number of page pointers for WQE storage that are
19620                                                         buffered in the IPD. The total count is the value
19621                                                         of this buffer plus the field [WQEV_CNT]. For
19622                                                         PASS-1 (which does not have the WQEV_CNT field)
19623                                                         when the value of this register is '0' there still
19624                                                         may be 1 pointer being help by IPD. */
19625#else
19626        uint64_t wqe_pcnt                : 7;
19627        uint64_t pkt_pcnt                : 7;
19628        uint64_t pfif_cnt                : 3;
19629        uint64_t wqev_cnt                : 1;
19630        uint64_t pktv_cnt                : 1;
19631        uint64_t reserved_19_63          : 45;
19632#endif
19633    } s;
19634    struct cvmx_ipd_ptr_count_s          cn30xx;
19635    struct cvmx_ipd_ptr_count_s          cn31xx;
19636    struct cvmx_ipd_ptr_count_s          cn38xx;
19637    struct cvmx_ipd_ptr_count_s          cn38xxp2;
19638    struct cvmx_ipd_ptr_count_s          cn50xx;
19639    struct cvmx_ipd_ptr_count_s          cn52xx;
19640    struct cvmx_ipd_ptr_count_s          cn52xxp1;
19641    struct cvmx_ipd_ptr_count_s          cn56xx;
19642    struct cvmx_ipd_ptr_count_s          cn56xxp1;
19643    struct cvmx_ipd_ptr_count_s          cn58xx;
19644    struct cvmx_ipd_ptr_count_s          cn58xxp1;
19645} cvmx_ipd_ptr_count_t;
19646
19647
19648/**
19649 * cvmx_ipd_pwp_ptr_fifo_ctl
19650 *
19651 * IPD_PWP_PTR_FIFO_CTL = IPD's PWP Pointer FIFO Control
19652 *
19653 * Allows reading of the Page-Pointers stored in the IPD's PWP Fifo.
19654 */
19655typedef union
19656{
19657    uint64_t u64;
19658    struct cvmx_ipd_pwp_ptr_fifo_ctl_s
19659    {
19660#if __BYTE_ORDER == __BIG_ENDIAN
19661        uint64_t reserved_61_63          : 3;
19662        uint64_t max_cnts                : 7;       /**< Maximum number of Packet-Pointers or WQE-Pointers
19663                                                         that COULD be in the FIFO. */
19664        uint64_t wraddr                  : 8;       /**< Present FIFO WQE Read address. */
19665        uint64_t praddr                  : 8;       /**< Present FIFO Packet Read address. */
19666        uint64_t ptr                     : 29;      /**< The output of the pwp_fifo. */
19667        uint64_t cena                    : 1;       /**< Active low Chip Enable to the read port of the
19668                                                         pwp_fifo. This bit also controls the MUX-select
19669                                                         that steers [RADDR] to the pwp_fifo.
19670                                                         *WARNING - Setting this field to '0' will allow
19671                                                         reading of the memories thorugh the PTR field,
19672                                                         but will cause unpredictable operation of the IPD
19673                                                         under normal operation. */
19674        uint64_t raddr                   : 8;       /**< Sets the address to read from in the pwp_fifo.
19675                                                         Addresses 0 through 7 contain Packet-Pointers and
19676                                                         addresses 8 through 15 contain WQE-Pointers. */
19677#else
19678        uint64_t raddr                   : 8;
19679        uint64_t cena                    : 1;
19680        uint64_t ptr                     : 29;
19681        uint64_t praddr                  : 8;
19682        uint64_t wraddr                  : 8;
19683        uint64_t max_cnts                : 7;
19684        uint64_t reserved_61_63          : 3;
19685#endif
19686    } s;
19687    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn30xx;
19688    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn31xx;
19689    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn38xx;
19690    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn50xx;
19691    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn52xx;
19692    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn52xxp1;
19693    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn56xx;
19694    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn56xxp1;
19695    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn58xx;
19696    struct cvmx_ipd_pwp_ptr_fifo_ctl_s   cn58xxp1;
19697} cvmx_ipd_pwp_ptr_fifo_ctl_t;
19698
19699
19700/**
19701 * cvmx_ipd_qos#_red_marks
19702 *
19703 * IPD_QOS0_RED_MARKS = IPD QOS 0 Marks Red High Low
19704 *
19705 * Set the pass-drop marks for qos level.
19706 */
19707typedef union
19708{
19709    uint64_t u64;
19710    struct cvmx_ipd_qosx_red_marks_s
19711    {
19712#if __BYTE_ORDER == __BIG_ENDIAN
19713        uint64_t drop                    : 32;      /**< Packets will be dropped when the average value of
19714                                                         IPD_QUE0_FREE_PAGE_CNT is equal to or less than
19715                                                         this value. */
19716        uint64_t pass                    : 32;      /**< Packets will be passed when the average value of
19717                                                         IPD_QUE0_FREE_PAGE_CNT is larger than this value. */
19718#else
19719        uint64_t pass                    : 32;
19720        uint64_t drop                    : 32;
19721#endif
19722    } s;
19723    struct cvmx_ipd_qosx_red_marks_s     cn30xx;
19724    struct cvmx_ipd_qosx_red_marks_s     cn31xx;
19725    struct cvmx_ipd_qosx_red_marks_s     cn38xx;
19726    struct cvmx_ipd_qosx_red_marks_s     cn38xxp2;
19727    struct cvmx_ipd_qosx_red_marks_s     cn50xx;
19728    struct cvmx_ipd_qosx_red_marks_s     cn52xx;
19729    struct cvmx_ipd_qosx_red_marks_s     cn52xxp1;
19730    struct cvmx_ipd_qosx_red_marks_s     cn56xx;
19731    struct cvmx_ipd_qosx_red_marks_s     cn56xxp1;
19732    struct cvmx_ipd_qosx_red_marks_s     cn58xx;
19733    struct cvmx_ipd_qosx_red_marks_s     cn58xxp1;
19734} cvmx_ipd_qosx_red_marks_t;
19735
19736
19737/**
19738 * cvmx_ipd_que0_free_page_cnt
19739 *
19740 * IPD_QUE0_FREE_PAGE_CNT = IPD Queue0 Free Page Count
19741 *
19742 * Number of Free-Page Pointer that are available for use in the FPA for Queue-0.
19743 */
19744typedef union
19745{
19746    uint64_t u64;
19747    struct cvmx_ipd_que0_free_page_cnt_s
19748    {
19749#if __BYTE_ORDER == __BIG_ENDIAN
19750        uint64_t reserved_32_63          : 32;
19751        uint64_t q0_pcnt                 : 32;      /**< Number of Queue-0 Page Pointers Available. */
19752#else
19753        uint64_t q0_pcnt                 : 32;
19754        uint64_t reserved_32_63          : 32;
19755#endif
19756    } s;
19757    struct cvmx_ipd_que0_free_page_cnt_s cn30xx;
19758    struct cvmx_ipd_que0_free_page_cnt_s cn31xx;
19759    struct cvmx_ipd_que0_free_page_cnt_s cn38xx;
19760    struct cvmx_ipd_que0_free_page_cnt_s cn38xxp2;
19761    struct cvmx_ipd_que0_free_page_cnt_s cn50xx;
19762    struct cvmx_ipd_que0_free_page_cnt_s cn52xx;
19763    struct cvmx_ipd_que0_free_page_cnt_s cn52xxp1;
19764    struct cvmx_ipd_que0_free_page_cnt_s cn56xx;
19765    struct cvmx_ipd_que0_free_page_cnt_s cn56xxp1;
19766    struct cvmx_ipd_que0_free_page_cnt_s cn58xx;
19767    struct cvmx_ipd_que0_free_page_cnt_s cn58xxp1;
19768} cvmx_ipd_que0_free_page_cnt_t;
19769
19770
19771/**
19772 * cvmx_ipd_red_port_enable
19773 *
19774 * IPD_RED_PORT_ENABLE = IPD RED Port Enable
19775 *
19776 * Set the pass-drop marks for qos level.
19777 */
19778typedef union
19779{
19780    uint64_t u64;
19781    struct cvmx_ipd_red_port_enable_s
19782    {
19783#if __BYTE_ORDER == __BIG_ENDIAN
19784        uint64_t prb_dly                 : 14;      /**< Number (core clocks periods + 68) * 8 to wait
19785                                                         before caluclating the new packet drop
19786                                                         probability for each QOS level. */
19787        uint64_t avg_dly                 : 14;      /**< Number (core clocks periods + 10) * 8 to wait
19788                                                         before caluclating the moving average for wach
19789                                                         QOS level.
19790                                                         Larger AVG_DLY values cause the moving averages
19791                                                         of ALL QOS levels to track changes in the actual
19792                                                         free space more slowly. Smaller NEW_CON (and
19793                                                         larger AVG_CON) values can have a similar effect,
19794                                                         but only affect an individual QOS level, rather
19795                                                         than all. */
19796        uint64_t prt_enb                 : 36;      /**< The bit position will enable the corresponding
19797                                                         Ports ability to have packets dropped by RED
19798                                                         probability. */
19799#else
19800        uint64_t prt_enb                 : 36;
19801        uint64_t avg_dly                 : 14;
19802        uint64_t prb_dly                 : 14;
19803#endif
19804    } s;
19805    struct cvmx_ipd_red_port_enable_s    cn30xx;
19806    struct cvmx_ipd_red_port_enable_s    cn31xx;
19807    struct cvmx_ipd_red_port_enable_s    cn38xx;
19808    struct cvmx_ipd_red_port_enable_s    cn38xxp2;
19809    struct cvmx_ipd_red_port_enable_s    cn50xx;
19810    struct cvmx_ipd_red_port_enable_s    cn52xx;
19811    struct cvmx_ipd_red_port_enable_s    cn52xxp1;
19812    struct cvmx_ipd_red_port_enable_s    cn56xx;
19813    struct cvmx_ipd_red_port_enable_s    cn56xxp1;
19814    struct cvmx_ipd_red_port_enable_s    cn58xx;
19815    struct cvmx_ipd_red_port_enable_s    cn58xxp1;
19816} cvmx_ipd_red_port_enable_t;
19817
19818
19819/**
19820 * cvmx_ipd_red_port_enable2
19821 *
19822 * IPD_RED_PORT_ENABLE2 = IPD RED Port Enable2
19823 *
19824 * Set the pass-drop marks for qos level.
19825 */
19826typedef union
19827{
19828    uint64_t u64;
19829    struct cvmx_ipd_red_port_enable2_s
19830    {
19831#if __BYTE_ORDER == __BIG_ENDIAN
19832        uint64_t reserved_4_63           : 60;
19833        uint64_t prt_enb                 : 4;       /**< Bits 3-0 cooresponds to ports 39-36. These bits
19834                                                         have the same meaning as the PRT_ENB field of
19835                                                         IPD_RED_PORT_ENABLE. */
19836#else
19837        uint64_t prt_enb                 : 4;
19838        uint64_t reserved_4_63           : 60;
19839#endif
19840    } s;
19841    struct cvmx_ipd_red_port_enable2_s   cn52xx;
19842    struct cvmx_ipd_red_port_enable2_s   cn52xxp1;
19843    struct cvmx_ipd_red_port_enable2_s   cn56xx;
19844    struct cvmx_ipd_red_port_enable2_s   cn56xxp1;
19845} cvmx_ipd_red_port_enable2_t;
19846
19847
19848/**
19849 * cvmx_ipd_red_que#_param
19850 *
19851 * IPD_RED_QUE0_PARAM = IPD RED Queue-0 Parameters
19852 *
19853 * Value control the Passing and Dropping of packets by the red engine for QOS Level-0.
19854 */
19855typedef union
19856{
19857    uint64_t u64;
19858    struct cvmx_ipd_red_quex_param_s
19859    {
19860#if __BYTE_ORDER == __BIG_ENDIAN
19861        uint64_t reserved_49_63          : 15;
19862        uint64_t use_pcnt                : 1;       /**< When set '1' red will use the actual Packet-Page
19863                                                         Count in place of the Average for RED calculations. */
19864        uint64_t new_con                 : 8;       /**< This value is used control how much of the present
19865                                                         Actual Queue Size is used to calculate the new
19866                                                         Average Queue Size. The value is a number from 0
19867                                                         256, which represents NEW_CON/256 of the Actual
19868                                                         Queue Size that will be used in the calculation.
19869                                                         The number in this field plus the value of
19870                                                         AVG_CON must be equal to 256.
19871                                                         Larger AVG_DLY values cause the moving averages
19872                                                         of ALL QOS levels to track changes in the actual
19873                                                         free space more slowly. Smaller NEW_CON (and
19874                                                         larger AVG_CON) values can have a similar effect,
19875                                                         but only affect an individual QOS level, rather
19876                                                         than all. */
19877        uint64_t avg_con                 : 8;       /**< This value is used control how much of the present
19878                                                         Average Queue Size is used to calculate the new
19879                                                         Average Queue Size. The value is a number from 0
19880                                                         256, which represents AVG_CON/256 of the Average
19881                                                         Queue Size that will be used in the calculation.
19882                                                         The number in this field plus the value of
19883                                                         NEW_CON must be equal to 256.
19884                                                         Larger AVG_DLY values cause the moving averages
19885                                                         of ALL QOS levels to track changes in the actual
19886                                                         free space more slowly. Smaller NEW_CON (and
19887                                                         larger AVG_CON) values can have a similar effect,
19888                                                         but only affect an individual QOS level, rather
19889                                                         than all. */
19890        uint64_t prb_con                 : 32;      /**< Used in computing the probability of a packet being
19891                                                         passed or drop by the WRED engine. The field is
19892                                                         calculated to be (255 * 2^24)/(PASS-DROP). Where
19893                                                         PASS and DROP are the field from the
19894                                                         IPD_QOS0_RED_MARKS CSR. */
19895#else
19896        uint64_t prb_con                 : 32;
19897        uint64_t avg_con                 : 8;
19898        uint64_t new_con                 : 8;
19899        uint64_t use_pcnt                : 1;
19900        uint64_t reserved_49_63          : 15;
19901#endif
19902    } s;
19903    struct cvmx_ipd_red_quex_param_s     cn30xx;
19904    struct cvmx_ipd_red_quex_param_s     cn31xx;
19905    struct cvmx_ipd_red_quex_param_s     cn38xx;
19906    struct cvmx_ipd_red_quex_param_s     cn38xxp2;
19907    struct cvmx_ipd_red_quex_param_s     cn50xx;
19908    struct cvmx_ipd_red_quex_param_s     cn52xx;
19909    struct cvmx_ipd_red_quex_param_s     cn52xxp1;
19910    struct cvmx_ipd_red_quex_param_s     cn56xx;
19911    struct cvmx_ipd_red_quex_param_s     cn56xxp1;
19912    struct cvmx_ipd_red_quex_param_s     cn58xx;
19913    struct cvmx_ipd_red_quex_param_s     cn58xxp1;
19914} cvmx_ipd_red_quex_param_t;
19915
19916
19917/**
19918 * cvmx_ipd_sub_port_bp_page_cnt
19919 *
19920 * IPD_SUB_PORT_BP_PAGE_CNT = IPD Subtract Port Backpressure Page Count
19921 *
19922 * Will add the value to the indicated port count register, the number of pages supplied. The value added should
19923 * be the 2's complement of the vallue that needs to be subtracted. Users would add 2's compliment values to the
19924 * port-mbuf-count register to return (lower the count) mbufs to the counter in order to avoid port-level
19925 * backpressure being applied to the port. Backpressure is applied when the MBUF used count of a port exceeds the
19926 * value in the IPD_PORTX_BP_PAGE_CNT.
19927 *
19928 * This register can't be written from the PCI via a window write.
19929 */
19930typedef union
19931{
19932    uint64_t u64;
19933    struct cvmx_ipd_sub_port_bp_page_cnt_s
19934    {
19935#if __BYTE_ORDER == __BIG_ENDIAN
19936        uint64_t reserved_31_63          : 33;
19937        uint64_t port                    : 6;       /**< The port to add the PAGE_CNT field to. */
19938        uint64_t page_cnt                : 25;      /**< The number of page pointers to add to
19939                                                         the port counter pointed to by the
19940                                                         PORT Field. */
19941#else
19942        uint64_t page_cnt                : 25;
19943        uint64_t port                    : 6;
19944        uint64_t reserved_31_63          : 33;
19945#endif
19946    } s;
19947    struct cvmx_ipd_sub_port_bp_page_cnt_s cn30xx;
19948    struct cvmx_ipd_sub_port_bp_page_cnt_s cn31xx;
19949    struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xx;
19950    struct cvmx_ipd_sub_port_bp_page_cnt_s cn38xxp2;
19951    struct cvmx_ipd_sub_port_bp_page_cnt_s cn50xx;
19952    struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xx;
19953    struct cvmx_ipd_sub_port_bp_page_cnt_s cn52xxp1;
19954    struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xx;
19955    struct cvmx_ipd_sub_port_bp_page_cnt_s cn56xxp1;
19956    struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xx;
19957    struct cvmx_ipd_sub_port_bp_page_cnt_s cn58xxp1;
19958} cvmx_ipd_sub_port_bp_page_cnt_t;
19959
19960
19961/**
19962 * cvmx_ipd_sub_port_fcs
19963 *
19964 * IPD_SUB_PORT_FCS = IPD Subtract Ports FCS Register
19965 *
19966 * When set '1' the port corresponding to the but set will subtract 4 bytes from the end of
19967 * the packet.
19968 */
19969typedef union
19970{
19971    uint64_t u64;
19972    struct cvmx_ipd_sub_port_fcs_s
19973    {
19974#if __BYTE_ORDER == __BIG_ENDIAN
19975        uint64_t reserved_40_63          : 24;
19976        uint64_t port_bit2               : 4;       /**< When set '1', the port corresponding to the bit
19977                                                         position set, will subtract the FCS for packets
19978                                                         on that port. */
19979        uint64_t reserved_32_35          : 4;
19980        uint64_t port_bit                : 32;      /**< When set '1', the port corresponding to the bit
19981                                                         position set, will subtract the FCS for packets
19982                                                         on that port. */
19983#else
19984        uint64_t port_bit                : 32;
19985        uint64_t reserved_32_35          : 4;
19986        uint64_t port_bit2               : 4;
19987        uint64_t reserved_40_63          : 24;
19988#endif
19989    } s;
19990    struct cvmx_ipd_sub_port_fcs_cn30xx
19991    {
19992#if __BYTE_ORDER == __BIG_ENDIAN
19993        uint64_t reserved_3_63           : 61;
19994        uint64_t port_bit                : 3;       /**< When set '1', the port corresponding to the bit
19995                                                         position set, will subtract the FCS for packets
19996                                                         on that port. */
19997#else
19998        uint64_t port_bit                : 3;
19999        uint64_t reserved_3_63           : 61;
20000#endif
20001    } cn30xx;
20002    struct cvmx_ipd_sub_port_fcs_cn30xx  cn31xx;
20003    struct cvmx_ipd_sub_port_fcs_cn38xx
20004    {
20005#if __BYTE_ORDER == __BIG_ENDIAN
20006        uint64_t reserved_32_63          : 32;
20007        uint64_t port_bit                : 32;      /**< When set '1', the port corresponding to the bit
20008                                                         position set, will subtract the FCS for packets
20009                                                         on that port. */
20010#else
20011        uint64_t port_bit                : 32;
20012        uint64_t reserved_32_63          : 32;
20013#endif
20014    } cn38xx;
20015    struct cvmx_ipd_sub_port_fcs_cn38xx  cn38xxp2;
20016    struct cvmx_ipd_sub_port_fcs_cn30xx  cn50xx;
20017    struct cvmx_ipd_sub_port_fcs_s       cn52xx;
20018    struct cvmx_ipd_sub_port_fcs_s       cn52xxp1;
20019    struct cvmx_ipd_sub_port_fcs_s       cn56xx;
20020    struct cvmx_ipd_sub_port_fcs_s       cn56xxp1;
20021    struct cvmx_ipd_sub_port_fcs_cn38xx  cn58xx;
20022    struct cvmx_ipd_sub_port_fcs_cn38xx  cn58xxp1;
20023} cvmx_ipd_sub_port_fcs_t;
20024
20025
20026/**
20027 * cvmx_ipd_sub_port_qos_cnt
20028 *
20029 * IPD_SUB_PORT_QOS_CNT = IPD Subtract Port QOS Count
20030 *
20031 * Will add the value (CNT) to the indicated Port-QOS register (PORT_QOS). The value added must be
20032 * be the 2's complement of the value that needs to be subtracted.
20033 */
20034typedef union
20035{
20036    uint64_t u64;
20037    struct cvmx_ipd_sub_port_qos_cnt_s
20038    {
20039#if __BYTE_ORDER == __BIG_ENDIAN
20040        uint64_t reserved_41_63          : 23;
20041        uint64_t port_qos                : 9;       /**< The port to add the CNT field to. */
20042        uint64_t cnt                     : 32;      /**< The value to be added to the register selected
20043                                                         in the PORT_QOS field. */
20044#else
20045        uint64_t cnt                     : 32;
20046        uint64_t port_qos                : 9;
20047        uint64_t reserved_41_63          : 23;
20048#endif
20049    } s;
20050    struct cvmx_ipd_sub_port_qos_cnt_s   cn52xx;
20051    struct cvmx_ipd_sub_port_qos_cnt_s   cn52xxp1;
20052    struct cvmx_ipd_sub_port_qos_cnt_s   cn56xx;
20053    struct cvmx_ipd_sub_port_qos_cnt_s   cn56xxp1;
20054} cvmx_ipd_sub_port_qos_cnt_t;
20055
20056
20057/**
20058 * cvmx_ipd_wqe_fpa_queue
20059 *
20060 * IPD_WQE_FPA_QUEUE = IPD Work-Queue-Entry FPA Page Size
20061 *
20062 * Which FPA Queue (0-7) to fetch page-pointers from for WQE's
20063 */
20064typedef union
20065{
20066    uint64_t u64;
20067    struct cvmx_ipd_wqe_fpa_queue_s
20068    {
20069#if __BYTE_ORDER == __BIG_ENDIAN
20070        uint64_t reserved_3_63           : 61;
20071        uint64_t wqe_pool                : 3;       /**< Which FPA Queue to fetch page-pointers
20072                                                         from for WQE's. */
20073#else
20074        uint64_t wqe_pool                : 3;
20075        uint64_t reserved_3_63           : 61;
20076#endif
20077    } s;
20078    struct cvmx_ipd_wqe_fpa_queue_s      cn30xx;
20079    struct cvmx_ipd_wqe_fpa_queue_s      cn31xx;
20080    struct cvmx_ipd_wqe_fpa_queue_s      cn38xx;
20081    struct cvmx_ipd_wqe_fpa_queue_s      cn38xxp2;
20082    struct cvmx_ipd_wqe_fpa_queue_s      cn50xx;
20083    struct cvmx_ipd_wqe_fpa_queue_s      cn52xx;
20084    struct cvmx_ipd_wqe_fpa_queue_s      cn52xxp1;
20085    struct cvmx_ipd_wqe_fpa_queue_s      cn56xx;
20086    struct cvmx_ipd_wqe_fpa_queue_s      cn56xxp1;
20087    struct cvmx_ipd_wqe_fpa_queue_s      cn58xx;
20088    struct cvmx_ipd_wqe_fpa_queue_s      cn58xxp1;
20089} cvmx_ipd_wqe_fpa_queue_t;
20090
20091
20092/**
20093 * cvmx_ipd_wqe_ptr_valid
20094 *
20095 * IPD_WQE_PTR_VALID = IPD's WQE Pointer Valid
20096 *
20097 * The value of the WQE-pointer fetched and in the valid register.
20098 */
20099typedef union
20100{
20101    uint64_t u64;
20102    struct cvmx_ipd_wqe_ptr_valid_s
20103    {
20104#if __BYTE_ORDER == __BIG_ENDIAN
20105        uint64_t reserved_29_63          : 35;
20106        uint64_t ptr                     : 29;      /**< Pointer value. */
20107#else
20108        uint64_t ptr                     : 29;
20109        uint64_t reserved_29_63          : 35;
20110#endif
20111    } s;
20112    struct cvmx_ipd_wqe_ptr_valid_s      cn30xx;
20113    struct cvmx_ipd_wqe_ptr_valid_s      cn31xx;
20114    struct cvmx_ipd_wqe_ptr_valid_s      cn38xx;
20115    struct cvmx_ipd_wqe_ptr_valid_s      cn50xx;
20116    struct cvmx_ipd_wqe_ptr_valid_s      cn52xx;
20117    struct cvmx_ipd_wqe_ptr_valid_s      cn52xxp1;
20118    struct cvmx_ipd_wqe_ptr_valid_s      cn56xx;
20119    struct cvmx_ipd_wqe_ptr_valid_s      cn56xxp1;
20120    struct cvmx_ipd_wqe_ptr_valid_s      cn58xx;
20121    struct cvmx_ipd_wqe_ptr_valid_s      cn58xxp1;
20122} cvmx_ipd_wqe_ptr_valid_t;
20123
20124
20125/**
20126 * cvmx_key_bist_reg
20127 *
20128 * KEY_BIST_REG = KEY's BIST Status Register
20129 *
20130 * The KEY's BIST status for memories.
20131 */
20132typedef union
20133{
20134    uint64_t u64;
20135    struct cvmx_key_bist_reg_s
20136    {
20137#if __BYTE_ORDER == __BIG_ENDIAN
20138        uint64_t reserved_3_63           : 61;
20139        uint64_t rrc                     : 1;       /**< RRC bist status. */
20140        uint64_t mem1                    : 1;       /**< MEM - 1 bist status. */
20141        uint64_t mem0                    : 1;       /**< MEM - 0 bist status. */
20142#else
20143        uint64_t mem0                    : 1;
20144        uint64_t mem1                    : 1;
20145        uint64_t rrc                     : 1;
20146        uint64_t reserved_3_63           : 61;
20147#endif
20148    } s;
20149    struct cvmx_key_bist_reg_s           cn38xx;
20150    struct cvmx_key_bist_reg_s           cn38xxp2;
20151    struct cvmx_key_bist_reg_s           cn56xx;
20152    struct cvmx_key_bist_reg_s           cn56xxp1;
20153    struct cvmx_key_bist_reg_s           cn58xx;
20154    struct cvmx_key_bist_reg_s           cn58xxp1;
20155} cvmx_key_bist_reg_t;
20156
20157
20158/**
20159 * cvmx_key_ctl_status
20160 *
20161 * KEY_CTL_STATUS = KEY's Control/Status Register
20162 *
20163 * The KEY's interrupt enable register.
20164 */
20165typedef union
20166{
20167    uint64_t u64;
20168    struct cvmx_key_ctl_status_s
20169    {
20170#if __BYTE_ORDER == __BIG_ENDIAN
20171        uint64_t reserved_14_63          : 50;
20172        uint64_t mem1_err                : 7;       /**< Causes a flip of the ECC bit associated 38:32
20173                                                         respective to bit 13:7 of this field, for FPF
20174                                                         FIFO 1. */
20175        uint64_t mem0_err                : 7;       /**< Causes a flip of the ECC bit associated 38:32
20176                                                         respective to bit 6:0 of this field, for FPF
20177                                                         FIFO 0. */
20178#else
20179        uint64_t mem0_err                : 7;
20180        uint64_t mem1_err                : 7;
20181        uint64_t reserved_14_63          : 50;
20182#endif
20183    } s;
20184    struct cvmx_key_ctl_status_s         cn38xx;
20185    struct cvmx_key_ctl_status_s         cn38xxp2;
20186    struct cvmx_key_ctl_status_s         cn56xx;
20187    struct cvmx_key_ctl_status_s         cn56xxp1;
20188    struct cvmx_key_ctl_status_s         cn58xx;
20189    struct cvmx_key_ctl_status_s         cn58xxp1;
20190} cvmx_key_ctl_status_t;
20191
20192
20193/**
20194 * cvmx_key_int_enb
20195 *
20196 * KEY_INT_ENB = KEY's Interrupt Enable
20197 *
20198 * The KEY's interrupt enable register.
20199 */
20200typedef union
20201{
20202    uint64_t u64;
20203    struct cvmx_key_int_enb_s
20204    {
20205#if __BYTE_ORDER == __BIG_ENDIAN
20206        uint64_t reserved_4_63           : 60;
20207        uint64_t ked1_dbe                : 1;       /**< When set (1) and bit 3 of the KEY_INT_SUM
20208                                                         register is asserted the KEY will assert an
20209                                                         interrupt. */
20210        uint64_t ked1_sbe                : 1;       /**< When set (1) and bit 2 of the KEY_INT_SUM
20211                                                         register is asserted the KEY will assert an
20212                                                         interrupt. */
20213        uint64_t ked0_dbe                : 1;       /**< When set (1) and bit 1 of the KEY_INT_SUM
20214                                                         register is asserted the KEY will assert an
20215                                                         interrupt. */
20216        uint64_t ked0_sbe                : 1;       /**< When set (1) and bit 0 of the KEY_INT_SUM
20217                                                         register is asserted the KEY will assert an
20218                                                         interrupt. */
20219#else
20220        uint64_t ked0_sbe                : 1;
20221        uint64_t ked0_dbe                : 1;
20222        uint64_t ked1_sbe                : 1;
20223        uint64_t ked1_dbe                : 1;
20224        uint64_t reserved_4_63           : 60;
20225#endif
20226    } s;
20227    struct cvmx_key_int_enb_s            cn38xx;
20228    struct cvmx_key_int_enb_s            cn38xxp2;
20229    struct cvmx_key_int_enb_s            cn56xx;
20230    struct cvmx_key_int_enb_s            cn56xxp1;
20231    struct cvmx_key_int_enb_s            cn58xx;
20232    struct cvmx_key_int_enb_s            cn58xxp1;
20233} cvmx_key_int_enb_t;
20234
20235
20236/**
20237 * cvmx_key_int_sum
20238 *
20239 * KEY_INT_SUM = KEY's Interrupt Summary Register
20240 *
20241 * Contains the diffrent interrupt summary bits of the KEY.
20242 */
20243typedef union
20244{
20245    uint64_t u64;
20246    struct cvmx_key_int_sum_s
20247    {
20248#if __BYTE_ORDER == __BIG_ENDIAN
20249        uint64_t reserved_4_63           : 60;
20250        uint64_t ked1_dbe                : 1;
20251        uint64_t ked1_sbe                : 1;
20252        uint64_t ked0_dbe                : 1;
20253        uint64_t ked0_sbe                : 1;
20254#else
20255        uint64_t ked0_sbe                : 1;
20256        uint64_t ked0_dbe                : 1;
20257        uint64_t ked1_sbe                : 1;
20258        uint64_t ked1_dbe                : 1;
20259        uint64_t reserved_4_63           : 60;
20260#endif
20261    } s;
20262    struct cvmx_key_int_sum_s            cn38xx;
20263    struct cvmx_key_int_sum_s            cn38xxp2;
20264    struct cvmx_key_int_sum_s            cn56xx;
20265    struct cvmx_key_int_sum_s            cn56xxp1;
20266    struct cvmx_key_int_sum_s            cn58xx;
20267    struct cvmx_key_int_sum_s            cn58xxp1;
20268} cvmx_key_int_sum_t;
20269
20270
20271/**
20272 * cvmx_l2c_bst0
20273 *
20274 * L2C_BST0 = L2C BIST 0 CTL/STAT
20275 *
20276 */
20277typedef union
20278{
20279    uint64_t u64;
20280    struct cvmx_l2c_bst0_s
20281    {
20282#if __BYTE_ORDER == __BIG_ENDIAN
20283        uint64_t reserved_24_63          : 40;
20284        uint64_t dtbnk                   : 1;       /**< DuTag Bank#
20285                                                         When DT=1(BAD), this field provides additional information
20286                                                         about which DuTag Bank (0/1) failed.
20287                                                         *** NOTE: O9N PASS1 Addition */
20288        uint64_t wlb_msk                 : 4;       /**< Bist Results for WLB-MSK RAM [DP0-3]
20289                                                         - 0: GOOD (or bist in progress/never run)
20290                                                         - 1: BAD */
20291        uint64_t dtcnt                   : 13;      /**< DuTag BiST Counter (used to help isolate the failure)
20292                                                         [12]:    i (0=FORWARD/1=REVERSE pass)
20293                                                         [11:10]: j (Pattern# 1 of 4)
20294                                                         [9:4]:   k (DT Index 1 of 64)
20295                                                         [3:0]:   l (DT# 1 of 16 DTs) */
20296        uint64_t dt                      : 1;       /**< Bist Results for DuTAG RAM(s)
20297                                                         - 0: GOOD (or bist in progress/never run)
20298                                                         - 1: BAD */
20299        uint64_t stin_msk                : 1;       /**< Bist Results for STIN-MSK RAM
20300                                                         - 0: GOOD (or bist in progress/never run)
20301                                                         - 1: BAD */
20302        uint64_t wlb_dat                 : 4;       /**< Bist Results for WLB-DAT RAM [DP0-3]
20303                                                         - 0: GOOD (or bist in progress/never run)
20304                                                         - 1: BAD */
20305#else
20306        uint64_t wlb_dat                 : 4;
20307        uint64_t stin_msk                : 1;
20308        uint64_t dt                      : 1;
20309        uint64_t dtcnt                   : 13;
20310        uint64_t wlb_msk                 : 4;
20311        uint64_t dtbnk                   : 1;
20312        uint64_t reserved_24_63          : 40;
20313#endif
20314    } s;
20315    struct cvmx_l2c_bst0_cn30xx
20316    {
20317#if __BYTE_ORDER == __BIG_ENDIAN
20318        uint64_t reserved_23_63          : 41;
20319        uint64_t wlb_msk                 : 4;       /**< Bist Results for WLB-MSK RAM [DP0-3]
20320                                                         - 0: GOOD (or bist in progress/never run)
20321                                                         - 1: BAD */
20322        uint64_t reserved_15_18          : 4;
20323        uint64_t dtcnt                   : 9;       /**< DuTag BiST Counter (used to help isolate the failure)
20324                                                         [8]:   i (0=FORWARD/1=REVERSE pass)
20325                                                         [7:6]: j (Pattern# 1 of 4)
20326                                                         [5:0]: k (DT Index 1 of 64) */
20327        uint64_t dt                      : 1;       /**< Bist Results for DuTAG RAM(s)
20328                                                         - 0: GOOD (or bist in progress/never run)
20329                                                         - 1: BAD */
20330        uint64_t reserved_4_4            : 1;
20331        uint64_t wlb_dat                 : 4;       /**< Bist Results for WLB-DAT RAM [DP0-3]
20332                                                         - 0: GOOD (or bist in progress/never run)
20333                                                         - 1: BAD */
20334#else
20335        uint64_t wlb_dat                 : 4;
20336        uint64_t reserved_4_4            : 1;
20337        uint64_t dt                      : 1;
20338        uint64_t dtcnt                   : 9;
20339        uint64_t reserved_15_18          : 4;
20340        uint64_t wlb_msk                 : 4;
20341        uint64_t reserved_23_63          : 41;
20342#endif
20343    } cn30xx;
20344    struct cvmx_l2c_bst0_cn31xx
20345    {
20346#if __BYTE_ORDER == __BIG_ENDIAN
20347        uint64_t reserved_23_63          : 41;
20348        uint64_t wlb_msk                 : 4;       /**< Bist Results for WLB-MSK RAM [DP0-3]
20349                                                         - 0: GOOD (or bist in progress/never run)
20350                                                         - 1: BAD */
20351        uint64_t reserved_16_18          : 3;
20352        uint64_t dtcnt                   : 10;      /**< DuTag BiST Counter (used to help isolate the failure)
20353                                                         [9]:   i (0=FORWARD/1=REVERSE pass)
20354                                                         [8:7]: j (Pattern# 1 of 4)
20355                                                         [6:1]: k (DT Index 1 of 64)
20356                                                         [0]:   l (DT# 1 of 2 DTs) */
20357        uint64_t dt                      : 1;       /**< Bist Results for DuTAG RAM(s)
20358                                                         - 0: GOOD (or bist in progress/never run)
20359                                                         - 1: BAD */
20360        uint64_t stin_msk                : 1;       /**< Bist Results for STIN-MSK RAM
20361                                                         - 0: GOOD (or bist in progress/never run)
20362                                                         - 1: BAD */
20363        uint64_t wlb_dat                 : 4;       /**< Bist Results for WLB-DAT RAM [DP0-3]
20364                                                         - 0: GOOD (or bist in progress/never run)
20365                                                         - 1: BAD */
20366#else
20367        uint64_t wlb_dat                 : 4;
20368        uint64_t stin_msk                : 1;
20369        uint64_t dt                      : 1;
20370        uint64_t dtcnt                   : 10;
20371        uint64_t reserved_16_18          : 3;
20372        uint64_t wlb_msk                 : 4;
20373        uint64_t reserved_23_63          : 41;
20374#endif
20375    } cn31xx;
20376    struct cvmx_l2c_bst0_cn38xx
20377    {
20378#if __BYTE_ORDER == __BIG_ENDIAN
20379        uint64_t reserved_19_63          : 45;
20380        uint64_t dtcnt                   : 13;      /**< DuTag BiST Counter (used to help isolate the failure)
20381                                                         [12]:    i (0=FORWARD/1=REVERSE pass)
20382                                                         [11:10]: j (Pattern# 1 of 4)
20383                                                         [9:4]:   k (DT Index 1 of 64)
20384                                                         [3:0]:   l (DT# 1 of 16 DTs) */
20385        uint64_t dt                      : 1;       /**< Bist Results for DuTAG RAM(s)
20386                                                         - 0: GOOD (or bist in progress/never run)
20387                                                         - 1: BAD */
20388        uint64_t stin_msk                : 1;       /**< Bist Results for STIN-MSK RAM
20389                                                         - 0: GOOD (or bist in progress/never run)
20390                                                         - 1: BAD */
20391        uint64_t wlb_dat                 : 4;       /**< Bist Results for WLB-DAT RAM [DP0-3]
20392                                                         - 0: GOOD (or bist in progress/never run)
20393                                                         - 1: BAD */
20394#else
20395        uint64_t wlb_dat                 : 4;
20396        uint64_t stin_msk                : 1;
20397        uint64_t dt                      : 1;
20398        uint64_t dtcnt                   : 13;
20399        uint64_t reserved_19_63          : 45;
20400#endif
20401    } cn38xx;
20402    struct cvmx_l2c_bst0_cn38xx          cn38xxp2;
20403    struct cvmx_l2c_bst0_cn50xx
20404    {
20405#if __BYTE_ORDER == __BIG_ENDIAN
20406        uint64_t reserved_24_63          : 40;
20407        uint64_t dtbnk                   : 1;       /**< DuTag Bank#
20408                                                         When DT=1(BAD), this field provides additional information
20409                                                         about which DuTag Bank (0/1) failed. */
20410        uint64_t wlb_msk                 : 4;       /**< Bist Results for WLB-MSK RAM [DP0-3]
20411                                                         - 0: GOOD (or bist in progress/never run)
20412                                                         - 1: BAD */
20413        uint64_t reserved_16_18          : 3;
20414        uint64_t dtcnt                   : 10;      /**< DuTag BiST Counter (used to help isolate the failure)
20415                                                         [9]:   i (0=FORWARD/1=REVERSE pass)
20416                                                         [8:7]: j (Pattern# 1 of 4)
20417                                                         [6:1]: k (DT Index 1 of 64)
20418                                                         [0]:   l (DT# 1 of 2 DTs) */
20419        uint64_t dt                      : 1;       /**< Bist Results for DuTAG RAM(s)
20420                                                         - 0: GOOD (or bist in progress/never run)
20421                                                         - 1: BAD */
20422        uint64_t stin_msk                : 1;       /**< Bist Results for STIN-MSK RAM
20423                                                         - 0: GOOD (or bist in progress/never run)
20424                                                         - 1: BAD */
20425        uint64_t wlb_dat                 : 4;       /**< Bist Results for WLB-DAT RAM [DP0-3]
20426                                                         - 0: GOOD (or bist in progress/never run)
20427                                                         - 1: BAD */
20428#else
20429        uint64_t wlb_dat                 : 4;
20430        uint64_t stin_msk                : 1;
20431        uint64_t dt                      : 1;
20432        uint64_t dtcnt                   : 10;
20433        uint64_t reserved_16_18          : 3;
20434        uint64_t wlb_msk                 : 4;
20435        uint64_t dtbnk                   : 1;
20436        uint64_t reserved_24_63          : 40;
20437#endif
20438    } cn50xx;
20439    struct cvmx_l2c_bst0_cn50xx          cn52xx;
20440    struct cvmx_l2c_bst0_cn50xx          cn52xxp1;
20441    struct cvmx_l2c_bst0_s               cn56xx;
20442    struct cvmx_l2c_bst0_s               cn56xxp1;
20443    struct cvmx_l2c_bst0_s               cn58xx;
20444    struct cvmx_l2c_bst0_s               cn58xxp1;
20445} cvmx_l2c_bst0_t;
20446
20447
20448/**
20449 * cvmx_l2c_bst1
20450 *
20451 * L2C_BST1 = L2C BIST 1 CTL/STAT
20452 *
20453 */
20454typedef union
20455{
20456    uint64_t u64;
20457    struct cvmx_l2c_bst1_s
20458    {
20459#if __BYTE_ORDER == __BIG_ENDIAN
20460        uint64_t reserved_9_63           : 55;
20461        uint64_t l2t                     : 9;       /**< Bist Results for L2T (USE+8SET RAMs)
20462                                                         - 0: GOOD (or bist in progress/never run)
20463                                                         - 1: BAD */
20464#else
20465        uint64_t l2t                     : 9;
20466        uint64_t reserved_9_63           : 55;
20467#endif
20468    } s;
20469    struct cvmx_l2c_bst1_cn30xx
20470    {
20471#if __BYTE_ORDER == __BIG_ENDIAN
20472        uint64_t reserved_16_63          : 48;
20473        uint64_t vwdf                    : 4;       /**< Bist Results for VWDF RAMs
20474                                                         - 0: GOOD (or bist in progress/never run)
20475                                                         - 1: BAD */
20476        uint64_t lrf                     : 2;       /**< Bist Results for LRF RAMs (PLC+ILC)
20477                                                         - 0: GOOD (or bist in progress/never run)
20478                                                         - 1: BAD */
20479        uint64_t vab_vwcf                : 1;       /**< Bist Results for VAB VWCF_MEM
20480                                                         - 0: GOOD (or bist in progress/never run)
20481                                                         - 1: BAD */
20482        uint64_t reserved_5_8            : 4;
20483        uint64_t l2t                     : 5;       /**< Bist Results for L2T (USE+4SET RAMs)
20484                                                         - 0: GOOD (or bist in progress/never run)
20485                                                         - 1: BAD */
20486#else
20487        uint64_t l2t                     : 5;
20488        uint64_t reserved_5_8            : 4;
20489        uint64_t vab_vwcf                : 1;
20490        uint64_t lrf                     : 2;
20491        uint64_t vwdf                    : 4;
20492        uint64_t reserved_16_63          : 48;
20493#endif
20494    } cn30xx;
20495    struct cvmx_l2c_bst1_cn30xx          cn31xx;
20496    struct cvmx_l2c_bst1_cn38xx
20497    {
20498#if __BYTE_ORDER == __BIG_ENDIAN
20499        uint64_t reserved_16_63          : 48;
20500        uint64_t vwdf                    : 4;       /**< Bist Results for VWDF RAMs
20501                                                         - 0: GOOD (or bist in progress/never run)
20502                                                         - 1: BAD */
20503        uint64_t lrf                     : 2;       /**< Bist Results for LRF RAMs (PLC+ILC)
20504                                                         - 0: GOOD (or bist in progress/never run)
20505                                                         - 1: BAD */
20506        uint64_t vab_vwcf                : 1;       /**< Bist Results for VAB VWCF_MEM
20507                                                         - 0: GOOD (or bist in progress/never run)
20508                                                         - 1: BAD */
20509        uint64_t l2t                     : 9;       /**< Bist Results for L2T (USE+8SET RAMs)
20510                                                         - 0: GOOD (or bist in progress/never run)
20511                                                         - 1: BAD */
20512#else
20513        uint64_t l2t                     : 9;
20514        uint64_t vab_vwcf                : 1;
20515        uint64_t lrf                     : 2;
20516        uint64_t vwdf                    : 4;
20517        uint64_t reserved_16_63          : 48;
20518#endif
20519    } cn38xx;
20520    struct cvmx_l2c_bst1_cn38xx          cn38xxp2;
20521    struct cvmx_l2c_bst1_cn38xx          cn50xx;
20522    struct cvmx_l2c_bst1_cn52xx
20523    {
20524#if __BYTE_ORDER == __BIG_ENDIAN
20525        uint64_t reserved_19_63          : 45;
20526        uint64_t plc2                    : 1;       /**< Bist Results for PLC2 RAM
20527                                                         - 0: GOOD (or bist in progress/never run)
20528                                                         - 1: BAD */
20529        uint64_t plc1                    : 1;       /**< Bist Results for PLC1 RAM
20530                                                         - 0: GOOD (or bist in progress/never run)
20531                                                         - 1: BAD */
20532        uint64_t plc0                    : 1;       /**< Bist Results for PLC0 RAM
20533                                                         - 0: GOOD (or bist in progress/never run)
20534                                                         - 1: BAD */
20535        uint64_t vwdf                    : 4;       /**< Bist Results for VWDF RAMs
20536                                                         - 0: GOOD (or bist in progress/never run)
20537                                                         - 1: BAD */
20538        uint64_t reserved_11_11          : 1;
20539        uint64_t ilc                     : 1;       /**< Bist Results for ILC RAM
20540                                                         - 0: GOOD (or bist in progress/never run)
20541                                                         - 1: BAD */
20542        uint64_t vab_vwcf                : 1;       /**< Bist Results for VAB VWCF_MEM
20543                                                         - 0: GOOD (or bist in progress/never run)
20544                                                         - 1: BAD */
20545        uint64_t l2t                     : 9;       /**< Bist Results for L2T (USE+8SET RAMs)
20546                                                         - 0: GOOD (or bist in progress/never run)
20547                                                         - 1: BAD */
20548#else
20549        uint64_t l2t                     : 9;
20550        uint64_t vab_vwcf                : 1;
20551        uint64_t ilc                     : 1;
20552        uint64_t reserved_11_11          : 1;
20553        uint64_t vwdf                    : 4;
20554        uint64_t plc0                    : 1;
20555        uint64_t plc1                    : 1;
20556        uint64_t plc2                    : 1;
20557        uint64_t reserved_19_63          : 45;
20558#endif
20559    } cn52xx;
20560    struct cvmx_l2c_bst1_cn52xx          cn52xxp1;
20561    struct cvmx_l2c_bst1_cn56xx
20562    {
20563#if __BYTE_ORDER == __BIG_ENDIAN
20564        uint64_t reserved_24_63          : 40;
20565        uint64_t plc2                    : 1;       /**< Bist Results for LRF RAMs (ILC)
20566                                                         - 0: GOOD (or bist in progress/never run)
20567                                                         - 1: BAD */
20568        uint64_t plc1                    : 1;       /**< Bist Results for LRF RAMs (ILC)
20569                                                         - 0: GOOD (or bist in progress/never run)
20570                                                         - 1: BAD */
20571        uint64_t plc0                    : 1;       /**< Bist Results for LRF RAMs (ILC)
20572                                                         - 0: GOOD (or bist in progress/never run)
20573                                                         - 1: BAD */
20574        uint64_t ilc                     : 1;       /**< Bist Results for LRF RAMs (ILC)
20575                                                         - 0: GOOD (or bist in progress/never run)
20576                                                         - 1: BAD */
20577        uint64_t vwdf1                   : 4;       /**< Bist Results for VWDF1 RAMs
20578                                                         - 0: GOOD (or bist in progress/never run)
20579                                                         - 1: BAD */
20580        uint64_t vwdf0                   : 4;       /**< Bist Results for VWDF0 RAMs
20581                                                         - 0: GOOD (or bist in progress/never run)
20582                                                         - 1: BAD */
20583        uint64_t vab_vwcf1               : 1;       /**< Bist Results for VAB VWCF1_MEM */
20584        uint64_t reserved_10_10          : 1;
20585        uint64_t vab_vwcf0               : 1;       /**< Bist Results for VAB VWCF0_MEM
20586                                                         - 0: GOOD (or bist in progress/never run)
20587                                                         - 1: BAD */
20588        uint64_t l2t                     : 9;       /**< Bist Results for L2T (USE+8SET RAMs)
20589                                                         - 0: GOOD (or bist in progress/never run)
20590                                                         - 1: BAD */
20591#else
20592        uint64_t l2t                     : 9;
20593        uint64_t vab_vwcf0               : 1;
20594        uint64_t reserved_10_10          : 1;
20595        uint64_t vab_vwcf1               : 1;
20596        uint64_t vwdf0                   : 4;
20597        uint64_t vwdf1                   : 4;
20598        uint64_t ilc                     : 1;
20599        uint64_t plc0                    : 1;
20600        uint64_t plc1                    : 1;
20601        uint64_t plc2                    : 1;
20602        uint64_t reserved_24_63          : 40;
20603#endif
20604    } cn56xx;
20605    struct cvmx_l2c_bst1_cn56xx          cn56xxp1;
20606    struct cvmx_l2c_bst1_cn38xx          cn58xx;
20607    struct cvmx_l2c_bst1_cn38xx          cn58xxp1;
20608} cvmx_l2c_bst1_t;
20609
20610
20611/**
20612 * cvmx_l2c_bst2
20613 *
20614 * L2C_BST2 = L2C BIST 2 CTL/STAT
20615 *
20616 */
20617typedef union
20618{
20619    uint64_t u64;
20620    struct cvmx_l2c_bst2_s
20621    {
20622#if __BYTE_ORDER == __BIG_ENDIAN
20623        uint64_t reserved_16_63          : 48;
20624        uint64_t mrb                     : 4;       /**< Bist Results for MRB RAMs
20625                                                         - 0: GOOD (or bist in progress/never run)
20626                                                         - 1: BAD */
20627        uint64_t reserved_4_11           : 8;
20628        uint64_t ipcbst                  : 1;       /**< Bist Results for RFB IPC RAM
20629                                                         - 1: BAD */
20630        uint64_t picbst                  : 1;       /**< Bist Results for RFB PIC RAM
20631                                                         - 1: BAD */
20632        uint64_t xrdmsk                  : 1;       /**< Bist Results for RFB XRD-MSK RAM
20633                                                         - 0: GOOD (or bist in progress/never run)
20634                                                         - 1: BAD */
20635        uint64_t xrddat                  : 1;       /**< Bist Results for RFB XRD-DAT RAM
20636                                                         - 0: GOOD (or bist in progress/never run)
20637                                                         - 1: BAD */
20638#else
20639        uint64_t xrddat                  : 1;
20640        uint64_t xrdmsk                  : 1;
20641        uint64_t picbst                  : 1;
20642        uint64_t ipcbst                  : 1;
20643        uint64_t reserved_4_11           : 8;
20644        uint64_t mrb                     : 4;
20645        uint64_t reserved_16_63          : 48;
20646#endif
20647    } s;
20648    struct cvmx_l2c_bst2_cn30xx
20649    {
20650#if __BYTE_ORDER == __BIG_ENDIAN
20651        uint64_t reserved_16_63          : 48;
20652        uint64_t mrb                     : 4;       /**< Bist Results for MRB RAMs
20653                                                         - 0: GOOD (or bist in progress/never run)
20654                                                         - 1: BAD */
20655        uint64_t rmdf                    : 4;       /**< Bist Results for RMDF RAMs
20656                                                         - 0: GOOD (or bist in progress/never run)
20657                                                         - 1: BAD */
20658        uint64_t reserved_4_7            : 4;
20659        uint64_t ipcbst                  : 1;       /**< Bist Results for RFB IPC RAM
20660                                                         - 0: GOOD (or bist in progress/never run)
20661                                                         - 1: BAD */
20662        uint64_t reserved_2_2            : 1;
20663        uint64_t xrdmsk                  : 1;       /**< Bist Results for RFB XRD-MSK RAM
20664                                                         - 0: GOOD (or bist in progress/never run)
20665                                                         - 1: BAD */
20666        uint64_t xrddat                  : 1;       /**< Bist Results for RFB XRD-DAT RAM
20667                                                         - 0: GOOD (or bist in progress/never run)
20668                                                         - 1: BAD */
20669#else
20670        uint64_t xrddat                  : 1;
20671        uint64_t xrdmsk                  : 1;
20672        uint64_t reserved_2_2            : 1;
20673        uint64_t ipcbst                  : 1;
20674        uint64_t reserved_4_7            : 4;
20675        uint64_t rmdf                    : 4;
20676        uint64_t mrb                     : 4;
20677        uint64_t reserved_16_63          : 48;
20678#endif
20679    } cn30xx;
20680    struct cvmx_l2c_bst2_cn30xx          cn31xx;
20681    struct cvmx_l2c_bst2_cn38xx
20682    {
20683#if __BYTE_ORDER == __BIG_ENDIAN
20684        uint64_t reserved_16_63          : 48;
20685        uint64_t mrb                     : 4;       /**< Bist Results for MRB RAMs
20686                                                         - 0: GOOD (or bist in progress/never run)
20687                                                         - 1: BAD */
20688        uint64_t rmdf                    : 4;       /**< Bist Results for RMDF RAMs
20689                                                         - 0: GOOD (or bist in progress/never run)
20690                                                         - 1: BAD */
20691        uint64_t rhdf                    : 4;       /**< Bist Results for RHDF RAMs
20692                                                         - 0: GOOD (or bist in progress/never run)
20693                                                         - 1: BAD */
20694        uint64_t ipcbst                  : 1;       /**< Bist Results for RFB IPC RAM
20695                                                         - 1: BAD */
20696        uint64_t picbst                  : 1;       /**< Bist Results for RFB PIC RAM
20697                                                         - 1: BAD */
20698        uint64_t xrdmsk                  : 1;       /**< Bist Results for RFB XRD-MSK RAM
20699                                                         - 0: GOOD (or bist in progress/never run)
20700                                                         - 1: BAD */
20701        uint64_t xrddat                  : 1;       /**< Bist Results for RFB XRD-DAT RAM
20702                                                         - 0: GOOD (or bist in progress/never run)
20703                                                         - 1: BAD */
20704#else
20705        uint64_t xrddat                  : 1;
20706        uint64_t xrdmsk                  : 1;
20707        uint64_t picbst                  : 1;
20708        uint64_t ipcbst                  : 1;
20709        uint64_t rhdf                    : 4;
20710        uint64_t rmdf                    : 4;
20711        uint64_t mrb                     : 4;
20712        uint64_t reserved_16_63          : 48;
20713#endif
20714    } cn38xx;
20715    struct cvmx_l2c_bst2_cn38xx          cn38xxp2;
20716    struct cvmx_l2c_bst2_cn30xx          cn50xx;
20717    struct cvmx_l2c_bst2_cn30xx          cn52xx;
20718    struct cvmx_l2c_bst2_cn30xx          cn52xxp1;
20719    struct cvmx_l2c_bst2_cn56xx
20720    {
20721#if __BYTE_ORDER == __BIG_ENDIAN
20722        uint64_t reserved_16_63          : 48;
20723        uint64_t mrb                     : 4;       /**< Bist Results for MRB RAMs
20724                                                         - 0: GOOD (or bist in progress/never run)
20725                                                         - 1: BAD */
20726        uint64_t rmdb                    : 4;       /**< Bist Results for RMDB RAMs
20727                                                         - 0: GOOD (or bist in progress/never run)
20728                                                         - 1: BAD */
20729        uint64_t rhdb                    : 4;       /**< Bist Results for RHDB RAMs
20730                                                         - 0: GOOD (or bist in progress/never run)
20731                                                         - 1: BAD */
20732        uint64_t ipcbst                  : 1;       /**< Bist Results for RFB IPC RAM
20733                                                         - 1: BAD */
20734        uint64_t picbst                  : 1;       /**< Bist Results for RFB PIC RAM
20735                                                         - 1: BAD */
20736        uint64_t xrdmsk                  : 1;       /**< Bist Results for RFB XRD-MSK RAM
20737                                                         - 0: GOOD (or bist in progress/never run)
20738                                                         - 1: BAD */
20739        uint64_t xrddat                  : 1;       /**< Bist Results for RFB XRD-DAT RAM
20740                                                         - 0: GOOD (or bist in progress/never run)
20741                                                         - 1: BAD */
20742#else
20743        uint64_t xrddat                  : 1;
20744        uint64_t xrdmsk                  : 1;
20745        uint64_t picbst                  : 1;
20746        uint64_t ipcbst                  : 1;
20747        uint64_t rhdb                    : 4;
20748        uint64_t rmdb                    : 4;
20749        uint64_t mrb                     : 4;
20750        uint64_t reserved_16_63          : 48;
20751#endif
20752    } cn56xx;
20753    struct cvmx_l2c_bst2_cn56xx          cn56xxp1;
20754    struct cvmx_l2c_bst2_cn56xx          cn58xx;
20755    struct cvmx_l2c_bst2_cn56xx          cn58xxp1;
20756} cvmx_l2c_bst2_t;
20757
20758
20759/**
20760 * cvmx_l2c_cfg
20761 *
20762 * Specify the RSL base addresses for the block
20763 *
20764 *                  L2C_CFG = L2C Configuration
20765 *
20766 * Description:
20767 */
20768typedef union
20769{
20770    uint64_t u64;
20771    struct cvmx_l2c_cfg_s
20772    {
20773#if __BYTE_ORDER == __BIG_ENDIAN
20774        uint64_t reserved_20_63          : 44;
20775        uint64_t bstrun                  : 1;       /**< L2 Data Store Bist Running
20776                                                         Indicates when the L2C HW Bist sequence(short or long) is
20777                                                         running. [L2C ECC Bist FSM is not in the RESET/DONE state]
20778                                                         *** NOTE: O9N PASS2 Addition */
20779        uint64_t lbist                   : 1;       /**< L2C Data Store Long Bist Sequence
20780                                                         When the previous state was '0' and SW writes a '1',
20781                                                         the long bist sequence (enhanced 13N March) is performed.
20782                                                         SW can then read the L2C_CFG[BSTRUN] which will indicate
20783                                                         that the long bist sequence is running. When BSTRUN-=0,
20784                                                         the state of the L2D_BST[0-3] registers contain information
20785                                                         which reflects the status of the recent long bist sequence.
20786                                                         NOTE: SW must never write LBIST=0 while Long Bist is running
20787                                                         (ie: when BSTRUN=1 never write LBIST=0).
20788                                                         NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS
20789                                                         Fuse is blown.
20790                                                         *** NOTE: O9N PASS2 Addition */
20791        uint64_t xor_bank                : 1;       /**< L2C XOR Bank Bit
20792                                                         When both LMC's are enabled(DPRES1=1/DPRES0=1), this
20793                                                         bit determines how addresses are assigned to
20794                                                         LMC port(s).
20795                                                            XOR_BANK|  LMC#
20796                                                          ----------+---------------------------------
20797                                                              0     |   byte address[7]
20798                                                              1     |   byte address[7] XOR byte address[12]
20799                                                         Example: If both LMC ports are enabled (DPRES1=1/DPRES0=1)
20800                                                         and XOR_BANK=1, then addr[7] XOR addr[12] is used to determine
20801                                                         which LMC Port# a reference is directed to.
20802                                                         *** NOTE: O56 PASS1 Addition */
20803        uint64_t dpres1                  : 1;       /**< DDR1 Present/LMC1 Enable
20804                                                         When DPRES1 is set, LMC#1 is enabled(DDR1 pins at
20805                                                         the BOTTOM of the chip are active).
20806                                                         NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1),
20807                                                         see XOR_BANK bit to determine how a reference is
20808                                                         assigned to a DDR/LMC port. (Also, in dual-LMC configuration,
20809                                                         the address sent to the targeted LMC port is the
20810                                                         address shifted right by one).
20811                                                         NOTE: For power-savings, the DPRES1 is also used to
20812                                                         disable DDR1/LMC1 clocks.
20813                                                         SW Constraint: When dual LMC is enabled
20814                                                         (L2C_CFG[DPRES0/1]=1), the LMCx_DDR2_CTL[DDR_EOF]
20815                                                         must be increased by +1 to account for an additional
20816                                                         cycle of uncertainty.
20817                                                         *** NOTE: O56 PASS1 Addition */
20818        uint64_t dpres0                  : 1;       /**< DDR0 Present/LMC0 Enable
20819                                                         When DPRES0 is set, LMC#0 is enabled(DDR0 pins at
20820                                                         the BOTTOM of the chip are active).
20821                                                         NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1),
20822                                                         see XOR_BANK bit to determine how a reference is
20823                                                         assigned to a DDR/LMC port. (Also, in dual-LMC configuration,
20824                                                         the address sent to the targeted LMC port is the
20825                                                         address shifted right by one).
20826                                                         NOTE: For power-savings, the DPRES0 is also used to
20827                                                         disable DDR0/LMC0 clocks.
20828                                                         SW Constraint: When dual LMC is enabled
20829                                                         (L2C_CFG[DPRES0/1]=1), the LMCx_DDR2_CTL[DDR_EOF]
20830                                                         must be increased by +1 to account for an additional
20831                                                         cycle of uncertainty.
20832                                                         *** NOTE: O56 PASS1 Addition */
20833        uint64_t dfill_dis               : 1;       /**< L2C Dual Fill Disable
20834                                                         When set, the L2C dual-fill performance feature is
20835                                                         disabled.
20836                                                         NOTE: This bit is only intended to evaluate the
20837                                                         effectiveness of the dual-fill feature. For OPTIMAL
20838                                                         performance, this bit should ALWAYS be zero.
20839                                                         *** NOTE: O9N PASS1 Addition */
20840        uint64_t fpexp                   : 4;       /**< [CYA] Forward Progress Counter Exponent
20841                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20842                                                         When FPEN is enabled and the LFB is empty, the
20843                                                         forward progress counter (FPCNT) is initialized to:
20844                                                            FPCNT[24:0] = 2^(9+FPEXP)
20845                                                         When the LFB is non-empty the FPCNT is decremented
20846                                                         (every eclk interval). If the FPCNT reaches zero,
20847                                                         the LFB no longer accepts new requests until either
20848                                                            a) all of the current LFB entries have completed
20849                                                               (to ensure forward progress).
20850                                                            b) FPEMPTY=0 and another forward progress count
20851                                                               interval timeout expires.
20852                                                         EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
20853                                                         (For eclk=500MHz(2ns), this would be ~4us). */
20854        uint64_t fpempty                 : 1;       /**< [CYA] Forward Progress Counter Empty
20855                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20856                                                         When set, if the forward progress counter expires,
20857                                                         all new LFB-NQs are stopped UNTIL all current LFB
20858                                                         entries have completed.
20859                                                         When clear, if the forward progress counter expires,
20860                                                         all new LFB-NQs are stopped UNTIL either
20861                                                           a) all current LFB entries have completed.
20862                                                           b) another forward progress interval expires
20863                                                         NOTE: We may want to FREEZE/HANG the system when
20864                                                         we encounter an LFB entry cannot complete, and there
20865                                                         may be times when we want to allow further LFB-NQs
20866                                                         to be permitted to help in further analyzing the
20867                                                         source */
20868        uint64_t fpen                    : 1;       /**< [CYA] Forward Progress Counter Enable
20869                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20870                                                         When set, enables the Forward Progress Counter to
20871                                                         prevent new LFB entries from enqueueing until ALL
20872                                                         current LFB entries have completed. */
20873        uint64_t idxalias                : 1;       /**< L2C Index Alias Enable
20874                                                         When set, the L2 Tag/Data Store will alias the 11-bit
20875                                                         index with the low order 11-bits of the tag.
20876                                                            index[17:7] =  (tag[28:18] ^ index[17:7])
20877                                                         NOTE: This bit must only be modified at boot time,
20878                                                         when it can be guaranteed that no blocks have been
20879                                                         loaded into the L2 Cache.
20880                                                         The index aliasing is a performance enhancement feature
20881                                                         which reduces the L2 cache thrashing experienced for
20882                                                         regular stride references.
20883                                                         NOTE: The index alias is stored in the LFB and VAB, and
20884                                                         its effects are reversed for memory references (Victims,
20885                                                         STT-Misses and Read-Misses) */
20886        uint64_t mwf_crd                 : 4;       /**< MWF Credit Threshold: When the remaining MWF credits
20887                                                         become less than or equal to the MWF_CRD, the L2C will
20888                                                         assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
20889                                                         writes (victims) higher priority. */
20890        uint64_t rsp_arb_mode            : 1;       /**< RSP Arbitration Mode:
20891                                                         - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
20892                                                         - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
20893                                                             RHCF(RdHit), STRSP(ST RSP w/ invalidate),
20894                                                             STRSC(ST RSP no invalidate)] */
20895        uint64_t rfb_arb_mode            : 1;       /**< RFB Arbitration Mode:
20896                                                         - 0: Fixed Priority -
20897                                                             IOB->PP requests are higher priority than
20898                                                             PP->IOB requests
20899                                                         - 1: Round Robin -
20900                                                             I/O requests from PP and IOB are serviced in
20901                                                             round robin */
20902        uint64_t lrf_arb_mode            : 1;       /**< RF Arbitration Mode:
20903                                                         - 0: Fixed Priority -
20904                                                             IOB memory requests are higher priority than PP
20905                                                             memory requests.
20906                                                         - 1: Round Robin -
20907                                                             Memory requests from PP and IOB are serviced in
20908                                                             round robin. */
20909#else
20910        uint64_t lrf_arb_mode            : 1;
20911        uint64_t rfb_arb_mode            : 1;
20912        uint64_t rsp_arb_mode            : 1;
20913        uint64_t mwf_crd                 : 4;
20914        uint64_t idxalias                : 1;
20915        uint64_t fpen                    : 1;
20916        uint64_t fpempty                 : 1;
20917        uint64_t fpexp                   : 4;
20918        uint64_t dfill_dis               : 1;
20919        uint64_t dpres0                  : 1;
20920        uint64_t dpres1                  : 1;
20921        uint64_t xor_bank                : 1;
20922        uint64_t lbist                   : 1;
20923        uint64_t bstrun                  : 1;
20924        uint64_t reserved_20_63          : 44;
20925#endif
20926    } s;
20927    struct cvmx_l2c_cfg_cn30xx
20928    {
20929#if __BYTE_ORDER == __BIG_ENDIAN
20930        uint64_t reserved_14_63          : 50;
20931        uint64_t fpexp                   : 4;       /**< [CYA] Forward Progress Counter Exponent
20932                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20933                                                         When FPEN is enabled and the LFB is empty, the
20934                                                         forward progress counter (FPCNT) is initialized to:
20935                                                            FPCNT[24:0] = 2^(9+FPEXP)
20936                                                         When the LFB is non-empty the FPCNT is decremented
20937                                                         (every eclk interval). If the FPCNT reaches zero,
20938                                                         the LFB no longer accepts new requests until either
20939                                                            a) all of the current LFB entries have completed
20940                                                               (to ensure forward progress).
20941                                                            b) FPEMPTY=0 and another forward progress count
20942                                                               interval timeout expires.
20943                                                         EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
20944                                                         (For eclk=500MHz(2ns), this would be ~4us). */
20945        uint64_t fpempty                 : 1;       /**< [CYA] Forward Progress Counter Empty
20946                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20947                                                         When set, if the forward progress counter expires,
20948                                                         all new LFB-NQs are stopped UNTIL all current LFB
20949                                                         entries have completed.
20950                                                         When clear, if the forward progress counter expires,
20951                                                         all new LFB-NQs are stopped UNTIL either
20952                                                           a) all current LFB entries have completed.
20953                                                           b) another forward progress interval expires
20954                                                         NOTE: We may want to FREEZE/HANG the system when
20955                                                         we encounter an LFB entry cannot complete, and there
20956                                                         may be times when we want to allow further LFB-NQs
20957                                                         to be permitted to help in further analyzing the
20958                                                         source */
20959        uint64_t fpen                    : 1;       /**< [CYA] Forward Progress Counter Enable
20960                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
20961                                                         When set, enables the Forward Progress Counter to
20962                                                         prevent new LFB entries from enqueueing until ALL
20963                                                         current LFB entries have completed. */
20964        uint64_t idxalias                : 1;       /**< L2C Index Alias Enable
20965                                                         When set, the L2 Tag/Data Store will alias the 8-bit
20966                                                         index with the low order 8-bits of the tag.
20967                                                            index[14:7] =  (tag[22:15] ^ index[14:7])
20968                                                         NOTE: This bit must only be modified at boot time,
20969                                                         when it can be guaranteed that no blocks have been
20970                                                         loaded into the L2 Cache.
20971                                                         The index aliasing is a performance enhancement feature
20972                                                         which reduces the L2 cache thrashing experienced for
20973                                                         regular stride references.
20974                                                         NOTE: The index alias is stored in the LFB and VAB, and
20975                                                         its effects are reversed for memory references (Victims,
20976                                                         STT-Misses and Read-Misses) */
20977        uint64_t mwf_crd                 : 4;       /**< MWF Credit Threshold: When the remaining MWF credits
20978                                                         become less than or equal to the MWF_CRD, the L2C will
20979                                                         assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
20980                                                         writes (victims) higher priority. */
20981        uint64_t rsp_arb_mode            : 1;       /**< RSP Arbitration Mode:
20982                                                         - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
20983                                                         - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
20984                                                             RHCF(RdHit), STRSP(ST RSP w/ invalidate),
20985                                                             STRSC(ST RSP no invalidate)] */
20986        uint64_t rfb_arb_mode            : 1;       /**< RFB Arbitration Mode:
20987                                                         - 0: Fixed Priority -
20988                                                             IOB->PP requests are higher priority than
20989                                                             PP->IOB requests
20990                                                         - 1: Round Robin -
20991                                                             I/O requests from PP and IOB are serviced in
20992                                                             round robin */
20993        uint64_t lrf_arb_mode            : 1;       /**< RF Arbitration Mode:
20994                                                         - 0: Fixed Priority -
20995                                                             IOB memory requests are higher priority than PP
20996                                                             memory requests.
20997                                                         - 1: Round Robin -
20998                                                             Memory requests from PP and IOB are serviced in
20999                                                             round robin. */
21000#else
21001        uint64_t lrf_arb_mode            : 1;
21002        uint64_t rfb_arb_mode            : 1;
21003        uint64_t rsp_arb_mode            : 1;
21004        uint64_t mwf_crd                 : 4;
21005        uint64_t idxalias                : 1;
21006        uint64_t fpen                    : 1;
21007        uint64_t fpempty                 : 1;
21008        uint64_t fpexp                   : 4;
21009        uint64_t reserved_14_63          : 50;
21010#endif
21011    } cn30xx;
21012    struct cvmx_l2c_cfg_cn30xx           cn31xx;
21013    struct cvmx_l2c_cfg_cn30xx           cn38xx;
21014    struct cvmx_l2c_cfg_cn30xx           cn38xxp2;
21015    struct cvmx_l2c_cfg_cn50xx
21016    {
21017#if __BYTE_ORDER == __BIG_ENDIAN
21018        uint64_t reserved_20_63          : 44;
21019        uint64_t bstrun                  : 1;       /**< L2 Data Store Bist Running
21020                                                         Indicates when the L2C HW Bist sequence(short or long) is
21021                                                         running. [L2C ECC Bist FSM is not in the RESET/DONE state]
21022                                                         *** NOTE: O56 PASS1 Addition */
21023        uint64_t lbist                   : 1;       /**< L2C Data Store Long Bist Sequence
21024                                                         When the previous state was '0' and SW writes a '1',
21025                                                         the long bist sequence (enhanced 13N March) is performed.
21026                                                         SW can then read the L2C_CFG[BSTRUN] which will indicate
21027                                                         that the long bist sequence is running. When BSTRUN-=0,
21028                                                         the state of the L2D_BST[0-3] registers contain information
21029                                                         which reflects the status of the recent long bist sequence.
21030                                                         NOTE: SW must never write LBIST=0 while Long Bist is running
21031                                                         (ie: when BSTRUN=1 never write LBIST=0). */
21032        uint64_t reserved_14_17          : 4;
21033        uint64_t fpexp                   : 4;       /**< [CYA] Forward Progress Counter Exponent
21034                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21035                                                         When FPEN is enabled and the LFB is empty, the
21036                                                         forward progress counter (FPCNT) is initialized to:
21037                                                            FPCNT[24:0] = 2^(9+FPEXP)
21038                                                         When the LFB is non-empty the FPCNT is decremented
21039                                                         (every eclk interval). If the FPCNT reaches zero,
21040                                                         the LFB no longer accepts new requests until either
21041                                                            a) all of the current LFB entries have completed
21042                                                               (to ensure forward progress).
21043                                                            b) FPEMPTY=0 and another forward progress count
21044                                                               interval timeout expires.
21045                                                         EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
21046                                                         (For eclk=500MHz(2ns), this would be ~4us). */
21047        uint64_t fpempty                 : 1;       /**< [CYA] Forward Progress Counter Empty
21048                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21049                                                         When set, if the forward progress counter expires,
21050                                                         all new LFB-NQs are stopped UNTIL all current LFB
21051                                                         entries have completed.
21052                                                         When clear, if the forward progress counter expires,
21053                                                         all new LFB-NQs are stopped UNTIL either
21054                                                           a) all current LFB entries have completed.
21055                                                           b) another forward progress interval expires
21056                                                         NOTE: We may want to FREEZE/HANG the system when
21057                                                         we encounter an LFB entry cannot complete, and there
21058                                                         may be times when we want to allow further LFB-NQs
21059                                                         to be permitted to help in further analyzing the
21060                                                         source */
21061        uint64_t fpen                    : 1;       /**< [CYA] Forward Progress Counter Enable
21062                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21063                                                         When set, enables the Forward Progress Counter to
21064                                                         prevent new LFB entries from enqueueing until ALL
21065                                                         current LFB entries have completed. */
21066        uint64_t idxalias                : 1;       /**< L2C Index Alias Enable
21067                                                         When set, the L2 Tag/Data Store will alias the 7-bit
21068                                                         index with the low order 7-bits of the tag.
21069                                                            index[13:7] =  (tag[20:14] ^ index[13:7])
21070                                                         NOTE: This bit must only be modified at boot time,
21071                                                         when it can be guaranteed that no blocks have been
21072                                                         loaded into the L2 Cache.
21073                                                         The index aliasing is a performance enhancement feature
21074                                                         which reduces the L2 cache thrashing experienced for
21075                                                         regular stride references.
21076                                                         NOTE: The index alias is stored in the LFB and VAB, and
21077                                                         its effects are reversed for memory references (Victims,
21078                                                         STT-Misses and Read-Misses) */
21079        uint64_t mwf_crd                 : 4;       /**< MWF Credit Threshold: When the remaining MWF credits
21080                                                         become less than or equal to the MWF_CRD, the L2C will
21081                                                         assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
21082                                                         writes (victims) higher priority. */
21083        uint64_t rsp_arb_mode            : 1;       /**< RSP Arbitration Mode:
21084                                                         - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
21085                                                         - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
21086                                                             RHCF(RdHit), STRSP(ST RSP w/ invalidate),
21087                                                             STRSC(ST RSP no invalidate)] */
21088        uint64_t rfb_arb_mode            : 1;       /**< RFB Arbitration Mode:
21089                                                         - 0: Fixed Priority -
21090                                                             IOB->PP requests are higher priority than
21091                                                             PP->IOB requests
21092                                                         - 1: Round Robin -
21093                                                             I/O requests from PP and IOB are serviced in
21094                                                             round robin */
21095        uint64_t lrf_arb_mode            : 1;       /**< RF Arbitration Mode:
21096                                                         - 0: Fixed Priority -
21097                                                             IOB memory requests are higher priority than PP
21098                                                             memory requests.
21099                                                         - 1: Round Robin -
21100                                                             Memory requests from PP and IOB are serviced in
21101                                                             round robin. */
21102#else
21103        uint64_t lrf_arb_mode            : 1;
21104        uint64_t rfb_arb_mode            : 1;
21105        uint64_t rsp_arb_mode            : 1;
21106        uint64_t mwf_crd                 : 4;
21107        uint64_t idxalias                : 1;
21108        uint64_t fpen                    : 1;
21109        uint64_t fpempty                 : 1;
21110        uint64_t fpexp                   : 4;
21111        uint64_t reserved_14_17          : 4;
21112        uint64_t lbist                   : 1;
21113        uint64_t bstrun                  : 1;
21114        uint64_t reserved_20_63          : 44;
21115#endif
21116    } cn50xx;
21117    struct cvmx_l2c_cfg_cn50xx           cn52xx;
21118    struct cvmx_l2c_cfg_cn50xx           cn52xxp1;
21119    struct cvmx_l2c_cfg_s                cn56xx;
21120    struct cvmx_l2c_cfg_s                cn56xxp1;
21121    struct cvmx_l2c_cfg_cn58xx
21122    {
21123#if __BYTE_ORDER == __BIG_ENDIAN
21124        uint64_t reserved_20_63          : 44;
21125        uint64_t bstrun                  : 1;       /**< L2 Data Store Bist Running
21126                                                         Indicates when the L2C HW Bist sequence(short or long) is
21127                                                         running. [L2C ECC Bist FSM is not in the RESET/DONE state]
21128                                                         *** NOTE: O9N PASS2 Addition */
21129        uint64_t lbist                   : 1;       /**< L2C Data Store Long Bist Sequence
21130                                                         When the previous state was '0' and SW writes a '1',
21131                                                         the long bist sequence (enhanced 13N March) is performed.
21132                                                         SW can then read the L2C_CFG[BSTRUN] which will indicate
21133                                                         that the long bist sequence is running. When BSTRUN-=0,
21134                                                         the state of the L2D_BST[0-3] registers contain information
21135                                                         which reflects the status of the recent long bist sequence.
21136                                                         NOTE: SW must never write LBIST=0 while Long Bist is running
21137                                                         (ie: when BSTRUN=1 never write LBIST=0).
21138                                                         NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS
21139                                                         Fuse is blown.
21140                                                         *** NOTE: O9N PASS2 Addition */
21141        uint64_t reserved_15_17          : 3;
21142        uint64_t dfill_dis               : 1;       /**< L2C Dual Fill Disable
21143                                                         When set, the L2C dual-fill performance feature is
21144                                                         disabled.
21145                                                         NOTE: This bit is only intended to evaluate the
21146                                                         effectiveness of the dual-fill feature. For OPTIMAL
21147                                                         performance, this bit should ALWAYS be zero.
21148                                                         *** NOTE: O9N PASS1 Addition */
21149        uint64_t fpexp                   : 4;       /**< [CYA] Forward Progress Counter Exponent
21150                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21151                                                         When FPEN is enabled and the LFB is empty, the
21152                                                         forward progress counter (FPCNT) is initialized to:
21153                                                            FPCNT[24:0] = 2^(9+FPEXP)
21154                                                         When the LFB is non-empty the FPCNT is decremented
21155                                                         (every eclk interval). If the FPCNT reaches zero,
21156                                                         the LFB no longer accepts new requests until either
21157                                                            a) all of the current LFB entries have completed
21158                                                               (to ensure forward progress).
21159                                                            b) FPEMPTY=0 and another forward progress count
21160                                                               interval timeout expires.
21161                                                         EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
21162                                                         (For eclk=500MHz(2ns), this would be ~4us). */
21163        uint64_t fpempty                 : 1;       /**< [CYA] Forward Progress Counter Empty
21164                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21165                                                         When set, if the forward progress counter expires,
21166                                                         all new LFB-NQs are stopped UNTIL all current LFB
21167                                                         entries have completed.
21168                                                         When clear, if the forward progress counter expires,
21169                                                         all new LFB-NQs are stopped UNTIL either
21170                                                           a) all current LFB entries have completed.
21171                                                           b) another forward progress interval expires
21172                                                         NOTE: We may want to FREEZE/HANG the system when
21173                                                         we encounter an LFB entry cannot complete, and there
21174                                                         may be times when we want to allow further LFB-NQs
21175                                                         to be permitted to help in further analyzing the
21176                                                         source */
21177        uint64_t fpen                    : 1;       /**< [CYA] Forward Progress Counter Enable
21178                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21179                                                         When set, enables the Forward Progress Counter to
21180                                                         prevent new LFB entries from enqueueing until ALL
21181                                                         current LFB entries have completed. */
21182        uint64_t idxalias                : 1;       /**< L2C Index Alias Enable
21183                                                         When set, the L2 Tag/Data Store will alias the 11-bit
21184                                                         index with the low order 11-bits of the tag.
21185                                                            index[17:7] =  (tag[28:18] ^ index[17:7])
21186                                                         NOTE: This bit must only be modified at boot time,
21187                                                         when it can be guaranteed that no blocks have been
21188                                                         loaded into the L2 Cache.
21189                                                         The index aliasing is a performance enhancement feature
21190                                                         which reduces the L2 cache thrashing experienced for
21191                                                         regular stride references.
21192                                                         NOTE: The index alias is stored in the LFB and VAB, and
21193                                                         its effects are reversed for memory references (Victims,
21194                                                         STT-Misses and Read-Misses) */
21195        uint64_t mwf_crd                 : 4;       /**< MWF Credit Threshold: When the remaining MWF credits
21196                                                         become less than or equal to the MWF_CRD, the L2C will
21197                                                         assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
21198                                                         writes (victims) higher priority. */
21199        uint64_t rsp_arb_mode            : 1;       /**< RSP Arbitration Mode:
21200                                                         - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
21201                                                         - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
21202                                                             RHCF(RdHit), STRSP(ST RSP w/ invalidate),
21203                                                             STRSC(ST RSP no invalidate)] */
21204        uint64_t rfb_arb_mode            : 1;       /**< RFB Arbitration Mode:
21205                                                         - 0: Fixed Priority -
21206                                                             IOB->PP requests are higher priority than
21207                                                             PP->IOB requests
21208                                                         - 1: Round Robin -
21209                                                             I/O requests from PP and IOB are serviced in
21210                                                             round robin */
21211        uint64_t lrf_arb_mode            : 1;       /**< RF Arbitration Mode:
21212                                                         - 0: Fixed Priority -
21213                                                             IOB memory requests are higher priority than PP
21214                                                             memory requests.
21215                                                         - 1: Round Robin -
21216                                                             Memory requests from PP and IOB are serviced in
21217                                                             round robin. */
21218#else
21219        uint64_t lrf_arb_mode            : 1;
21220        uint64_t rfb_arb_mode            : 1;
21221        uint64_t rsp_arb_mode            : 1;
21222        uint64_t mwf_crd                 : 4;
21223        uint64_t idxalias                : 1;
21224        uint64_t fpen                    : 1;
21225        uint64_t fpempty                 : 1;
21226        uint64_t fpexp                   : 4;
21227        uint64_t dfill_dis               : 1;
21228        uint64_t reserved_15_17          : 3;
21229        uint64_t lbist                   : 1;
21230        uint64_t bstrun                  : 1;
21231        uint64_t reserved_20_63          : 44;
21232#endif
21233    } cn58xx;
21234    struct cvmx_l2c_cfg_cn58xxp1
21235    {
21236#if __BYTE_ORDER == __BIG_ENDIAN
21237        uint64_t reserved_15_63          : 49;
21238        uint64_t dfill_dis               : 1;       /**< L2C Dual Fill Disable
21239                                                         When set, the L2C dual-fill performance feature is
21240                                                         disabled.
21241                                                         NOTE: This bit is only intended to evaluate the
21242                                                         effectiveness of the dual-fill feature. For OPTIMAL
21243                                                         performance, this bit should ALWAYS be zero.
21244                                                         *** NOTE: O9N PASS1 Addition */
21245        uint64_t fpexp                   : 4;       /**< [CYA] Forward Progress Counter Exponent
21246                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21247                                                         When FPEN is enabled and the LFB is empty, the
21248                                                         forward progress counter (FPCNT) is initialized to:
21249                                                            FPCNT[24:0] = 2^(9+FPEXP)
21250                                                         When the LFB is non-empty the FPCNT is decremented
21251                                                         (every eclk interval). If the FPCNT reaches zero,
21252                                                         the LFB no longer accepts new requests until either
21253                                                            a) all of the current LFB entries have completed
21254                                                               (to ensure forward progress).
21255                                                            b) FPEMPTY=0 and another forward progress count
21256                                                               interval timeout expires.
21257                                                         EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
21258                                                         (For eclk=500MHz(2ns), this would be ~4us). */
21259        uint64_t fpempty                 : 1;       /**< [CYA] Forward Progress Counter Empty
21260                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21261                                                         When set, if the forward progress counter expires,
21262                                                         all new LFB-NQs are stopped UNTIL all current LFB
21263                                                         entries have completed.
21264                                                         When clear, if the forward progress counter expires,
21265                                                         all new LFB-NQs are stopped UNTIL either
21266                                                           a) all current LFB entries have completed.
21267                                                           b) another forward progress interval expires
21268                                                         NOTE: We may want to FREEZE/HANG the system when
21269                                                         we encounter an LFB entry cannot complete, and there
21270                                                         may be times when we want to allow further LFB-NQs
21271                                                         to be permitted to help in further analyzing the
21272                                                         source */
21273        uint64_t fpen                    : 1;       /**< [CYA] Forward Progress Counter Enable
21274                                                         NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
21275                                                         When set, enables the Forward Progress Counter to
21276                                                         prevent new LFB entries from enqueueing until ALL
21277                                                         current LFB entries have completed. */
21278        uint64_t idxalias                : 1;       /**< L2C Index Alias Enable
21279                                                         When set, the L2 Tag/Data Store will alias the 11-bit
21280                                                         index with the low order 11-bits of the tag.
21281                                                            index[17:7] =  (tag[28:18] ^ index[17:7])
21282                                                         NOTE: This bit must only be modified at boot time,
21283                                                         when it can be guaranteed that no blocks have been
21284                                                         loaded into the L2 Cache.
21285                                                         The index aliasing is a performance enhancement feature
21286                                                         which reduces the L2 cache thrashing experienced for
21287                                                         regular stride references.
21288                                                         NOTE: The index alias is stored in the LFB and VAB, and
21289                                                         its effects are reversed for memory references (Victims,
21290                                                         STT-Misses and Read-Misses) */
21291        uint64_t mwf_crd                 : 4;       /**< MWF Credit Threshold: When the remaining MWF credits
21292                                                         become less than or equal to the MWF_CRD, the L2C will
21293                                                         assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
21294                                                         writes (victims) higher priority. */
21295        uint64_t rsp_arb_mode            : 1;       /**< RSP Arbitration Mode:
21296                                                         - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
21297                                                         - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
21298                                                             RHCF(RdHit), STRSP(ST RSP w/ invalidate),
21299                                                             STRSC(ST RSP no invalidate)] */
21300        uint64_t rfb_arb_mode            : 1;       /**< RFB Arbitration Mode:
21301                                                         - 0: Fixed Priority -
21302                                                             IOB->PP requests are higher priority than
21303                                                             PP->IOB requests
21304                                                         - 1: Round Robin -
21305                                                             I/O requests from PP and IOB are serviced in
21306                                                             round robin */
21307        uint64_t lrf_arb_mode            : 1;       /**< RF Arbitration Mode:
21308                                                         - 0: Fixed Priority -
21309                                                             IOB memory requests are higher priority than PP
21310                                                             memory requests.
21311                                                         - 1: Round Robin -
21312                                                             Memory requests from PP and IOB are serviced in
21313                                                             round robin. */
21314#else
21315        uint64_t lrf_arb_mode            : 1;
21316        uint64_t rfb_arb_mode            : 1;
21317        uint64_t rsp_arb_mode            : 1;
21318        uint64_t mwf_crd                 : 4;
21319        uint64_t idxalias                : 1;
21320        uint64_t fpen                    : 1;
21321        uint64_t fpempty                 : 1;
21322        uint64_t fpexp                   : 4;
21323        uint64_t dfill_dis               : 1;
21324        uint64_t reserved_15_63          : 49;
21325#endif
21326    } cn58xxp1;
21327} cvmx_l2c_cfg_t;
21328
21329
21330/**
21331 * cvmx_l2c_dbg
21332 *
21333 * L2C_DBG = L2C DEBUG Register
21334 *
21335 * Description: L2C Tag/Data Store Debug Register
21336 *
21337 * Notes:
21338 * (1) When using the L2T, L2D or FINV Debug probe feature, the LDD command WILL NOT update the DuTags.
21339 * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one set)
21340 * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back
21341 *     dirty data to memory to maintain coherency.
21342 * (4) L2 Cache Lock Down feature MUST BE disabled (L2C_LCKBASE[LCK_ENA]=0) if ANY of the L2C debug
21343 *     features (L2T, L2D, FINV) are enabled.
21344 */
21345typedef union
21346{
21347    uint64_t u64;
21348    struct cvmx_l2c_dbg_s
21349    {
21350#if __BYTE_ORDER == __BIG_ENDIAN
21351        uint64_t reserved_15_63          : 49;
21352        uint64_t lfb_enum                : 4;       /**< Specifies the LFB Entry# which is to be captured. */
21353        uint64_t lfb_dmp                 : 1;       /**< LFB Dump Enable: When written(=1), the contents of
21354                                                         the LFB specified by LFB_ENUM[3:0] are captured
21355                                                         into the L2C_LFB(0/1/2) registers.
21356                                                         NOTE: Some fields of the LFB entry are unpredictable
21357                                                         and dependent on usage. This is only intended to be
21358                                                         used for HW debug. */
21359        uint64_t ppnum                   : 4;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21360                                                         is enabled, this field determines which one-of-16
21361                                                         PPs is selected as the diagnostic PP. */
21362        uint64_t set                     : 3;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21363                                                         is enabled, this field determines 1-of-n targeted
21364                                                         sets to act upon.
21365                                                         NOTE: L2C_DBG[SET] must never equal a crippled or
21366                                                         unusable set (see UMSK* registers and Cripple mode
21367                                                         fuses). */
21368        uint64_t finv                    : 1;       /**< Flush-Invalidate.
21369                                                         When flush-invalidate is enable (FINV=1), all STF
21370                                                         (L1 store-miss) commands generated from the diagnostic PP
21371                                                         (L2C_DBG[PPNUM]) will invalidate the specified set
21372                                                         (L2C_DBG[SET]) at the index specified in the STF
21373                                                         address[17:7]. If a dirty block is detected (D=1), it is
21374                                                         written back to memory. The contents of the invalid
21375                                                         L2 Cache line is also 'scrubbed' with the STF write data.
21376                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
21377                                                         STF address[17:7] refers to the 'aliased' address.
21378                                                         NOTE: An STF command with write data=ZEROES can be
21379                                                         generated by SW using the Prefetch instruction with
21380                                                         Hint=30d "prepare for Store", followed by a SYNCW.
21381                                                         What is seen at the L2C as an STF w/wrdcnt=0 with all
21382                                                         of its mask bits clear (indicates zero-fill data).
21383                                                         A flush-invalidate will 'force-hit' the L2 cache at
21384                                                         [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
21385                                                         If the cache block is dirty, it is also written back
21386                                                         to memory. The DuTag state is probed/updated as normal
21387                                                         for an STF request.
21388                                                         TYPICAL APPLICATIONS:
21389                                                            1) L2 Tag/Data ECC SW Recovery
21390                                                            2) Cache Unlocking
21391                                                         NOTE: If the cacheline had been previously LOCKED(L=1),
21392                                                         a flush-invalidate operation will explicitly UNLOCK
21393                                                         (L=0) the set/index specified.
21394                                                         NOTE: The diagnostic PP cores can generate STF
21395                                                         commands to the L2 Cache whenever all 128 bytes in a
21396                                                         block are written. SW must take this into consideration
21397                                                         to avoid 'errant' Flush-Invalidates. */
21398        uint64_t l2d                     : 1;       /**< When enabled (and L2C_DBG[L2T]=0), fill data is
21399                                                         returned directly from the L2 Data Store
21400                                                         (regardless of hit/miss) when an LDD(L1 load-miss) command
21401                                                         is issued from a PP determined by the L2C_DBG[PPNUM]
21402                                                         field. The selected set# is determined by the
21403                                                         L2C_DBG[SET] field, and the index is determined
21404                                                         from the address[17:7] associated with the LDD
21405                                                         command.
21406                                                         This 'force-hit' will NOT alter the current L2 Tag
21407                                                         state OR the DuTag state. */
21408        uint64_t l2t                     : 1;       /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:18]]
21409                                                         is returned on the data bus starting at +32(and +96) bytes
21410                                                         offset from the beginning of cacheline when an LDD
21411                                                         (L1 load-miss) command is issued from a PP determined by
21412                                                         the L2C_DBG[PPNUM] field.
21413                                                         The selected L2 set# is determined by the L2C_DBG[SET]
21414                                                         field, and the L2 index is determined from the
21415                                                         phys_addr[17:7] associated with the LDD command.
21416                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21417                                                         state OR the DuTag state.
21418                                                         NOTE: The diagnostic PP should issue a d-stream load
21419                                                         to an aligned cacheline+0x20(+0x60) in order to have the
21420                                                         return VDLUTAG information (in OW2/OW6) written directly
21421                                                         into the proper PP register. The diagnostic PP should also
21422                                                         flush it's local L1 cache after use(to ensure data
21423                                                         coherency).
21424                                                         NOTE: The position of the VDLUTAG data in the destination
21425                                                         register is dependent on the endian mode(big/little).
21426                                                         NOTE: N3K-Pass2 modification. (This bit's functionality
21427                                                         has changed since Pass1-in the following way).
21428                                                         NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
21429                                                         If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
21430                                                         half cacheline (see: L2D_ERR[BMHCLSEL] is also
21431                                                         conditionally latched into the L2D_FSYN0/1 CSRs if an
21432                                                         LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
21433#else
21434        uint64_t l2t                     : 1;
21435        uint64_t l2d                     : 1;
21436        uint64_t finv                    : 1;
21437        uint64_t set                     : 3;
21438        uint64_t ppnum                   : 4;
21439        uint64_t lfb_dmp                 : 1;
21440        uint64_t lfb_enum                : 4;
21441        uint64_t reserved_15_63          : 49;
21442#endif
21443    } s;
21444    struct cvmx_l2c_dbg_cn30xx
21445    {
21446#if __BYTE_ORDER == __BIG_ENDIAN
21447        uint64_t reserved_13_63          : 51;
21448        uint64_t lfb_enum                : 2;       /**< Specifies the LFB Entry# which is to be captured. */
21449        uint64_t lfb_dmp                 : 1;       /**< LFB Dump Enable: When written(=1), the contents of
21450                                                         the LFB specified by LFB_ENUM are captured
21451                                                         into the L2C_LFB(0/1/2) registers.
21452                                                         NOTE: Some fields of the LFB entry are unpredictable
21453                                                         and dependent on usage. This is only intended to be
21454                                                         used for HW debug. */
21455        uint64_t reserved_7_9            : 3;
21456        uint64_t ppnum                   : 1;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21457                                                         is enabled, this field determines which
21458                                                         PP is selected as the diagnostic PP.
21459                                                         NOTE: For O1P single core PPNUM=0 (MBZ) */
21460        uint64_t reserved_5_5            : 1;
21461        uint64_t set                     : 2;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21462                                                         is enabled, this field determines 1-of-n targeted
21463                                                         sets to act upon.
21464                                                         NOTE: L2C_DBG[SET] must never equal a crippled or
21465                                                         unusable set (see UMSK* registers and Cripple mode
21466                                                         fuses). */
21467        uint64_t finv                    : 1;       /**< Flush-Invalidate.
21468                                                         When flush-invalidate is enable (FINV=1), all STF
21469                                                         (L1 store-miss) commands generated from the PP will invalidate
21470                                                         the specified set(L2C_DBG[SET]) at the index specified
21471                                                         in the STF address[14:7]. If a dirty block is detected(D=1),
21472                                                         it is written back to memory. The contents of the invalid
21473                                                         L2 Cache line is also 'scrubbed' with the STF write data.
21474                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
21475                                                         STF address[14:7] refers to the 'aliased' address.
21476                                                         NOTE: An STF command with write data=ZEROES can be
21477                                                         generated by SW using the Prefetch instruction with
21478                                                         Hint=30d "prepare for Store", followed by a SYNCW.
21479                                                         What is seen at the L2C as an STF w/wrdcnt=0 with all
21480                                                         of its mask bits clear (indicates zero-fill data).
21481                                                         A flush-invalidate will 'force-hit' the L2 cache at
21482                                                         [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
21483                                                         If the cache block is dirty, it is also written back
21484                                                         to memory. The DuTag state is probed/updated as normal
21485                                                         for an STF request.
21486                                                         TYPICAL APPLICATIONS:
21487                                                            1) L2 Tag/Data ECC SW Recovery
21488                                                            2) Cache Unlocking
21489                                                         NOTE: If the cacheline had been previously LOCKED(L=1),
21490                                                         a flush-invalidate operation will explicitly UNLOCK
21491                                                         (L=0) the set/index specified.
21492                                                         NOTE: The PP can generate STF(L1 store-miss)
21493                                                         commands to the L2 Cache whenever all 128 bytes in a
21494                                                         block are written. SW must take this into consideration
21495                                                         to avoid 'errant' Flush-Invalidates. */
21496        uint64_t l2d                     : 1;       /**< When enabled (and L2C_DBG[L2T]=0), fill data is
21497                                                         returned directly from the L2 Data Store
21498                                                         (regardless of hit/miss) when an LDD(L1 load-miss)
21499                                                         command is issued from the PP.
21500                                                         The selected set# is determined by the
21501                                                         L2C_DBG[SET] field, and the index is determined
21502                                                         from the address[14:7] associated with the LDD
21503                                                         command.
21504                                                         This 'force-hit' will NOT alter the current L2 Tag
21505                                                         state OR the DuTag state. */
21506        uint64_t l2t                     : 1;       /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:15]]
21507                                                         is returned on the data bus starting at +32(and +96) bytes
21508                                                         offset from the beginning of cacheline when an LDD
21509                                                         (L1 load-miss) command is issued from the PP.
21510                                                         The selected L2 set# is determined by the L2C_DBG[SET]
21511                                                         field, and the L2 index is determined from the
21512                                                         phys_addr[14:7] associated with the LDD command.
21513                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21514                                                         state OR the DuTag state.
21515                                                         NOTE: The diagnostic PP should issue a d-stream load
21516                                                         to an aligned cacheline+0x20(+0x60) in order to have the
21517                                                         return VDLUTAG information (in OW2/OW6) written directly
21518                                                         into the proper PP register. The diagnostic PP should also
21519                                                         flush it's local L1 cache after use(to ensure data
21520                                                         coherency).
21521                                                         NOTE: The position of the VDLUTAG data in the destination
21522                                                         register is dependent on the endian mode(big/little).
21523                                                         NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
21524                                                         If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
21525                                                         half cacheline (see: L2D_ERR[BMHCLSEL] is also
21526                                                         conditionally latched into the L2D_FSYN0/1 CSRs if an
21527                                                         LDD(L1 load-miss) is detected. */
21528#else
21529        uint64_t l2t                     : 1;
21530        uint64_t l2d                     : 1;
21531        uint64_t finv                    : 1;
21532        uint64_t set                     : 2;
21533        uint64_t reserved_5_5            : 1;
21534        uint64_t ppnum                   : 1;
21535        uint64_t reserved_7_9            : 3;
21536        uint64_t lfb_dmp                 : 1;
21537        uint64_t lfb_enum                : 2;
21538        uint64_t reserved_13_63          : 51;
21539#endif
21540    } cn30xx;
21541    struct cvmx_l2c_dbg_cn31xx
21542    {
21543#if __BYTE_ORDER == __BIG_ENDIAN
21544        uint64_t reserved_14_63          : 50;
21545        uint64_t lfb_enum                : 3;       /**< Specifies the LFB Entry# which is to be captured. */
21546        uint64_t lfb_dmp                 : 1;       /**< LFB Dump Enable: When written(=1), the contents of
21547                                                         the LFB specified by LFB_ENUM are captured
21548                                                         into the L2C_LFB(0/1/2) registers.
21549                                                         NOTE: Some fields of the LFB entry are unpredictable
21550                                                         and dependent on usage. This is only intended to be
21551                                                         used for HW debug. */
21552        uint64_t reserved_7_9            : 3;
21553        uint64_t ppnum                   : 1;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21554                                                         is enabled, this field determines which
21555                                                         PP is selected as the diagnostic PP. */
21556        uint64_t reserved_5_5            : 1;
21557        uint64_t set                     : 2;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21558                                                         is enabled, this field determines 1-of-n targeted
21559                                                         sets to act upon.
21560                                                         NOTE: L2C_DBG[SET] must never equal a crippled or
21561                                                         unusable set (see UMSK* registers and Cripple mode
21562                                                         fuses). */
21563        uint64_t finv                    : 1;       /**< Flush-Invalidate.
21564                                                         When flush-invalidate is enable (FINV=1), all STF
21565                                                         (L1 store-miss) commands generated from the diagnostic PP
21566                                                         (L2C_DBG[PPNUM]) will invalidate the specified set
21567                                                         (L2C_DBG[SET]) at the index specified in the STF
21568                                                         address[15:7]. If a dirty block is detected (D=1), it is
21569                                                         written back to memory. The contents of the invalid
21570                                                         L2 Cache line is also 'scrubbed' with the STF write data.
21571                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
21572                                                         STF address[15:7] refers to the 'aliased' address.
21573                                                         NOTE: An STF command with write data=ZEROES can be
21574                                                         generated by SW using the Prefetch instruction with
21575                                                         Hint=30d "prepare for Store", followed by a SYNCW.
21576                                                         What is seen at the L2C as an STF w/wrdcnt=0 with all
21577                                                         of its mask bits clear (indicates zero-fill data).
21578                                                         A flush-invalidate will 'force-hit' the L2 cache at
21579                                                         [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
21580                                                         If the cache block is dirty, it is also written back
21581                                                         to memory. The DuTag state is probed/updated as normal
21582                                                         for an STF request.
21583                                                         TYPICAL APPLICATIONS:
21584                                                            1) L2 Tag/Data ECC SW Recovery
21585                                                            2) Cache Unlocking
21586                                                         NOTE: If the cacheline had been previously LOCKED(L=1),
21587                                                         a flush-invalidate operation will explicitly UNLOCK
21588                                                         (L=0) the set/index specified.
21589                                                         NOTE: The diagnostic PP cores can generate STF(L1 store-miss)
21590                                                         commands to the L2 Cache whenever all 128 bytes in a
21591                                                         block are written. SW must take this into consideration
21592                                                         to avoid 'errant' Flush-Invalidates. */
21593        uint64_t l2d                     : 1;       /**< When enabled (and L2C_DBG[L2T]=0), fill data is
21594                                                         returned directly from the L2 Data Store
21595                                                         (regardless of hit/miss) when an LDD(L1 load-miss)
21596                                                         command is issued from a PP determined by the
21597                                                         L2C_DBG[PPNUM] field. The selected set# is determined
21598                                                         by the L2C_DBG[SET] field, and the index is determined
21599                                                         from the address[15:7] associated with the LDD command.
21600                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21601                                                         state OR the DuTag state. */
21602        uint64_t l2t                     : 1;       /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]]
21603                                                         is returned on the data bus starting at +32(and +96) bytes
21604                                                         offset from the beginning of cacheline when an LDD
21605                                                         (L1 load-miss) command is issued from a PP determined by
21606                                                         the L2C_DBG[PPNUM] field.
21607                                                         The selected L2 set# is determined by the L2C_DBG[SET]
21608                                                         field, and the L2 index is determined from the
21609                                                         phys_addr[15:7] associated with the LDD command.
21610                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21611                                                         state OR the DuTag state.
21612                                                         NOTE: The diagnostic PP should issue a d-stream load
21613                                                         to an aligned cacheline+0x20(+0x60) in order to have the
21614                                                         return VDLUTAG information (in OW2/OW6) written directly
21615                                                         into the proper PP register. The diagnostic PP should also
21616                                                         flush it's local L1 cache after use(to ensure data
21617                                                         coherency).
21618                                                         NOTE: The position of the VDLUTAG data in the destination
21619                                                         register is dependent on the endian mode(big/little).
21620                                                         NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
21621                                                         If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
21622                                                         half cacheline (see: L2D_ERR[BMHCLSEL] is also
21623                                                         conditionally latched into the L2D_FSYN0/1 CSRs if an
21624                                                         LDD(L1 load-miss) is detected from the diagnostic PP
21625                                                         (L2C_DBG[PPNUM]). */
21626#else
21627        uint64_t l2t                     : 1;
21628        uint64_t l2d                     : 1;
21629        uint64_t finv                    : 1;
21630        uint64_t set                     : 2;
21631        uint64_t reserved_5_5            : 1;
21632        uint64_t ppnum                   : 1;
21633        uint64_t reserved_7_9            : 3;
21634        uint64_t lfb_dmp                 : 1;
21635        uint64_t lfb_enum                : 3;
21636        uint64_t reserved_14_63          : 50;
21637#endif
21638    } cn31xx;
21639    struct cvmx_l2c_dbg_s                cn38xx;
21640    struct cvmx_l2c_dbg_s                cn38xxp2;
21641    struct cvmx_l2c_dbg_cn50xx
21642    {
21643#if __BYTE_ORDER == __BIG_ENDIAN
21644        uint64_t reserved_14_63          : 50;
21645        uint64_t lfb_enum                : 3;       /**< Specifies the LFB Entry# which is to be captured. */
21646        uint64_t lfb_dmp                 : 1;       /**< LFB Dump Enable: When written(=1), the contents of
21647                                                         the LFB specified by LFB_ENUM[2:0] are captured
21648                                                         into the L2C_LFB(0/1/2) registers.
21649                                                         NOTE: Some fields of the LFB entry are unpredictable
21650                                                         and dependent on usage. This is only intended to be
21651                                                         used for HW debug. */
21652        uint64_t reserved_7_9            : 3;
21653        uint64_t ppnum                   : 1;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21654                                                         is enabled, this field determines which 1-of-2
21655                                                         PPs is selected as the diagnostic PP. */
21656        uint64_t set                     : 3;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21657                                                         is enabled, this field determines 1-of-n targeted
21658                                                         sets to act upon.
21659                                                         NOTE: L2C_DBG[SET] must never equal a crippled or
21660                                                         unusable set (see UMSK* registers and Cripple mode
21661                                                         fuses). */
21662        uint64_t finv                    : 1;       /**< Flush-Invalidate.
21663                                                         When flush-invalidate is enable (FINV=1), all STF
21664                                                         (L1 store-miss) commands generated from the diagnostic PP
21665                                                         (L2C_DBG[PPNUM]) will invalidate the specified set
21666                                                         (L2C_DBG[SET]) at the index specified in the STF
21667                                                         address[13:7]. If a dirty block is detected (D=1), it is
21668                                                         written back to memory. The contents of the invalid
21669                                                         L2 Cache line is also 'scrubbed' with the STF write data.
21670                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
21671                                                         STF address[13:7] refers to the 'aliased' address.
21672                                                         NOTE: An STF command with write data=ZEROES can be
21673                                                         generated by SW using the Prefetch instruction with
21674                                                         Hint=30d "prepare for Store", followed by a SYNCW.
21675                                                         What is seen at the L2C as an STF w/wrdcnt=0 with all
21676                                                         of its mask bits clear (indicates zero-fill data).
21677                                                         A flush-invalidate will 'force-hit' the L2 cache at
21678                                                         [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
21679                                                         If the cache block is dirty, it is also written back
21680                                                         to memory. The DuTag state is probed/updated as normal
21681                                                         for an STF request.
21682                                                         TYPICAL APPLICATIONS:
21683                                                            1) L2 Tag/Data ECC SW Recovery
21684                                                            2) Cache Unlocking
21685                                                         NOTE: If the cacheline had been previously LOCKED(L=1),
21686                                                         a flush-invalidate operation will explicitly UNLOCK
21687                                                         (L=0) the set/index specified.
21688                                                         NOTE: The diagnostic PP cores can generate STF
21689                                                         commands to the L2 Cache whenever all 128 bytes in a
21690                                                         block are written. SW must take this into consideration
21691                                                         to avoid 'errant' Flush-Invalidates. */
21692        uint64_t l2d                     : 1;       /**< When enabled (and L2C_DBG[L2T]=0), fill data is
21693                                                         returned directly from the L2 Data Store
21694                                                         (regardless of hit/miss) when an LDD(L1 load-miss) command
21695                                                         is issued from a PP determined by the L2C_DBG[PPNUM]
21696                                                         field. The selected set# is determined by the
21697                                                         L2C_DBG[SET] field, and the index is determined
21698                                                         from the address[13:7] associated with the LDD
21699                                                         command.
21700                                                         This 'force-hit' will NOT alter the current L2 Tag
21701                                                         state OR the DuTag state. */
21702        uint64_t l2t                     : 1;       /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:14]]
21703                                                         is returned on the data bus starting at +32(and +96) bytes
21704                                                         offset from the beginning of cacheline when an LDD
21705                                                         (L1 load-miss) command is issued from a PP determined by
21706                                                         the L2C_DBG[PPNUM] field.
21707                                                         The selected L2 set# is determined by the L2C_DBG[SET]
21708                                                         field, and the L2 index is determined from the
21709                                                         phys_addr[13:7] associated with the LDD command.
21710                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21711                                                         state OR the DuTag state.
21712                                                         NOTE: The diagnostic PP should issue a d-stream load
21713                                                         to an aligned cacheline+0x20(+0x60) in order to have the
21714                                                         return VDLUTAG information (in OW2/OW6) written directly
21715                                                         into the proper PP register. The diagnostic PP should also
21716                                                         flush it's local L1 cache after use(to ensure data
21717                                                         coherency).
21718                                                         NOTE: The position of the VDLUTAG data in the destination
21719                                                         register is dependent on the endian mode(big/little).
21720                                                         NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
21721                                                         If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
21722                                                         half cacheline (see: L2D_ERR[BMHCLSEL] is also
21723                                                         conditionally latched into the L2D_FSYN0/1 CSRs if an
21724                                                         LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
21725#else
21726        uint64_t l2t                     : 1;
21727        uint64_t l2d                     : 1;
21728        uint64_t finv                    : 1;
21729        uint64_t set                     : 3;
21730        uint64_t ppnum                   : 1;
21731        uint64_t reserved_7_9            : 3;
21732        uint64_t lfb_dmp                 : 1;
21733        uint64_t lfb_enum                : 3;
21734        uint64_t reserved_14_63          : 50;
21735#endif
21736    } cn50xx;
21737    struct cvmx_l2c_dbg_cn52xx
21738    {
21739#if __BYTE_ORDER == __BIG_ENDIAN
21740        uint64_t reserved_14_63          : 50;
21741        uint64_t lfb_enum                : 3;       /**< Specifies the LFB Entry# which is to be captured. */
21742        uint64_t lfb_dmp                 : 1;       /**< LFB Dump Enable: When written(=1), the contents of
21743                                                         the LFB specified by LFB_ENUM[2:0] are captured
21744                                                         into the L2C_LFB(0/1/2) registers.
21745                                                         NOTE: Some fields of the LFB entry are unpredictable
21746                                                         and dependent on usage. This is only intended to be
21747                                                         used for HW debug. */
21748        uint64_t reserved_8_9            : 2;
21749        uint64_t ppnum                   : 2;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21750                                                         is enabled, this field determines which 1-of-4
21751                                                         PPs is selected as the diagnostic PP. */
21752        uint64_t set                     : 3;       /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
21753                                                         is enabled, this field determines 1-of-n targeted
21754                                                         sets to act upon.
21755                                                         NOTE: L2C_DBG[SET] must never equal a crippled or
21756                                                         unusable set (see UMSK* registers and Cripple mode
21757                                                         fuses). */
21758        uint64_t finv                    : 1;       /**< Flush-Invalidate.
21759                                                         When flush-invalidate is enable (FINV=1), all STF
21760                                                         (L1 store-miss) commands generated from the diagnostic PP
21761                                                         (L2C_DBG[PPNUM]) will invalidate the specified set
21762                                                         (L2C_DBG[SET]) at the index specified in the STF
21763                                                         address[15:7]. If a dirty block is detected (D=1), it is
21764                                                         written back to memory. The contents of the invalid
21765                                                         L2 Cache line is also 'scrubbed' with the STF write data.
21766                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
21767                                                         STF address[15:7] refers to the 'aliased' address.
21768                                                         NOTE: An STF command with write data=ZEROES can be
21769                                                         generated by SW using the Prefetch instruction with
21770                                                         Hint=30d "prepare for Store", followed by a SYNCW.
21771                                                         What is seen at the L2C as an STF w/wrdcnt=0 with all
21772                                                         of its mask bits clear (indicates zero-fill data).
21773                                                         A flush-invalidate will 'force-hit' the L2 cache at
21774                                                         [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
21775                                                         If the cache block is dirty, it is also written back
21776                                                         to memory. The DuTag state is probed/updated as normal
21777                                                         for an STF request.
21778                                                         TYPICAL APPLICATIONS:
21779                                                            1) L2 Tag/Data ECC SW Recovery
21780                                                            2) Cache Unlocking
21781                                                         NOTE: If the cacheline had been previously LOCKED(L=1),
21782                                                         a flush-invalidate operation will explicitly UNLOCK
21783                                                         (L=0) the set/index specified.
21784                                                         NOTE: The diagnostic PP cores can generate STF
21785                                                         commands to the L2 Cache whenever all 128 bytes in a
21786                                                         block are written. SW must take this into consideration
21787                                                         to avoid 'errant' Flush-Invalidates. */
21788        uint64_t l2d                     : 1;       /**< When enabled (and L2C_DBG[L2T]=0), fill data is
21789                                                         returned directly from the L2 Data Store
21790                                                         (regardless of hit/miss) when an LDD(L1 load-miss) command
21791                                                         is issued from a PP determined by the L2C_DBG[PPNUM]
21792                                                         field. The selected set# is determined by the
21793                                                         L2C_DBG[SET] field, and the index is determined
21794                                                         from the address[15:7] associated with the LDD
21795                                                         command.
21796                                                         This 'force-hit' will NOT alter the current L2 Tag
21797                                                         state OR the DuTag state. */
21798        uint64_t l2t                     : 1;       /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]]
21799                                                         is returned on the data bus starting at +32(and +96) bytes
21800                                                         offset from the beginning of cacheline when an LDD
21801                                                         (L1 load-miss) command is issued from a PP determined by
21802                                                         the L2C_DBG[PPNUM] field.
21803                                                         The selected L2 set# is determined by the L2C_DBG[SET]
21804                                                         field, and the L2 index is determined from the
21805                                                         phys_addr[15:7] associated with the LDD command.
21806                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21807                                                         state OR the DuTag state.
21808                                                         NOTE: The diagnostic PP should issue a d-stream load
21809                                                         to an aligned cacheline+0x20(+0x60) in order to have the
21810                                                         return VDLUTAG information (in OW2/OW6) written directly
21811                                                         into the proper PP register. The diagnostic PP should also
21812                                                         flush it's local L1 cache after use(to ensure data
21813                                                         coherency).
21814                                                         NOTE: The position of the VDLUTAG data in the destination
21815                                                         register is dependent on the endian mode(big/little).
21816                                                         NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
21817                                                         If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
21818                                                         half cacheline (see: L2D_ERR[BMHCLSEL] is also
21819                                                         conditionally latched into the L2D_FSYN0/1 CSRs if an
21820                                                         LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
21821#else
21822        uint64_t l2t                     : 1;
21823        uint64_t l2d                     : 1;
21824        uint64_t finv                    : 1;
21825        uint64_t set                     : 3;
21826        uint64_t ppnum                   : 2;
21827        uint64_t reserved_8_9            : 2;
21828        uint64_t lfb_dmp                 : 1;
21829        uint64_t lfb_enum                : 3;
21830        uint64_t reserved_14_63          : 50;
21831#endif
21832    } cn52xx;
21833    struct cvmx_l2c_dbg_cn52xx           cn52xxp1;
21834    struct cvmx_l2c_dbg_s                cn56xx;
21835    struct cvmx_l2c_dbg_s                cn56xxp1;
21836    struct cvmx_l2c_dbg_s                cn58xx;
21837    struct cvmx_l2c_dbg_s                cn58xxp1;
21838} cvmx_l2c_dbg_t;
21839
21840
21841/**
21842 * cvmx_l2c_dut
21843 *
21844 * L2C_DUT = L2C DUTAG Register
21845 *
21846 * Description: L2C Duplicate Tag State Register
21847 *
21848 * Notes:
21849 * (1) When using the L2T, L2D or FINV Debug probe feature, an LDD command issued by the diagnostic PP
21850 *     WILL NOT update the DuTags.
21851 * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one enabled at a time).
21852 * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back
21853 *     dirty data to memory to maintain coherency. (A side effect of FINV is that an LDD L2 fill is
21854 *     launched which fills data into the L2 DS).
21855 */
21856typedef union
21857{
21858    uint64_t u64;
21859    struct cvmx_l2c_dut_s
21860    {
21861#if __BYTE_ORDER == __BIG_ENDIAN
21862        uint64_t reserved_32_63          : 32;
21863        uint64_t dtena                   : 1;       /**< DuTag Diagnostic read enable.
21864                                                         When L2C_DUT[DTENA]=1, all LDD(L1 load-miss)
21865                                                         commands issued from the diagnostic PP
21866                                                         (L2C_DBG[PPNUM]) will capture the DuTag state (V|L1TAG)
21867                                                         of the PP#(specified in the LDD address[29:26] into
21868                                                         the L2C_DUT CSR register. This allows the diagPP to
21869                                                         read ALL DuTags (from any PP).
21870                                                         The DuTag Set# to capture is extracted from the LDD
21871                                                         address[25:20]. The diagnostic PP would issue the
21872                                                         LDD then read the L2C_DUT register (one at a time).
21873                                                         This LDD 'L2 force-hit' will NOT alter the current L2
21874                                                         Tag State OR the DuTag state.
21875                                                         NOTE: For O9N the DuTag SIZE has doubled (to 16KB)
21876                                                         where each DuTag is organized as 2x 64-way entries.
21877                                                         The LDD address[7] determines which 1(of-2) internal
21878                                                         64-ways to select.
21879                                                         The fill data is returned directly from the L2 Data
21880                                                         Store(regardless of hit/miss) when an LDD command
21881                                                         is issued from a PP determined by the L2C_DBG[PPNUM]
21882                                                         field. The selected L2 Set# is determined by the
21883                                                         L2C_DBG[SET] field, and the index is determined
21884                                                         from the address[17:7] associated with the LDD
21885                                                         command.
21886                                                         This 'L2 force-hit' will NOT alter the current L2 Tag
21887                                                         state OR the DuTag state.
21888                                                         NOTE: In order for the DiagPP to generate an LDD command
21889                                                         to the L2C, it must first force an L1 Dcache flush. */
21890        uint64_t reserved_30_30          : 1;
21891        uint64_t dt_vld                  : 1;       /**< Duplicate L1 Tag Valid bit latched in for previous
21892                                                         LDD(L1 load-miss) command sourced by diagnostic PP. */
21893        uint64_t dt_tag                  : 29;      /**< Duplicate L1 Tag[35:7] latched in for previous
21894                                                         LDD(L1 load-miss) command sourced by diagnostic PP. */
21895#else
21896        uint64_t dt_tag                  : 29;
21897        uint64_t dt_vld                  : 1;
21898        uint64_t reserved_30_30          : 1;
21899        uint64_t dtena                   : 1;
21900        uint64_t reserved_32_63          : 32;
21901#endif
21902    } s;
21903    struct cvmx_l2c_dut_s                cn30xx;
21904    struct cvmx_l2c_dut_s                cn31xx;
21905    struct cvmx_l2c_dut_s                cn38xx;
21906    struct cvmx_l2c_dut_s                cn38xxp2;
21907    struct cvmx_l2c_dut_s                cn50xx;
21908    struct cvmx_l2c_dut_s                cn52xx;
21909    struct cvmx_l2c_dut_s                cn52xxp1;
21910    struct cvmx_l2c_dut_s                cn56xx;
21911    struct cvmx_l2c_dut_s                cn56xxp1;
21912    struct cvmx_l2c_dut_s                cn58xx;
21913    struct cvmx_l2c_dut_s                cn58xxp1;
21914} cvmx_l2c_dut_t;
21915
21916
21917/**
21918 * cvmx_l2c_grpwrr0
21919 *
21920 * L2C_GRPWRR0 = L2C PP Weighted Round \#0 Register
21921 *
21922 * Description: Defines Weighted rounds(32) for Group PLC0,PLC1
21923 *
21924 * Notes:
21925 * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP
21926 * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear).
21927 */
21928typedef union
21929{
21930    uint64_t u64;
21931    struct cvmx_l2c_grpwrr0_s
21932    {
21933#if __BYTE_ORDER == __BIG_ENDIAN
21934        uint64_t plc1rmsk                : 32;      /**< PLC1 Group#1 Weighted Round Mask
21935                                                         Each bit represents 1 of 32 rounds
21936                                                         for Group \#1's participation. When a 'round' bit is
21937                                                         set, Group#1 is 'masked' and DOES NOT participate.
21938                                                         When a 'round' bit is clear, Group#1 WILL
21939                                                         participate in the arbitration for this round. */
21940        uint64_t plc0rmsk                : 32;      /**< PLC Group#0 Weighted Round Mask
21941                                                         Each bit represents 1 of 32 rounds
21942                                                         for Group \#0's participation. When a 'round' bit is
21943                                                         set, Group#0 is 'masked' and DOES NOT participate.
21944                                                         When a 'round' bit is clear, Group#0 WILL
21945                                                         participate in the arbitration for this round. */
21946#else
21947        uint64_t plc0rmsk                : 32;
21948        uint64_t plc1rmsk                : 32;
21949#endif
21950    } s;
21951    struct cvmx_l2c_grpwrr0_s            cn52xx;
21952    struct cvmx_l2c_grpwrr0_s            cn52xxp1;
21953    struct cvmx_l2c_grpwrr0_s            cn56xx;
21954    struct cvmx_l2c_grpwrr0_s            cn56xxp1;
21955} cvmx_l2c_grpwrr0_t;
21956
21957
21958/**
21959 * cvmx_l2c_grpwrr1
21960 *
21961 * L2C_GRPWRR1 = L2C PP Weighted Round \#1 Register
21962 *
21963 * Description: Defines Weighted Rounds(32) for Group PLC2,ILC
21964 *
21965 * Notes:
21966 * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP
21967 * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear).
21968 */
21969typedef union
21970{
21971    uint64_t u64;
21972    struct cvmx_l2c_grpwrr1_s
21973    {
21974#if __BYTE_ORDER == __BIG_ENDIAN
21975        uint64_t ilcrmsk                 : 32;      /**< ILC (IOB) Weighted Round Mask
21976                                                         Each bit represents 1 of 32 rounds
21977                                                         for IOB participation. When a 'round' bit is
21978                                                         set, IOB is 'masked' and DOES NOT participate.
21979                                                         When a 'round' bit is clear, IOB WILL
21980                                                         participate in the arbitration for this round. */
21981        uint64_t plc2rmsk                : 32;      /**< PLC Group#2 Weighted Round Mask
21982                                                         Each bit represents 1 of 32 rounds
21983                                                         for Group \#2's participation. When a 'round' bit is
21984                                                         set, Group#2 is 'masked' and DOES NOT participate.
21985                                                         When a 'round' bit is clear, Group#2 WILL
21986                                                         participate in the arbitration for this round. */
21987#else
21988        uint64_t plc2rmsk                : 32;
21989        uint64_t ilcrmsk                 : 32;
21990#endif
21991    } s;
21992    struct cvmx_l2c_grpwrr1_s            cn52xx;
21993    struct cvmx_l2c_grpwrr1_s            cn52xxp1;
21994    struct cvmx_l2c_grpwrr1_s            cn56xx;
21995    struct cvmx_l2c_grpwrr1_s            cn56xxp1;
21996} cvmx_l2c_grpwrr1_t;
21997
21998
21999/**
22000 * cvmx_l2c_int_en
22001 *
22002 * L2C_INT_EN = L2C Global Interrupt Enable Register
22003 *
22004 * Description:
22005 */
22006typedef union
22007{
22008    uint64_t u64;
22009    struct cvmx_l2c_int_en_s
22010    {
22011#if __BYTE_ORDER == __BIG_ENDIAN
22012        uint64_t reserved_9_63           : 55;
22013        uint64_t lck2ena                 : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit
22014                                                         NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA2] */
22015        uint64_t lckena                  : 1;       /**< L2 Tag Lock Error Interrupt Enable bit
22016                                                         NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA] */
22017        uint64_t l2ddeden                : 1;       /**< L2 Data ECC Double Error Detect(DED) Interrupt Enable bit
22018                                                         When set, allows interrupts to be reported on double bit
22019                                                         (uncorrectable) errors from the L2 Data Arrays.
22020                                                         NOTE: This is the 'same' bit as L2D_ERR[DED_INTENA] */
22021        uint64_t l2dsecen                : 1;       /**< L2 Data ECC Single Error Correct(SEC) Interrupt Enable bit
22022                                                         When set, allows interrupts to be reported on single bit
22023                                                         (correctable) errors from the L2 Data Arrays.
22024                                                         NOTE: This is the 'same' bit as L2D_ERR[SEC_INTENA] */
22025        uint64_t l2tdeden                : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
22026                                                         NOTE: This is the 'same' bit as L2T_ERR[DED_INTENA] */
22027        uint64_t l2tsecen                : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
22028                                                         Enable bit. When set, allows interrupts to be
22029                                                         reported on single bit (correctable) errors from
22030                                                         the L2 Tag Arrays.
22031                                                         NOTE: This is the 'same' bit as L2T_ERR[SEC_INTENA] */
22032        uint64_t oob3en                  : 1;       /**< DMA Out of Bounds Interrupt Enable Range#3 */
22033        uint64_t oob2en                  : 1;       /**< DMA Out of Bounds Interrupt Enable Range#2 */
22034        uint64_t oob1en                  : 1;       /**< DMA Out of Bounds Interrupt Enable Range#1 */
22035#else
22036        uint64_t oob1en                  : 1;
22037        uint64_t oob2en                  : 1;
22038        uint64_t oob3en                  : 1;
22039        uint64_t l2tsecen                : 1;
22040        uint64_t l2tdeden                : 1;
22041        uint64_t l2dsecen                : 1;
22042        uint64_t l2ddeden                : 1;
22043        uint64_t lckena                  : 1;
22044        uint64_t lck2ena                 : 1;
22045        uint64_t reserved_9_63           : 55;
22046#endif
22047    } s;
22048    struct cvmx_l2c_int_en_s             cn52xx;
22049    struct cvmx_l2c_int_en_s             cn52xxp1;
22050    struct cvmx_l2c_int_en_s             cn56xx;
22051    struct cvmx_l2c_int_en_s             cn56xxp1;
22052} cvmx_l2c_int_en_t;
22053
22054
22055/**
22056 * cvmx_l2c_int_stat
22057 *
22058 * L2C_INT_STAT = L2C Global Interrupt Status Register
22059 *
22060 * Description:
22061 */
22062typedef union
22063{
22064    uint64_t u64;
22065    struct cvmx_l2c_int_stat_s
22066    {
22067#if __BYTE_ORDER == __BIG_ENDIAN
22068        uint64_t reserved_9_63           : 55;
22069        uint64_t lck2                    : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
22070                                                         could not find an available/unlocked set (for
22071                                                         replacement).
22072                                                         Most likely, this is a result of SW mixing SET
22073                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
22074                                                         another PP to LOCKDOWN all SETs available to PP#n,
22075                                                         then a Rd/Wr Miss from PP#n will be unable
22076                                                         to determine a 'valid' replacement set (since LOCKED
22077                                                         addresses should NEVER be replaced).
22078                                                         If such an event occurs, the HW will select the smallest
22079                                                         available SET(specified by UMSK'x)' as the replacement
22080                                                         set, and the address is unlocked.
22081                                                         NOTE: This is the 'same' bit as L2T_ERR[LCKERR2] */
22082        uint64_t lck                     : 1;       /**< SW attempted to LOCK DOWN the last available set of
22083                                                         the INDEX (which is ignored by HW - but reported to SW).
22084                                                         The LDD(L1 load-miss) for the LOCK operation is completed
22085                                                         successfully, however the address is NOT locked.
22086                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
22087                                                         into account. For example, if diagnostic PPx has
22088                                                         UMSKx defined to only use SETs [1:0], and SET1 had
22089                                                         been previously LOCKED, then an attempt to LOCK the
22090                                                         last available SET0 would result in a LCKERR. (This
22091                                                         is to ensure that at least 1 SET at each INDEX is
22092                                                         not LOCKED for general use by other PPs).
22093                                                         NOTE: This is the 'same' bit as L2T_ERR[LCKERR] */
22094        uint64_t l2dded                  : 1;       /**< L2D Double Error detected (DED)
22095                                                         NOTE: This is the 'same' bit as L2D_ERR[DED_ERR] */
22096        uint64_t l2dsec                  : 1;       /**< L2D Single Error corrected (SEC)
22097                                                         NOTE: This is the 'same' bit as L2D_ERR[SEC_ERR] */
22098        uint64_t l2tded                  : 1;       /**< L2T Double Bit Error detected (DED)
22099                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
22100                                                         given index) are checked for double bit errors(DBEs).
22101                                                         This bit is set if ANY of the 8 sets contains a DBE.
22102                                                         DBEs also generated an interrupt(if enabled).
22103                                                         NOTE: This is the 'same' bit as L2T_ERR[DED_ERR] */
22104        uint64_t l2tsec                  : 1;       /**< L2T Single Bit Error corrected (SEC) status
22105                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
22106                                                         given index) are checked for single bit errors(SBEs).
22107                                                         This bit is set if ANY of the 8 sets contains an SBE.
22108                                                         SBEs are auto corrected in HW and generate an
22109                                                         interrupt(if enabled).
22110                                                         NOTE: This is the 'same' bit as L2T_ERR[SEC_ERR] */
22111        uint64_t oob3                    : 1;       /**< DMA Out of Bounds Interrupt Status Range#3 */
22112        uint64_t oob2                    : 1;       /**< DMA Out of Bounds Interrupt Status Range#2 */
22113        uint64_t oob1                    : 1;       /**< DMA Out of Bounds Interrupt Status Range#1 */
22114#else
22115        uint64_t oob1                    : 1;
22116        uint64_t oob2                    : 1;
22117        uint64_t oob3                    : 1;
22118        uint64_t l2tsec                  : 1;
22119        uint64_t l2tded                  : 1;
22120        uint64_t l2dsec                  : 1;
22121        uint64_t l2dded                  : 1;
22122        uint64_t lck                     : 1;
22123        uint64_t lck2                    : 1;
22124        uint64_t reserved_9_63           : 55;
22125#endif
22126    } s;
22127    struct cvmx_l2c_int_stat_s           cn52xx;
22128    struct cvmx_l2c_int_stat_s           cn52xxp1;
22129    struct cvmx_l2c_int_stat_s           cn56xx;
22130    struct cvmx_l2c_int_stat_s           cn56xxp1;
22131} cvmx_l2c_int_stat_t;
22132
22133
22134/**
22135 * cvmx_l2c_lckbase
22136 *
22137 * L2C_LCKBASE = L2C LockDown Base Register
22138 *
22139 * Description: L2C LockDown Base Register
22140 *
22141 * Notes:
22142 * (1) SW RESTRICTION \#1: SW must manage the L2 Data Store lockdown space such that at least 1
22143 *     set per cache line remains in the 'unlocked' (normal) state to allow general caching operations.
22144 *     If SW violates this restriction, a status bit is set (LCK_ERR) and an interrupt is posted.
22145 *     [this limits the total lockdown space to 7/8ths of the total L2 data store = 896KB]
22146 * (2) IOB initiated LDI commands are ignored (only PP initiated LDI/LDD commands are considered
22147 *     for lockdown).
22148 * (3) To 'unlock' a locked cache line, SW can use the FLUSH-INVAL CSR mechanism (see L2C_DBG[FINV]).
22149 * (4) LCK_ENA MUST only be activated when debug modes are disabled (L2C_DBG[L2T], L2C_DBG[L2D], L2C_DBG[FINV]).
22150 */
22151typedef union
22152{
22153    uint64_t u64;
22154    struct cvmx_l2c_lckbase_s
22155    {
22156#if __BYTE_ORDER == __BIG_ENDIAN
22157        uint64_t reserved_31_63          : 33;
22158        uint64_t lck_base                : 27;      /**< Base Memory block address[33:7]. Specifies the
22159                                                         starting address of the lockdown region. */
22160        uint64_t reserved_1_3            : 3;
22161        uint64_t lck_ena                 : 1;       /**< L2 Cache Lock Enable
22162                                                         When the LCK_ENA=1, all LDI(I-stream Load) or
22163                                                         LDD(L1 load-miss) commands issued from the
22164                                                         diagnostic PP (specified by the L2C_DBG[PPNUM]),
22165                                                         which fall within a predefined lockdown address
22166                                                         range (specified by: [lck_base:lck_base+lck_offset])
22167                                                         are LOCKED in the L2 cache. The LOCKED state is
22168                                                         denoted using an explicit L2 Tag bit (L=1).
22169                                                         If the LOCK request L2-Hits (on ANY SET), then data is
22170                                                         returned from the L2 and the hit set is updated to the
22171                                                         LOCKED state. NOTE: If the Hit Set# is outside the
22172                                                         available sets for a given PP (see UMSK'x'), the
22173                                                         the LOCK bit is still SET. If the programmer's intent
22174                                                         is to explicitly LOCK addresses into 'available' sets,
22175                                                         care must be taken to flush-invalidate the cache first
22176                                                         (to avoid such situations). Not following this procedure
22177                                                         can lead to LCKERR2 interrupts.
22178                                                         If the LOCK request L2-Misses, a replacment set is
22179                                                         chosen(from the available sets (UMSK'x').
22180                                                         If the replacement set contains a dirty-victim it is
22181                                                         written back to memory. Memory read data is then written
22182                                                         into the replacement set, and the replacment SET is
22183                                                         updated to the LOCKED state(L=1).
22184                                                         NOTE: SETs that contain LOCKED addresses are
22185                                                         excluded from the replacement set selection algorithm.
22186                                                         NOTE: The LDD command will allocate the DuTag as normal.
22187                                                         NOTE: If L2C_CFG[IDXALIAS]=1, the address is 'aliased' first
22188                                                         before being checked against the lockdown address
22189                                                         range. To ensure an 'aliased' address is properly locked,
22190                                                         it is recommmended that SW preload the 'aliased' locked adddress
22191                                                         into the L2C_LCKBASE[LCK_BASE] register (while keeping
22192                                                         L2C_LCKOFF[LCK_OFFSET]=0).
22193                                                         NOTE: The OCTEON(N3) implementation only supports 16GB(MAX) of
22194                                                         physical memory. Therefore, only byte address[33:0] are used
22195                                                         (ie: address[35:34] are ignored). */
22196#else
22197        uint64_t lck_ena                 : 1;
22198        uint64_t reserved_1_3            : 3;
22199        uint64_t lck_base                : 27;
22200        uint64_t reserved_31_63          : 33;
22201#endif
22202    } s;
22203    struct cvmx_l2c_lckbase_s            cn30xx;
22204    struct cvmx_l2c_lckbase_s            cn31xx;
22205    struct cvmx_l2c_lckbase_s            cn38xx;
22206    struct cvmx_l2c_lckbase_s            cn38xxp2;
22207    struct cvmx_l2c_lckbase_s            cn50xx;
22208    struct cvmx_l2c_lckbase_s            cn52xx;
22209    struct cvmx_l2c_lckbase_s            cn52xxp1;
22210    struct cvmx_l2c_lckbase_s            cn56xx;
22211    struct cvmx_l2c_lckbase_s            cn56xxp1;
22212    struct cvmx_l2c_lckbase_s            cn58xx;
22213    struct cvmx_l2c_lckbase_s            cn58xxp1;
22214} cvmx_l2c_lckbase_t;
22215
22216
22217/**
22218 * cvmx_l2c_lckoff
22219 *
22220 * L2C_LCKOFF = L2C LockDown OFFSET Register
22221 *
22222 * Description: L2C LockDown OFFSET Register
22223 *
22224 * Notes:
22225 * (1) The generation of the end lockdown block address will 'wrap'.
22226 * (2) The minimum granularity for lockdown is 1 cache line (= 128B block)
22227 */
22228typedef union
22229{
22230    uint64_t u64;
22231    struct cvmx_l2c_lckoff_s
22232    {
22233#if __BYTE_ORDER == __BIG_ENDIAN
22234        uint64_t reserved_10_63          : 54;
22235        uint64_t lck_offset              : 10;      /**< LockDown block Offset. Used in determining
22236                                                         the ending block address of the lockdown
22237                                                         region:
22238                                                         End Lockdown block Address[33:7] =
22239                                                         LCK_BASE[33:7]+LCK_OFFSET[9:0] */
22240#else
22241        uint64_t lck_offset              : 10;
22242        uint64_t reserved_10_63          : 54;
22243#endif
22244    } s;
22245    struct cvmx_l2c_lckoff_s             cn30xx;
22246    struct cvmx_l2c_lckoff_s             cn31xx;
22247    struct cvmx_l2c_lckoff_s             cn38xx;
22248    struct cvmx_l2c_lckoff_s             cn38xxp2;
22249    struct cvmx_l2c_lckoff_s             cn50xx;
22250    struct cvmx_l2c_lckoff_s             cn52xx;
22251    struct cvmx_l2c_lckoff_s             cn52xxp1;
22252    struct cvmx_l2c_lckoff_s             cn56xx;
22253    struct cvmx_l2c_lckoff_s             cn56xxp1;
22254    struct cvmx_l2c_lckoff_s             cn58xx;
22255    struct cvmx_l2c_lckoff_s             cn58xxp1;
22256} cvmx_l2c_lckoff_t;
22257
22258
22259/**
22260 * cvmx_l2c_lfb0
22261 *
22262 * L2C_LFB0 = L2C LFB DEBUG 0 Register
22263 *
22264 * Description: L2C LFB Contents (Status Bits)
22265 */
22266typedef union
22267{
22268    uint64_t u64;
22269    struct cvmx_l2c_lfb0_s
22270    {
22271#if __BYTE_ORDER == __BIG_ENDIAN
22272        uint64_t reserved_32_63          : 32;
22273        uint64_t stcpnd                  : 1;       /**< LFB STC Pending Status */
22274        uint64_t stpnd                   : 1;       /**< LFB ST* Pending Status */
22275        uint64_t stinv                   : 1;       /**< LFB ST* Invalidate Status */
22276        uint64_t stcfl                   : 1;       /**< LFB STC=FAIL Status */
22277        uint64_t vam                     : 1;       /**< Valid Full Address Match Status */
22278        uint64_t inxt                    : 4;       /**< Next LFB Pointer(invalid if ITL=1) */
22279        uint64_t itl                     : 1;       /**< LFB Tail of List Indicator */
22280        uint64_t ihd                     : 1;       /**< LFB Head of List Indicator */
22281        uint64_t set                     : 3;       /**< SET# used for DS-OP (hit=hset/miss=rset) */
22282        uint64_t vabnum                  : 4;       /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
22283        uint64_t sid                     : 9;       /**< LFB Source ID */
22284        uint64_t cmd                     : 4;       /**< LFB Command */
22285        uint64_t vld                     : 1;       /**< LFB Valid */
22286#else
22287        uint64_t vld                     : 1;
22288        uint64_t cmd                     : 4;
22289        uint64_t sid                     : 9;
22290        uint64_t vabnum                  : 4;
22291        uint64_t set                     : 3;
22292        uint64_t ihd                     : 1;
22293        uint64_t itl                     : 1;
22294        uint64_t inxt                    : 4;
22295        uint64_t vam                     : 1;
22296        uint64_t stcfl                   : 1;
22297        uint64_t stinv                   : 1;
22298        uint64_t stpnd                   : 1;
22299        uint64_t stcpnd                  : 1;
22300        uint64_t reserved_32_63          : 32;
22301#endif
22302    } s;
22303    struct cvmx_l2c_lfb0_cn30xx
22304    {
22305#if __BYTE_ORDER == __BIG_ENDIAN
22306        uint64_t reserved_32_63          : 32;
22307        uint64_t stcpnd                  : 1;       /**< LFB STC Pending Status */
22308        uint64_t stpnd                   : 1;       /**< LFB ST* Pending Status */
22309        uint64_t stinv                   : 1;       /**< LFB ST* Invalidate Status */
22310        uint64_t stcfl                   : 1;       /**< LFB STC=FAIL Status */
22311        uint64_t vam                     : 1;       /**< Valid Full Address Match Status */
22312        uint64_t reserved_25_26          : 2;
22313        uint64_t inxt                    : 2;       /**< Next LFB Pointer(invalid if ITL=1) */
22314        uint64_t itl                     : 1;       /**< LFB Tail of List Indicator */
22315        uint64_t ihd                     : 1;       /**< LFB Head of List Indicator */
22316        uint64_t reserved_20_20          : 1;
22317        uint64_t set                     : 2;       /**< SET# used for DS-OP (hit=hset/miss=rset) */
22318        uint64_t reserved_16_17          : 2;
22319        uint64_t vabnum                  : 2;       /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
22320        uint64_t sid                     : 9;       /**< LFB Source ID */
22321        uint64_t cmd                     : 4;       /**< LFB Command */
22322        uint64_t vld                     : 1;       /**< LFB Valid */
22323#else
22324        uint64_t vld                     : 1;
22325        uint64_t cmd                     : 4;
22326        uint64_t sid                     : 9;
22327        uint64_t vabnum                  : 2;
22328        uint64_t reserved_16_17          : 2;
22329        uint64_t set                     : 2;
22330        uint64_t reserved_20_20          : 1;
22331        uint64_t ihd                     : 1;
22332        uint64_t itl                     : 1;
22333        uint64_t inxt                    : 2;
22334        uint64_t reserved_25_26          : 2;
22335        uint64_t vam                     : 1;
22336        uint64_t stcfl                   : 1;
22337        uint64_t stinv                   : 1;
22338        uint64_t stpnd                   : 1;
22339        uint64_t stcpnd                  : 1;
22340        uint64_t reserved_32_63          : 32;
22341#endif
22342    } cn30xx;
22343    struct cvmx_l2c_lfb0_cn31xx
22344    {
22345#if __BYTE_ORDER == __BIG_ENDIAN
22346        uint64_t reserved_32_63          : 32;
22347        uint64_t stcpnd                  : 1;       /**< LFB STC Pending Status */
22348        uint64_t stpnd                   : 1;       /**< LFB ST* Pending Status */
22349        uint64_t stinv                   : 1;       /**< LFB ST* Invalidate Status */
22350        uint64_t stcfl                   : 1;       /**< LFB STC=FAIL Status */
22351        uint64_t vam                     : 1;       /**< Valid Full Address Match Status */
22352        uint64_t reserved_26_26          : 1;
22353        uint64_t inxt                    : 3;       /**< Next LFB Pointer(invalid if ITL=1) */
22354        uint64_t itl                     : 1;       /**< LFB Tail of List Indicator */
22355        uint64_t ihd                     : 1;       /**< LFB Head of List Indicator */
22356        uint64_t reserved_20_20          : 1;
22357        uint64_t set                     : 2;       /**< SET# used for DS-OP (hit=hset/miss=rset) */
22358        uint64_t reserved_17_17          : 1;
22359        uint64_t vabnum                  : 3;       /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
22360        uint64_t sid                     : 9;       /**< LFB Source ID */
22361        uint64_t cmd                     : 4;       /**< LFB Command */
22362        uint64_t vld                     : 1;       /**< LFB Valid */
22363#else
22364        uint64_t vld                     : 1;
22365        uint64_t cmd                     : 4;
22366        uint64_t sid                     : 9;
22367        uint64_t vabnum                  : 3;
22368        uint64_t reserved_17_17          : 1;
22369        uint64_t set                     : 2;
22370        uint64_t reserved_20_20          : 1;
22371        uint64_t ihd                     : 1;
22372        uint64_t itl                     : 1;
22373        uint64_t inxt                    : 3;
22374        uint64_t reserved_26_26          : 1;
22375        uint64_t vam                     : 1;
22376        uint64_t stcfl                   : 1;
22377        uint64_t stinv                   : 1;
22378        uint64_t stpnd                   : 1;
22379        uint64_t stcpnd                  : 1;
22380        uint64_t reserved_32_63          : 32;
22381#endif
22382    } cn31xx;
22383    struct cvmx_l2c_lfb0_s               cn38xx;
22384    struct cvmx_l2c_lfb0_s               cn38xxp2;
22385    struct cvmx_l2c_lfb0_cn50xx
22386    {
22387#if __BYTE_ORDER == __BIG_ENDIAN
22388        uint64_t reserved_32_63          : 32;
22389        uint64_t stcpnd                  : 1;       /**< LFB STC Pending Status */
22390        uint64_t stpnd                   : 1;       /**< LFB ST* Pending Status */
22391        uint64_t stinv                   : 1;       /**< LFB ST* Invalidate Status */
22392        uint64_t stcfl                   : 1;       /**< LFB STC=FAIL Status */
22393        uint64_t vam                     : 1;       /**< Valid Full Address Match Status */
22394        uint64_t reserved_26_26          : 1;
22395        uint64_t inxt                    : 3;       /**< Next LFB Pointer(invalid if ITL=1) */
22396        uint64_t itl                     : 1;       /**< LFB Tail of List Indicator */
22397        uint64_t ihd                     : 1;       /**< LFB Head of List Indicator */
22398        uint64_t set                     : 3;       /**< SET# used for DS-OP (hit=hset/miss=rset) */
22399        uint64_t reserved_17_17          : 1;
22400        uint64_t vabnum                  : 3;       /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
22401        uint64_t sid                     : 9;       /**< LFB Source ID */
22402        uint64_t cmd                     : 4;       /**< LFB Command */
22403        uint64_t vld                     : 1;       /**< LFB Valid */
22404#else
22405        uint64_t vld                     : 1;
22406        uint64_t cmd                     : 4;
22407        uint64_t sid                     : 9;
22408        uint64_t vabnum                  : 3;
22409        uint64_t reserved_17_17          : 1;
22410        uint64_t set                     : 3;
22411        uint64_t ihd                     : 1;
22412        uint64_t itl                     : 1;
22413        uint64_t inxt                    : 3;
22414        uint64_t reserved_26_26          : 1;
22415        uint64_t vam                     : 1;
22416        uint64_t stcfl                   : 1;
22417        uint64_t stinv                   : 1;
22418        uint64_t stpnd                   : 1;
22419        uint64_t stcpnd                  : 1;
22420        uint64_t reserved_32_63          : 32;
22421#endif
22422    } cn50xx;
22423    struct cvmx_l2c_lfb0_cn50xx          cn52xx;
22424    struct cvmx_l2c_lfb0_cn50xx          cn52xxp1;
22425    struct cvmx_l2c_lfb0_s               cn56xx;
22426    struct cvmx_l2c_lfb0_s               cn56xxp1;
22427    struct cvmx_l2c_lfb0_s               cn58xx;
22428    struct cvmx_l2c_lfb0_s               cn58xxp1;
22429} cvmx_l2c_lfb0_t;
22430
22431
22432/**
22433 * cvmx_l2c_lfb1
22434 *
22435 * L2C_LFB1 = L2C LFB DEBUG 1 Register
22436 *
22437 * Description: L2C LFB Contents (Wait Bits)
22438 */
22439typedef union
22440{
22441    uint64_t u64;
22442    struct cvmx_l2c_lfb1_s
22443    {
22444#if __BYTE_ORDER == __BIG_ENDIAN
22445        uint64_t reserved_19_63          : 45;
22446        uint64_t dsgoing                 : 1;       /**< LFB DS Going (in flight) */
22447        uint64_t bid                     : 2;       /**< LFB DS Bid# */
22448        uint64_t wtrsp                   : 1;       /**< LFB Waiting for RSC Response [FILL,STRSP] completion */
22449        uint64_t wtdw                    : 1;       /**< LFB Waiting for DS-WR completion */
22450        uint64_t wtdq                    : 1;       /**< LFB Waiting for LFB-DQ */
22451        uint64_t wtwhp                   : 1;       /**< LFB Waiting for Write-Hit Partial L2 DS-WR completion */
22452        uint64_t wtwhf                   : 1;       /**< LFB Waiting for Write-Hit Full L2 DS-WR completion */
22453        uint64_t wtwrm                   : 1;       /**< LFB Waiting for Write-Miss L2 DS-WR completion */
22454        uint64_t wtstm                   : 1;       /**< LFB Waiting for Write-Miss L2 DS-WR completion */
22455        uint64_t wtrda                   : 1;       /**< LFB Waiting for Read-Miss L2 DS-WR completion */
22456        uint64_t wtstdt                  : 1;       /**< LFB Waiting for all ST write Data to arrive on XMD bus */
22457        uint64_t wtstrsp                 : 1;       /**< LFB Waiting for ST RSC/RSD to be issued on RSP
22458                                                         (with invalidates) */
22459        uint64_t wtstrsc                 : 1;       /**< LFB Waiting for ST RSC-Only to be issued on RSP
22460                                                         (no-invalidates) */
22461        uint64_t wtvtm                   : 1;       /**< LFB Waiting for Victim Read L2 DS-RD completion */
22462        uint64_t wtmfl                   : 1;       /**< LFB Waiting for Memory Fill completion to MRB */
22463        uint64_t prbrty                  : 1;       /**< Probe-Retry Detected - waiting for probe completion */
22464        uint64_t wtprb                   : 1;       /**< LFB Waiting for Probe */
22465        uint64_t vld                     : 1;       /**< LFB Valid */
22466#else
22467        uint64_t vld                     : 1;
22468        uint64_t wtprb                   : 1;
22469        uint64_t prbrty                  : 1;
22470        uint64_t wtmfl                   : 1;
22471        uint64_t wtvtm                   : 1;
22472        uint64_t wtstrsc                 : 1;
22473        uint64_t wtstrsp                 : 1;
22474        uint64_t wtstdt                  : 1;
22475        uint64_t wtrda                   : 1;
22476        uint64_t wtstm                   : 1;
22477        uint64_t wtwrm                   : 1;
22478        uint64_t wtwhf                   : 1;
22479        uint64_t wtwhp                   : 1;
22480        uint64_t wtdq                    : 1;
22481        uint64_t wtdw                    : 1;
22482        uint64_t wtrsp                   : 1;
22483        uint64_t bid                     : 2;
22484        uint64_t dsgoing                 : 1;
22485        uint64_t reserved_19_63          : 45;
22486#endif
22487    } s;
22488    struct cvmx_l2c_lfb1_s               cn30xx;
22489    struct cvmx_l2c_lfb1_s               cn31xx;
22490    struct cvmx_l2c_lfb1_s               cn38xx;
22491    struct cvmx_l2c_lfb1_s               cn38xxp2;
22492    struct cvmx_l2c_lfb1_s               cn50xx;
22493    struct cvmx_l2c_lfb1_s               cn52xx;
22494    struct cvmx_l2c_lfb1_s               cn52xxp1;
22495    struct cvmx_l2c_lfb1_s               cn56xx;
22496    struct cvmx_l2c_lfb1_s               cn56xxp1;
22497    struct cvmx_l2c_lfb1_s               cn58xx;
22498    struct cvmx_l2c_lfb1_s               cn58xxp1;
22499} cvmx_l2c_lfb1_t;
22500
22501
22502/**
22503 * cvmx_l2c_lfb2
22504 *
22505 * L2C_LFB2 = L2C LFB DEBUG 2 Register
22506 *
22507 * Description: L2C LFB Contents Tag/Index
22508 */
22509typedef union
22510{
22511    uint64_t u64;
22512    struct cvmx_l2c_lfb2_s
22513    {
22514#if __BYTE_ORDER == __BIG_ENDIAN
22515        uint64_t reserved_0_63           : 64;
22516#else
22517        uint64_t reserved_0_63           : 64;
22518#endif
22519    } s;
22520    struct cvmx_l2c_lfb2_cn30xx
22521    {
22522#if __BYTE_ORDER == __BIG_ENDIAN
22523        uint64_t reserved_27_63          : 37;
22524        uint64_t lfb_tag                 : 19;      /**< LFB TAG[33:15] */
22525        uint64_t lfb_idx                 : 8;       /**< LFB IDX[14:7] */
22526#else
22527        uint64_t lfb_idx                 : 8;
22528        uint64_t lfb_tag                 : 19;
22529        uint64_t reserved_27_63          : 37;
22530#endif
22531    } cn30xx;
22532    struct cvmx_l2c_lfb2_cn31xx
22533    {
22534#if __BYTE_ORDER == __BIG_ENDIAN
22535        uint64_t reserved_27_63          : 37;
22536        uint64_t lfb_tag                 : 17;      /**< LFB TAG[33:16] */
22537        uint64_t lfb_idx                 : 10;      /**< LFB IDX[15:7] */
22538#else
22539        uint64_t lfb_idx                 : 10;
22540        uint64_t lfb_tag                 : 17;
22541        uint64_t reserved_27_63          : 37;
22542#endif
22543    } cn31xx;
22544    struct cvmx_l2c_lfb2_cn31xx          cn38xx;
22545    struct cvmx_l2c_lfb2_cn31xx          cn38xxp2;
22546    struct cvmx_l2c_lfb2_cn50xx
22547    {
22548#if __BYTE_ORDER == __BIG_ENDIAN
22549        uint64_t reserved_27_63          : 37;
22550        uint64_t lfb_tag                 : 20;      /**< LFB TAG[33:14] */
22551        uint64_t lfb_idx                 : 7;       /**< LFB IDX[13:7] */
22552#else
22553        uint64_t lfb_idx                 : 7;
22554        uint64_t lfb_tag                 : 20;
22555        uint64_t reserved_27_63          : 37;
22556#endif
22557    } cn50xx;
22558    struct cvmx_l2c_lfb2_cn52xx
22559    {
22560#if __BYTE_ORDER == __BIG_ENDIAN
22561        uint64_t reserved_27_63          : 37;
22562        uint64_t lfb_tag                 : 18;      /**< LFB TAG[33:16] */
22563        uint64_t lfb_idx                 : 9;       /**< LFB IDX[15:7] */
22564#else
22565        uint64_t lfb_idx                 : 9;
22566        uint64_t lfb_tag                 : 18;
22567        uint64_t reserved_27_63          : 37;
22568#endif
22569    } cn52xx;
22570    struct cvmx_l2c_lfb2_cn52xx          cn52xxp1;
22571    struct cvmx_l2c_lfb2_cn56xx
22572    {
22573#if __BYTE_ORDER == __BIG_ENDIAN
22574        uint64_t reserved_27_63          : 37;
22575        uint64_t lfb_tag                 : 16;      /**< LFB TAG[33:18] */
22576        uint64_t lfb_idx                 : 11;      /**< LFB IDX[17:7] */
22577#else
22578        uint64_t lfb_idx                 : 11;
22579        uint64_t lfb_tag                 : 16;
22580        uint64_t reserved_27_63          : 37;
22581#endif
22582    } cn56xx;
22583    struct cvmx_l2c_lfb2_cn56xx          cn56xxp1;
22584    struct cvmx_l2c_lfb2_cn56xx          cn58xx;
22585    struct cvmx_l2c_lfb2_cn56xx          cn58xxp1;
22586} cvmx_l2c_lfb2_t;
22587
22588
22589/**
22590 * cvmx_l2c_lfb3
22591 *
22592 * L2C_LFB3 = L2C LFB DEBUG 3 Register
22593 *
22594 * Description: LFB High Water Mark Register
22595 */
22596typedef union
22597{
22598    uint64_t u64;
22599    struct cvmx_l2c_lfb3_s
22600    {
22601#if __BYTE_ORDER == __BIG_ENDIAN
22602        uint64_t reserved_5_63           : 59;
22603        uint64_t stpartdis               : 1;       /**< STP/C Performance Enhancement Disable
22604                                                         When clear, all STP/C(store partials) will take 2 cycles
22605                                                         to complete (power-on default).
22606                                                         When set, all STP/C(store partials) will take 4 cycles
22607                                                         to complete.
22608                                                         NOTE: It is recommended to keep this bit ALWAYS ZERO.
22609                                                         *** NOTE: PASS2 Addition */
22610        uint64_t lfb_hwm                 : 4;       /**< LFB High Water Mark
22611                                                         Determines \#of LFB Entries in use before backpressure
22612                                                         is asserted.
22613                                                            HWM=0:   1 LFB Entry available
22614                                                                       - ...
22615                                                            HWM=15: 16 LFB Entries available
22616                                                         *** NOTE: PASS2 Addition */
22617#else
22618        uint64_t lfb_hwm                 : 4;
22619        uint64_t stpartdis               : 1;
22620        uint64_t reserved_5_63           : 59;
22621#endif
22622    } s;
22623    struct cvmx_l2c_lfb3_cn30xx
22624    {
22625#if __BYTE_ORDER == __BIG_ENDIAN
22626        uint64_t reserved_5_63           : 59;
22627        uint64_t stpartdis               : 1;       /**< STP/C Performance Enhancement Disable
22628                                                         When clear, all STP/C(store partials) will take 2 cycles
22629                                                         to complete (power-on default).
22630                                                         When set, all STP/C(store partials) will take 4 cycles
22631                                                         to complete.
22632                                                         NOTE: It is recommended to keep this bit ALWAYS ZERO. */
22633        uint64_t reserved_2_3            : 2;
22634        uint64_t lfb_hwm                 : 2;       /**< LFB High Water Mark
22635                                                         Determines \#of LFB Entries in use before backpressure
22636                                                         is asserted.
22637                                                            HWM=0:   1 LFB Entry available
22638                                                                       - ...
22639                                                            HWM=3:   4 LFB Entries available */
22640#else
22641        uint64_t lfb_hwm                 : 2;
22642        uint64_t reserved_2_3            : 2;
22643        uint64_t stpartdis               : 1;
22644        uint64_t reserved_5_63           : 59;
22645#endif
22646    } cn30xx;
22647    struct cvmx_l2c_lfb3_cn31xx
22648    {
22649#if __BYTE_ORDER == __BIG_ENDIAN
22650        uint64_t reserved_5_63           : 59;
22651        uint64_t stpartdis               : 1;       /**< STP/C Performance Enhancement Disable
22652                                                         When clear, all STP/C(store partials) will take 2 cycles
22653                                                         to complete (power-on default).
22654                                                         When set, all STP/C(store partials) will take 4 cycles
22655                                                         to complete.
22656                                                         NOTE: It is recommended to keep this bit ALWAYS ZERO. */
22657        uint64_t reserved_3_3            : 1;
22658        uint64_t lfb_hwm                 : 3;       /**< LFB High Water Mark
22659                                                         Determines \#of LFB Entries in use before backpressure
22660                                                         is asserted.
22661                                                            HWM=0:   1 LFB Entry available
22662                                                                       - ...
22663                                                            HWM=7:   8 LFB Entries available */
22664#else
22665        uint64_t lfb_hwm                 : 3;
22666        uint64_t reserved_3_3            : 1;
22667        uint64_t stpartdis               : 1;
22668        uint64_t reserved_5_63           : 59;
22669#endif
22670    } cn31xx;
22671    struct cvmx_l2c_lfb3_s               cn38xx;
22672    struct cvmx_l2c_lfb3_s               cn38xxp2;
22673    struct cvmx_l2c_lfb3_cn31xx          cn50xx;
22674    struct cvmx_l2c_lfb3_cn31xx          cn52xx;
22675    struct cvmx_l2c_lfb3_cn31xx          cn52xxp1;
22676    struct cvmx_l2c_lfb3_s               cn56xx;
22677    struct cvmx_l2c_lfb3_s               cn56xxp1;
22678    struct cvmx_l2c_lfb3_s               cn58xx;
22679    struct cvmx_l2c_lfb3_s               cn58xxp1;
22680} cvmx_l2c_lfb3_t;
22681
22682
22683/**
22684 * cvmx_l2c_oob
22685 *
22686 * L2C_OOB = L2C Out of Bounds Global Enables
22687 *
22688 * Description: Defines DMA "Out of Bounds" global enables.
22689 */
22690typedef union
22691{
22692    uint64_t u64;
22693    struct cvmx_l2c_oob_s
22694    {
22695#if __BYTE_ORDER == __BIG_ENDIAN
22696        uint64_t reserved_2_63           : 62;
22697        uint64_t dwbena                  : 1;       /**< DMA Out of Bounds Range Checker for DMA DWB
22698                                                         commands (Don't WriteBack).
22699                                                         When enabled, any DMA DWB commands which hit 1-of-3
22700                                                         out of bounds regions will be logged into
22701                                                         L2C_INT_STAT[OOB*] CSRs and the DMA store WILL
22702                                                         NOT occur. If the corresponding L2C_INT_EN[OOB*]
22703                                                         is enabled, an interrupt will also be reported. */
22704        uint64_t stena                   : 1;       /**< DMA Out of Bounds Range Checker for DMA store
22705                                                         commands (STF/P/T).
22706                                                         When enabled, any DMA store commands (STF/P/T) which
22707                                                         hit 1-of-3 out of bounds regions will be logged into
22708                                                         L2C_INT_STAT[OOB*] CSRs and the DMA store WILL
22709                                                         NOT occur. If the corresponding L2C_INT_EN[OOB*]
22710                                                         is enabled, an interrupt will also be reported. */
22711#else
22712        uint64_t stena                   : 1;
22713        uint64_t dwbena                  : 1;
22714        uint64_t reserved_2_63           : 62;
22715#endif
22716    } s;
22717    struct cvmx_l2c_oob_s                cn52xx;
22718    struct cvmx_l2c_oob_s                cn52xxp1;
22719    struct cvmx_l2c_oob_s                cn56xx;
22720    struct cvmx_l2c_oob_s                cn56xxp1;
22721} cvmx_l2c_oob_t;
22722
22723
22724/**
22725 * cvmx_l2c_oob1
22726 *
22727 * L2C_OOB1 = L2C Out of Bounds Range Checker
22728 *
22729 * Description: Defines DMA "Out of Bounds" region \#1. If a DMA initiated write transaction generates an address
22730 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
22731 */
22732typedef union
22733{
22734    uint64_t u64;
22735    struct cvmx_l2c_oob1_s
22736    {
22737#if __BYTE_ORDER == __BIG_ENDIAN
22738        uint64_t fadr                    : 27;      /**< DMA initated Memory Range Checker Failing Address
22739                                                         When L2C_INT_STAT[OOB1]=1, this field indicates the
22740                                                         DMA cacheline address.
22741                                                         (addr[33:7] = full cacheline address captured)
22742                                                         NOTE: FADR is locked down until L2C_INT_STAT[OOB1]
22743                                                         is cleared. */
22744        uint64_t fsrc                    : 1;       /**< DMA Out of Bounds Failing Source Command
22745                                                         When L2C_INT_STAT[OOB1]=1, this field indicates the
22746                                                         type of DMA command.
22747                                                          - 0: ST* (STF/P/T)
22748                                                          - 1: DWB (Don't WriteBack)
22749                                                         NOTE: FSRC is locked down until L2C_INT_STAT[OOB1]
22750                                                         is cleared. */
22751        uint64_t reserved_34_35          : 2;
22752        uint64_t sadr                    : 14;      /**< DMA initated Memory Range Checker Starting Address
22753                                                         (1MB granularity) */
22754        uint64_t reserved_14_19          : 6;
22755        uint64_t size                    : 14;      /**< DMA Out of Bounds Range Checker Size
22756                                                         (1MB granularity)
22757                                                         Example: 0: 0MB / 1: 1MB
22758                                                         The range check is for:
22759                                                             (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
22760                                                         SW NOTE: SADR+SIZE could be setup to potentially wrap
22761                                                         the 34bit ending bounds address. */
22762#else
22763        uint64_t size                    : 14;
22764        uint64_t reserved_14_19          : 6;
22765        uint64_t sadr                    : 14;
22766        uint64_t reserved_34_35          : 2;
22767        uint64_t fsrc                    : 1;
22768        uint64_t fadr                    : 27;
22769#endif
22770    } s;
22771    struct cvmx_l2c_oob1_s               cn52xx;
22772    struct cvmx_l2c_oob1_s               cn52xxp1;
22773    struct cvmx_l2c_oob1_s               cn56xx;
22774    struct cvmx_l2c_oob1_s               cn56xxp1;
22775} cvmx_l2c_oob1_t;
22776
22777
22778/**
22779 * cvmx_l2c_oob2
22780 *
22781 * L2C_OOB2 = L2C Out of Bounds Range Checker
22782 *
22783 * Description: Defines DMA "Out of Bounds" region \#2. If a DMA initiated write transaction generates an address
22784 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
22785 */
22786typedef union
22787{
22788    uint64_t u64;
22789    struct cvmx_l2c_oob2_s
22790    {
22791#if __BYTE_ORDER == __BIG_ENDIAN
22792        uint64_t fadr                    : 27;      /**< DMA initated Memory Range Checker Failing Address
22793                                                         When L2C_INT_STAT[OOB2]=1, this field indicates the
22794                                                         DMA cacheline address.
22795                                                         (addr[33:7] = full cacheline address captured)
22796                                                         NOTE: FADR is locked down until L2C_INT_STAT[OOB2]
22797                                                         is cleared. */
22798        uint64_t fsrc                    : 1;       /**< DMA Out of Bounds Failing Source Command
22799                                                         When L2C_INT_STAT[OOB2]=1, this field indicates the
22800                                                         type of DMA command.
22801                                                          - 0: ST* (STF/P/T)
22802                                                          - 1: DWB (Don't WriteBack)
22803                                                         NOTE: FSRC is locked down until L2C_INT_STAT[OOB2]
22804                                                         is cleared. */
22805        uint64_t reserved_34_35          : 2;
22806        uint64_t sadr                    : 14;      /**< DMA initated Memory Range Checker Starting Address
22807                                                         (1MB granularity) */
22808        uint64_t reserved_14_19          : 6;
22809        uint64_t size                    : 14;      /**< DMA Out of Bounds Range Checker Size
22810                                                         (1MB granularity)
22811                                                         Example: 0: 0MB / 1: 1MB
22812                                                         The range check is for:
22813                                                             (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
22814                                                         SW NOTE: SADR+SIZE could be setup to potentially wrap
22815                                                         the 34bit ending bounds address. */
22816#else
22817        uint64_t size                    : 14;
22818        uint64_t reserved_14_19          : 6;
22819        uint64_t sadr                    : 14;
22820        uint64_t reserved_34_35          : 2;
22821        uint64_t fsrc                    : 1;
22822        uint64_t fadr                    : 27;
22823#endif
22824    } s;
22825    struct cvmx_l2c_oob2_s               cn52xx;
22826    struct cvmx_l2c_oob2_s               cn52xxp1;
22827    struct cvmx_l2c_oob2_s               cn56xx;
22828    struct cvmx_l2c_oob2_s               cn56xxp1;
22829} cvmx_l2c_oob2_t;
22830
22831
22832/**
22833 * cvmx_l2c_oob3
22834 *
22835 * L2C_OOB3 = L2C Out of Bounds Range Checker
22836 *
22837 * Description: Defines DMA "Out of Bounds" region \#3. If a DMA initiated write transaction generates an address
22838 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
22839 */
22840typedef union
22841{
22842    uint64_t u64;
22843    struct cvmx_l2c_oob3_s
22844    {
22845#if __BYTE_ORDER == __BIG_ENDIAN
22846        uint64_t fadr                    : 27;      /**< DMA initated Memory Range Checker Failing Address
22847                                                         When L2C_INT_STAT[OOB3]=1, this field indicates the
22848                                                         DMA cacheline address.
22849                                                         (addr[33:7] = full cacheline address captured)
22850                                                         NOTE: FADR is locked down until L2C_INT_STAT[00B3]
22851                                                         is cleared. */
22852        uint64_t fsrc                    : 1;       /**< DMA Out of Bounds Failing Source Command
22853                                                         When L2C_INT_STAT[OOB3]=1, this field indicates the
22854                                                         type of DMA command.
22855                                                          - 0: ST* (STF/P/T)
22856                                                          - 1: DWB (Don't WriteBack)
22857                                                         NOTE: FSRC is locked down until L2C_INT_STAT[00B3]
22858                                                         is cleared. */
22859        uint64_t reserved_34_35          : 2;
22860        uint64_t sadr                    : 14;      /**< DMA initated Memory Range Checker Starting Address
22861                                                         (1MB granularity) */
22862        uint64_t reserved_14_19          : 6;
22863        uint64_t size                    : 14;      /**< DMA Out of Bounds Range Checker Size
22864                                                         (1MB granularity)
22865                                                         Example: 0: 0MB / 1: 1MB
22866                                                         The range check is for:
22867                                                             (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
22868                                                         SW NOTE: SADR+SIZE could be setup to potentially wrap
22869                                                         the 34bit ending bounds address. */
22870#else
22871        uint64_t size                    : 14;
22872        uint64_t reserved_14_19          : 6;
22873        uint64_t sadr                    : 14;
22874        uint64_t reserved_34_35          : 2;
22875        uint64_t fsrc                    : 1;
22876        uint64_t fadr                    : 27;
22877#endif
22878    } s;
22879    struct cvmx_l2c_oob3_s               cn52xx;
22880    struct cvmx_l2c_oob3_s               cn52xxp1;
22881    struct cvmx_l2c_oob3_s               cn56xx;
22882    struct cvmx_l2c_oob3_s               cn56xxp1;
22883} cvmx_l2c_oob3_t;
22884
22885
22886/**
22887 * cvmx_l2c_pfc#
22888 *
22889 * L2C_PFC0 = L2 Performance Counter \#0
22890 *
22891 * Description:
22892 */
22893typedef union
22894{
22895    uint64_t u64;
22896    struct cvmx_l2c_pfcx_s
22897    {
22898#if __BYTE_ORDER == __BIG_ENDIAN
22899        uint64_t reserved_36_63          : 28;
22900        uint64_t pfcnt0                  : 36;      /**< Performance Counter \#0 */
22901#else
22902        uint64_t pfcnt0                  : 36;
22903        uint64_t reserved_36_63          : 28;
22904#endif
22905    } s;
22906    struct cvmx_l2c_pfcx_s               cn30xx;
22907    struct cvmx_l2c_pfcx_s               cn31xx;
22908    struct cvmx_l2c_pfcx_s               cn38xx;
22909    struct cvmx_l2c_pfcx_s               cn38xxp2;
22910    struct cvmx_l2c_pfcx_s               cn50xx;
22911    struct cvmx_l2c_pfcx_s               cn52xx;
22912    struct cvmx_l2c_pfcx_s               cn52xxp1;
22913    struct cvmx_l2c_pfcx_s               cn56xx;
22914    struct cvmx_l2c_pfcx_s               cn56xxp1;
22915    struct cvmx_l2c_pfcx_s               cn58xx;
22916    struct cvmx_l2c_pfcx_s               cn58xxp1;
22917} cvmx_l2c_pfcx_t;
22918
22919
22920/**
22921 * cvmx_l2c_pfctl
22922 *
22923 * L2C_PFCTL = L2 Performance Counter Control Register
22924 *
22925 * Description: Controls the actions of the 4 Performance Counters
22926 *
22927 * Notes:
22928 * - There are four 36b performance counter registers which can simultaneously count events.
22929 * Each Counter's event is programmably selected via the corresponding CNTxSEL field:
22930 *       CNTxSEL[5:0]    Event
22931 *    -----------------+-----------------------
22932 *             0       | Cycles
22933 *             1       | L2 Instruction Miss
22934 *             2       | L2 Instruction Hit
22935 *             3       | L2 Data Miss
22936 *             4       | L2 Data Hit
22937 *             5       | L2 Miss (I/D)
22938 *             6       | L2 Hit (I/D)
22939 *             7       | L2 Victim Buffer Hit (Retry Probe)
22940 *             8       | LFB-NQ Index Conflict
22941 *             9       | L2 Tag Probe (issued - could be VB-Retried)
22942 *            10       | L2 Tag Update (completed - note: some CMD types do not update)
22943 *            11       | L2 Tag Probe Completed (beyond VB-RTY window)
22944 *            12       | L2 Tag Dirty Victim
22945 *            13       | L2 Data Store NOP
22946 *            14       | L2 Data Store READ
22947 *            15       | L2 Data Store WRITE
22948 *            16       | Memory Fill Data valid (1 strobe/32B)
22949 *            17       | Memory Write Request
22950 *            18       | Memory Read Request
22951 *            19       | Memory Write Data valid (1 strobe/32B)
22952 *            20       | XMC NOP (XMC Bus Idle)
22953 *            21       | XMC LDT (Load-Through Request)
22954 *            22       | XMC LDI (L2 Load I-Stream Request)
22955 *            23       | XMC LDD (L2 Load D-stream Request)
22956 *            24       | XMC STF (L2 Store Full cacheline Request)
22957 *            25       | XMC STT (L2 Store Through Request)
22958 *            26       | XMC STP (L2 Store Partial Request)
22959 *            27       | XMC STC (L2 Store Conditional Request)
22960 *            28       | XMC DWB (L2 Don't WriteBack Request)
22961 *            29       | XMC PL2 (L2 Prefetch Request)
22962 *            30       | XMC PSL1 (L1 Prefetch Request)
22963 *            31       | XMC IOBLD
22964 *            32       | XMC IOBST
22965 *            33       | XMC IOBDMA
22966 *            34       | XMC IOBRSP
22967 *            35       | XMD Bus valid (all)
22968 *            36       | XMD Bus valid (DST=L2C) Memory Data
22969 *            37       | XMD Bus valid (DST=IOB) REFL Data
22970 *            38       | XMD Bus valid (DST=PP) IOBRSP Data
22971 *            39       | RSC NOP
22972 *            40       | RSC STDN
22973 *            41       | RSC FILL
22974 *            42       | RSC REFL
22975 *            43       | RSC STIN
22976 *            44       | RSC SCIN
22977 *            45       | RSC SCFL
22978 *            46       | RSC SCDN
22979 *            47       | RSD Data Valid
22980 *            48       | RSD Data Valid (FILL)
22981 *            49       | RSD Data Valid (STRSP)
22982 *            50       | RSD Data Valid (REFL)
22983 *            51       | LRF-REQ (LFB-NQ)
22984 *            52       | DT RD-ALLOC (LDD/PSL1 Commands)
22985 *            53       | DT WR-INVAL (ST* Commands)
22986 */
22987typedef union
22988{
22989    uint64_t u64;
22990    struct cvmx_l2c_pfctl_s
22991    {
22992#if __BYTE_ORDER == __BIG_ENDIAN
22993        uint64_t reserved_36_63          : 28;
22994        uint64_t cnt3rdclr               : 1;       /**< Performance Counter 3 Read Clear
22995                                                         When set, all CSR reads of the L2C_PFC3
22996                                                         register will auto-clear the counter. This allows
22997                                                         SW to maintain 'cumulative' counters in SW.
22998                                                         NOTE: If the CSR read occurs in the same cycle as
22999                                                         the 'event' to be counted, the counter will
23000                                                         properly reflect the event.
23001                                                         *** NOTE: PASS2 Addition */
23002        uint64_t cnt2rdclr               : 1;       /**< Performance Counter 2 Read Clear
23003                                                         When set, all CSR reads of the L2C_PFC2
23004                                                         register will auto-clear the counter. This allows
23005                                                         SW to maintain 'cumulative' counters in SW.
23006                                                         NOTE: If the CSR read occurs in the same cycle as
23007                                                         the 'event' to be counted, the counter will
23008                                                         properly reflect the event.
23009                                                         *** NOTE: PASS2 Addition */
23010        uint64_t cnt1rdclr               : 1;       /**< Performance Counter 1 Read Clear
23011                                                         When set, all CSR reads of the L2C_PFC1
23012                                                         register will auto-clear the counter. This allows
23013                                                         SW to maintain 'cumulative' counters in SW.
23014                                                         NOTE: If the CSR read occurs in the same cycle as
23015                                                         the 'event' to be counted, the counter will
23016                                                         properly reflect the event.
23017                                                         *** NOTE: PASS2 Addition */
23018        uint64_t cnt0rdclr               : 1;       /**< Performance Counter 0 Read Clear
23019                                                         When set, all CSR reads of the L2C_PFC0
23020                                                         register will 'auto-clear' the counter. This allows
23021                                                         SW to maintain accurate 'cumulative' counters.
23022                                                         NOTE: If the CSR read occurs in the same cycle as
23023                                                         the 'event' to be counted, the counter will
23024                                                         properly reflect the event.
23025                                                         *** NOTE: PASS2 Addition */
23026        uint64_t cnt3ena                 : 1;       /**< Performance Counter 3 Enable
23027                                                         When this bit is set, the performance counter
23028                                                         is enabled. */
23029        uint64_t cnt3clr                 : 1;       /**< Performance Counter 3 Clear
23030                                                         When the CSR write occurs, if this bit is set,
23031                                                         the performance counter is cleared. Otherwise,
23032                                                         it will resume counting from its current value. */
23033        uint64_t cnt3sel                 : 6;       /**< Performance Counter 3 Event Selector
23034                                                         (see list of selectable events to count in NOTES) */
23035        uint64_t cnt2ena                 : 1;       /**< Performance Counter 2 Enable
23036                                                         When this bit is set, the performance counter
23037                                                         is enabled. */
23038        uint64_t cnt2clr                 : 1;       /**< Performance Counter 2 Clear
23039                                                         When the CSR write occurs, if this bit is set,
23040                                                         the performance counter is cleared. Otherwise,
23041                                                         it will resume counting from its current value. */
23042        uint64_t cnt2sel                 : 6;       /**< Performance Counter 2 Event Selector
23043                                                         (see list of selectable events to count in NOTES) */
23044        uint64_t cnt1ena                 : 1;       /**< Performance Counter 1 Enable
23045                                                         When this bit is set, the performance counter
23046                                                         is enabled. */
23047        uint64_t cnt1clr                 : 1;       /**< Performance Counter 1 Clear
23048                                                         When the CSR write occurs, if this bit is set,
23049                                                         the performance counter is cleared. Otherwise,
23050                                                         it will resume counting from its current value. */
23051        uint64_t cnt1sel                 : 6;       /**< Performance Counter 1 Event Selector
23052                                                         (see list of selectable events to count in NOTES) */
23053        uint64_t cnt0ena                 : 1;       /**< Performance Counter 0 Enable
23054                                                         When this bit is set, the performance counter
23055                                                         is enabled. */
23056        uint64_t cnt0clr                 : 1;       /**< Performance Counter 0 Clear
23057                                                         When the CSR write occurs, if this bit is set,
23058                                                         the performance counter is cleared. Otherwise,
23059                                                         it will resume counting from its current value. */
23060        uint64_t cnt0sel                 : 6;       /**< Performance Counter 0 Event Selector
23061                                                         (see list of selectable events to count in NOTES) */
23062#else
23063        uint64_t cnt0sel                 : 6;
23064        uint64_t cnt0clr                 : 1;
23065        uint64_t cnt0ena                 : 1;
23066        uint64_t cnt1sel                 : 6;
23067        uint64_t cnt1clr                 : 1;
23068        uint64_t cnt1ena                 : 1;
23069        uint64_t cnt2sel                 : 6;
23070        uint64_t cnt2clr                 : 1;
23071        uint64_t cnt2ena                 : 1;
23072        uint64_t cnt3sel                 : 6;
23073        uint64_t cnt3clr                 : 1;
23074        uint64_t cnt3ena                 : 1;
23075        uint64_t cnt0rdclr               : 1;
23076        uint64_t cnt1rdclr               : 1;
23077        uint64_t cnt2rdclr               : 1;
23078        uint64_t cnt3rdclr               : 1;
23079        uint64_t reserved_36_63          : 28;
23080#endif
23081    } s;
23082    struct cvmx_l2c_pfctl_s              cn30xx;
23083    struct cvmx_l2c_pfctl_s              cn31xx;
23084    struct cvmx_l2c_pfctl_s              cn38xx;
23085    struct cvmx_l2c_pfctl_s              cn38xxp2;
23086    struct cvmx_l2c_pfctl_s              cn50xx;
23087    struct cvmx_l2c_pfctl_s              cn52xx;
23088    struct cvmx_l2c_pfctl_s              cn52xxp1;
23089    struct cvmx_l2c_pfctl_s              cn56xx;
23090    struct cvmx_l2c_pfctl_s              cn56xxp1;
23091    struct cvmx_l2c_pfctl_s              cn58xx;
23092    struct cvmx_l2c_pfctl_s              cn58xxp1;
23093} cvmx_l2c_pfctl_t;
23094
23095
23096/**
23097 * cvmx_l2c_ppgrp
23098 *
23099 * L2C_PPGRP = L2C PP Group Number
23100 *
23101 * Description: Defines the PP(Packet Processor) PLC Group \# (0,1,2)
23102 */
23103typedef union
23104{
23105    uint64_t u64;
23106    struct cvmx_l2c_ppgrp_s
23107    {
23108#if __BYTE_ORDER == __BIG_ENDIAN
23109        uint64_t reserved_24_63          : 40;
23110        uint64_t pp11grp                 : 2;       /**< PP11 PLC Group# (0,1,2) */
23111        uint64_t pp10grp                 : 2;       /**< PP10 PLC Group# (0,1,2) */
23112        uint64_t pp9grp                  : 2;       /**< PP9 PLC Group# (0,1,2) */
23113        uint64_t pp8grp                  : 2;       /**< PP8 PLC Group# (0,1,2) */
23114        uint64_t pp7grp                  : 2;       /**< PP7 PLC Group# (0,1,2) */
23115        uint64_t pp6grp                  : 2;       /**< PP6 PLC Group# (0,1,2) */
23116        uint64_t pp5grp                  : 2;       /**< PP5 PLC Group# (0,1,2) */
23117        uint64_t pp4grp                  : 2;       /**< PP4 PLC Group# (0,1,2) */
23118        uint64_t pp3grp                  : 2;       /**< PP3 PLC Group# (0,1,2) */
23119        uint64_t pp2grp                  : 2;       /**< PP2 PLC Group# (0,1,2) */
23120        uint64_t pp1grp                  : 2;       /**< PP1 PLC Group# (0,1,2) */
23121        uint64_t pp0grp                  : 2;       /**< PP0 PLC Group# (0,1,2) */
23122#else
23123        uint64_t pp0grp                  : 2;
23124        uint64_t pp1grp                  : 2;
23125        uint64_t pp2grp                  : 2;
23126        uint64_t pp3grp                  : 2;
23127        uint64_t pp4grp                  : 2;
23128        uint64_t pp5grp                  : 2;
23129        uint64_t pp6grp                  : 2;
23130        uint64_t pp7grp                  : 2;
23131        uint64_t pp8grp                  : 2;
23132        uint64_t pp9grp                  : 2;
23133        uint64_t pp10grp                 : 2;
23134        uint64_t pp11grp                 : 2;
23135        uint64_t reserved_24_63          : 40;
23136#endif
23137    } s;
23138    struct cvmx_l2c_ppgrp_cn52xx
23139    {
23140#if __BYTE_ORDER == __BIG_ENDIAN
23141        uint64_t reserved_8_63           : 56;
23142        uint64_t pp3grp                  : 2;       /**< PP3 PLC Group# (0,1,2) */
23143        uint64_t pp2grp                  : 2;       /**< PP2 PLC Group# (0,1,2) */
23144        uint64_t pp1grp                  : 2;       /**< PP1 PLC Group# (0,1,2) */
23145        uint64_t pp0grp                  : 2;       /**< PP0 PLC Group# (0,1,2) */
23146#else
23147        uint64_t pp0grp                  : 2;
23148        uint64_t pp1grp                  : 2;
23149        uint64_t pp2grp                  : 2;
23150        uint64_t pp3grp                  : 2;
23151        uint64_t reserved_8_63           : 56;
23152#endif
23153    } cn52xx;
23154    struct cvmx_l2c_ppgrp_cn52xx         cn52xxp1;
23155    struct cvmx_l2c_ppgrp_s              cn56xx;
23156    struct cvmx_l2c_ppgrp_s              cn56xxp1;
23157} cvmx_l2c_ppgrp_t;
23158
23159
23160/**
23161 * cvmx_l2c_spar0
23162 *
23163 * L2C_SPAR0 = L2 Set Partitioning Register (PP0-3)
23164 *
23165 * Description: L2 Set Partitioning Register
23166 *
23167 * Notes:
23168 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
23169 *   set for replacement.
23170 * - There MUST ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
23171 * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers
23172 *          When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers
23173 */
23174typedef union
23175{
23176    uint64_t u64;
23177    struct cvmx_l2c_spar0_s
23178    {
23179#if __BYTE_ORDER == __BIG_ENDIAN
23180        uint64_t reserved_32_63          : 32;
23181        uint64_t umsk3                   : 8;       /**< PP[3] L2 'DO NOT USE' set partition mask */
23182        uint64_t umsk2                   : 8;       /**< PP[2] L2 'DO NOT USE' set partition mask */
23183        uint64_t umsk1                   : 8;       /**< PP[1] L2 'DO NOT USE' set partition mask */
23184        uint64_t umsk0                   : 8;       /**< PP[0] L2 'DO NOT USE' set partition mask */
23185#else
23186        uint64_t umsk0                   : 8;
23187        uint64_t umsk1                   : 8;
23188        uint64_t umsk2                   : 8;
23189        uint64_t umsk3                   : 8;
23190        uint64_t reserved_32_63          : 32;
23191#endif
23192    } s;
23193    struct cvmx_l2c_spar0_cn30xx
23194    {
23195#if __BYTE_ORDER == __BIG_ENDIAN
23196        uint64_t reserved_4_63           : 60;
23197        uint64_t umsk0                   : 4;       /**< PP[0] L2 'DO NOT USE' set partition mask */
23198#else
23199        uint64_t umsk0                   : 4;
23200        uint64_t reserved_4_63           : 60;
23201#endif
23202    } cn30xx;
23203    struct cvmx_l2c_spar0_cn31xx
23204    {
23205#if __BYTE_ORDER == __BIG_ENDIAN
23206        uint64_t reserved_12_63          : 52;
23207        uint64_t umsk1                   : 4;       /**< PP[1] L2 'DO NOT USE' set partition mask */
23208        uint64_t reserved_4_7            : 4;
23209        uint64_t umsk0                   : 4;       /**< PP[0] L2 'DO NOT USE' set partition mask */
23210#else
23211        uint64_t umsk0                   : 4;
23212        uint64_t reserved_4_7            : 4;
23213        uint64_t umsk1                   : 4;
23214        uint64_t reserved_12_63          : 52;
23215#endif
23216    } cn31xx;
23217    struct cvmx_l2c_spar0_s              cn38xx;
23218    struct cvmx_l2c_spar0_s              cn38xxp2;
23219    struct cvmx_l2c_spar0_cn50xx
23220    {
23221#if __BYTE_ORDER == __BIG_ENDIAN
23222        uint64_t reserved_16_63          : 48;
23223        uint64_t umsk1                   : 8;       /**< PP[1] L2 'DO NOT USE' set partition mask */
23224        uint64_t umsk0                   : 8;       /**< PP[0] L2 'DO NOT USE' set partition mask */
23225#else
23226        uint64_t umsk0                   : 8;
23227        uint64_t umsk1                   : 8;
23228        uint64_t reserved_16_63          : 48;
23229#endif
23230    } cn50xx;
23231    struct cvmx_l2c_spar0_s              cn52xx;
23232    struct cvmx_l2c_spar0_s              cn52xxp1;
23233    struct cvmx_l2c_spar0_s              cn56xx;
23234    struct cvmx_l2c_spar0_s              cn56xxp1;
23235    struct cvmx_l2c_spar0_s              cn58xx;
23236    struct cvmx_l2c_spar0_s              cn58xxp1;
23237} cvmx_l2c_spar0_t;
23238
23239
23240/**
23241 * cvmx_l2c_spar1
23242 *
23243 * L2C_SPAR1 = L2 Set Partitioning Register (PP4-7)
23244 *
23245 * Description: L2 Set Partitioning Register
23246 *
23247 * Notes:
23248 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
23249 *   set for replacement.
23250 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
23251 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
23252 *          When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
23253 */
23254typedef union
23255{
23256    uint64_t u64;
23257    struct cvmx_l2c_spar1_s
23258    {
23259#if __BYTE_ORDER == __BIG_ENDIAN
23260        uint64_t reserved_32_63          : 32;
23261        uint64_t umsk7                   : 8;       /**< PP[7] L2 'DO NOT USE' set partition mask */
23262        uint64_t umsk6                   : 8;       /**< PP[6] L2 'DO NOT USE' set partition mask */
23263        uint64_t umsk5                   : 8;       /**< PP[5] L2 'DO NOT USE' set partition mask */
23264        uint64_t umsk4                   : 8;       /**< PP[4] L2 'DO NOT USE' set partition mask */
23265#else
23266        uint64_t umsk4                   : 8;
23267        uint64_t umsk5                   : 8;
23268        uint64_t umsk6                   : 8;
23269        uint64_t umsk7                   : 8;
23270        uint64_t reserved_32_63          : 32;
23271#endif
23272    } s;
23273    struct cvmx_l2c_spar1_s              cn38xx;
23274    struct cvmx_l2c_spar1_s              cn38xxp2;
23275    struct cvmx_l2c_spar1_s              cn56xx;
23276    struct cvmx_l2c_spar1_s              cn56xxp1;
23277    struct cvmx_l2c_spar1_s              cn58xx;
23278    struct cvmx_l2c_spar1_s              cn58xxp1;
23279} cvmx_l2c_spar1_t;
23280
23281
23282/**
23283 * cvmx_l2c_spar2
23284 *
23285 * L2C_SPAR2 = L2 Set Partitioning Register (PP8-11)
23286 *
23287 * Description: L2 Set Partitioning Register
23288 *
23289 * Notes:
23290 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
23291 *   set for replacement.
23292 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
23293 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
23294 *          When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
23295 */
23296typedef union
23297{
23298    uint64_t u64;
23299    struct cvmx_l2c_spar2_s
23300    {
23301#if __BYTE_ORDER == __BIG_ENDIAN
23302        uint64_t reserved_32_63          : 32;
23303        uint64_t umsk11                  : 8;       /**< PP[11] L2 'DO NOT USE' set partition mask */
23304        uint64_t umsk10                  : 8;       /**< PP[10] L2 'DO NOT USE' set partition mask */
23305        uint64_t umsk9                   : 8;       /**< PP[9] L2 'DO NOT USE' set partition mask */
23306        uint64_t umsk8                   : 8;       /**< PP[8] L2 'DO NOT USE' set partition mask */
23307#else
23308        uint64_t umsk8                   : 8;
23309        uint64_t umsk9                   : 8;
23310        uint64_t umsk10                  : 8;
23311        uint64_t umsk11                  : 8;
23312        uint64_t reserved_32_63          : 32;
23313#endif
23314    } s;
23315    struct cvmx_l2c_spar2_s              cn38xx;
23316    struct cvmx_l2c_spar2_s              cn38xxp2;
23317    struct cvmx_l2c_spar2_s              cn56xx;
23318    struct cvmx_l2c_spar2_s              cn56xxp1;
23319    struct cvmx_l2c_spar2_s              cn58xx;
23320    struct cvmx_l2c_spar2_s              cn58xxp1;
23321} cvmx_l2c_spar2_t;
23322
23323
23324/**
23325 * cvmx_l2c_spar3
23326 *
23327 * L2C_SPAR3 = L2 Set Partitioning Register (PP12-15)
23328 *
23329 * Description: L2 Set Partitioning Register
23330 *
23331 * Notes:
23332 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
23333 *   set for replacement.
23334 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
23335 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
23336 *          When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
23337 */
23338typedef union
23339{
23340    uint64_t u64;
23341    struct cvmx_l2c_spar3_s
23342    {
23343#if __BYTE_ORDER == __BIG_ENDIAN
23344        uint64_t reserved_32_63          : 32;
23345        uint64_t umsk15                  : 8;       /**< PP[15] L2 'DO NOT USE' set partition mask */
23346        uint64_t umsk14                  : 8;       /**< PP[14] L2 'DO NOT USE' set partition mask */
23347        uint64_t umsk13                  : 8;       /**< PP[13] L2 'DO NOT USE' set partition mask */
23348        uint64_t umsk12                  : 8;       /**< PP[12] L2 'DO NOT USE' set partition mask */
23349#else
23350        uint64_t umsk12                  : 8;
23351        uint64_t umsk13                  : 8;
23352        uint64_t umsk14                  : 8;
23353        uint64_t umsk15                  : 8;
23354        uint64_t reserved_32_63          : 32;
23355#endif
23356    } s;
23357    struct cvmx_l2c_spar3_s              cn38xx;
23358    struct cvmx_l2c_spar3_s              cn38xxp2;
23359    struct cvmx_l2c_spar3_s              cn58xx;
23360    struct cvmx_l2c_spar3_s              cn58xxp1;
23361} cvmx_l2c_spar3_t;
23362
23363
23364/**
23365 * cvmx_l2c_spar4
23366 *
23367 * L2C_SPAR4 = L2 Set Partitioning Register (IOB)
23368 *
23369 * Description: L2 Set Partitioning Register
23370 *
23371 * Notes:
23372 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
23373 *   set for replacement.
23374 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
23375 * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers
23376 *          When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers
23377 */
23378typedef union
23379{
23380    uint64_t u64;
23381    struct cvmx_l2c_spar4_s
23382    {
23383#if __BYTE_ORDER == __BIG_ENDIAN
23384        uint64_t reserved_8_63           : 56;
23385        uint64_t umskiob                 : 8;       /**< IOB L2 'DO NOT USE' set partition mask */
23386#else
23387        uint64_t umskiob                 : 8;
23388        uint64_t reserved_8_63           : 56;
23389#endif
23390    } s;
23391    struct cvmx_l2c_spar4_cn30xx
23392    {
23393#if __BYTE_ORDER == __BIG_ENDIAN
23394        uint64_t reserved_4_63           : 60;
23395        uint64_t umskiob                 : 4;       /**< IOB L2 'DO NOT USE' set partition mask */
23396#else
23397        uint64_t umskiob                 : 4;
23398        uint64_t reserved_4_63           : 60;
23399#endif
23400    } cn30xx;
23401    struct cvmx_l2c_spar4_cn30xx         cn31xx;
23402    struct cvmx_l2c_spar4_s              cn38xx;
23403    struct cvmx_l2c_spar4_s              cn38xxp2;
23404    struct cvmx_l2c_spar4_s              cn50xx;
23405    struct cvmx_l2c_spar4_s              cn52xx;
23406    struct cvmx_l2c_spar4_s              cn52xxp1;
23407    struct cvmx_l2c_spar4_s              cn56xx;
23408    struct cvmx_l2c_spar4_s              cn56xxp1;
23409    struct cvmx_l2c_spar4_s              cn58xx;
23410    struct cvmx_l2c_spar4_s              cn58xxp1;
23411} cvmx_l2c_spar4_t;
23412
23413
23414/**
23415 * cvmx_l2d_bst0
23416 *
23417 * L2D_BST0 = L2C Data Store QUAD0 BIST Status Register
23418 *
23419 */
23420typedef union
23421{
23422    uint64_t u64;
23423    struct cvmx_l2d_bst0_s
23424    {
23425#if __BYTE_ORDER == __BIG_ENDIAN
23426        uint64_t reserved_35_63          : 29;
23427        uint64_t ftl                     : 1;       /**< L2C Data Store Fatal Defect(across all QUADs)
23428                                                         2 or more columns were detected bad across all
23429                                                         QUADs[0-3]. Please refer to individual quad failures
23430                                                         for bad column = 0x7e to determine which QUAD was in
23431                                                         error. */
23432        uint64_t q0stat                  : 34;      /**< Bist Results for QUAD0
23433                                                         Failure \#1 Status
23434                                                           [16:14] bad bank
23435                                                           [13:7] bad high column
23436                                                           [6:0] bad low column
23437                                                         Failure \#2 Status
23438                                                           [33:31] bad bank
23439                                                           [30:24] bad high column
23440                                                           [23:17] bad low column
23441                                                         NOTES: For bad high/low column reporting:
23442                                                            0x7f:   No failure
23443                                                            0x7e:   Fatal Defect: 2 or more bad columns
23444                                                            0-0x45: Bad column
23445                                                         NOTE: If there are less than 2 failures then the
23446                                                            bad bank will be 0x7. */
23447#else
23448        uint64_t q0stat                  : 34;
23449        uint64_t ftl                     : 1;
23450        uint64_t reserved_35_63          : 29;
23451#endif
23452    } s;
23453    struct cvmx_l2d_bst0_s               cn30xx;
23454    struct cvmx_l2d_bst0_s               cn31xx;
23455    struct cvmx_l2d_bst0_s               cn38xx;
23456    struct cvmx_l2d_bst0_s               cn38xxp2;
23457    struct cvmx_l2d_bst0_s               cn50xx;
23458    struct cvmx_l2d_bst0_s               cn52xx;
23459    struct cvmx_l2d_bst0_s               cn52xxp1;
23460    struct cvmx_l2d_bst0_s               cn56xx;
23461    struct cvmx_l2d_bst0_s               cn56xxp1;
23462    struct cvmx_l2d_bst0_s               cn58xx;
23463    struct cvmx_l2d_bst0_s               cn58xxp1;
23464} cvmx_l2d_bst0_t;
23465
23466
23467/**
23468 * cvmx_l2d_bst1
23469 *
23470 * L2D_BST1 = L2C Data Store QUAD1 BIST Status Register
23471 *
23472 */
23473typedef union
23474{
23475    uint64_t u64;
23476    struct cvmx_l2d_bst1_s
23477    {
23478#if __BYTE_ORDER == __BIG_ENDIAN
23479        uint64_t reserved_34_63          : 30;
23480        uint64_t q1stat                  : 34;      /**< Bist Results for QUAD1
23481                                                         Failure \#1 Status
23482                                                            [16:14] bad bank
23483                                                            [13:7] bad high column
23484                                                            [6:0] bad low column
23485                                                          Failure \#2 Status
23486                                                            [33:31] bad bank
23487                                                            [30:24] bad high column
23488                                                            [23:17] bad low column
23489                                                          NOTES: For bad high/low column reporting:
23490                                                             0x7f:   No failure
23491                                                             0x7e:   Fatal Defect: 2 or more bad columns
23492                                                             0-0x45: Bad column
23493                                                          NOTE: If there are less than 2 failures then the
23494                                                             bad bank will be 0x7. */
23495#else
23496        uint64_t q1stat                  : 34;
23497        uint64_t reserved_34_63          : 30;
23498#endif
23499    } s;
23500    struct cvmx_l2d_bst1_s               cn30xx;
23501    struct cvmx_l2d_bst1_s               cn31xx;
23502    struct cvmx_l2d_bst1_s               cn38xx;
23503    struct cvmx_l2d_bst1_s               cn38xxp2;
23504    struct cvmx_l2d_bst1_s               cn50xx;
23505    struct cvmx_l2d_bst1_s               cn52xx;
23506    struct cvmx_l2d_bst1_s               cn52xxp1;
23507    struct cvmx_l2d_bst1_s               cn56xx;
23508    struct cvmx_l2d_bst1_s               cn56xxp1;
23509    struct cvmx_l2d_bst1_s               cn58xx;
23510    struct cvmx_l2d_bst1_s               cn58xxp1;
23511} cvmx_l2d_bst1_t;
23512
23513
23514/**
23515 * cvmx_l2d_bst2
23516 *
23517 * L2D_BST2 = L2C Data Store QUAD2 BIST Status Register
23518 *
23519 */
23520typedef union
23521{
23522    uint64_t u64;
23523    struct cvmx_l2d_bst2_s
23524    {
23525#if __BYTE_ORDER == __BIG_ENDIAN
23526        uint64_t reserved_34_63          : 30;
23527        uint64_t q2stat                  : 34;      /**< Bist Results for QUAD2
23528                                                         Failure \#1 Status
23529                                                            [16:14] bad bank
23530                                                            [13:7] bad high column
23531                                                            [6:0] bad low column
23532                                                          Failure \#2 Status
23533                                                            [33:31] bad bank
23534                                                            [30:24] bad high column
23535                                                            [23:17] bad low column
23536                                                          NOTES: For bad high/low column reporting:
23537                                                             0x7f:   No failure
23538                                                             0x7e:   Fatal Defect: 2 or more bad columns
23539                                                             0-0x45: Bad column
23540                                                          NOTE: If there are less than 2 failures then the
23541                                                             bad bank will be 0x7. */
23542#else
23543        uint64_t q2stat                  : 34;
23544        uint64_t reserved_34_63          : 30;
23545#endif
23546    } s;
23547    struct cvmx_l2d_bst2_s               cn30xx;
23548    struct cvmx_l2d_bst2_s               cn31xx;
23549    struct cvmx_l2d_bst2_s               cn38xx;
23550    struct cvmx_l2d_bst2_s               cn38xxp2;
23551    struct cvmx_l2d_bst2_s               cn50xx;
23552    struct cvmx_l2d_bst2_s               cn52xx;
23553    struct cvmx_l2d_bst2_s               cn52xxp1;
23554    struct cvmx_l2d_bst2_s               cn56xx;
23555    struct cvmx_l2d_bst2_s               cn56xxp1;
23556    struct cvmx_l2d_bst2_s               cn58xx;
23557    struct cvmx_l2d_bst2_s               cn58xxp1;
23558} cvmx_l2d_bst2_t;
23559
23560
23561/**
23562 * cvmx_l2d_bst3
23563 *
23564 * L2D_BST3 = L2C Data Store QUAD3 BIST Status Register
23565 *
23566 */
23567typedef union
23568{
23569    uint64_t u64;
23570    struct cvmx_l2d_bst3_s
23571    {
23572#if __BYTE_ORDER == __BIG_ENDIAN
23573        uint64_t reserved_34_63          : 30;
23574        uint64_t q3stat                  : 34;      /**< Bist Results for QUAD3
23575                                                         Failure \#1 Status
23576                                                            [16:14] bad bank
23577                                                            [13:7] bad high column
23578                                                            [6:0] bad low column
23579                                                          Failure \#2 Status
23580                                                            [33:31] bad bank
23581                                                            [30:24] bad high column
23582                                                            [23:17] bad low column
23583                                                          NOTES: For bad high/low column reporting:
23584                                                             0x7f:   No failure
23585                                                             0x7e:   Fatal Defect: 2 or more bad columns
23586                                                             0-0x45: Bad column
23587                                                          NOTE: If there are less than 2 failures then the
23588                                                             bad bank will be 0x7. */
23589#else
23590        uint64_t q3stat                  : 34;
23591        uint64_t reserved_34_63          : 30;
23592#endif
23593    } s;
23594    struct cvmx_l2d_bst3_s               cn30xx;
23595    struct cvmx_l2d_bst3_s               cn31xx;
23596    struct cvmx_l2d_bst3_s               cn38xx;
23597    struct cvmx_l2d_bst3_s               cn38xxp2;
23598    struct cvmx_l2d_bst3_s               cn50xx;
23599    struct cvmx_l2d_bst3_s               cn52xx;
23600    struct cvmx_l2d_bst3_s               cn52xxp1;
23601    struct cvmx_l2d_bst3_s               cn56xx;
23602    struct cvmx_l2d_bst3_s               cn56xxp1;
23603    struct cvmx_l2d_bst3_s               cn58xx;
23604    struct cvmx_l2d_bst3_s               cn58xxp1;
23605} cvmx_l2d_bst3_t;
23606
23607
23608/**
23609 * cvmx_l2d_err
23610 *
23611 * L2D_ERR = L2 Data Errors
23612 *
23613 * Description: L2 Data ECC SEC/DED Errors and Interrupt Enable
23614 */
23615typedef union
23616{
23617    uint64_t u64;
23618    struct cvmx_l2d_err_s
23619    {
23620#if __BYTE_ORDER == __BIG_ENDIAN
23621        uint64_t reserved_6_63           : 58;
23622        uint64_t bmhclsel                : 1;       /**< L2 Bit Map Half CacheLine ECC Selector
23623                                                          *** NOTE: PASS2 Addition
23624                                                          When L2C_DBG[L2T]=1/L2D_ERR[ECC_ENA]=0, the BMHCLSEL selects
23625                                                          which half cacheline to conditionally latch into
23626                                                          the L2D_FSYN0/L2D_FSYN1 registers when an LDD command
23627                                                          is detected from the diagnostic PP (see L2C_DBG[PPNUM]).
23628                                                         - 0: OW[0-3] ECC (from first 1/2 cacheline) is selected to
23629                                                             be conditionally latched into the L2D_FSYN0/1 CSRs.
23630                                                         - 1: OW[4-7] ECC (from last 1/2 cacheline) is selected to
23631                                                             be conditionally latched into
23632                                                             the L2D_FSYN0/1 CSRs. */
23633        uint64_t ded_err                 : 1;       /**< L2D Double Error detected (DED) */
23634        uint64_t sec_err                 : 1;       /**< L2D Single Error corrected (SEC) */
23635        uint64_t ded_intena              : 1;       /**< L2 Data ECC Double Error Detect(DED) Interrupt Enable bit
23636                                                         When set, allows interrupts to be reported on double bit
23637                                                         (uncorrectable) errors from the L2 Data Arrays. */
23638        uint64_t sec_intena              : 1;       /**< L2 Data ECC Single Error Correct(SEC) Interrupt Enable bit
23639                                                         When set, allows interrupts to be reported on single bit
23640                                                         (correctable) errors from the L2 Data Arrays. */
23641        uint64_t ecc_ena                 : 1;       /**< L2 Data ECC Enable
23642                                                         When set, enables 10-bit SEC/DED codeword for 128bit L2
23643                                                         Data Arrays. */
23644#else
23645        uint64_t ecc_ena                 : 1;
23646        uint64_t sec_intena              : 1;
23647        uint64_t ded_intena              : 1;
23648        uint64_t sec_err                 : 1;
23649        uint64_t ded_err                 : 1;
23650        uint64_t bmhclsel                : 1;
23651        uint64_t reserved_6_63           : 58;
23652#endif
23653    } s;
23654    struct cvmx_l2d_err_s                cn30xx;
23655    struct cvmx_l2d_err_s                cn31xx;
23656    struct cvmx_l2d_err_s                cn38xx;
23657    struct cvmx_l2d_err_s                cn38xxp2;
23658    struct cvmx_l2d_err_s                cn50xx;
23659    struct cvmx_l2d_err_s                cn52xx;
23660    struct cvmx_l2d_err_s                cn52xxp1;
23661    struct cvmx_l2d_err_s                cn56xx;
23662    struct cvmx_l2d_err_s                cn56xxp1;
23663    struct cvmx_l2d_err_s                cn58xx;
23664    struct cvmx_l2d_err_s                cn58xxp1;
23665} cvmx_l2d_err_t;
23666
23667
23668/**
23669 * cvmx_l2d_fadr
23670 *
23671 * L2D_FADR = L2 Failing Address
23672 *
23673 * Description: L2 Data ECC SEC/DED Failing Address
23674 *
23675 * Notes:
23676 * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data store index.
23677 * (A DED Error will always overwrite a SEC Error SYNDROME and FADR).
23678 */
23679typedef union
23680{
23681    uint64_t u64;
23682    struct cvmx_l2d_fadr_s
23683    {
23684#if __BYTE_ORDER == __BIG_ENDIAN
23685        uint64_t reserved_19_63          : 45;
23686        uint64_t fadru                   : 1;       /**< Failing L2 Data Store Upper Index bit(MSB) */
23687        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23688                                                         error) */
23689        uint64_t fset                    : 3;       /**< Failing SET# */
23690        uint64_t fadr                    : 11;      /**< Failing L2 Data Store Lower Index bits
23691                                                         (NOTE: L2 Data Store Index is for each 1/2 cacheline)
23692                                                            [FADRU, FADR[10:1]]: cacheline index[17:7]
23693                                                            FADR[0]: 1/2 cacheline index
23694                                                         NOTE: FADR[1] is used to select between upper/lower 1MB
23695                                                         physical L2 Data Store banks. */
23696#else
23697        uint64_t fadr                    : 11;
23698        uint64_t fset                    : 3;
23699        uint64_t fowmsk                  : 4;
23700        uint64_t fadru                   : 1;
23701        uint64_t reserved_19_63          : 45;
23702#endif
23703    } s;
23704    struct cvmx_l2d_fadr_cn30xx
23705    {
23706#if __BYTE_ORDER == __BIG_ENDIAN
23707        uint64_t reserved_18_63          : 46;
23708        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23709                                                         error) */
23710        uint64_t reserved_13_13          : 1;
23711        uint64_t fset                    : 2;       /**< Failing SET# */
23712        uint64_t reserved_9_10           : 2;
23713        uint64_t fadr                    : 9;       /**< Failing L2 Data Store Index(1of512 = 1/2 CL address) */
23714#else
23715        uint64_t fadr                    : 9;
23716        uint64_t reserved_9_10           : 2;
23717        uint64_t fset                    : 2;
23718        uint64_t reserved_13_13          : 1;
23719        uint64_t fowmsk                  : 4;
23720        uint64_t reserved_18_63          : 46;
23721#endif
23722    } cn30xx;
23723    struct cvmx_l2d_fadr_cn31xx
23724    {
23725#if __BYTE_ORDER == __BIG_ENDIAN
23726        uint64_t reserved_18_63          : 46;
23727        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23728                                                         error) */
23729        uint64_t reserved_13_13          : 1;
23730        uint64_t fset                    : 2;       /**< Failing SET# */
23731        uint64_t reserved_10_10          : 1;
23732        uint64_t fadr                    : 10;      /**< Failing L2 Data Store Index
23733                                                         (1 of 1024 = half cacheline indices) */
23734#else
23735        uint64_t fadr                    : 10;
23736        uint64_t reserved_10_10          : 1;
23737        uint64_t fset                    : 2;
23738        uint64_t reserved_13_13          : 1;
23739        uint64_t fowmsk                  : 4;
23740        uint64_t reserved_18_63          : 46;
23741#endif
23742    } cn31xx;
23743    struct cvmx_l2d_fadr_cn38xx
23744    {
23745#if __BYTE_ORDER == __BIG_ENDIAN
23746        uint64_t reserved_18_63          : 46;
23747        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23748                                                         error) */
23749        uint64_t fset                    : 3;       /**< Failing SET# */
23750        uint64_t fadr                    : 11;      /**< Failing L2 Data Store Index (1of2K = 1/2 CL address) */
23751#else
23752        uint64_t fadr                    : 11;
23753        uint64_t fset                    : 3;
23754        uint64_t fowmsk                  : 4;
23755        uint64_t reserved_18_63          : 46;
23756#endif
23757    } cn38xx;
23758    struct cvmx_l2d_fadr_cn38xx          cn38xxp2;
23759    struct cvmx_l2d_fadr_cn50xx
23760    {
23761#if __BYTE_ORDER == __BIG_ENDIAN
23762        uint64_t reserved_18_63          : 46;
23763        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23764                                                         error) */
23765        uint64_t fset                    : 3;       /**< Failing SET# */
23766        uint64_t reserved_8_10           : 3;
23767        uint64_t fadr                    : 8;       /**< Failing L2 Data Store Lower Index bits
23768                                                         (NOTE: L2 Data Store Index is for each 1/2 cacheline)
23769                                                            FADR[7:1]: cacheline index[13:7]
23770                                                            FADR[0]: 1/2 cacheline index */
23771#else
23772        uint64_t fadr                    : 8;
23773        uint64_t reserved_8_10           : 3;
23774        uint64_t fset                    : 3;
23775        uint64_t fowmsk                  : 4;
23776        uint64_t reserved_18_63          : 46;
23777#endif
23778    } cn50xx;
23779    struct cvmx_l2d_fadr_cn52xx
23780    {
23781#if __BYTE_ORDER == __BIG_ENDIAN
23782        uint64_t reserved_18_63          : 46;
23783        uint64_t fowmsk                  : 4;       /**< Failing OW Mask (which one of 4 OWs contained SEC/DED
23784                                                         error) */
23785        uint64_t fset                    : 3;       /**< Failing SET# */
23786        uint64_t reserved_10_10          : 1;
23787        uint64_t fadr                    : 10;      /**< Failing L2 Data Store Lower Index bits
23788                                                         (NOTE: L2 Data Store Index is for each 1/2 cacheline)
23789                                                            FADR[9:1]: cacheline index[15:7]
23790                                                            FADR[0]: 1/2 cacheline index */
23791#else
23792        uint64_t fadr                    : 10;
23793        uint64_t reserved_10_10          : 1;
23794        uint64_t fset                    : 3;
23795        uint64_t fowmsk                  : 4;
23796        uint64_t reserved_18_63          : 46;
23797#endif
23798    } cn52xx;
23799    struct cvmx_l2d_fadr_cn52xx          cn52xxp1;
23800    struct cvmx_l2d_fadr_s               cn56xx;
23801    struct cvmx_l2d_fadr_s               cn56xxp1;
23802    struct cvmx_l2d_fadr_s               cn58xx;
23803    struct cvmx_l2d_fadr_s               cn58xxp1;
23804} cvmx_l2d_fadr_t;
23805
23806
23807/**
23808 * cvmx_l2d_fsyn0
23809 *
23810 * L2D_FSYN0 = L2 Failing Syndrome [OW0,4 / OW1,5]
23811 *
23812 * Description: L2 Data ECC SEC/DED Failing Syndrome for lower cache line
23813 *
23814 * Notes:
23815 * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data ECC 10b syndrome.
23816 * (A DED Error will always overwrite a SEC Error SYNDROME and FADR).
23817 */
23818typedef union
23819{
23820    uint64_t u64;
23821    struct cvmx_l2d_fsyn0_s
23822    {
23823#if __BYTE_ORDER == __BIG_ENDIAN
23824        uint64_t reserved_20_63          : 44;
23825        uint64_t fsyn_ow1                : 10;      /**< Failing L2 Data Store SYNDROME OW[1,5]
23826                                                         When L2D_ERR[ECC_ENA]=1 and either L2D_ERR[SEC_ERR]
23827                                                         or L2D_ERR[DED_ERR] are set, this field represents
23828                                                         the failing OWECC syndrome for the half cacheline
23829                                                         indexed by L2D_FADR[FADR].
23830                                                         NOTE: The L2D_FADR[FOWMSK] further qualifies which
23831                                                         OW lane(1of4) detected the error.
23832                                                         When L2C_DBG[L2T]=1 and L2D_ERR[ECC_ENA]=0, an LDD
23833                                                         command from the diagnostic PP will conditionally latch
23834                                                         the raw OWECC for the selected half cacheline.
23835                                                         (see: L2D_ERR[BMHCLSEL] */
23836        uint64_t fsyn_ow0                : 10;      /**< Failing L2 Data Store SYNDROME OW[0,4]
23837                                                         When L2D_ERR[ECC_ENA]=1 and either L2D_ERR[SEC_ERR]
23838                                                         or L2D_ERR[DED_ERR] are set, this field represents
23839                                                         the failing OWECC syndrome for the half cacheline
23840                                                         indexed by L2D_FADR[FADR].
23841                                                         NOTE: The L2D_FADR[FOWMSK] further qualifies which
23842                                                         OW lane(1of4) detected the error.
23843                                                         When L2C_DBG[L2T]=1 and L2D_ERR[ECC_ENA]=0, an LDD
23844                                                         (L1 load-miss) from the diagnostic PP will conditionally
23845                                                         latch the raw OWECC for the selected half cacheline.
23846                                                         (see: L2D_ERR[BMHCLSEL] */
23847#else
23848        uint64_t fsyn_ow0                : 10;
23849        uint64_t fsyn_ow1                : 10;
23850        uint64_t reserved_20_63          : 44;
23851#endif
23852    } s;
23853    struct cvmx_l2d_fsyn0_s              cn30xx;
23854    struct cvmx_l2d_fsyn0_s              cn31xx;
23855    struct cvmx_l2d_fsyn0_s              cn38xx;
23856    struct cvmx_l2d_fsyn0_s              cn38xxp2;
23857    struct cvmx_l2d_fsyn0_s              cn50xx;
23858    struct cvmx_l2d_fsyn0_s              cn52xx;
23859    struct cvmx_l2d_fsyn0_s              cn52xxp1;
23860    struct cvmx_l2d_fsyn0_s              cn56xx;
23861    struct cvmx_l2d_fsyn0_s              cn56xxp1;
23862    struct cvmx_l2d_fsyn0_s              cn58xx;
23863    struct cvmx_l2d_fsyn0_s              cn58xxp1;
23864} cvmx_l2d_fsyn0_t;
23865
23866
23867/**
23868 * cvmx_l2d_fsyn1
23869 *
23870 * L2D_FSYN1 = L2 Failing Syndrome [OW2,6 / OW3,7]
23871 *
23872 * Description: L2 Data ECC SEC/DED Failing Syndrome for upper cache line
23873 *
23874 * Notes:
23875 * When L2D_SEC_ERR or L2D_DED_ERR are set, this field contains the failing L2 Data ECC 10b syndrome.
23876 * (A DED Error will always overwrite a SEC Error SYNDROME and FADR).
23877 */
23878typedef union
23879{
23880    uint64_t u64;
23881    struct cvmx_l2d_fsyn1_s
23882    {
23883#if __BYTE_ORDER == __BIG_ENDIAN
23884        uint64_t reserved_20_63          : 44;
23885        uint64_t fsyn_ow3                : 10;      /**< Failing L2 Data Store SYNDROME OW[3,7] */
23886        uint64_t fsyn_ow2                : 10;      /**< Failing L2 Data Store SYNDROME OW[2,5] */
23887#else
23888        uint64_t fsyn_ow2                : 10;
23889        uint64_t fsyn_ow3                : 10;
23890        uint64_t reserved_20_63          : 44;
23891#endif
23892    } s;
23893    struct cvmx_l2d_fsyn1_s              cn30xx;
23894    struct cvmx_l2d_fsyn1_s              cn31xx;
23895    struct cvmx_l2d_fsyn1_s              cn38xx;
23896    struct cvmx_l2d_fsyn1_s              cn38xxp2;
23897    struct cvmx_l2d_fsyn1_s              cn50xx;
23898    struct cvmx_l2d_fsyn1_s              cn52xx;
23899    struct cvmx_l2d_fsyn1_s              cn52xxp1;
23900    struct cvmx_l2d_fsyn1_s              cn56xx;
23901    struct cvmx_l2d_fsyn1_s              cn56xxp1;
23902    struct cvmx_l2d_fsyn1_s              cn58xx;
23903    struct cvmx_l2d_fsyn1_s              cn58xxp1;
23904} cvmx_l2d_fsyn1_t;
23905
23906
23907/**
23908 * cvmx_l2d_fus0
23909 *
23910 * L2D_FUS0 = L2C Data Store QUAD0 Fuse Register
23911 *
23912 */
23913typedef union
23914{
23915    uint64_t u64;
23916    struct cvmx_l2d_fus0_s
23917    {
23918#if __BYTE_ORDER == __BIG_ENDIAN
23919        uint64_t reserved_34_63          : 30;
23920        uint64_t q0fus                   : 34;      /**< Fuse Register for QUAD0
23921                                                         This is purely for debug and not needed in the general
23922                                                         manufacturing flow.
23923                                                         Note that the fuse are complementary (Assigning a
23924                                                         fuse to 1 will read as a zero). This means the case
23925                                                         where no fuses are blown result in these csr's showing
23926                                                         all ones.
23927                                                          Failure \#1 Fuse Mapping
23928                                                             [16:14] bad bank
23929                                                             [13:7] bad high column
23930                                                             [6:0] bad low column
23931                                                           Failure \#2 Fuse Mapping
23932                                                             [33:31] bad bank
23933                                                             [30:24] bad high column
23934                                                             [23:17] bad low column */
23935#else
23936        uint64_t q0fus                   : 34;
23937        uint64_t reserved_34_63          : 30;
23938#endif
23939    } s;
23940    struct cvmx_l2d_fus0_s               cn30xx;
23941    struct cvmx_l2d_fus0_s               cn31xx;
23942    struct cvmx_l2d_fus0_s               cn38xx;
23943    struct cvmx_l2d_fus0_s               cn38xxp2;
23944    struct cvmx_l2d_fus0_s               cn50xx;
23945    struct cvmx_l2d_fus0_s               cn52xx;
23946    struct cvmx_l2d_fus0_s               cn52xxp1;
23947    struct cvmx_l2d_fus0_s               cn56xx;
23948    struct cvmx_l2d_fus0_s               cn56xxp1;
23949    struct cvmx_l2d_fus0_s               cn58xx;
23950    struct cvmx_l2d_fus0_s               cn58xxp1;
23951} cvmx_l2d_fus0_t;
23952
23953
23954/**
23955 * cvmx_l2d_fus1
23956 *
23957 * L2D_FUS1 = L2C Data Store QUAD1 Fuse Register
23958 *
23959 */
23960typedef union
23961{
23962    uint64_t u64;
23963    struct cvmx_l2d_fus1_s
23964    {
23965#if __BYTE_ORDER == __BIG_ENDIAN
23966        uint64_t reserved_34_63          : 30;
23967        uint64_t q1fus                   : 34;      /**< Fuse Register for QUAD1
23968                                                         This is purely for debug and not needed in the general
23969                                                         manufacturing flow.
23970                                                         Note that the fuse are complementary (Assigning a
23971                                                         fuse to 1 will read as a zero). This means the case
23972                                                         where no fuses are blown result in these csr's showing
23973                                                         all ones.
23974                                                          Failure \#1 Fuse Mapping
23975                                                             [16:14] bad bank
23976                                                             [13:7] bad high column
23977                                                             [6:0] bad low column
23978                                                           Failure \#2 Fuse Mapping
23979                                                             [33:31] bad bank
23980                                                             [30:24] bad high column
23981                                                             [23:17] bad low column */
23982#else
23983        uint64_t q1fus                   : 34;
23984        uint64_t reserved_34_63          : 30;
23985#endif
23986    } s;
23987    struct cvmx_l2d_fus1_s               cn30xx;
23988    struct cvmx_l2d_fus1_s               cn31xx;
23989    struct cvmx_l2d_fus1_s               cn38xx;
23990    struct cvmx_l2d_fus1_s               cn38xxp2;
23991    struct cvmx_l2d_fus1_s               cn50xx;
23992    struct cvmx_l2d_fus1_s               cn52xx;
23993    struct cvmx_l2d_fus1_s               cn52xxp1;
23994    struct cvmx_l2d_fus1_s               cn56xx;
23995    struct cvmx_l2d_fus1_s               cn56xxp1;
23996    struct cvmx_l2d_fus1_s               cn58xx;
23997    struct cvmx_l2d_fus1_s               cn58xxp1;
23998} cvmx_l2d_fus1_t;
23999
24000
24001/**
24002 * cvmx_l2d_fus2
24003 *
24004 * L2D_FUS2 = L2C Data Store QUAD2 Fuse Register
24005 *
24006 */
24007typedef union
24008{
24009    uint64_t u64;
24010    struct cvmx_l2d_fus2_s
24011    {
24012#if __BYTE_ORDER == __BIG_ENDIAN
24013        uint64_t reserved_34_63          : 30;
24014        uint64_t q2fus                   : 34;      /**< Fuse Register for QUAD2
24015                                                         This is purely for debug and not needed in the general
24016                                                         manufacturing flow.
24017                                                         Note that the fuse are complementary (Assigning a
24018                                                         fuse to 1 will read as a zero). This means the case
24019                                                         where no fuses are blown result in these csr's showing
24020                                                         all ones.
24021                                                          Failure \#1 Fuse Mapping
24022                                                             [16:14] bad bank
24023                                                             [13:7] bad high column
24024                                                             [6:0] bad low column
24025                                                           Failure \#2 Fuse Mapping
24026                                                             [33:31] bad bank
24027                                                             [30:24] bad high column
24028                                                             [23:17] bad low column */
24029#else
24030        uint64_t q2fus                   : 34;
24031        uint64_t reserved_34_63          : 30;
24032#endif
24033    } s;
24034    struct cvmx_l2d_fus2_s               cn30xx;
24035    struct cvmx_l2d_fus2_s               cn31xx;
24036    struct cvmx_l2d_fus2_s               cn38xx;
24037    struct cvmx_l2d_fus2_s               cn38xxp2;
24038    struct cvmx_l2d_fus2_s               cn50xx;
24039    struct cvmx_l2d_fus2_s               cn52xx;
24040    struct cvmx_l2d_fus2_s               cn52xxp1;
24041    struct cvmx_l2d_fus2_s               cn56xx;
24042    struct cvmx_l2d_fus2_s               cn56xxp1;
24043    struct cvmx_l2d_fus2_s               cn58xx;
24044    struct cvmx_l2d_fus2_s               cn58xxp1;
24045} cvmx_l2d_fus2_t;
24046
24047
24048/**
24049 * cvmx_l2d_fus3
24050 *
24051 * L2D_FUS3 = L2C Data Store QUAD3 Fuse Register
24052 *
24053 */
24054typedef union
24055{
24056    uint64_t u64;
24057    struct cvmx_l2d_fus3_s
24058    {
24059#if __BYTE_ORDER == __BIG_ENDIAN
24060        uint64_t reserved_40_63          : 24;
24061        uint64_t ema_ctl                 : 3;       /**< L2 Data Store EMA Control
24062                                                         These bits are used to 'observe' the EMA[1:0] inputs
24063                                                         for the L2 Data Store RAMs which are controlled by
24064                                                         either FUSES[141:140] or by MIO_FUSE_EMA[EMA] CSR.
24065                                                         From poweron (dc_ok), the EMA_CTL are driven from
24066                                                         FUSE[141:140]. However after the 1st CSR write to the
24067                                                         MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source
24068                                                         from the MIO_FUSE_EMA[EMA] register permanently
24069                                                         (until dc_ok).
24070                                                         NOTE: O9N Addition */
24071        uint64_t reserved_34_36          : 3;
24072        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24073                                                         This is purely for debug and not needed in the general
24074                                                         manufacturing flow.
24075                                                         Note that the fuses are complementary (Assigning a
24076                                                         fuse to 1 will read as a zero). This means the case
24077                                                         where no fuses are blown result in these csr's showing
24078                                                         all ones.
24079                                                          Failure \#1 Fuse Mapping
24080                                                             [16:14] bad bank
24081                                                             [13:7] bad high column
24082                                                             [6:0] bad low column
24083                                                           Failure \#2 Fuse Mapping
24084                                                             [33:31] bad bank
24085                                                             [30:24] bad high column
24086                                                             [23:17] bad low column */
24087#else
24088        uint64_t q3fus                   : 34;
24089        uint64_t reserved_34_36          : 3;
24090        uint64_t ema_ctl                 : 3;
24091        uint64_t reserved_40_63          : 24;
24092#endif
24093    } s;
24094    struct cvmx_l2d_fus3_cn30xx
24095    {
24096#if __BYTE_ORDER == __BIG_ENDIAN
24097        uint64_t reserved_35_63          : 29;
24098        uint64_t crip_64k                : 1;       /**< This is purely for debug and not needed in the general
24099                                                         manufacturing flow.
24100                                                         If the FUSE is not-blown, then this bit should read
24101                                                         as 0. If the FUSE is blown, then this bit should read
24102                                                         as 1. */
24103        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24104                                                         This is purely for debug and not needed in the general
24105                                                         manufacturing flow.
24106                                                         Note that the fuses are complementary (Assigning a
24107                                                         fuse to 1 will read as a zero). This means the case
24108                                                         where no fuses are blown result in these csr's showing
24109                                                         all ones.
24110                                                          Failure \#1 Fuse Mapping
24111                                                             [16:15] UNUSED
24112                                                             [14]    bad bank
24113                                                             [13:7] bad high column
24114                                                             [6:0] bad low column
24115                                                           Failure \#2 Fuse Mapping
24116                                                             [33:32] UNUSED
24117                                                             [31]    bad bank
24118                                                             [30:24] bad high column
24119                                                             [23:17] bad low column */
24120#else
24121        uint64_t q3fus                   : 34;
24122        uint64_t crip_64k                : 1;
24123        uint64_t reserved_35_63          : 29;
24124#endif
24125    } cn30xx;
24126    struct cvmx_l2d_fus3_cn31xx
24127    {
24128#if __BYTE_ORDER == __BIG_ENDIAN
24129        uint64_t reserved_35_63          : 29;
24130        uint64_t crip_128k               : 1;       /**< This is purely for debug and not needed in the general
24131                                                         manufacturing flow.
24132                                                         If the FUSE is not-blown, then this bit should read
24133                                                         as 0. If the FUSE is blown, then this bit should read
24134                                                         as 1. */
24135        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24136                                                         This is purely for debug and not needed in the general
24137                                                         manufacturing flow.
24138                                                         Note that the fuses are complementary (Assigning a
24139                                                         fuse to 1 will read as a zero). This means the case
24140                                                         where no fuses are blown result in these csr's showing
24141                                                         all ones.
24142                                                          Failure \#1 Fuse Mapping
24143                                                             [16:15] UNUSED
24144                                                             [14]    bad bank
24145                                                             [13:7] bad high column
24146                                                             [6:0] bad low column
24147                                                           Failure \#2 Fuse Mapping
24148                                                             [33:32] UNUSED
24149                                                             [31]    bad bank
24150                                                             [30:24] bad high column
24151                                                             [23:17] bad low column */
24152#else
24153        uint64_t q3fus                   : 34;
24154        uint64_t crip_128k               : 1;
24155        uint64_t reserved_35_63          : 29;
24156#endif
24157    } cn31xx;
24158    struct cvmx_l2d_fus3_cn38xx
24159    {
24160#if __BYTE_ORDER == __BIG_ENDIAN
24161        uint64_t reserved_36_63          : 28;
24162        uint64_t crip_256k               : 1;       /**< This is purely for debug and not needed in the general
24163                                                         manufacturing flow.
24164                                                         If the FUSE is not-blown, then this bit should read
24165                                                         as 0. If the FUSE is blown, then this bit should read
24166                                                         as 1.
24167                                                         *** NOTE: Pass2 Addition */
24168        uint64_t crip_512k               : 1;       /**< This is purely for debug and not needed in the general
24169                                                         manufacturing flow.
24170                                                         If the FUSE is not-blown, then this bit should read
24171                                                         as 0. If the FUSE is blown, then this bit should read
24172                                                         as 1.
24173                                                         *** NOTE: Pass2 Addition */
24174        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24175                                                         This is purely for debug and not needed in the general
24176                                                         manufacturing flow.
24177                                                         Note that the fuses are complementary (Assigning a
24178                                                         fuse to 1 will read as a zero). This means the case
24179                                                         where no fuses are blown result in these csr's showing
24180                                                         all ones.
24181                                                          Failure \#1 Fuse Mapping
24182                                                             [16:14] bad bank
24183                                                             [13:7] bad high column
24184                                                             [6:0] bad low column
24185                                                           Failure \#2 Fuse Mapping
24186                                                             [33:31] bad bank
24187                                                             [30:24] bad high column
24188                                                             [23:17] bad low column */
24189#else
24190        uint64_t q3fus                   : 34;
24191        uint64_t crip_512k               : 1;
24192        uint64_t crip_256k               : 1;
24193        uint64_t reserved_36_63          : 28;
24194#endif
24195    } cn38xx;
24196    struct cvmx_l2d_fus3_cn38xx          cn38xxp2;
24197    struct cvmx_l2d_fus3_cn50xx
24198    {
24199#if __BYTE_ORDER == __BIG_ENDIAN
24200        uint64_t reserved_40_63          : 24;
24201        uint64_t ema_ctl                 : 3;       /**< L2 Data Store EMA Control
24202                                                         These bits are used to 'observe' the EMA[2:0] inputs
24203                                                         for the L2 Data Store RAMs which are controlled by
24204                                                         either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR.
24205                                                         From poweron (dc_ok), the EMA_CTL are driven from
24206                                                         FUSE[141:140]. However after the 1st CSR write to the
24207                                                         MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source
24208                                                         from the MIO_FUSE_EMA[EMA] register permanently
24209                                                         (until dc_ok). */
24210        uint64_t reserved_36_36          : 1;
24211        uint64_t crip_32k                : 1;       /**< This is purely for debug and not needed in the general
24212                                                         manufacturing flow.
24213                                                         If the FUSE is not-blown, then this bit should read
24214                                                         as 0. If the FUSE is blown, then this bit should read
24215                                                         as 1. */
24216        uint64_t crip_64k                : 1;       /**< This is purely for debug and not needed in the general
24217                                                         manufacturing flow.
24218                                                         If the FUSE is not-blown, then this bit should read
24219                                                         as 0. If the FUSE is blown, then this bit should read
24220                                                         as 1. */
24221        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24222                                                         This is purely for debug and not needed in the general
24223                                                         manufacturing flow.
24224                                                         Note that the fuses are complementary (Assigning a
24225                                                         fuse to 1 will read as a zero). This means the case
24226                                                         where no fuses are blown result in these csr's showing
24227                                                         all ones.
24228                                                          Failure \#1 Fuse Mapping
24229                                                             [16:14] UNUSED (5020 uses single physical bank per quad)
24230                                                             [13:7] bad high column
24231                                                             [6:0] bad low column
24232                                                           Failure \#2 Fuse Mapping
24233                                                             [33:31] UNUSED (5020 uses single physical bank per quad)
24234                                                             [30:24] bad high column
24235                                                             [23:17] bad low column */
24236#else
24237        uint64_t q3fus                   : 34;
24238        uint64_t crip_64k                : 1;
24239        uint64_t crip_32k                : 1;
24240        uint64_t reserved_36_36          : 1;
24241        uint64_t ema_ctl                 : 3;
24242        uint64_t reserved_40_63          : 24;
24243#endif
24244    } cn50xx;
24245    struct cvmx_l2d_fus3_cn52xx
24246    {
24247#if __BYTE_ORDER == __BIG_ENDIAN
24248        uint64_t reserved_40_63          : 24;
24249        uint64_t ema_ctl                 : 3;       /**< L2 Data Store EMA Control
24250                                                         These bits are used to 'observe' the EMA[2:0] inputs
24251                                                         for the L2 Data Store RAMs which are controlled by
24252                                                         either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR.
24253                                                         From poweron (dc_ok), the EMA_CTL are driven from
24254                                                         FUSE[141:140]. However after the 1st CSR write to the
24255                                                         MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source
24256                                                         from the MIO_FUSE_EMA[EMA] register permanently
24257                                                         (until dc_ok). */
24258        uint64_t reserved_36_36          : 1;
24259        uint64_t crip_128k               : 1;       /**< This is purely for debug and not needed in the general
24260                                                         manufacturing flow.
24261                                                         If the FUSE is not-blown, then this bit should read
24262                                                         as 0. If the FUSE is blown, then this bit should read
24263                                                         as 1. */
24264        uint64_t crip_256k               : 1;       /**< This is purely for debug and not needed in the general
24265                                                         manufacturing flow.
24266                                                         If the FUSE is not-blown, then this bit should read
24267                                                         as 0. If the FUSE is blown, then this bit should read
24268                                                         as 1. */
24269        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24270                                                         This is purely for debug and not needed in the general
24271                                                         manufacturing flow.
24272                                                         Note that the fuses are complementary (Assigning a
24273                                                         fuse to 1 will read as a zero). This means the case
24274                                                         where no fuses are blown result in these csr's showing
24275                                                         all ones.
24276                                                          Failure \#1 Fuse Mapping
24277                                                             [16:14] UNUSED (5020 uses single physical bank per quad)
24278                                                             [13:7] bad high column
24279                                                             [6:0] bad low column
24280                                                           Failure \#2 Fuse Mapping
24281                                                             [33:31] UNUSED (5020 uses single physical bank per quad)
24282                                                             [30:24] bad high column
24283                                                             [23:17] bad low column */
24284#else
24285        uint64_t q3fus                   : 34;
24286        uint64_t crip_256k               : 1;
24287        uint64_t crip_128k               : 1;
24288        uint64_t reserved_36_36          : 1;
24289        uint64_t ema_ctl                 : 3;
24290        uint64_t reserved_40_63          : 24;
24291#endif
24292    } cn52xx;
24293    struct cvmx_l2d_fus3_cn52xx          cn52xxp1;
24294    struct cvmx_l2d_fus3_cn56xx
24295    {
24296#if __BYTE_ORDER == __BIG_ENDIAN
24297        uint64_t reserved_40_63          : 24;
24298        uint64_t ema_ctl                 : 3;       /**< L2 Data Store EMA Control
24299                                                         These bits are used to 'observe' the EMA[2:0] inputs
24300                                                         for the L2 Data Store RAMs which are controlled by
24301                                                         either FUSES[142:140] or by MIO_FUSE_EMA[EMA] CSR.
24302                                                         From poweron (dc_ok), the EMA_CTL are driven from
24303                                                         FUSE[141:140]. However after the 1st CSR write to the
24304                                                         MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source
24305                                                         from the MIO_FUSE_EMA[EMA] register permanently
24306                                                         (until dc_ok).
24307                                                         NOTE: O9N Addition */
24308        uint64_t reserved_36_36          : 1;
24309        uint64_t crip_512k               : 1;       /**< This is purely for debug and not needed in the general
24310                                                         manufacturing flow.
24311                                                         If the FUSE is not-blown, then this bit should read
24312                                                         as 0. If the FUSE is blown, then this bit should read
24313                                                         as 1.
24314                                                         *** NOTE: Pass2 Addition */
24315        uint64_t crip_1024k              : 1;       /**< This is purely for debug and not needed in the general
24316                                                         manufacturing flow.
24317                                                         If the FUSE is not-blown, then this bit should read
24318                                                         as 0. If the FUSE is blown, then this bit should read
24319                                                         as 1.
24320                                                         *** NOTE: Pass2 Addition */
24321        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24322                                                         This is purely for debug and not needed in the general
24323                                                         manufacturing flow.
24324                                                         Note that the fuses are complementary (Assigning a
24325                                                         fuse to 1 will read as a zero). This means the case
24326                                                         where no fuses are blown result in these csr's showing
24327                                                         all ones.
24328                                                          Failure \#1 Fuse Mapping
24329                                                             [16:14] bad bank
24330                                                             [13:7] bad high column
24331                                                             [6:0] bad low column
24332                                                           Failure \#2 Fuse Mapping
24333                                                             [33:31] bad bank
24334                                                             [30:24] bad high column
24335                                                             [23:17] bad low column */
24336#else
24337        uint64_t q3fus                   : 34;
24338        uint64_t crip_1024k              : 1;
24339        uint64_t crip_512k               : 1;
24340        uint64_t reserved_36_36          : 1;
24341        uint64_t ema_ctl                 : 3;
24342        uint64_t reserved_40_63          : 24;
24343#endif
24344    } cn56xx;
24345    struct cvmx_l2d_fus3_cn56xx          cn56xxp1;
24346    struct cvmx_l2d_fus3_cn58xx
24347    {
24348#if __BYTE_ORDER == __BIG_ENDIAN
24349        uint64_t reserved_39_63          : 25;
24350        uint64_t ema_ctl                 : 2;       /**< L2 Data Store EMA Control
24351                                                         These bits are used to 'observe' the EMA[1:0] inputs
24352                                                         for the L2 Data Store RAMs which are controlled by
24353                                                         either FUSES[141:140] or by MIO_FUSE_EMA[EMA] CSR.
24354                                                         From poweron (dc_ok), the EMA_CTL are driven from
24355                                                         FUSE[141:140]. However after the 1st CSR write to the
24356                                                         MIO_FUSE_EMA[EMA] bits, the EMA_CTL will source
24357                                                         from the MIO_FUSE_EMA[EMA] register permanently
24358                                                         (until dc_ok).
24359                                                         NOTE: O9N Addition */
24360        uint64_t reserved_36_36          : 1;
24361        uint64_t crip_512k               : 1;       /**< This is purely for debug and not needed in the general
24362                                                         manufacturing flow.
24363                                                         If the FUSE is not-blown, then this bit should read
24364                                                         as 0. If the FUSE is blown, then this bit should read
24365                                                         as 1.
24366                                                         *** NOTE: Pass2 Addition */
24367        uint64_t crip_1024k              : 1;       /**< This is purely for debug and not needed in the general
24368                                                         manufacturing flow.
24369                                                         If the FUSE is not-blown, then this bit should read
24370                                                         as 0. If the FUSE is blown, then this bit should read
24371                                                         as 1.
24372                                                         *** NOTE: Pass2 Addition */
24373        uint64_t q3fus                   : 34;      /**< Fuse Register for QUAD3
24374                                                         This is purely for debug and not needed in the general
24375                                                         manufacturing flow.
24376                                                         Note that the fuses are complementary (Assigning a
24377                                                         fuse to 1 will read as a zero). This means the case
24378                                                         where no fuses are blown result in these csr's showing
24379                                                         all ones.
24380                                                          Failure \#1 Fuse Mapping
24381                                                             [16:14] bad bank
24382                                                             [13:7] bad high column
24383                                                             [6:0] bad low column
24384                                                           Failure \#2 Fuse Mapping
24385                                                             [33:31] bad bank
24386                                                             [30:24] bad high column
24387                                                             [23:17] bad low column */
24388#else
24389        uint64_t q3fus                   : 34;
24390        uint64_t crip_1024k              : 1;
24391        uint64_t crip_512k               : 1;
24392        uint64_t reserved_36_36          : 1;
24393        uint64_t ema_ctl                 : 2;
24394        uint64_t reserved_39_63          : 25;
24395#endif
24396    } cn58xx;
24397    struct cvmx_l2d_fus3_cn58xx          cn58xxp1;
24398} cvmx_l2d_fus3_t;
24399
24400
24401/**
24402 * cvmx_l2t_err
24403 *
24404 * L2T_ERR = L2 Tag Errors
24405 *
24406 * Description: L2 Tag ECC SEC/DED Errors and Interrupt Enable
24407 */
24408typedef union
24409{
24410    uint64_t u64;
24411    struct cvmx_l2t_err_s
24412    {
24413#if __BYTE_ORDER == __BIG_ENDIAN
24414        uint64_t reserved_29_63          : 35;
24415        uint64_t fadru                   : 1;       /**< Failing L2 Tag Upper Address Bit (Index[10])
24416                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24417                                                         the FADRU contains the upper(MSB bit) cacheline index
24418                                                         into the L2 Tag Store. */
24419        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit
24420                                                         *** NOTE: PASS2 Addition */
24421        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24422                                                         could not find an available/unlocked set (for
24423                                                         replacement).
24424                                                         Most likely, this is a result of SW mixing SET
24425                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24426                                                         another PP to LOCKDOWN all SETs available to PP#n,
24427                                                         then a Rd/Wr Miss from PP#n will be unable
24428                                                         to determine a 'valid' replacement set (since LOCKED
24429                                                         addresses should NEVER be replaced).
24430                                                         If such an event occurs, the HW will select the smallest
24431                                                         available SET(specified by UMSK'x)' as the replacement
24432                                                         set, and the address is unlocked.
24433                                                         *** NOTE: PASS2 Addition */
24434        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24435        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24436                                                         the INDEX (which is ignored by HW - but reported to SW).
24437                                                         The LDD(L1 load-miss) for the LOCK operation is completed
24438                                                         successfully, however the address is NOT locked.
24439                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24440                                                         into account. For example, if diagnostic PPx has
24441                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24442                                                         been previously LOCKED, then an attempt to LOCK the
24443                                                         last available SET0 would result in a LCKERR. (This
24444                                                         is to ensure that at least 1 SET at each INDEX is
24445                                                         not LOCKED for general use by other PPs). */
24446        uint64_t fset                    : 3;       /**< Failing L2 Tag Hit Set# (1-of-8)
24447                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24448                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24449                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24450                                                         is specified by the L2C_DBG[SET]. */
24451        uint64_t fadr                    : 10;      /**< Failing L2 Tag Address (10-bit Index)
24452                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24453                                                         the FADR contains the lower 10bit cacheline index
24454                                                         into the L2 Tag Store. */
24455        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24456                                                         the contents of this register contain the 6-bit
24457                                                         syndrome for the hit set only.
24458                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24459                                                         the "non-hit" sets at the failing index(FADR).
24460                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24461                                                         is specified by the L2C_DBG[SET].
24462                                                         If (FSYN != 0), the SBE or DBE reported was for the
24463                                                         hit set at the failing index(FADR) and failing
24464                                                         set(FSET).
24465                                                         SW NOTE: To determine which "non-hit" set was in error,
24466                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24467                                                         read the other sets at the failing index(FADR). When
24468                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24469                                                         NOTE: A DED Error will always overwrite a SEC Error
24470                                                         SYNDROME and FADR). */
24471        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24472                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24473                                                         given index) are checked for double bit errors(DBEs).
24474                                                         This bit is set if ANY of the 8 sets contains a DBE.
24475                                                         DBEs also generated an interrupt(if enabled). */
24476        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24477                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24478                                                         given index) are checked for single bit errors(SBEs).
24479                                                         This bit is set if ANY of the 8 sets contains an SBE.
24480                                                         SBEs are auto corrected in HW and generate an
24481                                                         interrupt(if enabled). */
24482        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24483                                                         Enable bit. When set, allows interrupts to be
24484                                                         reported on double bit (uncorrectable) errors from
24485                                                         the L2 Tag Arrays. */
24486        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24487                                                         Enable bit. When set, allows interrupts to be
24488                                                         reported on single bit (correctable) errors from
24489                                                         the L2 Tag Arrays. */
24490        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24491                                                         When set, enables 6-bit SEC/DED codeword for 19-bit
24492                                                         L2 Tag Arrays [V,D,L,TAG[33:18]] */
24493#else
24494        uint64_t ecc_ena                 : 1;
24495        uint64_t sec_intena              : 1;
24496        uint64_t ded_intena              : 1;
24497        uint64_t sec_err                 : 1;
24498        uint64_t ded_err                 : 1;
24499        uint64_t fsyn                    : 6;
24500        uint64_t fadr                    : 10;
24501        uint64_t fset                    : 3;
24502        uint64_t lckerr                  : 1;
24503        uint64_t lck_intena              : 1;
24504        uint64_t lckerr2                 : 1;
24505        uint64_t lck_intena2             : 1;
24506        uint64_t fadru                   : 1;
24507        uint64_t reserved_29_63          : 35;
24508#endif
24509    } s;
24510    struct cvmx_l2t_err_cn30xx
24511    {
24512#if __BYTE_ORDER == __BIG_ENDIAN
24513        uint64_t reserved_28_63          : 36;
24514        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit */
24515        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24516                                                         could not find an available/unlocked set (for
24517                                                         replacement).
24518                                                         Most likely, this is a result of SW mixing SET
24519                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24520                                                         another PP to LOCKDOWN all SETs available to PP#n,
24521                                                         then a Rd/Wr Miss from PP#n will be unable
24522                                                         to determine a 'valid' replacement set (since LOCKED
24523                                                         addresses should NEVER be replaced).
24524                                                         If such an event occurs, the HW will select the smallest
24525                                                         available SET(specified by UMSK'x)' as the replacement
24526                                                         set, and the address is unlocked. */
24527        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24528        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24529                                                         the INDEX (which is ignored by HW - but reported to SW).
24530                                                         The LDD(L1 load-miss) for the LOCK operation is
24531                                                         completed successfully, however the address is NOT
24532                                                         locked.
24533                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24534                                                         into account. For example, if diagnostic PPx has
24535                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24536                                                         been previously LOCKED, then an attempt to LOCK the
24537                                                         last available SET0 would result in a LCKERR. (This
24538                                                         is to ensure that at least 1 SET at each INDEX is
24539                                                         not LOCKED for general use by other PPs). */
24540        uint64_t reserved_23_23          : 1;
24541        uint64_t fset                    : 2;       /**< Failing L2 Tag Hit Set# (1-of-4)
24542                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24543                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24544                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24545                                                         is specified by the L2C_DBG[SET]. */
24546        uint64_t reserved_19_20          : 2;
24547        uint64_t fadr                    : 8;       /**< Failing L2 Tag Store Index (8-bit)
24548                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24549                                                         the FADR contains the 8bit cacheline index into the
24550                                                         L2 Tag Store. */
24551        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24552                                                         the contents of this register contain the 6-bit
24553                                                         syndrome for the hit set only.
24554                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24555                                                         the "non-hit" sets at the failing index(FADR).
24556                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24557                                                         is specified by the L2C_DBG[SET].
24558                                                         If (FSYN != 0), the SBE or DBE reported was for the
24559                                                         hit set at the failing index(FADR) and failing
24560                                                         set(FSET).
24561                                                         SW NOTE: To determine which "non-hit" set was in error,
24562                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24563                                                         read the other sets at the failing index(FADR). When
24564                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24565                                                         NOTE: A DED Error will always overwrite a SEC Error
24566                                                         SYNDROME and FADR). */
24567        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24568                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24569                                                         given index) are checked for double bit errors(DBEs).
24570                                                         This bit is set if ANY of the 8 sets contains a DBE.
24571                                                         DBEs also generated an interrupt(if enabled). */
24572        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24573                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24574                                                         given index) are checked for single bit errors(SBEs).
24575                                                         This bit is set if ANY of the 8 sets contains an SBE.
24576                                                         SBEs are auto corrected in HW and generate an
24577                                                         interrupt(if enabled). */
24578        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24579                                                         Enable bit. When set, allows interrupts to be
24580                                                         reported on double bit (uncorrectable) errors from
24581                                                         the L2 Tag Arrays. */
24582        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24583                                                         Enable bit. When set, allows interrupts to be
24584                                                         reported on single bit (correctable) errors from
24585                                                         the L2 Tag Arrays. */
24586        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24587                                                         When set, enables 6-bit SEC/DED codeword for 22-bit
24588                                                         L2 Tag Arrays [V,D,L,TAG[33:15]] */
24589#else
24590        uint64_t ecc_ena                 : 1;
24591        uint64_t sec_intena              : 1;
24592        uint64_t ded_intena              : 1;
24593        uint64_t sec_err                 : 1;
24594        uint64_t ded_err                 : 1;
24595        uint64_t fsyn                    : 6;
24596        uint64_t fadr                    : 8;
24597        uint64_t reserved_19_20          : 2;
24598        uint64_t fset                    : 2;
24599        uint64_t reserved_23_23          : 1;
24600        uint64_t lckerr                  : 1;
24601        uint64_t lck_intena              : 1;
24602        uint64_t lckerr2                 : 1;
24603        uint64_t lck_intena2             : 1;
24604        uint64_t reserved_28_63          : 36;
24605#endif
24606    } cn30xx;
24607    struct cvmx_l2t_err_cn31xx
24608    {
24609#if __BYTE_ORDER == __BIG_ENDIAN
24610        uint64_t reserved_28_63          : 36;
24611        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit */
24612        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24613                                                         could not find an available/unlocked set (for
24614                                                         replacement).
24615                                                         Most likely, this is a result of SW mixing SET
24616                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24617                                                         another PP to LOCKDOWN all SETs available to PP#n,
24618                                                         then a Rd/Wr Miss from PP#n will be unable
24619                                                         to determine a 'valid' replacement set (since LOCKED
24620                                                         addresses should NEVER be replaced).
24621                                                         If such an event occurs, the HW will select the smallest
24622                                                         available SET(specified by UMSK'x)' as the replacement
24623                                                         set, and the address is unlocked. */
24624        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24625        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24626                                                         the INDEX (which is ignored by HW - but reported to SW).
24627                                                         The LDD(L1 load-miss) for the LOCK operation is completed
24628                                                         successfully, however the address is NOT locked.
24629                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24630                                                         into account. For example, if diagnostic PPx has
24631                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24632                                                         been previously LOCKED, then an attempt to LOCK the
24633                                                         last available SET0 would result in a LCKERR. (This
24634                                                         is to ensure that at least 1 SET at each INDEX is
24635                                                         not LOCKED for general use by other PPs). */
24636        uint64_t reserved_23_23          : 1;
24637        uint64_t fset                    : 2;       /**< Failing L2 Tag Hit Set# (1-of-4)
24638                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24639                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24640                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24641                                                         is specified by the L2C_DBG[SET]. */
24642        uint64_t reserved_20_20          : 1;
24643        uint64_t fadr                    : 9;       /**< Failing L2 Tag Address (9-bit Index)
24644                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24645                                                         the FADR contains the 9-bit cacheline index into the
24646                                                         L2 Tag Store. */
24647        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24648                                                         the contents of this register contain the 6-bit
24649                                                         syndrome for the hit set only.
24650                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24651                                                         the "non-hit" sets at the failing index(FADR).
24652                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24653                                                         is specified by the L2C_DBG[SET].
24654                                                         If (FSYN != 0), the SBE or DBE reported was for the
24655                                                         hit set at the failing index(FADR) and failing
24656                                                         set(FSET).
24657                                                         SW NOTE: To determine which "non-hit" set was in error,
24658                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24659                                                         read the other sets at the failing index(FADR). When
24660                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24661                                                         NOTE: A DED Error will always overwrite a SEC Error
24662                                                         SYNDROME and FADR). */
24663        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24664                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24665                                                         given index) are checked for double bit errors(DBEs).
24666                                                         This bit is set if ANY of the 8 sets contains a DBE.
24667                                                         DBEs also generated an interrupt(if enabled). */
24668        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24669                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24670                                                         given index) are checked for single bit errors(SBEs).
24671                                                         This bit is set if ANY of the 8 sets contains an SBE.
24672                                                         SBEs are auto corrected in HW and generate an
24673                                                         interrupt(if enabled). */
24674        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24675                                                         Enable bit. When set, allows interrupts to be
24676                                                         reported on double bit (uncorrectable) errors from
24677                                                         the L2 Tag Arrays. */
24678        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24679                                                         Enable bit. When set, allows interrupts to be
24680                                                         reported on single bit (correctable) errors from
24681                                                         the L2 Tag Arrays. */
24682        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24683                                                         When set, enables 6-bit SEC/DED codeword for 21-bit
24684                                                         L2 Tag Arrays [V,D,L,TAG[33:16]] */
24685#else
24686        uint64_t ecc_ena                 : 1;
24687        uint64_t sec_intena              : 1;
24688        uint64_t ded_intena              : 1;
24689        uint64_t sec_err                 : 1;
24690        uint64_t ded_err                 : 1;
24691        uint64_t fsyn                    : 6;
24692        uint64_t fadr                    : 9;
24693        uint64_t reserved_20_20          : 1;
24694        uint64_t fset                    : 2;
24695        uint64_t reserved_23_23          : 1;
24696        uint64_t lckerr                  : 1;
24697        uint64_t lck_intena              : 1;
24698        uint64_t lckerr2                 : 1;
24699        uint64_t lck_intena2             : 1;
24700        uint64_t reserved_28_63          : 36;
24701#endif
24702    } cn31xx;
24703    struct cvmx_l2t_err_cn38xx
24704    {
24705#if __BYTE_ORDER == __BIG_ENDIAN
24706        uint64_t reserved_28_63          : 36;
24707        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit
24708                                                         *** NOTE: PASS2 Addition */
24709        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24710                                                         could not find an available/unlocked set (for
24711                                                         replacement).
24712                                                         Most likely, this is a result of SW mixing SET
24713                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24714                                                         another PP to LOCKDOWN all SETs available to PP#n,
24715                                                         then a Rd/Wr Miss from PP#n will be unable
24716                                                         to determine a 'valid' replacement set (since LOCKED
24717                                                         addresses should NEVER be replaced).
24718                                                         If such an event occurs, the HW will select the smallest
24719                                                         available SET(specified by UMSK'x)' as the replacement
24720                                                         set, and the address is unlocked.
24721                                                         *** NOTE: PASS2 Addition */
24722        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24723        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24724                                                         the INDEX (which is ignored by HW - but reported to SW).
24725                                                         The LDD(L1 load-miss) for the LOCK operation is completed
24726                                                         successfully, however the address is NOT locked.
24727                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24728                                                         into account. For example, if diagnostic PPx has
24729                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24730                                                         been previously LOCKED, then an attempt to LOCK the
24731                                                         last available SET0 would result in a LCKERR. (This
24732                                                         is to ensure that at least 1 SET at each INDEX is
24733                                                         not LOCKED for general use by other PPs). */
24734        uint64_t fset                    : 3;       /**< Failing L2 Tag Hit Set# (1-of-8)
24735                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24736                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24737                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24738                                                         is specified by the L2C_DBG[SET]. */
24739        uint64_t fadr                    : 10;      /**< Failing L2 Tag Address (10-bit Index)
24740                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24741                                                         the FADR contains the 10bit cacheline index into the
24742                                                         L2 Tag Store. */
24743        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24744                                                         the contents of this register contain the 6-bit
24745                                                         syndrome for the hit set only.
24746                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24747                                                         the "non-hit" sets at the failing index(FADR).
24748                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24749                                                         is specified by the L2C_DBG[SET].
24750                                                         If (FSYN != 0), the SBE or DBE reported was for the
24751                                                         hit set at the failing index(FADR) and failing
24752                                                         set(FSET).
24753                                                         SW NOTE: To determine which "non-hit" set was in error,
24754                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24755                                                         read the other sets at the failing index(FADR). When
24756                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24757                                                         NOTE: A DED Error will always overwrite a SEC Error
24758                                                         SYNDROME and FADR). */
24759        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24760                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24761                                                         given index) are checked for double bit errors(DBEs).
24762                                                         This bit is set if ANY of the 8 sets contains a DBE.
24763                                                         DBEs also generated an interrupt(if enabled). */
24764        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24765                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24766                                                         given index) are checked for single bit errors(SBEs).
24767                                                         This bit is set if ANY of the 8 sets contains an SBE.
24768                                                         SBEs are auto corrected in HW and generate an
24769                                                         interrupt(if enabled). */
24770        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24771                                                         Enable bit. When set, allows interrupts to be
24772                                                         reported on double bit (uncorrectable) errors from
24773                                                         the L2 Tag Arrays. */
24774        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24775                                                         Enable bit. When set, allows interrupts to be
24776                                                         reported on single bit (correctable) errors from
24777                                                         the L2 Tag Arrays. */
24778        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24779                                                         When set, enables 6-bit SEC/DED codeword for 20-bit
24780                                                         L2 Tag Arrays [V,D,L,TAG[33:17]] */
24781#else
24782        uint64_t ecc_ena                 : 1;
24783        uint64_t sec_intena              : 1;
24784        uint64_t ded_intena              : 1;
24785        uint64_t sec_err                 : 1;
24786        uint64_t ded_err                 : 1;
24787        uint64_t fsyn                    : 6;
24788        uint64_t fadr                    : 10;
24789        uint64_t fset                    : 3;
24790        uint64_t lckerr                  : 1;
24791        uint64_t lck_intena              : 1;
24792        uint64_t lckerr2                 : 1;
24793        uint64_t lck_intena2             : 1;
24794        uint64_t reserved_28_63          : 36;
24795#endif
24796    } cn38xx;
24797    struct cvmx_l2t_err_cn38xx           cn38xxp2;
24798    struct cvmx_l2t_err_cn50xx
24799    {
24800#if __BYTE_ORDER == __BIG_ENDIAN
24801        uint64_t reserved_28_63          : 36;
24802        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit */
24803        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24804                                                         could not find an available/unlocked set (for
24805                                                         replacement).
24806                                                         Most likely, this is a result of SW mixing SET
24807                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24808                                                         another PP to LOCKDOWN all SETs available to PP#n,
24809                                                         then a Rd/Wr Miss from PP#n will be unable
24810                                                         to determine a 'valid' replacement set (since LOCKED
24811                                                         addresses should NEVER be replaced).
24812                                                         If such an event occurs, the HW will select the smallest
24813                                                         available SET(specified by UMSK'x)' as the replacement
24814                                                         set, and the address is unlocked. */
24815        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24816        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24817                                                         the INDEX (which is ignored by HW - but reported to SW).
24818                                                         The LDD(L1 load-miss) for the LOCK operation is completed
24819                                                         successfully, however the address is NOT locked.
24820                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24821                                                         into account. For example, if diagnostic PPx has
24822                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24823                                                         been previously LOCKED, then an attempt to LOCK the
24824                                                         last available SET0 would result in a LCKERR. (This
24825                                                         is to ensure that at least 1 SET at each INDEX is
24826                                                         not LOCKED for general use by other PPs). */
24827        uint64_t fset                    : 3;       /**< Failing L2 Tag Hit Set# (1-of-8)
24828                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24829                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24830                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24831                                                         is specified by the L2C_DBG[SET]. */
24832        uint64_t reserved_18_20          : 3;
24833        uint64_t fadr                    : 7;       /**< Failing L2 Tag Address (7-bit Index)
24834                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24835                                                         the FADR contains the lower 7bit cacheline index
24836                                                         into the L2 Tag Store. */
24837        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24838                                                         the contents of this register contain the 6-bit
24839                                                         syndrome for the hit set only.
24840                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24841                                                         the "non-hit" sets at the failing index(FADR).
24842                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24843                                                         is specified by the L2C_DBG[SET].
24844                                                         If (FSYN != 0), the SBE or DBE reported was for the
24845                                                         hit set at the failing index(FADR) and failing
24846                                                         set(FSET).
24847                                                         SW NOTE: To determine which "non-hit" set was in error,
24848                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24849                                                         read the other sets at the failing index(FADR). When
24850                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24851                                                         NOTE: A DED Error will always overwrite a SEC Error
24852                                                         SYNDROME and FADR). */
24853        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24854                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24855                                                         given index) are checked for double bit errors(DBEs).
24856                                                         This bit is set if ANY of the 8 sets contains a DBE.
24857                                                         DBEs also generated an interrupt(if enabled). */
24858        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24859                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24860                                                         given index) are checked for single bit errors(SBEs).
24861                                                         This bit is set if ANY of the 8 sets contains an SBE.
24862                                                         SBEs are auto corrected in HW and generate an
24863                                                         interrupt(if enabled). */
24864        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24865                                                         Enable bit. When set, allows interrupts to be
24866                                                         reported on double bit (uncorrectable) errors from
24867                                                         the L2 Tag Arrays. */
24868        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24869                                                         Enable bit. When set, allows interrupts to be
24870                                                         reported on single bit (correctable) errors from
24871                                                         the L2 Tag Arrays. */
24872        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24873                                                         When set, enables 6-bit SEC/DED codeword for 23-bit
24874                                                         L2 Tag Arrays [V,D,L,TAG[33:14]] */
24875#else
24876        uint64_t ecc_ena                 : 1;
24877        uint64_t sec_intena              : 1;
24878        uint64_t ded_intena              : 1;
24879        uint64_t sec_err                 : 1;
24880        uint64_t ded_err                 : 1;
24881        uint64_t fsyn                    : 6;
24882        uint64_t fadr                    : 7;
24883        uint64_t reserved_18_20          : 3;
24884        uint64_t fset                    : 3;
24885        uint64_t lckerr                  : 1;
24886        uint64_t lck_intena              : 1;
24887        uint64_t lckerr2                 : 1;
24888        uint64_t lck_intena2             : 1;
24889        uint64_t reserved_28_63          : 36;
24890#endif
24891    } cn50xx;
24892    struct cvmx_l2t_err_cn52xx
24893    {
24894#if __BYTE_ORDER == __BIG_ENDIAN
24895        uint64_t reserved_28_63          : 36;
24896        uint64_t lck_intena2             : 1;       /**< L2 Tag Lock Error2 Interrupt Enable bit */
24897        uint64_t lckerr2                 : 1;       /**< HW detected a case where a Rd/Wr Miss from PP#n
24898                                                         could not find an available/unlocked set (for
24899                                                         replacement).
24900                                                         Most likely, this is a result of SW mixing SET
24901                                                         PARTITIONING with ADDRESS LOCKING. If SW allows
24902                                                         another PP to LOCKDOWN all SETs available to PP#n,
24903                                                         then a Rd/Wr Miss from PP#n will be unable
24904                                                         to determine a 'valid' replacement set (since LOCKED
24905                                                         addresses should NEVER be replaced).
24906                                                         If such an event occurs, the HW will select the smallest
24907                                                         available SET(specified by UMSK'x)' as the replacement
24908                                                         set, and the address is unlocked. */
24909        uint64_t lck_intena              : 1;       /**< L2 Tag Lock Error Interrupt Enable bit */
24910        uint64_t lckerr                  : 1;       /**< SW attempted to LOCK DOWN the last available set of
24911                                                         the INDEX (which is ignored by HW - but reported to SW).
24912                                                         The LDD(L1 load-miss) for the LOCK operation is completed
24913                                                         successfully, however the address is NOT locked.
24914                                                         NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
24915                                                         into account. For example, if diagnostic PPx has
24916                                                         UMSKx defined to only use SETs [1:0], and SET1 had
24917                                                         been previously LOCKED, then an attempt to LOCK the
24918                                                         last available SET0 would result in a LCKERR. (This
24919                                                         is to ensure that at least 1 SET at each INDEX is
24920                                                         not LOCKED for general use by other PPs). */
24921        uint64_t fset                    : 3;       /**< Failing L2 Tag Hit Set# (1-of-8)
24922                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set and
24923                                                         (FSYN != 0), the FSET specifies the failing hit-set.
24924                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit-set
24925                                                         is specified by the L2C_DBG[SET]. */
24926        uint64_t reserved_20_20          : 1;
24927        uint64_t fadr                    : 9;       /**< Failing L2 Tag Address (9-bit Index)
24928                                                         When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24929                                                         the FADR contains the lower 9bit cacheline index
24930                                                         into the L2 Tag Store. */
24931        uint64_t fsyn                    : 6;       /**< When L2T_ERR[SEC_ERR] or L2T_ERR[DED_ERR] are set,
24932                                                         the contents of this register contain the 6-bit
24933                                                         syndrome for the hit set only.
24934                                                         If (FSYN = 0), the SBE or DBE reported was for one of
24935                                                         the "non-hit" sets at the failing index(FADR).
24936                                                         NOTE: During a force-hit (L2T/L2D/L2T=1), the hit set
24937                                                         is specified by the L2C_DBG[SET].
24938                                                         If (FSYN != 0), the SBE or DBE reported was for the
24939                                                         hit set at the failing index(FADR) and failing
24940                                                         set(FSET).
24941                                                         SW NOTE: To determine which "non-hit" set was in error,
24942                                                         SW can use the L2C_DBG[L2T] debug feature to explicitly
24943                                                         read the other sets at the failing index(FADR). When
24944                                                         (FSYN !=0), then the FSET contains the failing hit-set.
24945                                                         NOTE: A DED Error will always overwrite a SEC Error
24946                                                         SYNDROME and FADR). */
24947        uint64_t ded_err                 : 1;       /**< L2T Double Bit Error detected (DED)
24948                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24949                                                         given index) are checked for double bit errors(DBEs).
24950                                                         This bit is set if ANY of the 8 sets contains a DBE.
24951                                                         DBEs also generated an interrupt(if enabled). */
24952        uint64_t sec_err                 : 1;       /**< L2T Single Bit Error corrected (SEC)
24953                                                         During every L2 Tag Probe, all 8 sets Tag's (at a
24954                                                         given index) are checked for single bit errors(SBEs).
24955                                                         This bit is set if ANY of the 8 sets contains an SBE.
24956                                                         SBEs are auto corrected in HW and generate an
24957                                                         interrupt(if enabled). */
24958        uint64_t ded_intena              : 1;       /**< L2 Tag ECC Double Error Detect(DED) Interrupt
24959                                                         Enable bit. When set, allows interrupts to be
24960                                                         reported on double bit (uncorrectable) errors from
24961                                                         the L2 Tag Arrays. */
24962        uint64_t sec_intena              : 1;       /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
24963                                                         Enable bit. When set, allows interrupts to be
24964                                                         reported on single bit (correctable) errors from
24965                                                         the L2 Tag Arrays. */
24966        uint64_t ecc_ena                 : 1;       /**< L2 Tag ECC Enable
24967                                                         When set, enables 6-bit SEC/DED codeword for 21-bit
24968                                                         L2 Tag Arrays [V,D,L,TAG[33:16]] */
24969#else
24970        uint64_t ecc_ena                 : 1;
24971        uint64_t sec_intena              : 1;
24972        uint64_t ded_intena              : 1;
24973        uint64_t sec_err                 : 1;
24974        uint64_t ded_err                 : 1;
24975        uint64_t fsyn                    : 6;
24976        uint64_t fadr                    : 9;
24977        uint64_t reserved_20_20          : 1;
24978        uint64_t fset                    : 3;
24979        uint64_t lckerr                  : 1;
24980        uint64_t lck_intena              : 1;
24981        uint64_t lckerr2                 : 1;
24982        uint64_t lck_intena2             : 1;
24983        uint64_t reserved_28_63          : 36;
24984#endif
24985    } cn52xx;
24986    struct cvmx_l2t_err_cn52xx           cn52xxp1;
24987    struct cvmx_l2t_err_s                cn56xx;
24988    struct cvmx_l2t_err_s                cn56xxp1;
24989    struct cvmx_l2t_err_s                cn58xx;
24990    struct cvmx_l2t_err_s                cn58xxp1;
24991} cvmx_l2t_err_t;
24992
24993
24994/**
24995 * cvmx_led_blink
24996 *
24997 * LED_BLINK = LED Blink Rate (in led_clks)
24998 *
24999 */
25000typedef union
25001{
25002    uint64_t u64;
25003    struct cvmx_led_blink_s
25004    {
25005#if __BYTE_ORDER == __BIG_ENDIAN
25006        uint64_t reserved_8_63           : 56;
25007        uint64_t rate                    : 8;       /**< LED Blink rate in led_latch clks
25008                                                         RATE must be > 0 */
25009#else
25010        uint64_t rate                    : 8;
25011        uint64_t reserved_8_63           : 56;
25012#endif
25013    } s;
25014    struct cvmx_led_blink_s              cn38xx;
25015    struct cvmx_led_blink_s              cn38xxp2;
25016    struct cvmx_led_blink_s              cn56xx;
25017    struct cvmx_led_blink_s              cn56xxp1;
25018    struct cvmx_led_blink_s              cn58xx;
25019    struct cvmx_led_blink_s              cn58xxp1;
25020} cvmx_led_blink_t;
25021
25022
25023/**
25024 * cvmx_led_clk_phase
25025 *
25026 * LED_CLK_PHASE = LED Clock Phase (in 64 eclks)
25027 *
25028 *
25029 * Notes:
25030 * Example:
25031 * Given a 2ns eclk, an LED_CLK_PHASE[PHASE] = 1, indicates that each
25032 * led_clk phase is 64 eclks, or 128ns.  The led_clk period is 2*phase,
25033 * or 256ns which is 3.9MHz.  The default value of 4, yields an led_clk
25034 * period of 64*4*2ns*2 = 1024ns or ~1MHz (977KHz).
25035 */
25036typedef union
25037{
25038    uint64_t u64;
25039    struct cvmx_led_clk_phase_s
25040    {
25041#if __BYTE_ORDER == __BIG_ENDIAN
25042        uint64_t reserved_7_63           : 57;
25043        uint64_t phase                   : 7;       /**< Number of 64 eclks in order to create the led_clk */
25044#else
25045        uint64_t phase                   : 7;
25046        uint64_t reserved_7_63           : 57;
25047#endif
25048    } s;
25049    struct cvmx_led_clk_phase_s          cn38xx;
25050    struct cvmx_led_clk_phase_s          cn38xxp2;
25051    struct cvmx_led_clk_phase_s          cn56xx;
25052    struct cvmx_led_clk_phase_s          cn56xxp1;
25053    struct cvmx_led_clk_phase_s          cn58xx;
25054    struct cvmx_led_clk_phase_s          cn58xxp1;
25055} cvmx_led_clk_phase_t;
25056
25057
25058/**
25059 * cvmx_led_cylon
25060 *
25061 * LED_CYLON = LED CYLON Effect (should remain undocumented)
25062 *
25063 */
25064typedef union
25065{
25066    uint64_t u64;
25067    struct cvmx_led_cylon_s
25068    {
25069#if __BYTE_ORDER == __BIG_ENDIAN
25070        uint64_t reserved_16_63          : 48;
25071        uint64_t rate                    : 16;      /**< LED Cylon Effect when RATE!=0
25072                                                         Changes at RATE*LATCH period */
25073#else
25074        uint64_t rate                    : 16;
25075        uint64_t reserved_16_63          : 48;
25076#endif
25077    } s;
25078    struct cvmx_led_cylon_s              cn38xx;
25079    struct cvmx_led_cylon_s              cn38xxp2;
25080    struct cvmx_led_cylon_s              cn56xx;
25081    struct cvmx_led_cylon_s              cn56xxp1;
25082    struct cvmx_led_cylon_s              cn58xx;
25083    struct cvmx_led_cylon_s              cn58xxp1;
25084} cvmx_led_cylon_t;
25085
25086
25087/**
25088 * cvmx_led_dbg
25089 *
25090 * LED_DBG = LED Debug Port information
25091 *
25092 */
25093typedef union
25094{
25095    uint64_t u64;
25096    struct cvmx_led_dbg_s
25097    {
25098#if __BYTE_ORDER == __BIG_ENDIAN
25099        uint64_t reserved_1_63           : 63;
25100        uint64_t dbg_en                  : 1;       /**< Add Debug Port Data to the LED shift chain
25101                                                         Debug Data is shifted out LSB to MSB */
25102#else
25103        uint64_t dbg_en                  : 1;
25104        uint64_t reserved_1_63           : 63;
25105#endif
25106    } s;
25107    struct cvmx_led_dbg_s                cn38xx;
25108    struct cvmx_led_dbg_s                cn38xxp2;
25109    struct cvmx_led_dbg_s                cn56xx;
25110    struct cvmx_led_dbg_s                cn56xxp1;
25111    struct cvmx_led_dbg_s                cn58xx;
25112    struct cvmx_led_dbg_s                cn58xxp1;
25113} cvmx_led_dbg_t;
25114
25115
25116/**
25117 * cvmx_led_en
25118 *
25119 * LED_EN = LED Interface Enable
25120 *
25121 *
25122 * Notes:
25123 * The LED interface is comprised of a shift chain with a parallel latch.  LED
25124 * data is shifted out on each fallingg edge of led_clk and then captured by
25125 * led_lat.
25126 *
25127 * The LED shift chain is comprised of the following...
25128 *
25129 *      32  - UDD header
25130 *      6x8 - per port status
25131 *      17  - debug port
25132 *      32  - UDD trailer
25133 *
25134 * for a total of 129 bits.
25135 *
25136 * UDD header is programmable from 0-32 bits (LED_UDD_CNT0) and will shift out
25137 * LSB to MSB (LED_UDD_DAT0[0], LED_UDD_DAT0[1],
25138 * ... LED_UDD_DAT0[LED_UDD_CNT0].
25139 *
25140 * The per port status is also variable.  Systems can control which ports send
25141 * data (LED_PRT) as well as the status content (LED_PRT_FMT and
25142 * LED_PRT_STATUS*).  When multiple ports are enabled, they come out in lowest
25143 * port to highest port (prt0, prt1, ...).
25144 *
25145 * The debug port data can also be added to the LED chain (LED_DBG).  When
25146 * enabled, the debug data shifts out LSB to MSB.
25147 *
25148 * The UDD trailer data is identical to the header data, but uses LED_UDD_CNT1
25149 * and LED_UDD_DAT1.
25150 */
25151typedef union
25152{
25153    uint64_t u64;
25154    struct cvmx_led_en_s
25155    {
25156#if __BYTE_ORDER == __BIG_ENDIAN
25157        uint64_t reserved_1_63           : 63;
25158        uint64_t en                      : 1;       /**< Enable the LED interface shift-chain */
25159#else
25160        uint64_t en                      : 1;
25161        uint64_t reserved_1_63           : 63;
25162#endif
25163    } s;
25164    struct cvmx_led_en_s                 cn38xx;
25165    struct cvmx_led_en_s                 cn38xxp2;
25166    struct cvmx_led_en_s                 cn56xx;
25167    struct cvmx_led_en_s                 cn56xxp1;
25168    struct cvmx_led_en_s                 cn58xx;
25169    struct cvmx_led_en_s                 cn58xxp1;
25170} cvmx_led_en_t;
25171
25172
25173/**
25174 * cvmx_led_polarity
25175 *
25176 * LED_POLARITY = LED Polarity
25177 *
25178 */
25179typedef union
25180{
25181    uint64_t u64;
25182    struct cvmx_led_polarity_s
25183    {
25184#if __BYTE_ORDER == __BIG_ENDIAN
25185        uint64_t reserved_1_63           : 63;
25186        uint64_t polarity                : 1;       /**< LED active polarity
25187                                                         0 = active HIGH LED
25188                                                         1 = active LOW LED (invert led_dat) */
25189#else
25190        uint64_t polarity                : 1;
25191        uint64_t reserved_1_63           : 63;
25192#endif
25193    } s;
25194    struct cvmx_led_polarity_s           cn38xx;
25195    struct cvmx_led_polarity_s           cn38xxp2;
25196    struct cvmx_led_polarity_s           cn56xx;
25197    struct cvmx_led_polarity_s           cn56xxp1;
25198    struct cvmx_led_polarity_s           cn58xx;
25199    struct cvmx_led_polarity_s           cn58xxp1;
25200} cvmx_led_polarity_t;
25201
25202
25203/**
25204 * cvmx_led_prt
25205 *
25206 * LED_PRT = LED Port status information
25207 *
25208 *
25209 * Notes:
25210 * Note:
25211 * the PRT vector enables information of the 8 RGMII ports connected to
25212 * Octane.  It does not reflect the actual programmed PHY addresses.
25213 */
25214typedef union
25215{
25216    uint64_t u64;
25217    struct cvmx_led_prt_s
25218    {
25219#if __BYTE_ORDER == __BIG_ENDIAN
25220        uint64_t reserved_8_63           : 56;
25221        uint64_t prt_en                  : 8;       /**< Which ports are enabled to display status
25222                                                         PRT_EN<3:0> coresponds to RGMII ports 3-0 on int0
25223                                                         PRT_EN<7:4> coresponds to RGMII ports 7-4 on int1
25224                                                         Only applies when interface is in RGMII mode
25225                                                         The status format is defined by LED_PRT_FMT */
25226#else
25227        uint64_t prt_en                  : 8;
25228        uint64_t reserved_8_63           : 56;
25229#endif
25230    } s;
25231    struct cvmx_led_prt_s                cn38xx;
25232    struct cvmx_led_prt_s                cn38xxp2;
25233    struct cvmx_led_prt_s                cn56xx;
25234    struct cvmx_led_prt_s                cn56xxp1;
25235    struct cvmx_led_prt_s                cn58xx;
25236    struct cvmx_led_prt_s                cn58xxp1;
25237} cvmx_led_prt_t;
25238
25239
25240/**
25241 * cvmx_led_prt_fmt
25242 *
25243 * LED_PRT_FMT = LED Port Status Infomation Format
25244 *
25245 *
25246 * Notes:
25247 * TX: RGMII TX block is sending packet data or extends on the port
25248 * RX: RGMII RX block has received non-idle cycle
25249 *
25250 * For short transfers, LEDs will remain on for at least one blink cycle
25251 */
25252typedef union
25253{
25254    uint64_t u64;
25255    struct cvmx_led_prt_fmt_s
25256    {
25257#if __BYTE_ORDER == __BIG_ENDIAN
25258        uint64_t reserved_4_63           : 60;
25259        uint64_t format                  : 4;       /**< Port Status Information for each enabled port in
25260                                                         LED_PRT.  The formats are below
25261                                                         0x0: [ LED_PRT_STATUS[0]            ]
25262                                                         0x1: [ LED_PRT_STATUS[1:0]          ]
25263                                                         0x2: [ LED_PRT_STATUS[3:0]          ]
25264                                                         0x3: [ LED_PRT_STATUS[5:0]          ]
25265                                                         0x4: [ (RX|TX), LED_PRT_STATUS[0]   ]
25266                                                         0x5: [ (RX|TX), LED_PRT_STATUS[1:0] ]
25267                                                         0x6: [ (RX|TX), LED_PRT_STATUS[3:0] ]
25268                                                         0x8: [ Tx, Rx, LED_PRT_STATUS[0]    ]
25269                                                         0x9: [ Tx, Rx, LED_PRT_STATUS[1:0]  ]
25270                                                         0xa: [ Tx, Rx, LED_PRT_STATUS[3:0]  ] */
25271#else
25272        uint64_t format                  : 4;
25273        uint64_t reserved_4_63           : 60;
25274#endif
25275    } s;
25276    struct cvmx_led_prt_fmt_s            cn38xx;
25277    struct cvmx_led_prt_fmt_s            cn38xxp2;
25278    struct cvmx_led_prt_fmt_s            cn56xx;
25279    struct cvmx_led_prt_fmt_s            cn56xxp1;
25280    struct cvmx_led_prt_fmt_s            cn58xx;
25281    struct cvmx_led_prt_fmt_s            cn58xxp1;
25282} cvmx_led_prt_fmt_t;
25283
25284
25285/**
25286 * cvmx_led_prt_status#
25287 *
25288 * LED_PRT_STATUS = LED Port Status information
25289 *
25290 */
25291typedef union
25292{
25293    uint64_t u64;
25294    struct cvmx_led_prt_statusx_s
25295    {
25296#if __BYTE_ORDER == __BIG_ENDIAN
25297        uint64_t reserved_6_63           : 58;
25298        uint64_t status                  : 6;       /**< Bits that software can set to be added to the
25299                                                         LED shift chain - depending on LED_PRT_FMT
25300                                                         LED_PRT_STATUS(3..0) corespond to RGMII ports 3-0
25301                                                          on interface0
25302                                                         LED_PRT_STATUS(7..4) corespond to RGMII ports 7-4
25303                                                          on interface1
25304                                                         Only applies when interface is in RGMII mode */
25305#else
25306        uint64_t status                  : 6;
25307        uint64_t reserved_6_63           : 58;
25308#endif
25309    } s;
25310    struct cvmx_led_prt_statusx_s        cn38xx;
25311    struct cvmx_led_prt_statusx_s        cn38xxp2;
25312    struct cvmx_led_prt_statusx_s        cn56xx;
25313    struct cvmx_led_prt_statusx_s        cn56xxp1;
25314    struct cvmx_led_prt_statusx_s        cn58xx;
25315    struct cvmx_led_prt_statusx_s        cn58xxp1;
25316} cvmx_led_prt_statusx_t;
25317
25318
25319/**
25320 * cvmx_led_udd_cnt#
25321 *
25322 * LED_UDD_CNT = LED UDD Counts
25323 *
25324 */
25325typedef union
25326{
25327    uint64_t u64;
25328    struct cvmx_led_udd_cntx_s
25329    {
25330#if __BYTE_ORDER == __BIG_ENDIAN
25331        uint64_t reserved_6_63           : 58;
25332        uint64_t cnt                     : 6;       /**< Number of bits of user-defined data to include in
25333                                                         the LED shift chain.  Legal values: 0-32. */
25334#else
25335        uint64_t cnt                     : 6;
25336        uint64_t reserved_6_63           : 58;
25337#endif
25338    } s;
25339    struct cvmx_led_udd_cntx_s           cn38xx;
25340    struct cvmx_led_udd_cntx_s           cn38xxp2;
25341    struct cvmx_led_udd_cntx_s           cn56xx;
25342    struct cvmx_led_udd_cntx_s           cn56xxp1;
25343    struct cvmx_led_udd_cntx_s           cn58xx;
25344    struct cvmx_led_udd_cntx_s           cn58xxp1;
25345} cvmx_led_udd_cntx_t;
25346
25347
25348/**
25349 * cvmx_led_udd_dat#
25350 *
25351 * LED_UDD_DAT = User defined data (header or trailer)
25352 *
25353 *
25354 * Notes:
25355 * Bits come out LSB to MSB on the shift chain.  If LED_UDD_CNT is set to 4
25356 * then the bits comes out LED_UDD_DAT[0], LED_UDD_DAT[1], LED_UDD_DAT[2],
25357 * LED_UDD_DAT[3].
25358 */
25359typedef union
25360{
25361    uint64_t u64;
25362    struct cvmx_led_udd_datx_s
25363    {
25364#if __BYTE_ORDER == __BIG_ENDIAN
25365        uint64_t reserved_32_63          : 32;
25366        uint64_t dat                     : 32;      /**< Header or trailer UDD data to be displayed on
25367                                                         the LED shift chain.  Number of bits to include
25368                                                         is controled by LED_UDD_CNT */
25369#else
25370        uint64_t dat                     : 32;
25371        uint64_t reserved_32_63          : 32;
25372#endif
25373    } s;
25374    struct cvmx_led_udd_datx_s           cn38xx;
25375    struct cvmx_led_udd_datx_s           cn38xxp2;
25376    struct cvmx_led_udd_datx_s           cn56xx;
25377    struct cvmx_led_udd_datx_s           cn56xxp1;
25378    struct cvmx_led_udd_datx_s           cn58xx;
25379    struct cvmx_led_udd_datx_s           cn58xxp1;
25380} cvmx_led_udd_datx_t;
25381
25382
25383/**
25384 * cvmx_led_udd_dat_clr#
25385 *
25386 * LED_UDD_DAT_CLR = User defined data (header or trailer)
25387 *
25388 */
25389typedef union
25390{
25391    uint64_t u64;
25392    struct cvmx_led_udd_dat_clrx_s
25393    {
25394#if __BYTE_ORDER == __BIG_ENDIAN
25395        uint64_t reserved_32_63          : 32;
25396        uint64_t clr                     : 32;      /**< Bitwise clear for the Header or trailer UDD data to
25397                                                         be displayed on the LED shift chain. */
25398#else
25399        uint64_t clr                     : 32;
25400        uint64_t reserved_32_63          : 32;
25401#endif
25402    } s;
25403    struct cvmx_led_udd_dat_clrx_s       cn38xx;
25404    struct cvmx_led_udd_dat_clrx_s       cn38xxp2;
25405    struct cvmx_led_udd_dat_clrx_s       cn56xx;
25406    struct cvmx_led_udd_dat_clrx_s       cn56xxp1;
25407    struct cvmx_led_udd_dat_clrx_s       cn58xx;
25408    struct cvmx_led_udd_dat_clrx_s       cn58xxp1;
25409} cvmx_led_udd_dat_clrx_t;
25410
25411
25412/**
25413 * cvmx_led_udd_dat_set#
25414 *
25415 * LED_UDD_DAT_SET = User defined data (header or trailer)
25416 *
25417 */
25418typedef union
25419{
25420    uint64_t u64;
25421    struct cvmx_led_udd_dat_setx_s
25422    {
25423#if __BYTE_ORDER == __BIG_ENDIAN
25424        uint64_t reserved_32_63          : 32;
25425        uint64_t set                     : 32;      /**< Bitwise set for the Header or trailer UDD data to
25426                                                         be displayed on the LED shift chain. */
25427#else
25428        uint64_t set                     : 32;
25429        uint64_t reserved_32_63          : 32;
25430#endif
25431    } s;
25432    struct cvmx_led_udd_dat_setx_s       cn38xx;
25433    struct cvmx_led_udd_dat_setx_s       cn38xxp2;
25434    struct cvmx_led_udd_dat_setx_s       cn56xx;
25435    struct cvmx_led_udd_dat_setx_s       cn56xxp1;
25436    struct cvmx_led_udd_dat_setx_s       cn58xx;
25437    struct cvmx_led_udd_dat_setx_s       cn58xxp1;
25438} cvmx_led_udd_dat_setx_t;
25439
25440
25441/**
25442 * cvmx_lmc#_bist_ctl
25443 *
25444 * Notes:
25445 * This controls BiST only for the memories that operate on DCLK.  The normal, chip-wide BiST flow
25446 * controls BiST for the memories that operate on ECLK.
25447 */
25448typedef union
25449{
25450    uint64_t u64;
25451    struct cvmx_lmcx_bist_ctl_s
25452    {
25453#if __BYTE_ORDER == __BIG_ENDIAN
25454        uint64_t reserved_1_63           : 63;
25455        uint64_t start                   : 1;       /**< A 0->1 transition causes BiST to run. */
25456#else
25457        uint64_t start                   : 1;
25458        uint64_t reserved_1_63           : 63;
25459#endif
25460    } s;
25461    struct cvmx_lmcx_bist_ctl_s          cn50xx;
25462    struct cvmx_lmcx_bist_ctl_s          cn52xx;
25463    struct cvmx_lmcx_bist_ctl_s          cn52xxp1;
25464    struct cvmx_lmcx_bist_ctl_s          cn56xx;
25465    struct cvmx_lmcx_bist_ctl_s          cn56xxp1;
25466} cvmx_lmcx_bist_ctl_t;
25467
25468
25469/**
25470 * cvmx_lmc#_bist_result
25471 *
25472 * Notes:
25473 * Access to the internal BiST results
25474 * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
25475 */
25476typedef union
25477{
25478    uint64_t u64;
25479    struct cvmx_lmcx_bist_result_s
25480    {
25481#if __BYTE_ORDER == __BIG_ENDIAN
25482        uint64_t reserved_11_63          : 53;
25483        uint64_t csrd2e                  : 1;       /**< BiST result of CSRD2E memory (0=pass, !0=fail) */
25484        uint64_t csre2d                  : 1;       /**< BiST result of CSRE2D memory (0=pass, !0=fail) */
25485        uint64_t mwf                     : 1;       /**< BiST result of MWF memories (0=pass, !0=fail) */
25486        uint64_t mwd                     : 3;       /**< BiST result of MWD memories (0=pass, !0=fail) */
25487        uint64_t mwc                     : 1;       /**< BiST result of MWC memories (0=pass, !0=fail) */
25488        uint64_t mrf                     : 1;       /**< BiST result of MRF memories (0=pass, !0=fail) */
25489        uint64_t mrd                     : 3;       /**< BiST result of MRD memories (0=pass, !0=fail) */
25490#else
25491        uint64_t mrd                     : 3;
25492        uint64_t mrf                     : 1;
25493        uint64_t mwc                     : 1;
25494        uint64_t mwd                     : 3;
25495        uint64_t mwf                     : 1;
25496        uint64_t csre2d                  : 1;
25497        uint64_t csrd2e                  : 1;
25498        uint64_t reserved_11_63          : 53;
25499#endif
25500    } s;
25501    struct cvmx_lmcx_bist_result_cn50xx
25502    {
25503#if __BYTE_ORDER == __BIG_ENDIAN
25504        uint64_t reserved_9_63           : 55;
25505        uint64_t mwf                     : 1;       /**< BiST result of MWF memories (0=pass, !0=fail) */
25506        uint64_t mwd                     : 3;       /**< BiST result of MWD memories (0=pass, !0=fail) */
25507        uint64_t mwc                     : 1;       /**< BiST result of MWC memories (0=pass, !0=fail) */
25508        uint64_t mrf                     : 1;       /**< BiST result of MRF memories (0=pass, !0=fail) */
25509        uint64_t mrd                     : 3;       /**< BiST result of MRD memories (0=pass, !0=fail) */
25510#else
25511        uint64_t mrd                     : 3;
25512        uint64_t mrf                     : 1;
25513        uint64_t mwc                     : 1;
25514        uint64_t mwd                     : 3;
25515        uint64_t mwf                     : 1;
25516        uint64_t reserved_9_63           : 55;
25517#endif
25518    } cn50xx;
25519    struct cvmx_lmcx_bist_result_s       cn52xx;
25520    struct cvmx_lmcx_bist_result_s       cn52xxp1;
25521    struct cvmx_lmcx_bist_result_s       cn56xx;
25522    struct cvmx_lmcx_bist_result_s       cn56xxp1;
25523} cvmx_lmcx_bist_result_t;
25524
25525
25526/**
25527 * cvmx_lmc#_comp_ctl
25528 *
25529 * LMC_COMP_CTL = LMC Compensation control
25530 *
25531 */
25532typedef union
25533{
25534    uint64_t u64;
25535    struct cvmx_lmcx_comp_ctl_s
25536    {
25537#if __BYTE_ORDER == __BIG_ENDIAN
25538        uint64_t reserved_32_63          : 32;
25539        uint64_t nctl_csr                : 4;       /**< Compensation control bits */
25540        uint64_t nctl_clk                : 4;       /**< Compensation control bits */
25541        uint64_t nctl_cmd                : 4;       /**< Compensation control bits */
25542        uint64_t nctl_dat                : 4;       /**< Compensation control bits */
25543        uint64_t pctl_csr                : 4;       /**< Compensation control bits */
25544        uint64_t pctl_clk                : 4;       /**< Compensation control bits */
25545        uint64_t reserved_0_7            : 8;
25546#else
25547        uint64_t reserved_0_7            : 8;
25548        uint64_t pctl_clk                : 4;
25549        uint64_t pctl_csr                : 4;
25550        uint64_t nctl_dat                : 4;
25551        uint64_t nctl_cmd                : 4;
25552        uint64_t nctl_clk                : 4;
25553        uint64_t nctl_csr                : 4;
25554        uint64_t reserved_32_63          : 32;
25555#endif
25556    } s;
25557    struct cvmx_lmcx_comp_ctl_cn30xx
25558    {
25559#if __BYTE_ORDER == __BIG_ENDIAN
25560        uint64_t reserved_32_63          : 32;
25561        uint64_t nctl_csr                : 4;       /**< Compensation control bits */
25562        uint64_t nctl_clk                : 4;       /**< Compensation control bits */
25563        uint64_t nctl_cmd                : 4;       /**< Compensation control bits */
25564        uint64_t nctl_dat                : 4;       /**< Compensation control bits */
25565        uint64_t pctl_csr                : 4;       /**< Compensation control bits */
25566        uint64_t pctl_clk                : 4;       /**< Compensation control bits */
25567        uint64_t pctl_cmd                : 4;       /**< Compensation control bits */
25568        uint64_t pctl_dat                : 4;       /**< Compensation control bits */
25569#else
25570        uint64_t pctl_dat                : 4;
25571        uint64_t pctl_cmd                : 4;
25572        uint64_t pctl_clk                : 4;
25573        uint64_t pctl_csr                : 4;
25574        uint64_t nctl_dat                : 4;
25575        uint64_t nctl_cmd                : 4;
25576        uint64_t nctl_clk                : 4;
25577        uint64_t nctl_csr                : 4;
25578        uint64_t reserved_32_63          : 32;
25579#endif
25580    } cn30xx;
25581    struct cvmx_lmcx_comp_ctl_cn30xx     cn31xx;
25582    struct cvmx_lmcx_comp_ctl_cn30xx     cn38xx;
25583    struct cvmx_lmcx_comp_ctl_cn30xx     cn38xxp2;
25584    struct cvmx_lmcx_comp_ctl_cn50xx
25585    {
25586#if __BYTE_ORDER == __BIG_ENDIAN
25587        uint64_t reserved_32_63          : 32;
25588        uint64_t nctl_csr                : 4;       /**< Compensation control bits */
25589        uint64_t reserved_20_27          : 8;
25590        uint64_t nctl_dat                : 4;       /**< Compensation control bits */
25591        uint64_t pctl_csr                : 4;       /**< Compensation control bits */
25592        uint64_t reserved_5_11           : 7;
25593        uint64_t pctl_dat                : 5;       /**< Compensation control bits */
25594#else
25595        uint64_t pctl_dat                : 5;
25596        uint64_t reserved_5_11           : 7;
25597        uint64_t pctl_csr                : 4;
25598        uint64_t nctl_dat                : 4;
25599        uint64_t reserved_20_27          : 8;
25600        uint64_t nctl_csr                : 4;
25601        uint64_t reserved_32_63          : 32;
25602#endif
25603    } cn50xx;
25604    struct cvmx_lmcx_comp_ctl_cn50xx     cn52xx;
25605    struct cvmx_lmcx_comp_ctl_cn50xx     cn52xxp1;
25606    struct cvmx_lmcx_comp_ctl_cn50xx     cn56xx;
25607    struct cvmx_lmcx_comp_ctl_cn50xx     cn56xxp1;
25608    struct cvmx_lmcx_comp_ctl_cn50xx     cn58xx;
25609    struct cvmx_lmcx_comp_ctl_cn58xxp1
25610    {
25611#if __BYTE_ORDER == __BIG_ENDIAN
25612        uint64_t reserved_32_63          : 32;
25613        uint64_t nctl_csr                : 4;       /**< Compensation control bits */
25614        uint64_t reserved_20_27          : 8;
25615        uint64_t nctl_dat                : 4;       /**< Compensation control bits */
25616        uint64_t pctl_csr                : 4;       /**< Compensation control bits */
25617        uint64_t reserved_4_11           : 8;
25618        uint64_t pctl_dat                : 4;       /**< Compensation control bits */
25619#else
25620        uint64_t pctl_dat                : 4;
25621        uint64_t reserved_4_11           : 8;
25622        uint64_t pctl_csr                : 4;
25623        uint64_t nctl_dat                : 4;
25624        uint64_t reserved_20_27          : 8;
25625        uint64_t nctl_csr                : 4;
25626        uint64_t reserved_32_63          : 32;
25627#endif
25628    } cn58xxp1;
25629} cvmx_lmcx_comp_ctl_t;
25630
25631
25632/**
25633 * cvmx_lmc#_ctl
25634 *
25635 * LMC_CTL = LMC Control
25636 * This register is an assortment of various control fields needed by the memory controller
25637 */
25638typedef union
25639{
25640    uint64_t u64;
25641    struct cvmx_lmcx_ctl_s
25642    {
25643#if __BYTE_ORDER == __BIG_ENDIAN
25644        uint64_t reserved_32_63          : 32;
25645        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
25646                                                         The encoded value on this will adjust the drive strength
25647                                                         of the DDR DQ pulldns. */
25648        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
25649                                                         The encoded value on this will adjust the drive strength
25650                                                         of the DDR DQ pullup. */
25651        uint64_t slow_scf                : 1;       /**< Should be cleared to zero */
25652        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
25653                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
25654                                                         else
25655                                                           bank[n:0]=address[n+7:7]
25656                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
25657        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
25658                                                         allowing reads to interrupt. */
25659        uint64_t pll_div2                : 1;       /**< PLL Div2. */
25660        uint64_t pll_bypass              : 1;       /**< PLL Bypass. */
25661        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
25662                                                         of JEDEC Registered DIMMs which require Write
25663                                                         data to be registered in the controller. */
25664        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
25665                                                         will slot an additional 1 cycle data bus bubble to
25666                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
25667                                                         in case the "built-in" DIMM and RANK crossing logic
25668                                                         which should auto-detect and perfectly slot
25669                                                         read-to-reads to the same DIMM/RANK. */
25670        uint64_t inorder_mwf             : 1;       /**< Reads as zero */
25671        uint64_t inorder_mrf             : 1;       /**< Always clear to zero */
25672        uint64_t reserved_10_11          : 2;
25673        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
25674                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
25675                                                         This bit should typically be set. */
25676        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
25677                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
25678                                                         cycle. This should be set to one whenever both SILO_HC
25679                                                         and SILO_QC are set. */
25680        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
25681                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
25682                                                         data out of the pad silos.
25683                                                             - 00: illegal
25684                                                             - 01: 1 dclks
25685                                                             - 10: 2 dclks
25686                                                             - 11: illegal
25687                                                         This should always be set to 1. */
25688        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
25689                                                         DELAY on DQ (used in the controller to determine the
25690                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
25691                                                         the largest of the per byte Board delay
25692                                                             - 00: 0 dclk
25693                                                             - 01: 1 dclks
25694                                                             - 10: 2 dclks
25695                                                             - 11: 3 dclks */
25696        uint64_t qs_dic                  : 2;       /**< DDR2 Termination Resistor Setting
25697                                                         A non Zero value in this register
25698                                                         enables the On Die Termination (ODT) in DDR parts.
25699                                                         These two bits are loaded into the RTT
25700                                                         portion of the EMRS register bits A6 & A2. If DDR2's
25701                                                         termination (for the memory's DQ/DQS/DM pads) is not
25702                                                         desired, set it to 00. If it is, chose between
25703                                                         01 for 75 ohm and 10 for 150 ohm termination.
25704                                                             00 = ODT Disabled
25705                                                             01 = 75 ohm Termination
25706                                                             10 = 150 ohm Termination
25707                                                             11 = 50 ohm Termination
25708                                                         Octeon, on writes, by default, drives the 4/8 ODT
25709                                                         pins (64/128b mode) based on what the masks
25710                                                         (LMC_WODT_CTL) are programmed to.
25711                                                         LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins
25712                                                         for READS. LMC_RODT_CTL needs to be programmed based
25713                                                         on the system's needs for ODT. */
25714        uint64_t dic                     : 2;       /**< Drive Strength Control:
25715                                                         DIC[0] is
25716                                                         loaded into the Extended Mode Register (EMRS) A1 bit
25717                                                         during initialization.
25718                                                             0 = Normal
25719                                                             1 = Reduced
25720                                                         DIC[1] is used to load into EMRS
25721                                                         bit 10 - DQSN Enable/Disable field. By default, we
25722                                                         program the DDR's to drive the DQSN also. Set it to
25723                                                         1 if DQSN should be Hi-Z.
25724                                                             0 - DQSN Enable
25725                                                             1 - DQSN Disable */
25726#else
25727        uint64_t dic                     : 2;
25728        uint64_t qs_dic                  : 2;
25729        uint64_t tskw                    : 2;
25730        uint64_t sil_lat                 : 2;
25731        uint64_t bprch                   : 1;
25732        uint64_t fprch2                  : 1;
25733        uint64_t reserved_10_11          : 2;
25734        uint64_t inorder_mrf             : 1;
25735        uint64_t inorder_mwf             : 1;
25736        uint64_t r2r_slot                : 1;
25737        uint64_t rdimm_ena               : 1;
25738        uint64_t pll_bypass              : 1;
25739        uint64_t pll_div2                : 1;
25740        uint64_t max_write_batch         : 4;
25741        uint64_t xor_bank                : 1;
25742        uint64_t slow_scf                : 1;
25743        uint64_t ddr__pctl               : 4;
25744        uint64_t ddr__nctl               : 4;
25745        uint64_t reserved_32_63          : 32;
25746#endif
25747    } s;
25748    struct cvmx_lmcx_ctl_cn30xx
25749    {
25750#if __BYTE_ORDER == __BIG_ENDIAN
25751        uint64_t reserved_32_63          : 32;
25752        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
25753                                                         The encoded value on this will adjust the drive strength
25754                                                         of the DDR DQ pulldns. */
25755        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
25756                                                         The encoded value on this will adjust the drive strength
25757                                                         of the DDR DQ pullup. */
25758        uint64_t slow_scf                : 1;       /**< 1=SCF has pass1 latency, 0=SCF has 1 cycle lower latency
25759                                                         when compared to pass1 */
25760        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
25761                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
25762                                                         else
25763                                                           bank[n:0]=address[n+7:7]
25764                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
25765        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
25766                                                         allowing reads to interrupt. */
25767        uint64_t pll_div2                : 1;       /**< PLL Div2. */
25768        uint64_t pll_bypass              : 1;       /**< PLL Bypass. */
25769        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
25770                                                         of JEDEC Registered DIMMs which require Write
25771                                                         data to be registered in the controller. */
25772        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
25773                                                         will slot an additional 1 cycle data bus bubble to
25774                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
25775                                                         in case the "built-in" DIMM and RANK crossing logic
25776                                                         which should auto-detect and perfectly slot
25777                                                         read-to-reads to the same DIMM/RANK. */
25778        uint64_t inorder_mwf             : 1;       /**< Reads as zero */
25779        uint64_t inorder_mrf             : 1;       /**< Always set to zero */
25780        uint64_t dreset                  : 1;       /**< Dclk domain reset.  The reset signal that is used by the
25781                                                         Dclk domain is (DRESET || ECLK_RESET). */
25782        uint64_t mode32b                 : 1;       /**< 32b data Path Mode
25783                                                         Set to 1 if we use only 32 DQ pins
25784                                                         0 for 16b DQ mode. */
25785        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
25786                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
25787                                                         This bit should typically be set. */
25788        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
25789                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
25790                                                         cycle. This should be set to one whenever both SILO_HC
25791                                                         and SILO_QC are set. */
25792        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
25793                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
25794                                                         data out of the pad silos.
25795                                                             - 00: illegal
25796                                                             - 01: 1 dclks
25797                                                             - 10: 2 dclks
25798                                                             - 11: illegal
25799                                                         This should always be set to 1. */
25800        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
25801                                                         DELAY on DQ (used in the controller to determine the
25802                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
25803                                                         the largest of the per byte Board delay
25804                                                             - 00: 0 dclk
25805                                                             - 01: 1 dclks
25806                                                             - 10: 2 dclks
25807                                                             - 11: 3 dclks */
25808        uint64_t qs_dic                  : 2;       /**< QS Drive Strength Control (DDR1):
25809                                                         & DDR2 Termination Resistor Setting
25810                                                         When in DDR2, a non Zero value in this register
25811                                                         enables the On Die Termination (ODT) in DDR parts.
25812                                                         These two bits are loaded into the RTT
25813                                                         portion of the EMRS register bits A6 & A2. If DDR2's
25814                                                         termination (for the memory's DQ/DQS/DM pads) is not
25815                                                         desired, set it to 00. If it is, chose between
25816                                                         01 for 75 ohm and 10 for 150 ohm termination.
25817                                                             00 = ODT Disabled
25818                                                             01 = 75 ohm Termination
25819                                                             10 = 150 ohm Termination
25820                                                             11 = 50 ohm Termination
25821                                                         Octeon, on writes, by default, drives the 8 ODT
25822                                                         pins based on what the masks (LMC_WODT_CTL1 & 2)
25823                                                         are programmed to. LMC_DDR2_CTL->ODT_ENA
25824                                                         enables Octeon to drive ODT pins for READS.
25825                                                         LMC_RODT_CTL needs to be programmed based on
25826                                                         the system's needs for ODT. */
25827        uint64_t dic                     : 2;       /**< Drive Strength Control:
25828                                                         For DDR-I/II Mode, DIC[0] is
25829                                                         loaded into the Extended Mode Register (EMRS) A1 bit
25830                                                         during initialization. (see DDR-I data sheet EMRS
25831                                                         description)
25832                                                             0 = Normal
25833                                                             1 = Reduced
25834                                                         For DDR-II Mode, DIC[1] is used to load into EMRS
25835                                                         bit 10 - DQSN Enable/Disable field. By default, we
25836                                                         program the DDR's to drive the DQSN also. Set it to
25837                                                         1 if DQSN should be Hi-Z.
25838                                                             0 - DQSN Enable
25839                                                             1 - DQSN Disable */
25840#else
25841        uint64_t dic                     : 2;
25842        uint64_t qs_dic                  : 2;
25843        uint64_t tskw                    : 2;
25844        uint64_t sil_lat                 : 2;
25845        uint64_t bprch                   : 1;
25846        uint64_t fprch2                  : 1;
25847        uint64_t mode32b                 : 1;
25848        uint64_t dreset                  : 1;
25849        uint64_t inorder_mrf             : 1;
25850        uint64_t inorder_mwf             : 1;
25851        uint64_t r2r_slot                : 1;
25852        uint64_t rdimm_ena               : 1;
25853        uint64_t pll_bypass              : 1;
25854        uint64_t pll_div2                : 1;
25855        uint64_t max_write_batch         : 4;
25856        uint64_t xor_bank                : 1;
25857        uint64_t slow_scf                : 1;
25858        uint64_t ddr__pctl               : 4;
25859        uint64_t ddr__nctl               : 4;
25860        uint64_t reserved_32_63          : 32;
25861#endif
25862    } cn30xx;
25863    struct cvmx_lmcx_ctl_cn30xx          cn31xx;
25864    struct cvmx_lmcx_ctl_cn38xx
25865    {
25866#if __BYTE_ORDER == __BIG_ENDIAN
25867        uint64_t reserved_32_63          : 32;
25868        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
25869                                                         The encoded value on this will adjust the drive strength
25870                                                         of the DDR DQ pulldns. */
25871        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
25872                                                         The encoded value on this will adjust the drive strength
25873                                                         of the DDR DQ pullup. */
25874        uint64_t slow_scf                : 1;       /**< 1=SCF has pass1 latency, 0=SCF has 1 cycle lower latency
25875                                                         when compared to pass1
25876                                                         NOTE - This bit has NO effect in PASS1 */
25877        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
25878                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
25879                                                         else
25880                                                           bank[n:0]=address[n+7:7]
25881                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
25882        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
25883                                                         allowing reads to interrupt. */
25884        uint64_t reserved_16_17          : 2;
25885        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
25886                                                         of JEDEC Registered DIMMs which require Write
25887                                                         data to be registered in the controller. */
25888        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
25889                                                         will slot an additional 1 cycle data bus bubble to
25890                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
25891                                                         in case the "built-in" DIMM and RANK crossing logic
25892                                                         which should auto-detect and perfectly slot
25893                                                         read-to-reads to the same DIMM/RANK. */
25894        uint64_t inorder_mwf             : 1;       /**< When set, forces LMC_MWF (writes) into strict, in-order
25895                                                         mode.  When clear, writes may be serviced out of order
25896                                                         (optimized to keep multiple banks active).
25897                                                         This bit is ONLY to be set at power-on and
25898                                                         should not be set for normal use.
25899                                                         NOTE: For PASS1, set as follows:
25900                                                             DDR-I -> 1
25901                                                             DDR-II -> 0
25902                                                         For Pass2, this bit is RA0, write ignore (this feature
25903                                                         is permanently disabled) */
25904        uint64_t inorder_mrf             : 1;       /**< When set, forces LMC_MRF (reads) into strict, in-order
25905                                                         mode.  When clear, reads may be serviced out of order
25906                                                         (optimized to keep multiple banks active).
25907                                                         This bit is ONLY to be set at power-on and
25908                                                         should not be set for normal use.
25909                                                         NOTE: For PASS1, set as follows:
25910                                                             DDR-I -> 1
25911                                                             DDR-II -> 0
25912                                                         For Pass2, this bit should be written ZERO for
25913                                                         DDR I & II */
25914        uint64_t set_zero                : 1;       /**< Reserved. Always Set this Bit to Zero */
25915        uint64_t mode128b                : 1;       /**< 128b data Path Mode
25916                                                         Set to 1 if we use all 128 DQ pins
25917                                                         0 for 64b DQ mode. */
25918        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
25919                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
25920                                                         This bit should typically be set. */
25921        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
25922                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
25923                                                         cycle. This should be set to one whenever both SILO_HC
25924                                                         and SILO_QC are set. */
25925        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
25926                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
25927                                                         data out of the pad silos.
25928                                                             - 00: illegal
25929                                                             - 01: 1 dclks
25930                                                             - 10: 2 dclks
25931                                                             - 11: illegal
25932                                                         This should always be set to 1. */
25933        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
25934                                                         DELAY on DQ (used in the controller to determine the
25935                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
25936                                                         the largest of the per byte Board delay
25937                                                             - 00: 0 dclk
25938                                                             - 01: 1 dclks
25939                                                             - 10: 2 dclks
25940                                                             - 11: 3 dclks */
25941        uint64_t qs_dic                  : 2;       /**< QS Drive Strength Control (DDR1):
25942                                                         & DDR2 Termination Resistor Setting
25943                                                         When in DDR2, a non Zero value in this register
25944                                                         enables the On Die Termination (ODT) in DDR parts.
25945                                                         These two bits are loaded into the RTT
25946                                                         portion of the EMRS register bits A6 & A2. If DDR2's
25947                                                         termination (for the memory's DQ/DQS/DM pads) is not
25948                                                         desired, set it to 00. If it is, chose between
25949                                                         01 for 75 ohm and 10 for 150 ohm termination.
25950                                                             00 = ODT Disabled
25951                                                             01 = 75 ohm Termination
25952                                                             10 = 150 ohm Termination
25953                                                             11 = 50 ohm Termination
25954                                                         Octeon, on writes, by default, drives the 4/8 ODT
25955                                                         pins (64/128b mode) based on what the masks
25956                                                         (LMC_WODT_CTL) are programmed to.
25957                                                         LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins
25958                                                         for READS. LMC_RODT_CTL needs to be programmed based
25959                                                         on the system's needs for ODT. */
25960        uint64_t dic                     : 2;       /**< Drive Strength Control:
25961                                                         For DDR-I/II Mode, DIC[0] is
25962                                                         loaded into the Extended Mode Register (EMRS) A1 bit
25963                                                         during initialization. (see DDR-I data sheet EMRS
25964                                                         description)
25965                                                             0 = Normal
25966                                                             1 = Reduced
25967                                                         For DDR-II Mode, DIC[1] is used to load into EMRS
25968                                                         bit 10 - DQSN Enable/Disable field. By default, we
25969                                                         program the DDR's to drive the DQSN also. Set it to
25970                                                         1 if DQSN should be Hi-Z.
25971                                                             0 - DQSN Enable
25972                                                             1 - DQSN Disable */
25973#else
25974        uint64_t dic                     : 2;
25975        uint64_t qs_dic                  : 2;
25976        uint64_t tskw                    : 2;
25977        uint64_t sil_lat                 : 2;
25978        uint64_t bprch                   : 1;
25979        uint64_t fprch2                  : 1;
25980        uint64_t mode128b                : 1;
25981        uint64_t set_zero                : 1;
25982        uint64_t inorder_mrf             : 1;
25983        uint64_t inorder_mwf             : 1;
25984        uint64_t r2r_slot                : 1;
25985        uint64_t rdimm_ena               : 1;
25986        uint64_t reserved_16_17          : 2;
25987        uint64_t max_write_batch         : 4;
25988        uint64_t xor_bank                : 1;
25989        uint64_t slow_scf                : 1;
25990        uint64_t ddr__pctl               : 4;
25991        uint64_t ddr__nctl               : 4;
25992        uint64_t reserved_32_63          : 32;
25993#endif
25994    } cn38xx;
25995    struct cvmx_lmcx_ctl_cn38xx          cn38xxp2;
25996    struct cvmx_lmcx_ctl_cn50xx
25997    {
25998#if __BYTE_ORDER == __BIG_ENDIAN
25999        uint64_t reserved_32_63          : 32;
26000        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
26001                                                         The encoded value on this will adjust the drive strength
26002                                                         of the DDR DQ pulldns. */
26003        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
26004                                                         The encoded value on this will adjust the drive strength
26005                                                         of the DDR DQ pullup. */
26006        uint64_t slow_scf                : 1;       /**< Should be cleared to zero */
26007        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
26008                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
26009                                                         else
26010                                                           bank[n:0]=address[n+7:7]
26011                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
26012        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
26013                                                         allowing reads to interrupt. */
26014        uint64_t reserved_17_17          : 1;
26015        uint64_t pll_bypass              : 1;       /**< PLL Bypass. */
26016        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
26017                                                         of JEDEC Registered DIMMs which require Write
26018                                                         data to be registered in the controller. */
26019        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
26020                                                         will slot an additional 1 cycle data bus bubble to
26021                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
26022                                                         in case the "built-in" DIMM and RANK crossing logic
26023                                                         which should auto-detect and perfectly slot
26024                                                         read-to-reads to the same DIMM/RANK. */
26025        uint64_t inorder_mwf             : 1;       /**< Reads as zero */
26026        uint64_t inorder_mrf             : 1;       /**< Always clear to zero */
26027        uint64_t dreset                  : 1;       /**< Dclk domain reset.  The reset signal that is used by the
26028                                                         Dclk domain is (DRESET || ECLK_RESET). */
26029        uint64_t mode32b                 : 1;       /**< 32b data Path Mode
26030                                                         Set to 1 if we use 32 DQ pins
26031                                                         0 for 16b DQ mode. */
26032        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
26033                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
26034                                                         This bit should typically be set. */
26035        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
26036                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
26037                                                         cycle. This should be set to one whenever both SILO_HC
26038                                                         and SILO_QC are set. */
26039        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
26040                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
26041                                                         data out of the pad silos.
26042                                                             - 00: illegal
26043                                                             - 01: 1 dclks
26044                                                             - 10: 2 dclks
26045                                                             - 11: illegal
26046                                                         This should always be set to 1. */
26047        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
26048                                                         DELAY on DQ (used in the controller to determine the
26049                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
26050                                                         the largest of the per byte Board delay
26051                                                             - 00: 0 dclk
26052                                                             - 01: 1 dclks
26053                                                             - 10: 2 dclks
26054                                                             - 11: 3 dclks */
26055        uint64_t qs_dic                  : 2;       /**< DDR2 Termination Resistor Setting
26056                                                         When in DDR2, a non Zero value in this register
26057                                                         enables the On Die Termination (ODT) in DDR parts.
26058                                                         These two bits are loaded into the RTT
26059                                                         portion of the EMRS register bits A6 & A2. If DDR2's
26060                                                         termination (for the memory's DQ/DQS/DM pads) is not
26061                                                         desired, set it to 00. If it is, chose between
26062                                                         01 for 75 ohm and 10 for 150 ohm termination.
26063                                                             00 = ODT Disabled
26064                                                             01 = 75 ohm Termination
26065                                                             10 = 150 ohm Termination
26066                                                             11 = 50 ohm Termination
26067                                                         Octeon, on writes, by default, drives the ODT
26068                                                         pins based on what the masks
26069                                                         (LMC_WODT_CTL) are programmed to.
26070                                                         LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins
26071                                                         for READS. LMC_RODT_CTL needs to be programmed based
26072                                                         on the system's needs for ODT. */
26073        uint64_t dic                     : 2;       /**< Drive Strength Control:
26074                                                         DIC[0] is
26075                                                         loaded into the Extended Mode Register (EMRS) A1 bit
26076                                                         during initialization.
26077                                                             0 = Normal
26078                                                             1 = Reduced
26079                                                         DIC[1] is used to load into EMRS
26080                                                         bit 10 - DQSN Enable/Disable field. By default, we
26081                                                         program the DDR's to drive the DQSN also. Set it to
26082                                                         1 if DQSN should be Hi-Z.
26083                                                             0 - DQSN Enable
26084                                                             1 - DQSN Disable */
26085#else
26086        uint64_t dic                     : 2;
26087        uint64_t qs_dic                  : 2;
26088        uint64_t tskw                    : 2;
26089        uint64_t sil_lat                 : 2;
26090        uint64_t bprch                   : 1;
26091        uint64_t fprch2                  : 1;
26092        uint64_t mode32b                 : 1;
26093        uint64_t dreset                  : 1;
26094        uint64_t inorder_mrf             : 1;
26095        uint64_t inorder_mwf             : 1;
26096        uint64_t r2r_slot                : 1;
26097        uint64_t rdimm_ena               : 1;
26098        uint64_t pll_bypass              : 1;
26099        uint64_t reserved_17_17          : 1;
26100        uint64_t max_write_batch         : 4;
26101        uint64_t xor_bank                : 1;
26102        uint64_t slow_scf                : 1;
26103        uint64_t ddr__pctl               : 4;
26104        uint64_t ddr__nctl               : 4;
26105        uint64_t reserved_32_63          : 32;
26106#endif
26107    } cn50xx;
26108    struct cvmx_lmcx_ctl_cn52xx
26109    {
26110#if __BYTE_ORDER == __BIG_ENDIAN
26111        uint64_t reserved_32_63          : 32;
26112        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
26113                                                         The encoded value on this will adjust the drive strength
26114                                                         of the DDR DQ pulldns. */
26115        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
26116                                                         The encoded value on this will adjust the drive strength
26117                                                         of the DDR DQ pullup. */
26118        uint64_t slow_scf                : 1;       /**< Always clear to zero */
26119        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
26120                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
26121                                                         else
26122                                                           bank[n:0]=address[n+7:7]
26123                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
26124        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
26125                                                         allowing reads to interrupt. */
26126        uint64_t reserved_16_17          : 2;
26127        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
26128                                                         of JEDEC Registered DIMMs which require Write
26129                                                         data to be registered in the controller. */
26130        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
26131                                                         will slot an additional 1 cycle data bus bubble to
26132                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
26133                                                         in case the "built-in" DIMM and RANK crossing logic
26134                                                         which should auto-detect and perfectly slot
26135                                                         read-to-reads to the same DIMM/RANK. */
26136        uint64_t inorder_mwf             : 1;       /**< Reads as zero */
26137        uint64_t inorder_mrf             : 1;       /**< Always set to zero */
26138        uint64_t dreset                  : 1;       /**< MBZ
26139                                                         THIS IS OBSOLETE.  Use LMC_DLL_CTL[DRESET] instead. */
26140        uint64_t mode32b                 : 1;       /**< 32b data Path Mode
26141                                                         Set to 1 if we use only 32 DQ pins
26142                                                         0 for 64b DQ mode. */
26143        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
26144                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
26145                                                         This bit should typically be set. */
26146        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
26147                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
26148                                                         cycle. This should be set to one whenever both SILO_HC
26149                                                         and SILO_QC are set. */
26150        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
26151                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
26152                                                         data out of the pad silos.
26153                                                             - 00: illegal
26154                                                             - 01: 1 dclks
26155                                                             - 10: 2 dclks
26156                                                             - 11: illegal
26157                                                         This should always be set to 1.
26158                                                         THIS IS OBSOLETE.  Use READ_LEVEL_RANK instead. */
26159        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
26160                                                         DELAY on DQ (used in the controller to determine the
26161                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
26162                                                         the largest of the per byte Board delay
26163                                                             - 00: 0 dclk
26164                                                             - 01: 1 dclks
26165                                                             - 10: 2 dclks
26166                                                             - 11: 3 dclks
26167                                                         THIS IS OBSOLETE.  Use READ_LEVEL_RANK instead. */
26168        uint64_t qs_dic                  : 2;       /**< DDR2 Termination Resistor Setting
26169                                                         When in DDR2, a non Zero value in this register
26170                                                         enables the On Die Termination (ODT) in DDR parts.
26171                                                         These two bits are loaded into the RTT
26172                                                         portion of the EMRS register bits A6 & A2. If DDR2's
26173                                                         termination (for the memory's DQ/DQS/DM pads) is not
26174                                                         desired, set it to 00. If it is, chose between
26175                                                         01 for 75 ohm and 10 for 150 ohm termination.
26176                                                             00 = ODT Disabled
26177                                                             01 = 75 ohm Termination
26178                                                             10 = 150 ohm Termination
26179                                                             11 = 50 ohm Termination
26180                                                         Octeon, on writes, by default, drives the 4/8 ODT
26181                                                         pins (64/128b mode) based on what the masks
26182                                                         (LMC_WODT_CTL0 & 1) are programmed to.
26183                                                         LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins
26184                                                         for READS. LMC_RODT_CTL needs to be programmed based
26185                                                         on the system's needs for ODT. */
26186        uint64_t dic                     : 2;       /**< Drive Strength Control:
26187                                                         DIC[0] is
26188                                                         loaded into the Extended Mode Register (EMRS) A1 bit
26189                                                         during initialization.
26190                                                             0 = Normal
26191                                                             1 = Reduced
26192                                                         DIC[1] is used to load into EMRS
26193                                                         bit 10 - DQSN Enable/Disable field. By default, we
26194                                                         program the DDR's to drive the DQSN also. Set it to
26195                                                         1 if DQSN should be Hi-Z.
26196                                                             0 - DQSN Enable
26197                                                             1 - DQSN Disable */
26198#else
26199        uint64_t dic                     : 2;
26200        uint64_t qs_dic                  : 2;
26201        uint64_t tskw                    : 2;
26202        uint64_t sil_lat                 : 2;
26203        uint64_t bprch                   : 1;
26204        uint64_t fprch2                  : 1;
26205        uint64_t mode32b                 : 1;
26206        uint64_t dreset                  : 1;
26207        uint64_t inorder_mrf             : 1;
26208        uint64_t inorder_mwf             : 1;
26209        uint64_t r2r_slot                : 1;
26210        uint64_t rdimm_ena               : 1;
26211        uint64_t reserved_16_17          : 2;
26212        uint64_t max_write_batch         : 4;
26213        uint64_t xor_bank                : 1;
26214        uint64_t slow_scf                : 1;
26215        uint64_t ddr__pctl               : 4;
26216        uint64_t ddr__nctl               : 4;
26217        uint64_t reserved_32_63          : 32;
26218#endif
26219    } cn52xx;
26220    struct cvmx_lmcx_ctl_cn52xx          cn52xxp1;
26221    struct cvmx_lmcx_ctl_cn52xx          cn56xx;
26222    struct cvmx_lmcx_ctl_cn52xx          cn56xxp1;
26223    struct cvmx_lmcx_ctl_cn58xx
26224    {
26225#if __BYTE_ORDER == __BIG_ENDIAN
26226        uint64_t reserved_32_63          : 32;
26227        uint64_t ddr__nctl               : 4;       /**< DDR nctl from compensation circuit
26228                                                         The encoded value on this will adjust the drive strength
26229                                                         of the DDR DQ pulldns. */
26230        uint64_t ddr__pctl               : 4;       /**< DDR pctl from compensation circuit
26231                                                         The encoded value on this will adjust the drive strength
26232                                                         of the DDR DQ pullup. */
26233        uint64_t slow_scf                : 1;       /**< Should be cleared to zero */
26234        uint64_t xor_bank                : 1;       /**< If (XOR_BANK == 1), then
26235                                                           bank[n:0]=address[n+7:7] ^ address[n+7+5:7+5]
26236                                                         else
26237                                                           bank[n:0]=address[n+7:7]
26238                                                         where n=1 for a 4 bank part and n=2 for an 8 bank part */
26239        uint64_t max_write_batch         : 4;       /**< Maximum number of consecutive writes to service before
26240                                                         allowing reads to interrupt. */
26241        uint64_t reserved_16_17          : 2;
26242        uint64_t rdimm_ena               : 1;       /**< Registered DIMM Enable - When set allows the use
26243                                                         of JEDEC Registered DIMMs which require Write
26244                                                         data to be registered in the controller. */
26245        uint64_t r2r_slot                : 1;       /**< R2R Slot Enable: When set, all read-to-read trans
26246                                                         will slot an additional 1 cycle data bus bubble to
26247                                                         avoid DQ/DQS bus contention. This is only a CYA bit,
26248                                                         in case the "built-in" DIMM and RANK crossing logic
26249                                                         which should auto-detect and perfectly slot
26250                                                         read-to-reads to the same DIMM/RANK. */
26251        uint64_t inorder_mwf             : 1;       /**< Reads as zero */
26252        uint64_t inorder_mrf             : 1;       /**< Always clear to zero */
26253        uint64_t dreset                  : 1;       /**< Dclk domain reset.  The reset signal that is used by the
26254                                                         Dclk domain is (DRESET || ECLK_RESET). */
26255        uint64_t mode128b                : 1;       /**< 128b data Path Mode
26256                                                         Set to 1 if we use all 128 DQ pins
26257                                                         0 for 64b DQ mode. */
26258        uint64_t fprch2                  : 1;       /**< Front Porch Enable: When set, the turn-off
26259                                                         time for the DDR_DQ/DQS drivers is 1 dclk earlier.
26260                                                         This bit should typically be set. */
26261        uint64_t bprch                   : 1;       /**< Back Porch Enable: When set, the turn-on time for
26262                                                         the DDR_DQ/DQS drivers is delayed an additional DCLK
26263                                                         cycle. This should be set to one whenever both SILO_HC
26264                                                         and SILO_QC are set. */
26265        uint64_t sil_lat                 : 2;       /**< SILO Latency: On reads, determines how many additional
26266                                                         dclks to wait (on top of TCL+1+TSKW) before pulling
26267                                                         data out of the pad silos.
26268                                                             - 00: illegal
26269                                                             - 01: 1 dclks
26270                                                             - 10: 2 dclks
26271                                                             - 11: illegal
26272                                                         This should always be set to 1. */
26273        uint64_t tskw                    : 2;       /**< This component is a representation of total BOARD
26274                                                         DELAY on DQ (used in the controller to determine the
26275                                                         R->W spacing to avoid DQS/DQ bus conflicts). Enter
26276                                                         the largest of the per byte Board delay
26277                                                             - 00: 0 dclk
26278                                                             - 01: 1 dclks
26279                                                             - 10: 2 dclks
26280                                                             - 11: 3 dclks */
26281        uint64_t qs_dic                  : 2;       /**< DDR2 Termination Resistor Setting
26282                                                         A non Zero value in this register
26283                                                         enables the On Die Termination (ODT) in DDR parts.
26284                                                         These two bits are loaded into the RTT
26285                                                         portion of the EMRS register bits A6 & A2. If DDR2's
26286                                                         termination (for the memory's DQ/DQS/DM pads) is not
26287                                                         desired, set it to 00. If it is, chose between
26288                                                         01 for 75 ohm and 10 for 150 ohm termination.
26289                                                             00 = ODT Disabled
26290                                                             01 = 75 ohm Termination
26291                                                             10 = 150 ohm Termination
26292                                                             11 = 50 ohm Termination
26293                                                         Octeon, on writes, by default, drives the 4/8 ODT
26294                                                         pins (64/128b mode) based on what the masks
26295                                                         (LMC_WODT_CTL) are programmed to.
26296                                                         LMC_DDR2_CTL->ODT_ENA enables Octeon to drive ODT pins
26297                                                         for READS. LMC_RODT_CTL needs to be programmed based
26298                                                         on the system's needs for ODT. */
26299        uint64_t dic                     : 2;       /**< Drive Strength Control:
26300                                                         DIC[0] is
26301                                                         loaded into the Extended Mode Register (EMRS) A1 bit
26302                                                         during initialization.
26303                                                             0 = Normal
26304                                                             1 = Reduced
26305                                                         DIC[1] is used to load into EMRS
26306                                                         bit 10 - DQSN Enable/Disable field. By default, we
26307                                                         program the DDR's to drive the DQSN also. Set it to
26308                                                         1 if DQSN should be Hi-Z.
26309                                                             0 - DQSN Enable
26310                                                             1 - DQSN Disable */
26311#else
26312        uint64_t dic                     : 2;
26313        uint64_t qs_dic                  : 2;
26314        uint64_t tskw                    : 2;
26315        uint64_t sil_lat                 : 2;
26316        uint64_t bprch                   : 1;
26317        uint64_t fprch2                  : 1;
26318        uint64_t mode128b                : 1;
26319        uint64_t dreset                  : 1;
26320        uint64_t inorder_mrf             : 1;
26321        uint64_t inorder_mwf             : 1;
26322        uint64_t r2r_slot                : 1;
26323        uint64_t rdimm_ena               : 1;
26324        uint64_t reserved_16_17          : 2;
26325        uint64_t max_write_batch         : 4;
26326        uint64_t xor_bank                : 1;
26327        uint64_t slow_scf                : 1;
26328        uint64_t ddr__pctl               : 4;
26329        uint64_t ddr__nctl               : 4;
26330        uint64_t reserved_32_63          : 32;
26331#endif
26332    } cn58xx;
26333    struct cvmx_lmcx_ctl_cn58xx          cn58xxp1;
26334} cvmx_lmcx_ctl_t;
26335
26336
26337/**
26338 * cvmx_lmc#_ctl1
26339 *
26340 * LMC_CTL1 = LMC Control1
26341 * This register is an assortment of various control fields needed by the memory controller
26342 */
26343typedef union
26344{
26345    uint64_t u64;
26346    struct cvmx_lmcx_ctl1_s
26347    {
26348#if __BYTE_ORDER == __BIG_ENDIAN
26349        uint64_t reserved_21_63          : 43;
26350        uint64_t ecc_adr                 : 1;       /**< Include memory reference address in the ECC calculation
26351                                                         0=disabled, 1=enabled */
26352        uint64_t forcewrite              : 4;       /**< Force the oldest outstanding write to complete after
26353                                                         having waited for 2^FORCEWRITE cycles.  0=disabled. */
26354        uint64_t idlepower               : 3;       /**< Enter power-down mode after the memory controller has
26355                                                         been idle for 2^(2+IDLEPOWER) cycles.  0=disabled. */
26356        uint64_t sequence                : 3;       /**< Instruction sequence that is run after a 0->1 transition
26357                                                         on LMC_MEM_CFG0[INIT_START].
26358                                                         0=DDR2 power-up/init, 1=read-leveling
26359                                                         2=self-refresh entry, 3=self-refresh exit,
26360                                                         4=power-down entry, 5=power-down exit, 6=7=illegal */
26361        uint64_t sil_mode                : 1;       /**< Read Silo mode.  0=envelope, 1=self-timed. */
26362        uint64_t dcc_enable              : 1;       /**< Duty Cycle Corrector Enable.
26363                                                         0=disable, 1=enable
26364                                                         If the memory part does not support DCC, then this bit
26365                                                         must be set to 0. */
26366        uint64_t reserved_2_7            : 6;
26367        uint64_t data_layout             : 2;       /**< Logical data layout per DQ byte lane:
26368                                                         In 32b mode, this setting has no effect and the data
26369                                                         layout DQ[35:0] is the following:
26370                                                             [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]]
26371                                                         In 16b mode, the DQ[35:0] layouts are the following:
26372                                                         0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]]
26373                                                         1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]]
26374                                                         2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]]
26375                                                         where E means ecc, D means data, and 0 means unused
26376                                                         (ignored on reads and written as 0 on writes) */
26377#else
26378        uint64_t data_layout             : 2;
26379        uint64_t reserved_2_7            : 6;
26380        uint64_t dcc_enable              : 1;
26381        uint64_t sil_mode                : 1;
26382        uint64_t sequence                : 3;
26383        uint64_t idlepower               : 3;
26384        uint64_t forcewrite              : 4;
26385        uint64_t ecc_adr                 : 1;
26386        uint64_t reserved_21_63          : 43;
26387#endif
26388    } s;
26389    struct cvmx_lmcx_ctl1_cn30xx
26390    {
26391#if __BYTE_ORDER == __BIG_ENDIAN
26392        uint64_t reserved_2_63           : 62;
26393        uint64_t data_layout             : 2;       /**< Logical data layout per DQ byte lane:
26394                                                         In 32b mode, this setting has no effect and the data
26395                                                         layout DQ[35:0] is the following:
26396                                                             [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]]
26397                                                         In 16b mode, the DQ[35:0] layouts are the following:
26398                                                         0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]]
26399                                                         1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]]
26400                                                         2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]]
26401                                                         where E means ecc, D means data, and 0 means unused
26402                                                         (ignored on reads and written as 0 on writes) */
26403#else
26404        uint64_t data_layout             : 2;
26405        uint64_t reserved_2_63           : 62;
26406#endif
26407    } cn30xx;
26408    struct cvmx_lmcx_ctl1_cn50xx
26409    {
26410#if __BYTE_ORDER == __BIG_ENDIAN
26411        uint64_t reserved_10_63          : 54;
26412        uint64_t sil_mode                : 1;       /**< Read Silo mode.  0=envelope, 1=self-timed. */
26413        uint64_t dcc_enable              : 1;       /**< Duty Cycle Corrector Enable.
26414                                                         0=disable, 1=enable
26415                                                         If the memory part does not support DCC, then this bit
26416                                                         must be set to 0. */
26417        uint64_t reserved_2_7            : 6;
26418        uint64_t data_layout             : 2;       /**< Logical data layout per DQ byte lane:
26419                                                         In 32b mode, this setting has no effect and the data
26420                                                         layout DQ[35:0] is the following:
26421                                                             [E[3:0], D[31:24], D[23:16], D[15:8], D[7:0]]
26422                                                         In 16b mode, the DQ[35:0] layouts are the following:
26423                                                         0 - [0[3:0], 0[7:0], [0[7:2], E[1:0]], D[15:8], D[7:0]]
26424                                                         1 - [0[3:0], [0[7:2], E[1:0]], D[15:8], D[7:0], 0[7:0]]
26425                                                         2 - [[0[1:0], E[1:0]], D[15:8], D[7:0], 0[7:0], 0[7:0]]
26426                                                         where E means ecc, D means data, and 0 means unused
26427                                                         (ignored on reads and written as 0 on writes) */
26428#else
26429        uint64_t data_layout             : 2;
26430        uint64_t reserved_2_7            : 6;
26431        uint64_t dcc_enable              : 1;
26432        uint64_t sil_mode                : 1;
26433        uint64_t reserved_10_63          : 54;
26434#endif
26435    } cn50xx;
26436    struct cvmx_lmcx_ctl1_cn52xx
26437    {
26438#if __BYTE_ORDER == __BIG_ENDIAN
26439        uint64_t reserved_21_63          : 43;
26440        uint64_t ecc_adr                 : 1;       /**< Include memory reference address in the ECC calculation
26441                                                         0=disabled, 1=enabled */
26442        uint64_t forcewrite              : 4;       /**< Force the oldest outstanding write to complete after
26443                                                         having waited for 2^FORCEWRITE cycles.  0=disabled. */
26444        uint64_t idlepower               : 3;       /**< Enter power-down mode after the memory controller has
26445                                                         been idle for 2^(2+IDLEPOWER) cycles.  0=disabled. */
26446        uint64_t sequence                : 3;       /**< Instruction sequence that is run after a 0->1 transition
26447                                                         on LMC_MEM_CFG0[INIT_START].
26448                                                         0=DDR2 power-up/init, 1=read-leveling
26449                                                         2=self-refresh entry, 3=self-refresh exit,
26450                                                         4=power-down entry, 5=power-down exit, 6=7=illegal */
26451        uint64_t sil_mode                : 1;       /**< Read Silo mode.  0=envelope, 1=self-timed. */
26452        uint64_t dcc_enable              : 1;       /**< Duty Cycle Corrector Enable.
26453                                                         0=disable, 1=enable
26454                                                         If the memory part does not support DCC, then this bit
26455                                                         must be set to 0. */
26456        uint64_t reserved_0_7            : 8;
26457#else
26458        uint64_t reserved_0_7            : 8;
26459        uint64_t dcc_enable              : 1;
26460        uint64_t sil_mode                : 1;
26461        uint64_t sequence                : 3;
26462        uint64_t idlepower               : 3;
26463        uint64_t forcewrite              : 4;
26464        uint64_t ecc_adr                 : 1;
26465        uint64_t reserved_21_63          : 43;
26466#endif
26467    } cn52xx;
26468    struct cvmx_lmcx_ctl1_cn52xx         cn52xxp1;
26469    struct cvmx_lmcx_ctl1_cn52xx         cn56xx;
26470    struct cvmx_lmcx_ctl1_cn52xx         cn56xxp1;
26471    struct cvmx_lmcx_ctl1_cn58xx
26472    {
26473#if __BYTE_ORDER == __BIG_ENDIAN
26474        uint64_t reserved_10_63          : 54;
26475        uint64_t sil_mode                : 1;       /**< Read Silo mode.  0=envelope, 1=self-timed. */
26476        uint64_t dcc_enable              : 1;       /**< Duty Cycle Corrector Enable.
26477                                                         0=disable, 1=enable
26478                                                         If the memory part does not support DCC, then this bit
26479                                                         must be set to 0. */
26480        uint64_t reserved_0_7            : 8;
26481#else
26482        uint64_t reserved_0_7            : 8;
26483        uint64_t dcc_enable              : 1;
26484        uint64_t sil_mode                : 1;
26485        uint64_t reserved_10_63          : 54;
26486#endif
26487    } cn58xx;
26488    struct cvmx_lmcx_ctl1_cn58xx         cn58xxp1;
26489} cvmx_lmcx_ctl1_t;
26490
26491
26492/**
26493 * cvmx_lmc#_dclk_cnt_hi
26494 *
26495 * LMC_DCLK_CNT_HI  = Performance Counters
26496 *
26497 */
26498typedef union
26499{
26500    uint64_t u64;
26501    struct cvmx_lmcx_dclk_cnt_hi_s
26502    {
26503#if __BYTE_ORDER == __BIG_ENDIAN
26504        uint64_t reserved_32_63          : 32;
26505        uint64_t dclkcnt_hi              : 32;      /**< Performance Counter that counts dclks
26506                                                         Upper 32-bits of a 64-bit counter. */
26507#else
26508        uint64_t dclkcnt_hi              : 32;
26509        uint64_t reserved_32_63          : 32;
26510#endif
26511    } s;
26512    struct cvmx_lmcx_dclk_cnt_hi_s       cn30xx;
26513    struct cvmx_lmcx_dclk_cnt_hi_s       cn31xx;
26514    struct cvmx_lmcx_dclk_cnt_hi_s       cn38xx;
26515    struct cvmx_lmcx_dclk_cnt_hi_s       cn38xxp2;
26516    struct cvmx_lmcx_dclk_cnt_hi_s       cn50xx;
26517    struct cvmx_lmcx_dclk_cnt_hi_s       cn52xx;
26518    struct cvmx_lmcx_dclk_cnt_hi_s       cn52xxp1;
26519    struct cvmx_lmcx_dclk_cnt_hi_s       cn56xx;
26520    struct cvmx_lmcx_dclk_cnt_hi_s       cn56xxp1;
26521    struct cvmx_lmcx_dclk_cnt_hi_s       cn58xx;
26522    struct cvmx_lmcx_dclk_cnt_hi_s       cn58xxp1;
26523} cvmx_lmcx_dclk_cnt_hi_t;
26524
26525
26526/**
26527 * cvmx_lmc#_dclk_cnt_lo
26528 *
26529 * LMC_DCLK_CNT_LO  = Performance Counters
26530 *
26531 */
26532typedef union
26533{
26534    uint64_t u64;
26535    struct cvmx_lmcx_dclk_cnt_lo_s
26536    {
26537#if __BYTE_ORDER == __BIG_ENDIAN
26538        uint64_t reserved_32_63          : 32;
26539        uint64_t dclkcnt_lo              : 32;      /**< Performance Counter that counts dclks
26540                                                         Lower 32-bits of a 64-bit counter. */
26541#else
26542        uint64_t dclkcnt_lo              : 32;
26543        uint64_t reserved_32_63          : 32;
26544#endif
26545    } s;
26546    struct cvmx_lmcx_dclk_cnt_lo_s       cn30xx;
26547    struct cvmx_lmcx_dclk_cnt_lo_s       cn31xx;
26548    struct cvmx_lmcx_dclk_cnt_lo_s       cn38xx;
26549    struct cvmx_lmcx_dclk_cnt_lo_s       cn38xxp2;
26550    struct cvmx_lmcx_dclk_cnt_lo_s       cn50xx;
26551    struct cvmx_lmcx_dclk_cnt_lo_s       cn52xx;
26552    struct cvmx_lmcx_dclk_cnt_lo_s       cn52xxp1;
26553    struct cvmx_lmcx_dclk_cnt_lo_s       cn56xx;
26554    struct cvmx_lmcx_dclk_cnt_lo_s       cn56xxp1;
26555    struct cvmx_lmcx_dclk_cnt_lo_s       cn58xx;
26556    struct cvmx_lmcx_dclk_cnt_lo_s       cn58xxp1;
26557} cvmx_lmcx_dclk_cnt_lo_t;
26558
26559
26560/**
26561 * cvmx_lmc#_dclk_ctl
26562 *
26563 * LMC_DCLK_CTL = LMC DCLK generation control
26564 *
26565 *
26566 * Notes:
26567 * This CSR is only relevant for LMC1. LMC0_DCLK_CTL is not used.
26568 *
26569 */
26570typedef union
26571{
26572    uint64_t u64;
26573    struct cvmx_lmcx_dclk_ctl_s
26574    {
26575#if __BYTE_ORDER == __BIG_ENDIAN
26576        uint64_t reserved_8_63           : 56;
26577        uint64_t off90_ena               : 1;       /**< 0=use global DCLK (i.e. the PLL) directly for LMC1
26578                                                         1=use the 90 degree DCLK DLL to offset LMC1 DCLK */
26579        uint64_t dclk90_byp              : 1;       /**< 0=90 degree DCLK DLL uses sampled delay from LMC0
26580                                                         1=90 degree DCLK DLL uses DCLK90_VLU
26581                                                         See DCLK90_VLU. */
26582        uint64_t dclk90_ld               : 1;       /**< The 90 degree DCLK DLL samples the delay setting
26583                                                         from LMC0's DLL when this field transitions 0->1 */
26584        uint64_t dclk90_vlu              : 5;       /**< Manual open-loop delay setting.
26585                                                         The LMC1 90 degree DCLK DLL uses DCLK90_VLU rather
26586                                                         than the delay setting sampled from LMC0 when
26587                                                         DCLK90_BYP=1. */
26588#else
26589        uint64_t dclk90_vlu              : 5;
26590        uint64_t dclk90_ld               : 1;
26591        uint64_t dclk90_byp              : 1;
26592        uint64_t off90_ena               : 1;
26593        uint64_t reserved_8_63           : 56;
26594#endif
26595    } s;
26596    struct cvmx_lmcx_dclk_ctl_s          cn56xx;
26597    struct cvmx_lmcx_dclk_ctl_s          cn56xxp1;
26598} cvmx_lmcx_dclk_ctl_t;
26599
26600
26601/**
26602 * cvmx_lmc#_ddr2_ctl
26603 *
26604 * LMC_DDR2_CTL = LMC DDR2 & DLL Control Register
26605 *
26606 */
26607typedef union
26608{
26609    uint64_t u64;
26610    struct cvmx_lmcx_ddr2_ctl_s
26611    {
26612#if __BYTE_ORDER == __BIG_ENDIAN
26613        uint64_t reserved_32_63          : 32;
26614        uint64_t bank8                   : 1;       /**< For 8 bank DDR2 parts
26615                                                         1 - DDR2 parts have 8 internal banks (BA is 3 bits
26616                                                         wide).
26617                                                         0 - DDR2 parts have 4 internal banks (BA is 2 bits
26618                                                         wide). */
26619        uint64_t burst8                  : 1;       /**< 8-burst mode.
26620                                                         1 - DDR data transfer happens in burst of 8
26621                                                         0 - DDR data transfer happens in burst of 4
26622                                                         BURST8 should be set when DDR2T is set
26623                                                         to minimize the command bandwidth loss. */
26624        uint64_t addlat                  : 3;       /**< Additional Latency for posted CAS
26625                                                         When Posted CAS is on, this configures the additional
26626                                                         latency. This should be set to
26627                                                                1 .. LMC_MEM_CFG1[TRCD]-2
26628                                                         (Note the implication that posted CAS should not
26629                                                         be used when tRCD is two.) */
26630        uint64_t pocas                   : 1;       /**< Enable the Posted CAS feature of DDR2. */
26631        uint64_t bwcnt                   : 1;       /**< Bus utilization counter Clear.
26632                                                         Clears the LMC_OPS_CNT_*, LMC_IFB_CNT_*, and
26633                                                         LMC_DCLK_CNT_* registers. SW should first write this
26634                                                         field to a one, then write this field to a zero to
26635                                                         clear the CSR's. */
26636        uint64_t twr                     : 3;       /**< DDR Write Recovery time (tWR). Last Wr Brst to Pre delay
26637                                                         This is not a direct encoding of the value. Its
26638                                                         programmed as below per DDR2 spec. The decimal number
26639                                                         on the right is RNDUP(tWR(ns) / tCYC(ns))
26640                                                          TYP=15ns
26641                                                             - 000: RESERVED
26642                                                             - 001: 2
26643                                                             - 010: 3
26644                                                             - 011: 4
26645                                                             - 100: 5
26646                                                             - 101: 6
26647                                                             - 110: 7
26648                                                             - 111: 8 */
26649        uint64_t silo_hc                 : 1;       /**< Delays the read sample window by a Half Cycle. */
26650        uint64_t ddr_eof                 : 4;       /**< Early Fill Counter Init.
26651                                                         L2 needs to know a few cycle before a fill completes so
26652                                                         it can get its Control pipe started (for better overall
26653                                                         performance). This counter contains  an init value which
26654                                                         is a function of Eclk/Dclk ratio to account for the
26655                                                         asynchronous boundary between L2 cache and the DRAM
26656                                                         controller. This init value will
26657                                                         determine when to safely let the L2 know that a fill
26658                                                         termination is coming up.
26659                                                         Set DDR_EOF according to the following rule:
26660                                                         eclkFreq/dclkFreq = dclkPeriod/eclkPeriod = RATIO
26661                                                                RATIO < 6/6  -> illegal
26662                                                         6/6 <= RATIO < 6/5  -> DDR_EOF=3
26663                                                         6/5 <= RATIO < 6/4  -> DDR_EOF=3
26664                                                         6/4 <= RATIO < 6/3  -> DDR_EOF=2
26665                                                         6/3 <= RATIO < 6/2  -> DDR_EOF=1
26666                                                         6/2 <= RATIO < 6/1  -> DDR_EOF=0
26667                                                         6/1 <= RATIO        -> DDR_EOF=0 */
26668        uint64_t tfaw                    : 5;       /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1
26669                                                         Four Access Window time. Relevant only in DDR2 AND in
26670                                                         8-bank parts.
26671                                                             tFAW = 5'b0 in DDR2-4bank
26672                                                             tFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1
26673                                                                      in DDR2-8bank */
26674        uint64_t crip_mode               : 1;       /**< Cripple Mode - When set, the LMC allows only
26675                                                         1 inflight transaction (.vs. 8 in normal mode).
26676                                                         This bit is ONLY to be set at power-on and
26677                                                         should not be set for normal use. */
26678        uint64_t ddr2t                   : 1;       /**< Turn on the DDR 2T mode. 2 cycle window for CMD and
26679                                                         address. This mode helps relieve setup time pressure
26680                                                         on the Address and command bus which nominally have
26681                                                         a very large fanout. Please refer to Micron's tech
26682                                                         note tn_47_01 titled "DDR2-533 Memory Design Guide
26683                                                         for Two Dimm Unbuffered Systems" for physical details.
26684                                                         BURST8 should be set when DDR2T is set to minimize
26685                                                         add/cmd loss. */
26686        uint64_t odt_ena                 : 1;       /**< Enable Obsolete ODT on Reads
26687                                                         Obsolete Read ODT wiggles DDR_ODT_* pins on reads.
26688                                                         Should normally be cleared to zero.
26689                                                         When this is on, the following fields must also be
26690                                                         programmed:
26691                                                             LMC_CTL->QS_DIC - programs the termination value
26692                                                             LMC_RODT_CTL - programs the ODT I/O mask for Reads */
26693        uint64_t qdll_ena                : 1;       /**< DDR Quad DLL Enable: A 0->1 transition on this bit after
26694                                                         DCLK init sequence will reset the DDR 90 DLL. Should
26695                                                         happen at startup before any activity in DDR.
26696                                                         DRESET should be asserted before and for 10 usec
26697                                                         following the 0->1 transition on QDLL_ENA. */
26698        uint64_t dll90_vlu               : 5;       /**< Contains the open loop setting value for the DDR90 delay
26699                                                         line. */
26700        uint64_t dll90_byp               : 1;       /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be
26701                                                         bypassed and the setting is defined by DLL90_VLU */
26702        uint64_t rdqs                    : 1;       /**< DDR2 RDQS mode. When set, configures memory subsystem to
26703                                                         use unidirectional DQS pins. RDQS/DM - Rcv & DQS - Xmit */
26704        uint64_t ddr2                    : 1;       /**< Should be set */
26705#else
26706        uint64_t ddr2                    : 1;
26707        uint64_t rdqs                    : 1;
26708        uint64_t dll90_byp               : 1;
26709        uint64_t dll90_vlu               : 5;
26710        uint64_t qdll_ena                : 1;
26711        uint64_t odt_ena                 : 1;
26712        uint64_t ddr2t                   : 1;
26713        uint64_t crip_mode               : 1;
26714        uint64_t tfaw                    : 5;
26715        uint64_t ddr_eof                 : 4;
26716        uint64_t silo_hc                 : 1;
26717        uint64_t twr                     : 3;
26718        uint64_t bwcnt                   : 1;
26719        uint64_t pocas                   : 1;
26720        uint64_t addlat                  : 3;
26721        uint64_t burst8                  : 1;
26722        uint64_t bank8                   : 1;
26723        uint64_t reserved_32_63          : 32;
26724#endif
26725    } s;
26726    struct cvmx_lmcx_ddr2_ctl_cn30xx
26727    {
26728#if __BYTE_ORDER == __BIG_ENDIAN
26729        uint64_t reserved_32_63          : 32;
26730        uint64_t bank8                   : 1;       /**< For 8 bank DDR2 parts
26731                                                         1 - DDR2 parts have 8 internal banks (BA is 3 bits
26732                                                         wide).
26733                                                         0 - DDR2 parts have 4 internal banks (BA is 2 bits
26734                                                         wide). */
26735        uint64_t burst8                  : 1;       /**< 8-burst mode.
26736                                                         1 - DDR data transfer happens in burst of 8
26737                                                         0 - DDR data transfer happens in burst of 4
26738                                                         BURST8 should be set when DDR2T is set to minimize
26739                                                         add/cmd bandwidth loss. */
26740        uint64_t addlat                  : 3;       /**< Additional Latency for posted CAS
26741                                                         When Posted CAS is on, this configures the additional
26742                                                         latency. This should be set to
26743                                                                1 .. LMC_MEM_CFG1[TRCD]-2
26744                                                         (Note the implication that posted CAS should not
26745                                                         be used when tRCD is two.) */
26746        uint64_t pocas                   : 1;       /**< Enable the Posted CAS feature of DDR2. */
26747        uint64_t bwcnt                   : 1;       /**< Bus utilization counter Clear.
26748                                                         Clears the LMC_OPS_CNT_*, LMC_IFB_CNT_*, and
26749                                                         LMC_DCLK_CNT_* registers. SW should first write this
26750                                                         field to a one, then write this field to a zero to
26751                                                         clear the CSR's. */
26752        uint64_t twr                     : 3;       /**< DDR Write Recovery time (tWR). Last Wr Brst to Pre delay
26753                                                         This is not a direct encoding of the value. Its
26754                                                         programmed as below per DDR2 spec. The decimal number
26755                                                         on the right is RNDUP(tWR(ns) / tCYC(ns))
26756                                                          TYP=15ns
26757                                                             - 000: RESERVED
26758                                                             - 001: 2
26759                                                             - 010: 3
26760                                                             - 011: 4
26761                                                             - 100: 5
26762                                                             - 101: 6
26763                                                             - 110-111: RESERVED */
26764        uint64_t silo_hc                 : 1;       /**< Delays the read sample window by a Half Cycle. */
26765        uint64_t ddr_eof                 : 4;       /**< Early Fill Counter Init.
26766                                                         L2 needs to know a few cycle before a fill completes so
26767                                                         it can get its Control pipe started (for better overall
26768                                                         performance). This counter contains  an init value which
26769                                                         is a function of Eclk/Dclk ratio to account for the
26770                                                         asynchronous boundary between L2 cache and the DRAM
26771                                                         controller. This init value will
26772                                                         determine when to safely let the L2 know that a fill
26773                                                         termination is coming up.
26774                                                         DDR_EOF = RNDUP (DCLK period/Eclk Period). If the ratio
26775                                                         is above 3, set DDR_EOF to 3.
26776                                                             DCLK/ECLK period         DDR_EOF
26777                                                                Less than 1            1
26778                                                                Less than 2            2
26779                                                                More than 2            3 */
26780        uint64_t tfaw                    : 5;       /**< tFAW - Cycles = RNDUP[tFAW(ns)/tcyc(ns)] - 1
26781                                                         Four Access Window time. Relevant only in
26782                                                         8-bank parts.
26783                                                             TFAW = 5'b0 for DDR2-4bank
26784                                                             TFAW = RNDUP[tFAW(ns)/tcyc(ns)] - 1 in DDR2-8bank */
26785        uint64_t crip_mode               : 1;       /**< Cripple Mode - When set, the LMC allows only
26786                                                         1 inflight transaction (.vs. 8 in normal mode).
26787                                                         This bit is ONLY to be set at power-on and
26788                                                         should not be set for normal use. */
26789        uint64_t ddr2t                   : 1;       /**< Turn on the DDR 2T mode. 2 cycle window for CMD and
26790                                                         address. This mode helps relieve setup time pressure
26791                                                         on the Address and command bus which nominally have
26792                                                         a very large fanout. Please refer to Micron's tech
26793                                                         note tn_47_01 titled "DDR2-533 Memory Design Guide
26794                                                         for Two Dimm Unbuffered Systems" for physical details.
26795                                                         BURST8 should be used when DDR2T is set to minimize
26796                                                         add/cmd bandwidth loss. */
26797        uint64_t odt_ena                 : 1;       /**< Enable ODT for DDR2 on Reads
26798                                                         When this is on, the following fields must also be
26799                                                         programmed:
26800                                                             LMC_CTL->QS_DIC - programs the termination value
26801                                                             LMC_RODT_CTL - programs the ODT I/O mask for writes
26802                                                         Program as 0 for DDR1 mode and ODT needs to be off
26803                                                         on Octeon Reads */
26804        uint64_t qdll_ena                : 1;       /**< DDR Quad DLL Enable: A 0->1 transition on this bit after
26805                                                         erst deassertion will reset the DDR 90 DLL. Should
26806                                                         happen at startup before any activity in DDR. */
26807        uint64_t dll90_vlu               : 5;       /**< Contains the open loop setting value for the DDR90 delay
26808                                                         line. */
26809        uint64_t dll90_byp               : 1;       /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be
26810                                                         bypassed and the setting is defined by DLL90_VLU */
26811        uint64_t reserved_1_1            : 1;
26812        uint64_t ddr2                    : 1;       /**< DDR2 Enable: When set, configures memory subsystem for
26813                                                         DDR-II SDRAMs. */
26814#else
26815        uint64_t ddr2                    : 1;
26816        uint64_t reserved_1_1            : 1;
26817        uint64_t dll90_byp               : 1;
26818        uint64_t dll90_vlu               : 5;
26819        uint64_t qdll_ena                : 1;
26820        uint64_t odt_ena                 : 1;
26821        uint64_t ddr2t                   : 1;
26822        uint64_t crip_mode               : 1;
26823        uint64_t tfaw                    : 5;
26824        uint64_t ddr_eof                 : 4;
26825        uint64_t silo_hc                 : 1;
26826        uint64_t twr                     : 3;
26827        uint64_t bwcnt                   : 1;
26828        uint64_t pocas                   : 1;
26829        uint64_t addlat                  : 3;
26830        uint64_t burst8                  : 1;
26831        uint64_t bank8                   : 1;
26832        uint64_t reserved_32_63          : 32;
26833#endif
26834    } cn30xx;
26835    struct cvmx_lmcx_ddr2_ctl_cn30xx     cn31xx;
26836    struct cvmx_lmcx_ddr2_ctl_s          cn38xx;
26837    struct cvmx_lmcx_ddr2_ctl_s          cn38xxp2;
26838    struct cvmx_lmcx_ddr2_ctl_s          cn50xx;
26839    struct cvmx_lmcx_ddr2_ctl_s          cn52xx;
26840    struct cvmx_lmcx_ddr2_ctl_s          cn52xxp1;
26841    struct cvmx_lmcx_ddr2_ctl_s          cn56xx;
26842    struct cvmx_lmcx_ddr2_ctl_s          cn56xxp1;
26843    struct cvmx_lmcx_ddr2_ctl_s          cn58xx;
26844    struct cvmx_lmcx_ddr2_ctl_s          cn58xxp1;
26845} cvmx_lmcx_ddr2_ctl_t;
26846
26847
26848/**
26849 * cvmx_lmc#_delay_cfg
26850 *
26851 * LMC_DELAY_CFG = Open-loop delay line settings
26852 *
26853 *
26854 * Notes:
26855 * The DQ bits add OUTGOING delay only to dq, dqs_[p,n], cb, cbs_[p,n], dqm.  Delay is approximately
26856 * 50-80ps per setting depending on process/voltage.  There is no need to add incoming delay since by
26857 * default all strobe bits are delayed internally by 90 degrees (as was always the case in previous
26858 * passes and past chips.
26859 *
26860 * The CMD add delay to all command bits DDR_RAS, DDR_CAS, DDR_A<15:0>, DDR_BA<2:0>, DDR_n_CS<1:0>_L,
26861 * DDR_WE, DDR_CKE and DDR_ODT_<7:0>. Again, delay is 50-80ps per tap.
26862 *
26863 * The CLK bits add delay to all clock signals DDR_CK_<5:0>_P and DDR_CK_<5:0>_N.  Again, delay is
26864 * 50-80ps per tap.
26865 *
26866 * The usage scenario is the following: There is too much delay on command signals and setup on command
26867 * is not met. The user can then delay the clock until setup is met.
26868 *
26869 * At the same time though, dq/dqs should be delayed because there is also a DDR spec tying dqs with
26870 * clock. If clock is too much delayed with respect to dqs, writes will start to fail.
26871 *
26872 * This scheme should eliminate the board need of adding routing delay to clock signals to make high
26873 * frequencies work.
26874 */
26875typedef union
26876{
26877    uint64_t u64;
26878    struct cvmx_lmcx_delay_cfg_s
26879    {
26880#if __BYTE_ORDER == __BIG_ENDIAN
26881        uint64_t reserved_15_63          : 49;
26882        uint64_t dq                      : 5;       /**< Setting for DQ  delay line */
26883        uint64_t cmd                     : 5;       /**< Setting for CMD delay line */
26884        uint64_t clk                     : 5;       /**< Setting for CLK delay line */
26885#else
26886        uint64_t clk                     : 5;
26887        uint64_t cmd                     : 5;
26888        uint64_t dq                      : 5;
26889        uint64_t reserved_15_63          : 49;
26890#endif
26891    } s;
26892    struct cvmx_lmcx_delay_cfg_s         cn30xx;
26893    struct cvmx_lmcx_delay_cfg_cn38xx
26894    {
26895#if __BYTE_ORDER == __BIG_ENDIAN
26896        uint64_t reserved_14_63          : 50;
26897        uint64_t dq                      : 4;       /**< Setting for DQ  delay line */
26898        uint64_t reserved_9_9            : 1;
26899        uint64_t cmd                     : 4;       /**< Setting for CMD delay line */
26900        uint64_t reserved_4_4            : 1;
26901        uint64_t clk                     : 4;       /**< Setting for CLK delay line */
26902#else
26903        uint64_t clk                     : 4;
26904        uint64_t reserved_4_4            : 1;
26905        uint64_t cmd                     : 4;
26906        uint64_t reserved_9_9            : 1;
26907        uint64_t dq                      : 4;
26908        uint64_t reserved_14_63          : 50;
26909#endif
26910    } cn38xx;
26911    struct cvmx_lmcx_delay_cfg_cn38xx    cn50xx;
26912    struct cvmx_lmcx_delay_cfg_cn38xx    cn52xx;
26913    struct cvmx_lmcx_delay_cfg_cn38xx    cn52xxp1;
26914    struct cvmx_lmcx_delay_cfg_cn38xx    cn56xx;
26915    struct cvmx_lmcx_delay_cfg_cn38xx    cn56xxp1;
26916    struct cvmx_lmcx_delay_cfg_cn38xx    cn58xx;
26917    struct cvmx_lmcx_delay_cfg_cn38xx    cn58xxp1;
26918} cvmx_lmcx_delay_cfg_t;
26919
26920
26921/**
26922 * cvmx_lmc#_dll_ctl
26923 *
26924 * LMC_DLL_CTL = LMC DLL control and DCLK reset
26925 *
26926 */
26927typedef union
26928{
26929    uint64_t u64;
26930    struct cvmx_lmcx_dll_ctl_s
26931    {
26932#if __BYTE_ORDER == __BIG_ENDIAN
26933        uint64_t reserved_8_63           : 56;
26934        uint64_t dreset                  : 1;       /**< Dclk domain reset.  The reset signal that is used by the
26935                                                         Dclk domain is (DRESET || ECLK_RESET). */
26936        uint64_t dll90_byp               : 1;       /**< DDR DLL90 Bypass: When set, the DDR90 DLL is to be
26937                                                         bypassed and the setting is defined by DLL90_VLU */
26938        uint64_t dll90_ena               : 1;       /**< DDR Quad DLL Enable: A 0->1 transition on this bit after
26939                                                         DCLK init sequence resets the DDR 90 DLL. Should
26940                                                         happen at startup before any activity in DDR. QDLL_ENA
26941                                                         must not transition 1->0 outside of a DRESET sequence
26942                                                         (i.e. it must remain 1 until the next DRESET).
26943                                                         DRESET should be asserted before and for 10 usec
26944                                                         following the 0->1 transition on QDLL_ENA. */
26945        uint64_t dll90_vlu               : 5;       /**< Contains the open loop setting value for the DDR90 delay
26946                                                         line. */
26947#else
26948        uint64_t dll90_vlu               : 5;
26949        uint64_t dll90_ena               : 1;
26950        uint64_t dll90_byp               : 1;
26951        uint64_t dreset                  : 1;
26952        uint64_t reserved_8_63           : 56;
26953#endif
26954    } s;
26955    struct cvmx_lmcx_dll_ctl_s           cn52xx;
26956    struct cvmx_lmcx_dll_ctl_s           cn52xxp1;
26957    struct cvmx_lmcx_dll_ctl_s           cn56xx;
26958    struct cvmx_lmcx_dll_ctl_s           cn56xxp1;
26959} cvmx_lmcx_dll_ctl_t;
26960
26961
26962/**
26963 * cvmx_lmc#_dual_memcfg
26964 *
26965 * LMC_DUAL_MEMCFG = LMC Dual Memory Configuration Register
26966 *
26967 * This register controls certain parameters of Dual Memory Configuration
26968 *
26969 * Notes:
26970 * This register enables the design to have two, separate memory configurations, selected dynamically
26971 * by the reference address.  Note however, that both configurations share LMC_CTL[MODE128b],
26972 * LMC_CTL[XOR_BANK], LMC_MEM_CFG0[PBANK_LSB], LMC_MEM_CFG0[BUNK_ENA], and all timing parameters.
26973 * In this description, "config0" refers to the normal memory configuration that is defined by the
26974 * LMC_MEM_CFG0[ROW_LSB] andLMC_DDR2_CTL[BANK8] parameters and "config1" refers to the dual (or second)
26975 * memory configuration that is defined by this register.
26976 *
26977 * Memory config0 must be programmed for the part with the most strict timing requirements.  If a mix of
26978 * 4 bank and 8 bank parts is used, then config0 must be used for the 8 bank part (because the timing
26979 * requirements of tFAW and tRP are more strict for 8 bank parts than they are for 4 bank parts).
26980 *
26981 * Enable mask to chip select mapping is shown below:
26982 *   CS_MASK[7] -> DDR_3_CS_<1>
26983 *   CS_MASK[6] -> DDR_3_CS_<0>
26984 *
26985 *   CS_MASK[5] -> DDR_2_CS_<1>
26986 *   CS_MASK[4] -> DDR_2_CS_<0>
26987 *
26988 *   CS_MASK[3] -> DDR_1_CS_<1>
26989 *   CS_MASK[2] -> DDR_1_CS_<0>
26990 *
26991 *   CS_MASK[1] -> DDR_0_CS_<1>
26992 *   CS_MASK[0] -> DDR_0_CS_<0>
26993 *
26994 * the DIMMS are arranged in one of the following arrangements:
26995 *   LMC_CTL[MODE128b] == 1                                    LMC_CTL[MODE128b] == 0
26996 *
26997 *   DIMM3_RANK1  | DIMM1_RANK1  highest address               DIMM3_RANK1  highest addres
26998 *   DIMM3_RANK0  | DIMM1_RANK0                                DIMM3_RANK0
26999 *
27000 *   DIMM2_RANK1  | DIMM0_RANK1                                DIMM2_RANK1
27001 *   DIMM2_RANK0  | DIMM0_RANK0  lowest address                DIMM2_RANK0
27002 *
27003 *   data[127:64] | data_[63:0]                                DIMM1_RANK1
27004 *                                                             DIMM1_RANK0
27005 *
27006 *                                                             DIMM0_RANK1
27007 *                                                             DIMM0_RANK0  lowest address
27008 *
27009 *                                                             data_[63:0]
27010 *
27011 *  DIMM n uses the pair of chip selects DDR_n_CS_<1:0>.  When LMC_CTL[BUNK_ENA] == 1, each
27012 *  chip select in the pair asserts independently.  When LMC_CTL[BUNK_ENA] == 0, both chip
27013 *  selects in the pair assert together.
27014 *
27015 *  Programming restrictions for CS_MASK:
27016 *    when LMC_CTL[BUNK_ENA] == 0, CS_MASK[2n + 1] = CS_MASK[2n], where 0 <= n <= 3
27017 *    when LMC_CTL[MODE128b] == 1, CS_MASK[ n + 4] = CS_MASK[ n], where 0 <= n <= 3
27018 */
27019typedef union
27020{
27021    uint64_t u64;
27022    struct cvmx_lmcx_dual_memcfg_s
27023    {
27024#if __BYTE_ORDER == __BIG_ENDIAN
27025        uint64_t reserved_20_63          : 44;
27026        uint64_t bank8                   : 1;       /**< See LMC_DDR2_CTL[BANK8] */
27027        uint64_t row_lsb                 : 3;       /**< See LMC_MEM_CFG0[ROW_LSB] */
27028        uint64_t reserved_8_15           : 8;
27029        uint64_t cs_mask                 : 8;       /**< Chip select mask.
27030                                                         This mask corresponds to the 8 chip selects for a memory
27031                                                         configuration.  Each reference address will assert one of
27032                                                         the chip selects.  If that chip select has its
27033                                                         corresponding CS_MASK bit set, then the "config1"
27034                                                         parameters are used, otherwise the "config0" parameters
27035                                                         are used.  See additional notes below. */
27036#else
27037        uint64_t cs_mask                 : 8;
27038        uint64_t reserved_8_15           : 8;
27039        uint64_t row_lsb                 : 3;
27040        uint64_t bank8                   : 1;
27041        uint64_t reserved_20_63          : 44;
27042#endif
27043    } s;
27044    struct cvmx_lmcx_dual_memcfg_s       cn50xx;
27045    struct cvmx_lmcx_dual_memcfg_s       cn52xx;
27046    struct cvmx_lmcx_dual_memcfg_s       cn52xxp1;
27047    struct cvmx_lmcx_dual_memcfg_s       cn56xx;
27048    struct cvmx_lmcx_dual_memcfg_s       cn56xxp1;
27049    struct cvmx_lmcx_dual_memcfg_s       cn58xx;
27050    struct cvmx_lmcx_dual_memcfg_s       cn58xxp1;
27051} cvmx_lmcx_dual_memcfg_t;
27052
27053
27054/**
27055 * cvmx_lmc#_ecc_synd
27056 *
27057 * LMC_ECC_SYND = MRD ECC Syndromes
27058 *
27059 */
27060typedef union
27061{
27062    uint64_t u64;
27063    struct cvmx_lmcx_ecc_synd_s
27064    {
27065#if __BYTE_ORDER == __BIG_ENDIAN
27066        uint64_t reserved_32_63          : 32;
27067        uint64_t mrdsyn3                 : 8;       /**< MRD ECC Syndrome Quad3
27068                                                         128b mode -  corresponds to DQ[127:64], Phase1
27069                                                         64b mode  -  corresponds to DQ[127:64], Phase1, cycle1 */
27070        uint64_t mrdsyn2                 : 8;       /**< MRD ECC Syndrome Quad2
27071                                                         128b mode -  corresponds to DQ[63:0], Phase1
27072                                                         64b mode  -  corresponds to DQ[63:0], Phase1, cycle0 */
27073        uint64_t mrdsyn1                 : 8;       /**< MRD ECC Syndrome Quad1
27074                                                         128b mode -  corresponds to DQ[127:64], Phase0
27075                                                         64b mode  -  corresponds to DQ[127:64], Phase0, cycle1 */
27076        uint64_t mrdsyn0                 : 8;       /**< MRD ECC Syndrome Quad0
27077                                                         In 128b mode, ecc is calulated on 1 cycle worth of data
27078                                                         SYND0 corresponds to DQ[63:0], Phase0
27079                                                         In 64b mode, ecc is calculated on 2 cycle worth of data
27080                                                         SYND0 corresponds to DQ[63:0], Phase0, cycle0 */
27081#else
27082        uint64_t mrdsyn0                 : 8;
27083        uint64_t mrdsyn1                 : 8;
27084        uint64_t mrdsyn2                 : 8;
27085        uint64_t mrdsyn3                 : 8;
27086        uint64_t reserved_32_63          : 32;
27087#endif
27088    } s;
27089    struct cvmx_lmcx_ecc_synd_s          cn30xx;
27090    struct cvmx_lmcx_ecc_synd_s          cn31xx;
27091    struct cvmx_lmcx_ecc_synd_s          cn38xx;
27092    struct cvmx_lmcx_ecc_synd_s          cn38xxp2;
27093    struct cvmx_lmcx_ecc_synd_s          cn50xx;
27094    struct cvmx_lmcx_ecc_synd_s          cn52xx;
27095    struct cvmx_lmcx_ecc_synd_s          cn52xxp1;
27096    struct cvmx_lmcx_ecc_synd_s          cn56xx;
27097    struct cvmx_lmcx_ecc_synd_s          cn56xxp1;
27098    struct cvmx_lmcx_ecc_synd_s          cn58xx;
27099    struct cvmx_lmcx_ecc_synd_s          cn58xxp1;
27100} cvmx_lmcx_ecc_synd_t;
27101
27102
27103/**
27104 * cvmx_lmc#_fadr
27105 *
27106 * LMC_FADR = LMC Failing Address Register (SEC/DED)
27107 *
27108 * This register only captures the first transaction with ecc errors. A DBE error can
27109 * over-write this register with its failing addresses. If you write
27110 * LMC_MEM_CFG0->SEC_ERR/DED_ERR then it will clear the error bits and capture the
27111 * next failing address.
27112 * The phy mapping is a function of the num Col bits & \# row bits
27113 *
27114 * If failing dimm is 2 that means the error is in the higher bits dimm.
27115 */
27116typedef union
27117{
27118    uint64_t u64;
27119    struct cvmx_lmcx_fadr_s
27120    {
27121#if __BYTE_ORDER == __BIG_ENDIAN
27122        uint64_t reserved_32_63          : 32;
27123        uint64_t fdimm                   : 2;       /**< Failing DIMM# */
27124        uint64_t fbunk                   : 1;       /**< Failing Rank */
27125        uint64_t fbank                   : 3;       /**< Failing Bank[2:0] */
27126        uint64_t frow                    : 14;      /**< Failing Row Address[13:0] */
27127        uint64_t fcol                    : 12;      /**< Failing Column Start Address[11:0]
27128                                                         Represents the Failing read's starting column address
27129                                                         (and not the exact column address in which the SEC/DED
27130                                                         was detected) */
27131#else
27132        uint64_t fcol                    : 12;
27133        uint64_t frow                    : 14;
27134        uint64_t fbank                   : 3;
27135        uint64_t fbunk                   : 1;
27136        uint64_t fdimm                   : 2;
27137        uint64_t reserved_32_63          : 32;
27138#endif
27139    } s;
27140    struct cvmx_lmcx_fadr_s              cn30xx;
27141    struct cvmx_lmcx_fadr_s              cn31xx;
27142    struct cvmx_lmcx_fadr_s              cn38xx;
27143    struct cvmx_lmcx_fadr_s              cn38xxp2;
27144    struct cvmx_lmcx_fadr_s              cn50xx;
27145    struct cvmx_lmcx_fadr_s              cn52xx;
27146    struct cvmx_lmcx_fadr_s              cn52xxp1;
27147    struct cvmx_lmcx_fadr_s              cn56xx;
27148    struct cvmx_lmcx_fadr_s              cn56xxp1;
27149    struct cvmx_lmcx_fadr_s              cn58xx;
27150    struct cvmx_lmcx_fadr_s              cn58xxp1;
27151} cvmx_lmcx_fadr_t;
27152
27153
27154/**
27155 * cvmx_lmc#_ifb_cnt_hi
27156 *
27157 * LMC_IFB_CNT_HI  = Performance Counters
27158 *
27159 */
27160typedef union
27161{
27162    uint64_t u64;
27163    struct cvmx_lmcx_ifb_cnt_hi_s
27164    {
27165#if __BYTE_ORDER == __BIG_ENDIAN
27166        uint64_t reserved_32_63          : 32;
27167        uint64_t ifbcnt_hi               : 32;      /**< Performance Counter to measure Bus Utilization
27168                                                         Upper 32-bits of 64-bit counter that increments every
27169                                                         cycle there is something in the in-flight buffer. */
27170#else
27171        uint64_t ifbcnt_hi               : 32;
27172        uint64_t reserved_32_63          : 32;
27173#endif
27174    } s;
27175    struct cvmx_lmcx_ifb_cnt_hi_s        cn30xx;
27176    struct cvmx_lmcx_ifb_cnt_hi_s        cn31xx;
27177    struct cvmx_lmcx_ifb_cnt_hi_s        cn38xx;
27178    struct cvmx_lmcx_ifb_cnt_hi_s        cn38xxp2;
27179    struct cvmx_lmcx_ifb_cnt_hi_s        cn50xx;
27180    struct cvmx_lmcx_ifb_cnt_hi_s        cn52xx;
27181    struct cvmx_lmcx_ifb_cnt_hi_s        cn52xxp1;
27182    struct cvmx_lmcx_ifb_cnt_hi_s        cn56xx;
27183    struct cvmx_lmcx_ifb_cnt_hi_s        cn56xxp1;
27184    struct cvmx_lmcx_ifb_cnt_hi_s        cn58xx;
27185    struct cvmx_lmcx_ifb_cnt_hi_s        cn58xxp1;
27186} cvmx_lmcx_ifb_cnt_hi_t;
27187
27188
27189/**
27190 * cvmx_lmc#_ifb_cnt_lo
27191 *
27192 * LMC_IFB_CNT_LO  = Performance Counters
27193 *
27194 */
27195typedef union
27196{
27197    uint64_t u64;
27198    struct cvmx_lmcx_ifb_cnt_lo_s
27199    {
27200#if __BYTE_ORDER == __BIG_ENDIAN
27201        uint64_t reserved_32_63          : 32;
27202        uint64_t ifbcnt_lo               : 32;      /**< Performance Counter
27203                                                         Low 32-bits of 64-bit counter that increments every
27204                                                         cycle there is something in the in-flight buffer. */
27205#else
27206        uint64_t ifbcnt_lo               : 32;
27207        uint64_t reserved_32_63          : 32;
27208#endif
27209    } s;
27210    struct cvmx_lmcx_ifb_cnt_lo_s        cn30xx;
27211    struct cvmx_lmcx_ifb_cnt_lo_s        cn31xx;
27212    struct cvmx_lmcx_ifb_cnt_lo_s        cn38xx;
27213    struct cvmx_lmcx_ifb_cnt_lo_s        cn38xxp2;
27214    struct cvmx_lmcx_ifb_cnt_lo_s        cn50xx;
27215    struct cvmx_lmcx_ifb_cnt_lo_s        cn52xx;
27216    struct cvmx_lmcx_ifb_cnt_lo_s        cn52xxp1;
27217    struct cvmx_lmcx_ifb_cnt_lo_s        cn56xx;
27218    struct cvmx_lmcx_ifb_cnt_lo_s        cn56xxp1;
27219    struct cvmx_lmcx_ifb_cnt_lo_s        cn58xx;
27220    struct cvmx_lmcx_ifb_cnt_lo_s        cn58xxp1;
27221} cvmx_lmcx_ifb_cnt_lo_t;
27222
27223
27224/**
27225 * cvmx_lmc#_mem_cfg0
27226 *
27227 * Specify the RSL base addresses for the block
27228 *
27229 *                  LMC_MEM_CFG0 = LMC Memory Configuration Register0
27230 *
27231 * This register controls certain parameters of  Memory Configuration
27232 */
27233typedef union
27234{
27235    uint64_t u64;
27236    struct cvmx_lmcx_mem_cfg0_s
27237    {
27238#if __BYTE_ORDER == __BIG_ENDIAN
27239        uint64_t reserved_32_63          : 32;
27240        uint64_t reset                   : 1;       /**< Reset oneshot pulse for refresh counter,
27241                                                         and LMC_OPS_CNT_*, LMC_IFB_CNT_*, and LMC_DCLK_CNT_*
27242                                                         CSR's. SW should write this to a one, then re-write
27243                                                         it to a zero to cause the reset. */
27244        uint64_t silo_qc                 : 1;       /**< Adds a Quarter Cycle granularity to generate
27245                                                         dqs pulse generation for silo.
27246                                                         Combination of Silo_HC and Silo_QC gives the
27247                                                         ability to position the read enable with quarter
27248                                                         cycle resolution. This is applied on all the bytes
27249                                                         uniformly. */
27250        uint64_t bunk_ena                : 1;       /**< Bunk Enable aka RANK ena (for use with dual-rank DIMMs)
27251                                                         For dual-rank DIMMs, the bunk_ena bit will enable
27252                                                         the drive of the CS_N[1:0] pins based on the
27253                                                         (pbank_lsb-1) address bit.
27254                                                         Write 0 for SINGLE ranked DIMM's. */
27255        uint64_t ded_err                 : 4;       /**< Double Error detected (DED) of Rd Data
27256                                                         In 128b mode, ecc is calulated on 1 cycle worth of data
27257                                                         [25] corresponds to DQ[63:0], Phase0
27258                                                         [26] corresponds to DQ[127:64], Phase0
27259                                                         [27] corresponds to DQ[63:0], Phase1
27260                                                         [28] corresponds to DQ[127:64], Phase1
27261                                                         In 64b mode, ecc is calculated on 2 cycle worth of data
27262                                                         [25] corresponds to DQ[63:0], Phase0, cycle0
27263                                                         [26] corresponds to DQ[63:0], Phase0, cycle1
27264                                                         [27] corresponds to DQ[63:0], Phase1, cycle0
27265                                                         [28] corresponds to DQ[63:0], Phase1, cycle1
27266                                                         Write of 1 will clear the corresponding error bit */
27267        uint64_t sec_err                 : 4;       /**< Single Error (corrected) of Rd Data
27268                                                         In 128b mode, ecc is calulated on 1 cycle worth of data
27269                                                         [21] corresponds to DQ[63:0], Phase0
27270                                                         [22] corresponds to DQ[127:64], Phase0
27271                                                         [23] corresponds to DQ[63:0], Phase1
27272                                                         [24] corresponds to DQ[127:64], Phase1
27273                                                         In 64b mode, ecc is calculated on 2 cycle worth of data
27274                                                         [21] corresponds to DQ[63:0], Phase0, cycle0
27275                                                         [22] corresponds to DQ[63:0], Phase0, cycle1
27276                                                         [23] corresponds to DQ[63:0], Phase1, cycle0
27277                                                         [24] corresponds to DQ[63:0], Phase1, cycle1
27278                                                         Write of 1 will clear the corresponding error bit */
27279        uint64_t intr_ded_ena            : 1;       /**< ECC Double Error Detect(DED) Interrupt Enable bit
27280                                                         When set, the memory controller raises a processor
27281                                                         interrupt on detecting an uncorrectable Dbl Bit ECC
27282                                                         error. */
27283        uint64_t intr_sec_ena            : 1;       /**< ECC Single Error Correct(SEC) Interrupt Enable bit
27284                                                         When set, the memory controller raises a processor
27285                                                         interrupt on detecting a correctable Single Bit ECC
27286                                                         error. */
27287        uint64_t tcl                     : 4;       /**< This register is not used */
27288        uint64_t ref_int                 : 6;       /**< Refresh interval represented in \#of 512 dclk increments.
27289                                                         Program this to RND-DN(tREFI/clkPeriod/512)
27290                                                            - 000000: RESERVED
27291                                                            - 000001: 1 * 512  = 512 dclks
27292                                                             - ...
27293                                                            - 111111: 63 * 512 = 32256 dclks */
27294        uint64_t pbank_lsb               : 4;       /**< Physical Bank address select
27295                                                                                 Reverting to the explanation for ROW_LSB,
27296                                                                                 PBank_LSB would be Row_LSB bit + \#rowbits
27297                                                                                 + \#rankbits
27298                                                                                 In the 512MB DIMM Example, assuming no rank bits:
27299                                                                                 pbank_lsb=mem_addr[15+13] for 64 b mode
27300                                                                                          =mem_addr[16+13] for 128b mode
27301                                                                                 Hence the parameter
27302                                                         0000:pbank[1:0] = mem_adr[28:27]    / rank = mem_adr[26] (if bunk_ena)
27303                                                         0001:pbank[1:0] = mem_adr[29:28]    / rank = mem_adr[27]      "
27304                                                         0010:pbank[1:0] = mem_adr[30:29]    / rank = mem_adr[28]      "
27305                                                         0011:pbank[1:0] = mem_adr[31:30]    / rank = mem_adr[29]      "
27306                                                         0100:pbank[1:0] = mem_adr[32:31]    / rank = mem_adr[30]      "
27307                                                         0101:pbank[1:0] = mem_adr[33:32]    / rank = mem_adr[31]      "
27308                                                         0110:pbank[1:0] =[1'b0,mem_adr[33]] / rank = mem_adr[32]      "
27309                                                         0111:pbank[1:0] =[2'b0]             / rank = mem_adr[33]      "
27310                                                         1000-1111: RESERVED */
27311        uint64_t row_lsb                 : 3;       /**< Encoding used to determine which memory address
27312                                                         bit position represents the low order DDR ROW address.
27313                                                         The processor's memory address[33:7] needs to be
27314                                                         translated to DRAM addresses (bnk,row,col,rank and dimm)
27315                                                         and that is a function of the following:
27316                                                         1. \# Banks (4 or 8) - spec'd by BANK8
27317                                                         2. Datapath Width(64 or 128) - MODE128b
27318                                                         3. \# Ranks in a DIMM - spec'd by BUNK_ENA
27319                                                         4. \# DIMM's in the system
27320                                                         5. \# Column Bits of the memory part - spec'd indirectly
27321                                                         by this register.
27322                                                         6. \# Row Bits of the memory part - spec'd indirectly
27323                                                         by the register below (PBANK_LSB).
27324                                                         Illustration: For Micron's MT18HTF6472A,512MB DDR2
27325                                                         Unbuffered DIMM which uses 256Mb parts (8M x 8 x 4),
27326                                                         \# Banks = 4 -> 2 bits of BA
27327                                                         \# Columns = 1K -> 10 bits of Col
27328                                                         \# Rows = 8K -> 13 bits of Row
27329                                                         Assuming that the total Data width is 128, this is how
27330                                                         we arrive at row_lsb:
27331                                                         Col Address starts from mem_addr[4] for 128b (16Bytes)
27332                                                         dq width or from mem_addr[3] for 64b (8Bytes) dq width
27333                                                         \# col + \# bank = 12. Hence row_lsb is mem_adr[15] for
27334                                                         64bmode or mem_adr[16] for 128b mode. Hence row_lsb
27335                                                         parameter should be set to 001 (64b) or 010 (128b).
27336                                                              - 000: row_lsb = mem_adr[14]
27337                                                              - 001: row_lsb = mem_adr[15]
27338                                                              - 010: row_lsb = mem_adr[16]
27339                                                              - 011: row_lsb = mem_adr[17]
27340                                                              - 100: row_lsb = mem_adr[18]
27341                                                              - 101-111:row_lsb = RESERVED */
27342        uint64_t ecc_ena                 : 1;       /**< ECC Enable: When set will enable the 8b ECC
27343                                                         check/correct logic. Should be 1 when used with DIMMs
27344                                                         with ECC. 0, otherwise.
27345                                                         When this mode is turned on, DQ[71:64] and DQ[143:137]
27346                                                         on writes, will contain the ECC code generated for
27347                                                         the lower 64 and upper 64 bits of data which will
27348                                                         written in the memory and then later on reads, used
27349                                                         to check for Single bit error (which will be auto-
27350                                                         corrected) and Double Bit error (which will be
27351                                                         reported). When not turned on, DQ[71:64] and DQ[143:137]
27352                                                         are driven to 0.  Please refer to SEC_ERR, DED_ERR,
27353                                                         LMC_FADR, and LMC_ECC_SYND registers
27354                                                         for diagnostics information when there is an error. */
27355        uint64_t init_start              : 1;       /**< A 0->1 transition starts the DDR memory initialization
27356                                                         sequence. */
27357#else
27358        uint64_t init_start              : 1;
27359        uint64_t ecc_ena                 : 1;
27360        uint64_t row_lsb                 : 3;
27361        uint64_t pbank_lsb               : 4;
27362        uint64_t ref_int                 : 6;
27363        uint64_t tcl                     : 4;
27364        uint64_t intr_sec_ena            : 1;
27365        uint64_t intr_ded_ena            : 1;
27366        uint64_t sec_err                 : 4;
27367        uint64_t ded_err                 : 4;
27368        uint64_t bunk_ena                : 1;
27369        uint64_t silo_qc                 : 1;
27370        uint64_t reset                   : 1;
27371        uint64_t reserved_32_63          : 32;
27372#endif
27373    } s;
27374    struct cvmx_lmcx_mem_cfg0_s          cn30xx;
27375    struct cvmx_lmcx_mem_cfg0_s          cn31xx;
27376    struct cvmx_lmcx_mem_cfg0_s          cn38xx;
27377    struct cvmx_lmcx_mem_cfg0_s          cn38xxp2;
27378    struct cvmx_lmcx_mem_cfg0_s          cn50xx;
27379    struct cvmx_lmcx_mem_cfg0_s          cn52xx;
27380    struct cvmx_lmcx_mem_cfg0_s          cn52xxp1;
27381    struct cvmx_lmcx_mem_cfg0_s          cn56xx;
27382    struct cvmx_lmcx_mem_cfg0_s          cn56xxp1;
27383    struct cvmx_lmcx_mem_cfg0_s          cn58xx;
27384    struct cvmx_lmcx_mem_cfg0_s          cn58xxp1;
27385} cvmx_lmcx_mem_cfg0_t;
27386
27387
27388/**
27389 * cvmx_lmc#_mem_cfg1
27390 *
27391 * LMC_MEM_CFG1 = LMC Memory Configuration Register1
27392 *
27393 * This register controls the External Memory Configuration Timing Parameters. Please refer to the
27394 * appropriate DDR part spec from your memory vendor for the various values in this CSR.
27395 * The details of each of these timing parameters can be found in the JEDEC spec or the vendor
27396 * spec of the memory parts.
27397 */
27398typedef union
27399{
27400    uint64_t u64;
27401    struct cvmx_lmcx_mem_cfg1_s
27402    {
27403#if __BYTE_ORDER == __BIG_ENDIAN
27404        uint64_t reserved_32_63          : 32;
27405        uint64_t comp_bypass             : 1;       /**< Compensation bypass. */
27406        uint64_t trrd                    : 3;       /**< tRRD cycles: ACT-ACT timing parameter for different
27407                                                         banks. (Represented in tCYC cycles == 1dclks)
27408                                                         TYP=15ns (66MHz=1,167MHz=3,200MHz=3)
27409                                                         For DDR2, TYP=7.5ns
27410                                                            - 000: RESERVED
27411                                                            - 001: 1 tCYC
27412                                                            - 010: 2 tCYC
27413                                                            - 011: 3 tCYC
27414                                                            - 100: 4 tCYC
27415                                                            - 101: 5 tCYC
27416                                                            - 110: 6 tCYC
27417                                                            - 111: 7 tCYC */
27418        uint64_t caslat                  : 3;       /**< CAS Latency Encoding which is loaded into each DDR
27419                                                         SDRAM device (MRS[6:4]) upon power-up (INIT_START=1).
27420                                                         (Represented in tCYC cycles == 1 dclks)
27421                                                            000 RESERVED
27422                                                            001 RESERVED
27423                                                            010 2.0 tCYC
27424                                                            011 3.0 tCYC
27425                                                            100 4.0 tCYC
27426                                                            101 5.0 tCYC
27427                                                            110 6.0 tCYC
27428                                                            111 RESERVED
27429                                                         eg). The parameters TSKW, SILO_HC, and SILO_QC can
27430                                                         account for 1/4 cycle granularity in board/etch delays. */
27431        uint64_t tmrd                    : 3;       /**< tMRD Cycles
27432                                                         (Represented in dclk tCYC)
27433                                                         For DDR2, its TYP 2*tCYC)
27434                                                             - 000: RESERVED
27435                                                             - 001: 1
27436                                                             - 010: 2
27437                                                             - 011: 3
27438                                                             - 100: 4
27439                                                             - 101-111: RESERVED */
27440        uint64_t trfc                    : 5;       /**< 1/4 tRFC Cycles = RNDUP[tRFC(ns)/4*tcyc(ns)]
27441                                                         (Represented in tCYC cycles == 1dclks)
27442                                                         For 2Gb, DDR2-667 parts, typ=195ns
27443                                                         (TRFC = 195/3/4 = 5'd17 = 0x11)
27444                                                             - 00000-00001: RESERVED
27445                                                             - 00010: 8
27446                                                             - 00011: 12
27447                                                             - 00100: 16
27448                                                             - ...
27449                                                             - 11110: 120
27450                                                             - 11111: 124 */
27451        uint64_t trp                     : 4;       /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)]
27452                                                         (Represented in tCYC cycles == 1dclk)
27453                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP)
27454                                                             - 0000: RESERVED
27455                                                             - 0001: 1
27456                                                             - ...
27457                                                             - 1001: 9
27458                                                             - 1010-1111: RESERVED
27459                                                         When using parts with 8 banks (LMC_DDR2_CTL->BANK8
27460                                                         is 1), load tRP cycles + 1 into this register. */
27461        uint64_t twtr                    : 4;       /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)]
27462                                                         Last Wr Data to Rd Command time.
27463                                                         (Represented in tCYC cycles == 1dclks)
27464                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6, for TYP)
27465                                                             - 0000: RESERVED
27466                                                             - 0001: 1
27467                                                             - ...
27468                                                             - 0111: 7
27469                                                             - 1000-1111: RESERVED */
27470        uint64_t trcd                    : 4;       /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)]
27471                                                         (Represented in tCYC cycles == 1dclk)
27472                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP)
27473                                                             - 0000: RESERVED
27474                                                             - 0001: 2 (2 is the smallest value allowed)
27475                                                             - 0002: 2
27476                                                             - ...
27477                                                             - 1001: 9
27478                                                             - 1010-1111: RESERVED
27479                                                         In 2T mode, make this register TRCD-1, not going
27480                                                         below 2. */
27481        uint64_t tras                    : 5;       /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)]
27482                                                         (Represented in tCYC cycles == 1 dclk)
27483                                                             - 00000-0001: RESERVED
27484                                                             - 00010: 2
27485                                                             - ...
27486                                                             - 11111: 31 */
27487#else
27488        uint64_t tras                    : 5;
27489        uint64_t trcd                    : 4;
27490        uint64_t twtr                    : 4;
27491        uint64_t trp                     : 4;
27492        uint64_t trfc                    : 5;
27493        uint64_t tmrd                    : 3;
27494        uint64_t caslat                  : 3;
27495        uint64_t trrd                    : 3;
27496        uint64_t comp_bypass             : 1;
27497        uint64_t reserved_32_63          : 32;
27498#endif
27499    } s;
27500    struct cvmx_lmcx_mem_cfg1_s          cn30xx;
27501    struct cvmx_lmcx_mem_cfg1_s          cn31xx;
27502    struct cvmx_lmcx_mem_cfg1_cn38xx
27503    {
27504#if __BYTE_ORDER == __BIG_ENDIAN
27505        uint64_t reserved_31_63          : 33;
27506        uint64_t trrd                    : 3;       /**< tRRD cycles: ACT-ACT timing parameter for different
27507                                                         banks. (Represented in tCYC cycles == 1dclks)
27508                                                         TYP=15ns (66MHz=1,167MHz=3,200MHz=3)
27509                                                         For DDR2, TYP=7.5ns
27510                                                            - 000: RESERVED
27511                                                            - 001: 1 tCYC
27512                                                            - 010: 2 tCYC
27513                                                            - 011: 3 tCYC
27514                                                            - 100: 4 tCYC
27515                                                            - 101: 5 tCYC
27516                                                            - 110-111: RESERVED */
27517        uint64_t caslat                  : 3;       /**< CAS Latency Encoding which is loaded into each DDR
27518                                                         SDRAM device (MRS[6:4]) upon power-up (INIT_START=1).
27519                                                         (Represented in tCYC cycles == 1 dclks)
27520                                                            000 RESERVED
27521                                                            001 RESERVED
27522                                                            010 2.0 tCYC
27523                                                            011 3.0 tCYC
27524                                                            100 4.0 tCYC
27525                                                            101 5.0 tCYC
27526                                                            110 6.0 tCYC (DDR2)
27527                                                                2.5 tCYC (DDR1)
27528                                                            111 RESERVED
27529                                                         eg). The parameters TSKW, SILO_HC, and SILO_QC can
27530                                                         account for 1/4 cycle granularity in board/etch delays. */
27531        uint64_t tmrd                    : 3;       /**< tMRD Cycles
27532                                                         (Represented in dclk tCYC)
27533                                                         For DDR2, its TYP 2*tCYC)
27534                                                             - 000: RESERVED
27535                                                             - 001: 1
27536                                                             - 010: 2
27537                                                             - 011: 3
27538                                                             - 100: 4
27539                                                             - 101-111: RESERVED */
27540        uint64_t trfc                    : 5;       /**< 1/4 tRFC Cycles = RNDUP[tRFC(ns)/4*tcyc(ns)]
27541                                                         (Represented in tCYC cycles == 1dclks)
27542                                                         For DDR-I, the following encodings are used
27543                                                         TYP=70ns (133MHz - 3; 333MHz - 6)
27544                                                         For 2Gb, DDR2-667 parts, typ=195ns
27545                                                         (TRFC = 195/3/4 = 5'd17 = 0x11)
27546                                                             - 00000-00001: RESERVED
27547                                                             - 00010: 8
27548                                                             - 00011: 12
27549                                                             - 00100: 16
27550                                                             - ...
27551                                                             - 11110: 120
27552                                                             - 11111: 124 */
27553        uint64_t trp                     : 4;       /**< tRP Cycles = RNDUP[tRP(ns)/tcyc(ns)]
27554                                                         (Represented in tCYC cycles == 1dclk)
27555                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP)
27556                                                             - 0000: RESERVED
27557                                                             - 0001: 1
27558                                                             - ...
27559                                                             - 0111: 7
27560                                                             - 1000-1111: RESERVED
27561                                                         When using parts with 8 banks (LMC_DDR2_CTL->BANK8
27562                                                         is 1), load tRP cycles + 1 into this register. */
27563        uint64_t twtr                    : 4;       /**< tWTR Cycles = RNDUP[tWTR(ns)/tcyc(ns)]
27564                                                         Last Wr Data to Rd Command time.
27565                                                         (Represented in tCYC cycles == 1dclks)
27566                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6, for TYP)
27567                                                             - 0000: RESERVED
27568                                                             - 0001: 1
27569                                                             - ...
27570                                                             - 0111: 7
27571                                                             - 1000-1111: RESERVED */
27572        uint64_t trcd                    : 4;       /**< tRCD Cycles = RNDUP[tRCD(ns)/tcyc(ns)]
27573                                                         (Represented in tCYC cycles == 1dclk)
27574                                                         TYP=15ns (66MHz=1,167MHz=3,400MHz=6 for TYP)
27575                                                             - 0000: RESERVED
27576                                                             - 0001: 2 (2 is the smallest value allowed)
27577                                                             - 0002: 2
27578                                                             - ...
27579                                                             - 0111: 7
27580                                                             - 1110-1111: RESERVED
27581                                                         In 2T mode, make this register TRCD-1, not going
27582                                                         below 2. */
27583        uint64_t tras                    : 5;       /**< tRAS Cycles = RNDUP[tRAS(ns)/tcyc(ns)]
27584                                                         (Represented in tCYC cycles == 1 dclk)
27585                                                         For DDR-I mode:
27586                                                         TYP=45ns (66MHz=3,167MHz=8,400MHz=18
27587                                                             - 00000-0001: RESERVED
27588                                                             - 00010: 2
27589                                                             - ...
27590                                                             - 10100: 20
27591                                                             - 10101-11111: RESERVED */
27592#else
27593        uint64_t tras                    : 5;
27594        uint64_t trcd                    : 4;
27595        uint64_t twtr                    : 4;
27596        uint64_t trp                     : 4;
27597        uint64_t trfc                    : 5;
27598        uint64_t tmrd                    : 3;
27599        uint64_t caslat                  : 3;
27600        uint64_t trrd                    : 3;
27601        uint64_t reserved_31_63          : 33;
27602#endif
27603    } cn38xx;
27604    struct cvmx_lmcx_mem_cfg1_cn38xx     cn38xxp2;
27605    struct cvmx_lmcx_mem_cfg1_s          cn50xx;
27606    struct cvmx_lmcx_mem_cfg1_cn38xx     cn52xx;
27607    struct cvmx_lmcx_mem_cfg1_cn38xx     cn52xxp1;
27608    struct cvmx_lmcx_mem_cfg1_cn38xx     cn56xx;
27609    struct cvmx_lmcx_mem_cfg1_cn38xx     cn56xxp1;
27610    struct cvmx_lmcx_mem_cfg1_cn38xx     cn58xx;
27611    struct cvmx_lmcx_mem_cfg1_cn38xx     cn58xxp1;
27612} cvmx_lmcx_mem_cfg1_t;
27613
27614
27615/**
27616 * cvmx_lmc#_nxm
27617 *
27618 * LMC_NXM = LMC non-existent memory
27619 *
27620 *
27621 * Notes:
27622 * This CSR was introduced in pass2.
27623 *
27624 */
27625typedef union
27626{
27627    uint64_t u64;
27628    struct cvmx_lmcx_nxm_s
27629    {
27630#if __BYTE_ORDER == __BIG_ENDIAN
27631        uint64_t reserved_8_63           : 56;
27632        uint64_t cs_mask                 : 8;       /**< Chip select mask.
27633                                                         This mask corresponds to the 8 chip selects for a memory
27634                                                         configuration.  If LMC_MEM_CFG0[BUNK_ENA]==0 then this
27635                                                         mask must be set in pairs because each reference address
27636                                                         will assert a pair of chip selects.  If the chip
27637                                                         select(s) have a corresponding CS_MASK bit set, then the
27638                                                         reference is to non-existent memory.  LMC will alias the
27639                                                         reference to use the lowest, legal chip select(s) in
27640                                                         that case. */
27641#else
27642        uint64_t cs_mask                 : 8;
27643        uint64_t reserved_8_63           : 56;
27644#endif
27645    } s;
27646    struct cvmx_lmcx_nxm_s               cn52xx;
27647    struct cvmx_lmcx_nxm_s               cn56xx;
27648    struct cvmx_lmcx_nxm_s               cn58xx;
27649} cvmx_lmcx_nxm_t;
27650
27651
27652/**
27653 * cvmx_lmc#_ops_cnt_hi
27654 *
27655 * LMC_OPS_CNT_HI  = Performance Counters
27656 *
27657 */
27658typedef union
27659{
27660    uint64_t u64;
27661    struct cvmx_lmcx_ops_cnt_hi_s
27662    {
27663#if __BYTE_ORDER == __BIG_ENDIAN
27664        uint64_t reserved_32_63          : 32;
27665        uint64_t opscnt_hi               : 32;      /**< Performance Counter to measure Bus Utilization
27666                                                         Upper 32-bits of 64-bit counter
27667                                                           DRAM bus utilization = LMC_OPS_CNT_* /LMC_DCLK_CNT_* */
27668#else
27669        uint64_t opscnt_hi               : 32;
27670        uint64_t reserved_32_63          : 32;
27671#endif
27672    } s;
27673    struct cvmx_lmcx_ops_cnt_hi_s        cn30xx;
27674    struct cvmx_lmcx_ops_cnt_hi_s        cn31xx;
27675    struct cvmx_lmcx_ops_cnt_hi_s        cn38xx;
27676    struct cvmx_lmcx_ops_cnt_hi_s        cn38xxp2;
27677    struct cvmx_lmcx_ops_cnt_hi_s        cn50xx;
27678    struct cvmx_lmcx_ops_cnt_hi_s        cn52xx;
27679    struct cvmx_lmcx_ops_cnt_hi_s        cn52xxp1;
27680    struct cvmx_lmcx_ops_cnt_hi_s        cn56xx;
27681    struct cvmx_lmcx_ops_cnt_hi_s        cn56xxp1;
27682    struct cvmx_lmcx_ops_cnt_hi_s        cn58xx;
27683    struct cvmx_lmcx_ops_cnt_hi_s        cn58xxp1;
27684} cvmx_lmcx_ops_cnt_hi_t;
27685
27686
27687/**
27688 * cvmx_lmc#_ops_cnt_lo
27689 *
27690 * LMC_OPS_CNT_LO  = Performance Counters
27691 *
27692 */
27693typedef union
27694{
27695    uint64_t u64;
27696    struct cvmx_lmcx_ops_cnt_lo_s
27697    {
27698#if __BYTE_ORDER == __BIG_ENDIAN
27699        uint64_t reserved_32_63          : 32;
27700        uint64_t opscnt_lo               : 32;      /**< Performance Counter
27701                                                         Low 32-bits of 64-bit counter
27702                                                           DRAM bus utilization = LMC_OPS_CNT_* /LMC_DCLK_CNT_* */
27703#else
27704        uint64_t opscnt_lo               : 32;
27705        uint64_t reserved_32_63          : 32;
27706#endif
27707    } s;
27708    struct cvmx_lmcx_ops_cnt_lo_s        cn30xx;
27709    struct cvmx_lmcx_ops_cnt_lo_s        cn31xx;
27710    struct cvmx_lmcx_ops_cnt_lo_s        cn38xx;
27711    struct cvmx_lmcx_ops_cnt_lo_s        cn38xxp2;
27712    struct cvmx_lmcx_ops_cnt_lo_s        cn50xx;
27713    struct cvmx_lmcx_ops_cnt_lo_s        cn52xx;
27714    struct cvmx_lmcx_ops_cnt_lo_s        cn52xxp1;
27715    struct cvmx_lmcx_ops_cnt_lo_s        cn56xx;
27716    struct cvmx_lmcx_ops_cnt_lo_s        cn56xxp1;
27717    struct cvmx_lmcx_ops_cnt_lo_s        cn58xx;
27718    struct cvmx_lmcx_ops_cnt_lo_s        cn58xxp1;
27719} cvmx_lmcx_ops_cnt_lo_t;
27720
27721
27722/**
27723 * cvmx_lmc#_pll_bwctl
27724 *
27725 * LMC_PLL_BWCTL  = DDR PLL Bandwidth Control Register
27726 *
27727 */
27728typedef union
27729{
27730    uint64_t u64;
27731    struct cvmx_lmcx_pll_bwctl_s
27732    {
27733#if __BYTE_ORDER == __BIG_ENDIAN
27734        uint64_t reserved_5_63           : 59;
27735        uint64_t bwupd                   : 1;       /**< Load this Bandwidth Register value into the PLL */
27736        uint64_t bwctl                   : 4;       /**< Bandwidth Control Register for DDR PLL */
27737#else
27738        uint64_t bwctl                   : 4;
27739        uint64_t bwupd                   : 1;
27740        uint64_t reserved_5_63           : 59;
27741#endif
27742    } s;
27743    struct cvmx_lmcx_pll_bwctl_s         cn30xx;
27744    struct cvmx_lmcx_pll_bwctl_s         cn31xx;
27745    struct cvmx_lmcx_pll_bwctl_s         cn38xx;
27746    struct cvmx_lmcx_pll_bwctl_s         cn38xxp2;
27747} cvmx_lmcx_pll_bwctl_t;
27748
27749
27750/**
27751 * cvmx_lmc#_pll_ctl
27752 *
27753 * LMC_PLL_CTL = LMC pll control
27754 *
27755 *
27756 * Notes:
27757 * This CSR is only relevant for LMC0. LMC1_PLL_CTL is not used.
27758 *
27759 * Exactly one of EN2, EN4, EN6, EN8, EN12, EN16 must be set.
27760 *
27761 * The resultant DDR_CK frequency is the DDR2_REF_CLK
27762 * frequency multiplied by:
27763 *
27764 *     (CLKF + 1) / ((CLKR + 1) * EN(2,4,6,8,12,16))
27765 *
27766 * The PLL frequency, which is:
27767 *
27768 *     (DDR2_REF_CLK freq) * ((CLKF + 1) / (CLKR + 1))
27769 *
27770 * must reside between 1.2 and 2.5 GHz. A faster PLL frequency is desirable if there is a choice.
27771 */
27772typedef union
27773{
27774    uint64_t u64;
27775    struct cvmx_lmcx_pll_ctl_s
27776    {
27777#if __BYTE_ORDER == __BIG_ENDIAN
27778        uint64_t reserved_30_63          : 34;
27779        uint64_t bypass                  : 1;       /**< PLL Bypass */
27780        uint64_t fasten_n                : 1;       /**< Should be set, especially when CLKF > ~80 */
27781        uint64_t div_reset               : 1;       /**< Analog pll divider reset
27782                                                         De-assert at least 500*(CLKR+1) reference clock
27783                                                         cycles following RESET_N de-assertion. */
27784        uint64_t reset_n                 : 1;       /**< Analog pll reset
27785                                                         De-assert at least 5 usec after CLKF, CLKR,
27786                                                         and EN* are set up. */
27787        uint64_t clkf                    : 12;      /**< Multiply reference by CLKF + 1
27788                                                         CLKF must be <= 128 */
27789        uint64_t clkr                    : 6;       /**< Divide reference by CLKR + 1 */
27790        uint64_t reserved_6_7            : 2;
27791        uint64_t en16                    : 1;       /**< Divide output by 16 */
27792        uint64_t en12                    : 1;       /**< Divide output by 12 */
27793        uint64_t en8                     : 1;       /**< Divide output by 8 */
27794        uint64_t en6                     : 1;       /**< Divide output by 6 */
27795        uint64_t en4                     : 1;       /**< Divide output by 4 */
27796        uint64_t en2                     : 1;       /**< Divide output by 2 */
27797#else
27798        uint64_t en2                     : 1;
27799        uint64_t en4                     : 1;
27800        uint64_t en6                     : 1;
27801        uint64_t en8                     : 1;
27802        uint64_t en12                    : 1;
27803        uint64_t en16                    : 1;
27804        uint64_t reserved_6_7            : 2;
27805        uint64_t clkr                    : 6;
27806        uint64_t clkf                    : 12;
27807        uint64_t reset_n                 : 1;
27808        uint64_t div_reset               : 1;
27809        uint64_t fasten_n                : 1;
27810        uint64_t bypass                  : 1;
27811        uint64_t reserved_30_63          : 34;
27812#endif
27813    } s;
27814    struct cvmx_lmcx_pll_ctl_cn50xx
27815    {
27816#if __BYTE_ORDER == __BIG_ENDIAN
27817        uint64_t reserved_29_63          : 35;
27818        uint64_t fasten_n                : 1;       /**< Should be set, especially when CLKF > ~80 */
27819        uint64_t div_reset               : 1;       /**< Analog pll divider reset
27820                                                         De-assert at least 500*(CLKR+1) reference clock
27821                                                         cycles following RESET_N de-assertion. */
27822        uint64_t reset_n                 : 1;       /**< Analog pll reset
27823                                                         De-assert at least 5 usec after CLKF, CLKR,
27824                                                         and EN* are set up. */
27825        uint64_t clkf                    : 12;      /**< Multiply reference by CLKF + 1
27826                                                         CLKF must be <= 256 */
27827        uint64_t clkr                    : 6;       /**< Divide reference by CLKR + 1 */
27828        uint64_t reserved_6_7            : 2;
27829        uint64_t en16                    : 1;       /**< Divide output by 16 */
27830        uint64_t en12                    : 1;       /**< Divide output by 12 */
27831        uint64_t en8                     : 1;       /**< Divide output by 8 */
27832        uint64_t en6                     : 1;       /**< Divide output by 6 */
27833        uint64_t en4                     : 1;       /**< Divide output by 4 */
27834        uint64_t en2                     : 1;       /**< Divide output by 2 */
27835#else
27836        uint64_t en2                     : 1;
27837        uint64_t en4                     : 1;
27838        uint64_t en6                     : 1;
27839        uint64_t en8                     : 1;
27840        uint64_t en12                    : 1;
27841        uint64_t en16                    : 1;
27842        uint64_t reserved_6_7            : 2;
27843        uint64_t clkr                    : 6;
27844        uint64_t clkf                    : 12;
27845        uint64_t reset_n                 : 1;
27846        uint64_t div_reset               : 1;
27847        uint64_t fasten_n                : 1;
27848        uint64_t reserved_29_63          : 35;
27849#endif
27850    } cn50xx;
27851    struct cvmx_lmcx_pll_ctl_s           cn52xx;
27852    struct cvmx_lmcx_pll_ctl_s           cn52xxp1;
27853    struct cvmx_lmcx_pll_ctl_cn50xx      cn56xx;
27854    struct cvmx_lmcx_pll_ctl_cn56xxp1
27855    {
27856#if __BYTE_ORDER == __BIG_ENDIAN
27857        uint64_t reserved_28_63          : 36;
27858        uint64_t div_reset               : 1;       /**< Analog pll divider reset
27859                                                         De-assert at least 500*(CLKR+1) reference clock
27860                                                         cycles following RESET_N de-assertion. */
27861        uint64_t reset_n                 : 1;       /**< Analog pll reset
27862                                                         De-assert at least 5 usec after CLKF, CLKR,
27863                                                         and EN* are set up. */
27864        uint64_t clkf                    : 12;      /**< Multiply reference by CLKF + 1
27865                                                         CLKF must be <= 128 */
27866        uint64_t clkr                    : 6;       /**< Divide reference by CLKR + 1 */
27867        uint64_t reserved_6_7            : 2;
27868        uint64_t en16                    : 1;       /**< Divide output by 16 */
27869        uint64_t en12                    : 1;       /**< Divide output by 12 */
27870        uint64_t en8                     : 1;       /**< Divide output by 8 */
27871        uint64_t en6                     : 1;       /**< Divide output by 6 */
27872        uint64_t en4                     : 1;       /**< Divide output by 4 */
27873        uint64_t en2                     : 1;       /**< Divide output by 2 */
27874#else
27875        uint64_t en2                     : 1;
27876        uint64_t en4                     : 1;
27877        uint64_t en6                     : 1;
27878        uint64_t en8                     : 1;
27879        uint64_t en12                    : 1;
27880        uint64_t en16                    : 1;
27881        uint64_t reserved_6_7            : 2;
27882        uint64_t clkr                    : 6;
27883        uint64_t clkf                    : 12;
27884        uint64_t reset_n                 : 1;
27885        uint64_t div_reset               : 1;
27886        uint64_t reserved_28_63          : 36;
27887#endif
27888    } cn56xxp1;
27889    struct cvmx_lmcx_pll_ctl_cn56xxp1    cn58xx;
27890    struct cvmx_lmcx_pll_ctl_cn56xxp1    cn58xxp1;
27891} cvmx_lmcx_pll_ctl_t;
27892
27893
27894/**
27895 * cvmx_lmc#_pll_status
27896 *
27897 * LMC_PLL_STATUS = LMC pll status
27898 *
27899 */
27900typedef union
27901{
27902    uint64_t u64;
27903    struct cvmx_lmcx_pll_status_s
27904    {
27905#if __BYTE_ORDER == __BIG_ENDIAN
27906        uint64_t reserved_32_63          : 32;
27907        uint64_t ddr__nctl               : 5;       /**< DDR nctl from compensation circuit */
27908        uint64_t ddr__pctl               : 5;       /**< DDR pctl from compensation circuit */
27909        uint64_t reserved_2_21           : 20;
27910        uint64_t rfslip                  : 1;       /**< Reference clock slip */
27911        uint64_t fbslip                  : 1;       /**< Feedback clock slip */
27912#else
27913        uint64_t fbslip                  : 1;
27914        uint64_t rfslip                  : 1;
27915        uint64_t reserved_2_21           : 20;
27916        uint64_t ddr__pctl               : 5;
27917        uint64_t ddr__nctl               : 5;
27918        uint64_t reserved_32_63          : 32;
27919#endif
27920    } s;
27921    struct cvmx_lmcx_pll_status_s        cn50xx;
27922    struct cvmx_lmcx_pll_status_s        cn52xx;
27923    struct cvmx_lmcx_pll_status_s        cn52xxp1;
27924    struct cvmx_lmcx_pll_status_s        cn56xx;
27925    struct cvmx_lmcx_pll_status_s        cn56xxp1;
27926    struct cvmx_lmcx_pll_status_s        cn58xx;
27927    struct cvmx_lmcx_pll_status_cn58xxp1
27928    {
27929#if __BYTE_ORDER == __BIG_ENDIAN
27930        uint64_t reserved_2_63           : 62;
27931        uint64_t rfslip                  : 1;       /**< Reference clock slip */
27932        uint64_t fbslip                  : 1;       /**< Feedback clock slip */
27933#else
27934        uint64_t fbslip                  : 1;
27935        uint64_t rfslip                  : 1;
27936        uint64_t reserved_2_63           : 62;
27937#endif
27938    } cn58xxp1;
27939} cvmx_lmcx_pll_status_t;
27940
27941
27942/**
27943 * cvmx_lmc#_read_level_ctl
27944 *
27945 * Notes:
27946 * The HW writes and reads the cache block selected by ROW, COL, BNK and the rank as part of a read-leveling sequence for a rank.
27947 * A cache block write is 16 72-bit words. PATTERN selects the write value. For the first 8
27948 * words, the write value is the bit PATTERN<i> duplicated into a 72-bit vector. The write value of
27949 * the last 8 words is the inverse of the write value of the first 8 words.
27950 * See LMC*_READ_LEVEL_RANK*.
27951 */
27952typedef union
27953{
27954    uint64_t u64;
27955    struct cvmx_lmcx_read_level_ctl_s
27956    {
27957#if __BYTE_ORDER == __BIG_ENDIAN
27958        uint64_t reserved_44_63          : 20;
27959        uint64_t rankmask                : 4;       /**< Selects ranks to be leveled
27960                                                         to read-level rank i, set RANKMASK<i> */
27961        uint64_t pattern                 : 8;       /**< All DQ driven to PATTERN[burst], 0 <= burst <= 7
27962                                                         All DQ driven to ~PATTERN[burst-8], 8 <= burst <= 15 */
27963        uint64_t row                     : 16;      /**< Row    address used to write/read data pattern */
27964        uint64_t col                     : 12;      /**< Column address used to write/read data pattern */
27965        uint64_t reserved_3_3            : 1;
27966        uint64_t bnk                     : 3;       /**< Bank   address used to write/read data pattern */
27967#else
27968        uint64_t bnk                     : 3;
27969        uint64_t reserved_3_3            : 1;
27970        uint64_t col                     : 12;
27971        uint64_t row                     : 16;
27972        uint64_t pattern                 : 8;
27973        uint64_t rankmask                : 4;
27974        uint64_t reserved_44_63          : 20;
27975#endif
27976    } s;
27977    struct cvmx_lmcx_read_level_ctl_s    cn52xx;
27978    struct cvmx_lmcx_read_level_ctl_s    cn52xxp1;
27979    struct cvmx_lmcx_read_level_ctl_s    cn56xx;
27980    struct cvmx_lmcx_read_level_ctl_s    cn56xxp1;
27981} cvmx_lmcx_read_level_ctl_t;
27982
27983
27984/**
27985 * cvmx_lmc#_read_level_dbg
27986 *
27987 * Notes:
27988 * A given read of LMC*_READ_LEVEL_DBG returns the read-leveling pass/fail results for all possible
27989 * delay settings (i.e. the BITMASK) for only one byte in the last rank that the HW read-leveled.
27990 * LMC*_READ_LEVEL_DBG[BYTE] selects the particular byte.
27991 * To get these pass/fail results for another different rank, you must run the hardware read-leveling
27992 * again. For example, it is possible to get the BITMASK results for every byte of every rank
27993 * if you run read-leveling separately for each rank, probing LMC*_READ_LEVEL_DBG between each
27994 * read-leveling.
27995 */
27996typedef union
27997{
27998    uint64_t u64;
27999    struct cvmx_lmcx_read_level_dbg_s
28000    {
28001#if __BYTE_ORDER == __BIG_ENDIAN
28002        uint64_t reserved_32_63          : 32;
28003        uint64_t bitmask                 : 16;      /**< Bitmask generated during deskew settings sweep
28004                                                         BITMASK[n]=0 means deskew setting n failed
28005                                                         BITMASK[n]=1 means deskew setting n passed
28006                                                         for 0 <= n <= 15 */
28007        uint64_t reserved_4_15           : 12;
28008        uint64_t byte                    : 4;       /**< 0 <= BYTE <= 8 */
28009#else
28010        uint64_t byte                    : 4;
28011        uint64_t reserved_4_15           : 12;
28012        uint64_t bitmask                 : 16;
28013        uint64_t reserved_32_63          : 32;
28014#endif
28015    } s;
28016    struct cvmx_lmcx_read_level_dbg_s    cn52xx;
28017    struct cvmx_lmcx_read_level_dbg_s    cn52xxp1;
28018    struct cvmx_lmcx_read_level_dbg_s    cn56xx;
28019    struct cvmx_lmcx_read_level_dbg_s    cn56xxp1;
28020} cvmx_lmcx_read_level_dbg_t;
28021
28022
28023/**
28024 * cvmx_lmc#_read_level_rank#
28025 *
28026 * Notes:
28027 * This is four CSRs per LMC, one per each rank.
28028 * Each CSR is written by HW during a read-leveling sequence for the rank. (HW sets STATUS==3 after HW read-leveling completes for the rank.)
28029 * Each CSR may also be written by SW, but not while a read-leveling sequence is in progress. (HW sets STATUS==1 after a CSR write.)
28030 * Deskew setting is measured in units of 1/4 DCLK, so the above BYTE* values can range over 4 DCLKs.
28031 * SW initiates a HW read-leveling sequence by programming LMC*_READ_LEVEL_CTL and writing INIT_START=1 with SEQUENCE=1.
28032 * See LMC*_READ_LEVEL_CTL.
28033 */
28034typedef union
28035{
28036    uint64_t u64;
28037    struct cvmx_lmcx_read_level_rankx_s
28038    {
28039#if __BYTE_ORDER == __BIG_ENDIAN
28040        uint64_t reserved_38_63          : 26;
28041        uint64_t status                  : 2;       /**< Indicates status of the read-levelling and where
28042                                                         the BYTE* programmings in <35:0> came from:
28043                                                         0 = BYTE* values are their reset value
28044                                                         1 = BYTE* values were set via a CSR write to this register
28045                                                         2 = read-leveling sequence currently in progress (BYTE* values are unpredictable)
28046                                                         3 = BYTE* values came from a complete read-leveling sequence */
28047        uint64_t byte8                   : 4;       /**< Deskew setting */
28048        uint64_t byte7                   : 4;       /**< Deskew setting */
28049        uint64_t byte6                   : 4;       /**< Deskew setting */
28050        uint64_t byte5                   : 4;       /**< Deskew setting */
28051        uint64_t byte4                   : 4;       /**< Deskew setting */
28052        uint64_t byte3                   : 4;       /**< Deskew setting */
28053        uint64_t byte2                   : 4;       /**< Deskew setting */
28054        uint64_t byte1                   : 4;       /**< Deskew setting */
28055        uint64_t byte0                   : 4;       /**< Deskew setting */
28056#else
28057        uint64_t byte0                   : 4;
28058        uint64_t byte1                   : 4;
28059        uint64_t byte2                   : 4;
28060        uint64_t byte3                   : 4;
28061        uint64_t byte4                   : 4;
28062        uint64_t byte5                   : 4;
28063        uint64_t byte6                   : 4;
28064        uint64_t byte7                   : 4;
28065        uint64_t byte8                   : 4;
28066        uint64_t status                  : 2;
28067        uint64_t reserved_38_63          : 26;
28068#endif
28069    } s;
28070    struct cvmx_lmcx_read_level_rankx_s  cn52xx;
28071    struct cvmx_lmcx_read_level_rankx_s  cn52xxp1;
28072    struct cvmx_lmcx_read_level_rankx_s  cn56xx;
28073    struct cvmx_lmcx_read_level_rankx_s  cn56xxp1;
28074} cvmx_lmcx_read_level_rankx_t;
28075
28076
28077/**
28078 * cvmx_lmc#_rodt_comp_ctl
28079 *
28080 * LMC_RODT_COMP_CTL = LMC Compensation control
28081 *
28082 */
28083typedef union
28084{
28085    uint64_t u64;
28086    struct cvmx_lmcx_rodt_comp_ctl_s
28087    {
28088#if __BYTE_ORDER == __BIG_ENDIAN
28089        uint64_t reserved_17_63          : 47;
28090        uint64_t enable                  : 1;       /**< 0=not enabled, 1=enable */
28091        uint64_t reserved_12_15          : 4;
28092        uint64_t nctl                    : 4;       /**< Compensation control bits */
28093        uint64_t reserved_5_7            : 3;
28094        uint64_t pctl                    : 5;       /**< Compensation control bits */
28095#else
28096        uint64_t pctl                    : 5;
28097        uint64_t reserved_5_7            : 3;
28098        uint64_t nctl                    : 4;
28099        uint64_t reserved_12_15          : 4;
28100        uint64_t enable                  : 1;
28101        uint64_t reserved_17_63          : 47;
28102#endif
28103    } s;
28104    struct cvmx_lmcx_rodt_comp_ctl_s     cn50xx;
28105    struct cvmx_lmcx_rodt_comp_ctl_s     cn52xx;
28106    struct cvmx_lmcx_rodt_comp_ctl_s     cn52xxp1;
28107    struct cvmx_lmcx_rodt_comp_ctl_s     cn56xx;
28108    struct cvmx_lmcx_rodt_comp_ctl_s     cn56xxp1;
28109    struct cvmx_lmcx_rodt_comp_ctl_s     cn58xx;
28110    struct cvmx_lmcx_rodt_comp_ctl_s     cn58xxp1;
28111} cvmx_lmcx_rodt_comp_ctl_t;
28112
28113
28114/**
28115 * cvmx_lmc#_rodt_ctl
28116 *
28117 * LMC_RODT_CTL = Obsolete LMC Read OnDieTermination control
28118 * See the description in LMC_WODT_CTL1. On Reads, Octeon only supports turning on ODT's in
28119 * the lower 2 DIMM's with the masks as below.
28120 *
28121 * Notes:
28122 * When a given RANK in position N is selected, the RODT _HI and _LO masks for that position are used.
28123 * Mask[3:0] is used for RODT control of the RANKs in positions 3, 2, 1, and 0, respectively.
28124 * In  64b mode, DIMMs are assumed to be ordered in the following order:
28125 *  position 3: [unused        , DIMM1_RANK1_LO]
28126 *  position 2: [unused        , DIMM1_RANK0_LO]
28127 *  position 1: [unused        , DIMM0_RANK1_LO]
28128 *  position 0: [unused        , DIMM0_RANK0_LO]
28129 * In 128b mode, DIMMs are assumed to be ordered in the following order:
28130 *  position 3: [DIMM3_RANK1_HI, DIMM1_RANK1_LO]
28131 *  position 2: [DIMM3_RANK0_HI, DIMM1_RANK0_LO]
28132 *  position 1: [DIMM2_RANK1_HI, DIMM0_RANK1_LO]
28133 *  position 0: [DIMM2_RANK0_HI, DIMM0_RANK0_LO]
28134 */
28135typedef union
28136{
28137    uint64_t u64;
28138    struct cvmx_lmcx_rodt_ctl_s
28139    {
28140#if __BYTE_ORDER == __BIG_ENDIAN
28141        uint64_t reserved_32_63          : 32;
28142        uint64_t rodt_hi3                : 4;       /**< Read ODT mask for position 3, data[127:64] */
28143        uint64_t rodt_hi2                : 4;       /**< Read ODT mask for position 2, data[127:64] */
28144        uint64_t rodt_hi1                : 4;       /**< Read ODT mask for position 1, data[127:64] */
28145        uint64_t rodt_hi0                : 4;       /**< Read ODT mask for position 0, data[127:64] */
28146        uint64_t rodt_lo3                : 4;       /**< Read ODT mask for position 3, data[ 63: 0] */
28147        uint64_t rodt_lo2                : 4;       /**< Read ODT mask for position 2, data[ 63: 0] */
28148        uint64_t rodt_lo1                : 4;       /**< Read ODT mask for position 1, data[ 63: 0] */
28149        uint64_t rodt_lo0                : 4;       /**< Read ODT mask for position 0, data[ 63: 0] */
28150#else
28151        uint64_t rodt_lo0                : 4;
28152        uint64_t rodt_lo1                : 4;
28153        uint64_t rodt_lo2                : 4;
28154        uint64_t rodt_lo3                : 4;
28155        uint64_t rodt_hi0                : 4;
28156        uint64_t rodt_hi1                : 4;
28157        uint64_t rodt_hi2                : 4;
28158        uint64_t rodt_hi3                : 4;
28159        uint64_t reserved_32_63          : 32;
28160#endif
28161    } s;
28162    struct cvmx_lmcx_rodt_ctl_s          cn30xx;
28163    struct cvmx_lmcx_rodt_ctl_s          cn31xx;
28164    struct cvmx_lmcx_rodt_ctl_s          cn38xx;
28165    struct cvmx_lmcx_rodt_ctl_s          cn38xxp2;
28166    struct cvmx_lmcx_rodt_ctl_s          cn50xx;
28167    struct cvmx_lmcx_rodt_ctl_s          cn52xx;
28168    struct cvmx_lmcx_rodt_ctl_s          cn52xxp1;
28169    struct cvmx_lmcx_rodt_ctl_s          cn56xx;
28170    struct cvmx_lmcx_rodt_ctl_s          cn56xxp1;
28171    struct cvmx_lmcx_rodt_ctl_s          cn58xx;
28172    struct cvmx_lmcx_rodt_ctl_s          cn58xxp1;
28173} cvmx_lmcx_rodt_ctl_t;
28174
28175
28176/**
28177 * cvmx_lmc#_wodt_ctl0
28178 *
28179 * LMC_WODT_CTL0 = LMC Write OnDieTermination control
28180 * See the description in LMC_WODT_CTL1.
28181 *
28182 * Notes:
28183 * Together, the LMC_WODT_CTL1 and LMC_WODT_CTL0 CSRs control the write ODT mask.  See LMC_WODT_CTL1.
28184 *
28185 */
28186typedef union
28187{
28188    uint64_t u64;
28189    struct cvmx_lmcx_wodt_ctl0_s
28190    {
28191#if __BYTE_ORDER == __BIG_ENDIAN
28192        uint64_t reserved_0_63           : 64;
28193#else
28194        uint64_t reserved_0_63           : 64;
28195#endif
28196    } s;
28197    struct cvmx_lmcx_wodt_ctl0_cn30xx
28198    {
28199#if __BYTE_ORDER == __BIG_ENDIAN
28200        uint64_t reserved_32_63          : 32;
28201        uint64_t wodt_d1_r1              : 8;       /**< Write ODT mask DIMM1, RANK1 */
28202        uint64_t wodt_d1_r0              : 8;       /**< Write ODT mask DIMM1, RANK0 */
28203        uint64_t wodt_d0_r1              : 8;       /**< Write ODT mask DIMM0, RANK1 */
28204        uint64_t wodt_d0_r0              : 8;       /**< Write ODT mask DIMM0, RANK0 */
28205#else
28206        uint64_t wodt_d0_r0              : 8;
28207        uint64_t wodt_d0_r1              : 8;
28208        uint64_t wodt_d1_r0              : 8;
28209        uint64_t wodt_d1_r1              : 8;
28210        uint64_t reserved_32_63          : 32;
28211#endif
28212    } cn30xx;
28213    struct cvmx_lmcx_wodt_ctl0_cn30xx    cn31xx;
28214    struct cvmx_lmcx_wodt_ctl0_cn38xx
28215    {
28216#if __BYTE_ORDER == __BIG_ENDIAN
28217        uint64_t reserved_32_63          : 32;
28218        uint64_t wodt_hi3                : 4;       /**< Write ODT mask for position 3, data[127:64] */
28219        uint64_t wodt_hi2                : 4;       /**< Write ODT mask for position 2, data[127:64] */
28220        uint64_t wodt_hi1                : 4;       /**< Write ODT mask for position 1, data[127:64] */
28221        uint64_t wodt_hi0                : 4;       /**< Write ODT mask for position 0, data[127:64] */
28222        uint64_t wodt_lo3                : 4;       /**< Write ODT mask for position 3, data[ 63: 0] */
28223        uint64_t wodt_lo2                : 4;       /**< Write ODT mask for position 2, data[ 63: 0] */
28224        uint64_t wodt_lo1                : 4;       /**< Write ODT mask for position 1, data[ 63: 0] */
28225        uint64_t wodt_lo0                : 4;       /**< Write ODT mask for position 0, data[ 63: 0] */
28226#else
28227        uint64_t wodt_lo0                : 4;
28228        uint64_t wodt_lo1                : 4;
28229        uint64_t wodt_lo2                : 4;
28230        uint64_t wodt_lo3                : 4;
28231        uint64_t wodt_hi0                : 4;
28232        uint64_t wodt_hi1                : 4;
28233        uint64_t wodt_hi2                : 4;
28234        uint64_t wodt_hi3                : 4;
28235        uint64_t reserved_32_63          : 32;
28236#endif
28237    } cn38xx;
28238    struct cvmx_lmcx_wodt_ctl0_cn38xx    cn38xxp2;
28239    struct cvmx_lmcx_wodt_ctl0_cn38xx    cn50xx;
28240    struct cvmx_lmcx_wodt_ctl0_cn30xx    cn52xx;
28241    struct cvmx_lmcx_wodt_ctl0_cn30xx    cn52xxp1;
28242    struct cvmx_lmcx_wodt_ctl0_cn30xx    cn56xx;
28243    struct cvmx_lmcx_wodt_ctl0_cn30xx    cn56xxp1;
28244    struct cvmx_lmcx_wodt_ctl0_cn38xx    cn58xx;
28245    struct cvmx_lmcx_wodt_ctl0_cn38xx    cn58xxp1;
28246} cvmx_lmcx_wodt_ctl0_t;
28247
28248
28249/**
28250 * cvmx_lmc#_wodt_ctl1
28251 *
28252 * LMC_WODT_CTL1 = LMC Write OnDieTermination control
28253 * System designers may desire to terminate DQ/DQS/DM lines for higher frequency DDR operations
28254 * (667MHz and faster), especially on a multi-rank system. DDR2 DQ/DM/DQS I/O's have built in
28255 * Termination resistor that can be turned on or off by the controller, after meeting tAOND and tAOF
28256 * timing requirements. Each Rank has its own ODT pin that fans out to all the memory parts
28257 * in that DIMM. System designers may prefer different combinations of ODT ON's for read and write
28258 * into different ranks. Octeon supports full programmability by way of the mask register below.
28259 * Each Rank position has its own 8-bit programmable field.
28260 * When the controller does a write to that rank, it sets the 8 ODT pins to the MASK pins below.
28261 * For eg., When doing a write into Rank0, a system designer may desire to terminate the lines
28262 * with the resistor on Dimm0/Rank1. The mask WODT_D0_R0 would then be [00000010].
28263 * If ODT feature is not desired, the DDR parts can be programmed to not look at these pins by
28264 * writing 0 in QS_DIC. Octeon drives the appropriate mask values on the ODT pins by default.
28265 * If this feature is not required, write 0 in this register.
28266 *
28267 * Notes:
28268 * Together, the LMC_WODT_CTL1 and LMC_WODT_CTL0 CSRs control the write ODT mask.
28269 * When a given RANK is selected, the WODT mask for that RANK is used.  The resulting WODT mask is
28270 * driven to the DIMMs in the following manner:
28271 *            BUNK_ENA=1     BUNK_ENA=0
28272 * Mask[7] -> DIMM3, RANK1    DIMM3
28273 * Mask[6] -> DIMM3, RANK0
28274 * Mask[5] -> DIMM2, RANK1    DIMM2
28275 * Mask[4] -> DIMM2, RANK0
28276 * Mask[3] -> DIMM1, RANK1    DIMM1
28277 * Mask[2] -> DIMM1, RANK0
28278 * Mask[1] -> DIMM0, RANK1    DIMM0
28279 * Mask[0] -> DIMM0, RANK0
28280 */
28281typedef union
28282{
28283    uint64_t u64;
28284    struct cvmx_lmcx_wodt_ctl1_s
28285    {
28286#if __BYTE_ORDER == __BIG_ENDIAN
28287        uint64_t reserved_32_63          : 32;
28288        uint64_t wodt_d3_r1              : 8;       /**< Write ODT mask DIMM3, RANK1/DIMM3 in SingleRanked */
28289        uint64_t wodt_d3_r0              : 8;       /**< Write ODT mask DIMM3, RANK0 */
28290        uint64_t wodt_d2_r1              : 8;       /**< Write ODT mask DIMM2, RANK1/DIMM2 in SingleRanked */
28291        uint64_t wodt_d2_r0              : 8;       /**< Write ODT mask DIMM2, RANK0 */
28292#else
28293        uint64_t wodt_d2_r0              : 8;
28294        uint64_t wodt_d2_r1              : 8;
28295        uint64_t wodt_d3_r0              : 8;
28296        uint64_t wodt_d3_r1              : 8;
28297        uint64_t reserved_32_63          : 32;
28298#endif
28299    } s;
28300    struct cvmx_lmcx_wodt_ctl1_s         cn30xx;
28301    struct cvmx_lmcx_wodt_ctl1_s         cn31xx;
28302    struct cvmx_lmcx_wodt_ctl1_s         cn52xx;
28303    struct cvmx_lmcx_wodt_ctl1_s         cn52xxp1;
28304    struct cvmx_lmcx_wodt_ctl1_s         cn56xx;
28305    struct cvmx_lmcx_wodt_ctl1_s         cn56xxp1;
28306} cvmx_lmcx_wodt_ctl1_t;
28307
28308
28309/**
28310 * cvmx_mio_boot_bist_stat
28311 *
28312 * MIO_BOOT_BIST_STAT = MIO Boot BIST Status Register
28313 *
28314 * Contains the BIST status for the MIO boot memories.  '0' = pass, '1' = fail.
28315 */
28316typedef union
28317{
28318    uint64_t u64;
28319    struct cvmx_mio_boot_bist_stat_s
28320    {
28321#if __BYTE_ORDER == __BIG_ENDIAN
28322        uint64_t reserved_2_63           : 62;
28323        uint64_t loc                     : 1;       /**< Local memory BIST status */
28324        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28325#else
28326        uint64_t ncbi                    : 1;
28327        uint64_t loc                     : 1;
28328        uint64_t reserved_2_63           : 62;
28329#endif
28330    } s;
28331    struct cvmx_mio_boot_bist_stat_cn30xx
28332    {
28333#if __BYTE_ORDER == __BIG_ENDIAN
28334        uint64_t reserved_4_63           : 60;
28335        uint64_t ncbo_1                  : 1;       /**< NCB output FIFO 1 BIST status */
28336        uint64_t ncbo_0                  : 1;       /**< NCB output FIFO 0 BIST status */
28337        uint64_t loc                     : 1;       /**< Local memory BIST status */
28338        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28339#else
28340        uint64_t ncbi                    : 1;
28341        uint64_t loc                     : 1;
28342        uint64_t ncbo_0                  : 1;
28343        uint64_t ncbo_1                  : 1;
28344        uint64_t reserved_4_63           : 60;
28345#endif
28346    } cn30xx;
28347    struct cvmx_mio_boot_bist_stat_cn30xx cn31xx;
28348    struct cvmx_mio_boot_bist_stat_cn38xx
28349    {
28350#if __BYTE_ORDER == __BIG_ENDIAN
28351        uint64_t reserved_3_63           : 61;
28352        uint64_t ncbo_0                  : 1;       /**< NCB output FIFO BIST status */
28353        uint64_t loc                     : 1;       /**< Local memory BIST status */
28354        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28355#else
28356        uint64_t ncbi                    : 1;
28357        uint64_t loc                     : 1;
28358        uint64_t ncbo_0                  : 1;
28359        uint64_t reserved_3_63           : 61;
28360#endif
28361    } cn38xx;
28362    struct cvmx_mio_boot_bist_stat_cn38xx cn38xxp2;
28363    struct cvmx_mio_boot_bist_stat_cn50xx
28364    {
28365#if __BYTE_ORDER == __BIG_ENDIAN
28366        uint64_t reserved_6_63           : 58;
28367        uint64_t pcm_1                   : 1;       /**< PCM memory 1 BIST status */
28368        uint64_t pcm_0                   : 1;       /**< PCM memory 0 BIST status */
28369        uint64_t ncbo_1                  : 1;       /**< NCB output FIFO 1 BIST status */
28370        uint64_t ncbo_0                  : 1;       /**< NCB output FIFO 0 BIST status */
28371        uint64_t loc                     : 1;       /**< Local memory BIST status */
28372        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28373#else
28374        uint64_t ncbi                    : 1;
28375        uint64_t loc                     : 1;
28376        uint64_t ncbo_0                  : 1;
28377        uint64_t ncbo_1                  : 1;
28378        uint64_t pcm_0                   : 1;
28379        uint64_t pcm_1                   : 1;
28380        uint64_t reserved_6_63           : 58;
28381#endif
28382    } cn50xx;
28383    struct cvmx_mio_boot_bist_stat_cn52xx
28384    {
28385#if __BYTE_ORDER == __BIG_ENDIAN
28386        uint64_t reserved_6_63           : 58;
28387        uint64_t ndf                     : 2;       /**< NAND flash BIST status */
28388        uint64_t ncbo_0                  : 1;       /**< NCB output FIFO BIST status */
28389        uint64_t dma                     : 1;       /**< DMA memory BIST status */
28390        uint64_t loc                     : 1;       /**< Local memory BIST status */
28391        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28392#else
28393        uint64_t ncbi                    : 1;
28394        uint64_t loc                     : 1;
28395        uint64_t dma                     : 1;
28396        uint64_t ncbo_0                  : 1;
28397        uint64_t ndf                     : 2;
28398        uint64_t reserved_6_63           : 58;
28399#endif
28400    } cn52xx;
28401    struct cvmx_mio_boot_bist_stat_cn52xxp1
28402    {
28403#if __BYTE_ORDER == __BIG_ENDIAN
28404        uint64_t reserved_4_63           : 60;
28405        uint64_t ncbo_0                  : 1;       /**< NCB output FIFO BIST status */
28406        uint64_t dma                     : 1;       /**< DMA memory BIST status */
28407        uint64_t loc                     : 1;       /**< Local memory BIST status */
28408        uint64_t ncbi                    : 1;       /**< NCB input FIFO BIST status */
28409#else
28410        uint64_t ncbi                    : 1;
28411        uint64_t loc                     : 1;
28412        uint64_t dma                     : 1;
28413        uint64_t ncbo_0                  : 1;
28414        uint64_t reserved_4_63           : 60;
28415#endif
28416    } cn52xxp1;
28417    struct cvmx_mio_boot_bist_stat_cn52xxp1 cn56xx;
28418    struct cvmx_mio_boot_bist_stat_cn52xxp1 cn56xxp1;
28419    struct cvmx_mio_boot_bist_stat_cn38xx cn58xx;
28420    struct cvmx_mio_boot_bist_stat_cn38xx cn58xxp1;
28421} cvmx_mio_boot_bist_stat_t;
28422
28423
28424/**
28425 * cvmx_mio_boot_comp
28426 *
28427 * MIO_BOOT_COMP = MIO Boot Compensation Register
28428 *
28429 * Reset value is as follows:
28430 *
28431 * no pullups,               PCTL=0x1f, NCTL=0x1f
28432 * pullup on boot_ad[9],     PCTL=0x1b, NCTL=0x1b (20 ohm termination)
28433 * pullup on boot_ad[10],    PCTL=0x07, NCTL=0x08 (50 ohm termination)
28434 * pullups on boot_ad[10:9], PCTL=0x06, NCTL=0x04 (60 ohm termination)
28435 */
28436typedef union
28437{
28438    uint64_t u64;
28439    struct cvmx_mio_boot_comp_s
28440    {
28441#if __BYTE_ORDER == __BIG_ENDIAN
28442        uint64_t reserved_10_63          : 54;
28443        uint64_t pctl                    : 5;       /**< Boot bus PCTL */
28444        uint64_t nctl                    : 5;       /**< Boot bus NCTL */
28445#else
28446        uint64_t nctl                    : 5;
28447        uint64_t pctl                    : 5;
28448        uint64_t reserved_10_63          : 54;
28449#endif
28450    } s;
28451    struct cvmx_mio_boot_comp_s          cn50xx;
28452    struct cvmx_mio_boot_comp_s          cn52xx;
28453    struct cvmx_mio_boot_comp_s          cn52xxp1;
28454    struct cvmx_mio_boot_comp_s          cn56xx;
28455    struct cvmx_mio_boot_comp_s          cn56xxp1;
28456} cvmx_mio_boot_comp_t;
28457
28458
28459/**
28460 * cvmx_mio_boot_dma_cfg#
28461 *
28462 * MIO_BOOT_DMA_CFG = MIO Boot DMA Config Register (1 per engine * 2 engines)
28463 *
28464 * SIZE is specified in number of bus transfers, where one transfer is equal to the following number
28465 * of bytes dependent on MIO_BOOT_DMA_TIMn[WIDTH] and MIO_BOOT_DMA_TIMn[DDR]:
28466 *
28467 * WIDTH     DDR      Transfer Size (bytes)
28468 * ----------------------------------------
28469 *   0        0               2
28470 *   0        1               4
28471 *   1        0               4
28472 *   1        1               8
28473 *
28474 * Note: ADR must be aligned to the bus width (i.e. 16 bit aligned if WIDTH=0, 32 bit aligned if WIDTH=1).
28475 */
28476typedef union
28477{
28478    uint64_t u64;
28479    struct cvmx_mio_boot_dma_cfgx_s
28480    {
28481#if __BYTE_ORDER == __BIG_ENDIAN
28482        uint64_t en                      : 1;       /**< DMA Engine X enable */
28483        uint64_t rw                      : 1;       /**< DMA Engine X R/W bit (0 = read, 1 = write) */
28484        uint64_t clr                     : 1;       /**< DMA Engine X clear EN on device terminated burst */
28485        uint64_t reserved_60_60          : 1;
28486        uint64_t swap32                  : 1;       /**< DMA Engine X 32 bit swap */
28487        uint64_t swap16                  : 1;       /**< DMA Engine X 16 bit swap */
28488        uint64_t swap8                   : 1;       /**< DMA Engine X 8 bit swap */
28489        uint64_t endian                  : 1;       /**< DMA Engine X NCB endian mode (0 = big, 1 = little) */
28490        uint64_t size                    : 20;      /**< DMA Engine X size */
28491        uint64_t adr                     : 36;      /**< DMA Engine X address */
28492#else
28493        uint64_t adr                     : 36;
28494        uint64_t size                    : 20;
28495        uint64_t endian                  : 1;
28496        uint64_t swap8                   : 1;
28497        uint64_t swap16                  : 1;
28498        uint64_t swap32                  : 1;
28499        uint64_t reserved_60_60          : 1;
28500        uint64_t clr                     : 1;
28501        uint64_t rw                      : 1;
28502        uint64_t en                      : 1;
28503#endif
28504    } s;
28505    struct cvmx_mio_boot_dma_cfgx_s      cn52xx;
28506    struct cvmx_mio_boot_dma_cfgx_s      cn52xxp1;
28507    struct cvmx_mio_boot_dma_cfgx_s      cn56xx;
28508    struct cvmx_mio_boot_dma_cfgx_s      cn56xxp1;
28509} cvmx_mio_boot_dma_cfgx_t;
28510
28511
28512/**
28513 * cvmx_mio_boot_dma_int#
28514 *
28515 * MIO_BOOT_DMA_INT = MIO Boot DMA Interrupt Register (1 per engine * 2 engines)
28516 *
28517 */
28518typedef union
28519{
28520    uint64_t u64;
28521    struct cvmx_mio_boot_dma_intx_s
28522    {
28523#if __BYTE_ORDER == __BIG_ENDIAN
28524        uint64_t reserved_2_63           : 62;
28525        uint64_t dmarq                   : 1;       /**< DMA Engine X DMARQ asserted interrupt */
28526        uint64_t done                    : 1;       /**< DMA Engine X request completion interrupt */
28527#else
28528        uint64_t done                    : 1;
28529        uint64_t dmarq                   : 1;
28530        uint64_t reserved_2_63           : 62;
28531#endif
28532    } s;
28533    struct cvmx_mio_boot_dma_intx_s      cn52xx;
28534    struct cvmx_mio_boot_dma_intx_s      cn52xxp1;
28535    struct cvmx_mio_boot_dma_intx_s      cn56xx;
28536    struct cvmx_mio_boot_dma_intx_s      cn56xxp1;
28537} cvmx_mio_boot_dma_intx_t;
28538
28539
28540/**
28541 * cvmx_mio_boot_dma_int_en#
28542 *
28543 * MIO_BOOT_DMA_INT_EN = MIO Boot DMA Interrupt Enable Register (1 per engine * 2 engines)
28544 *
28545 */
28546typedef union
28547{
28548    uint64_t u64;
28549    struct cvmx_mio_boot_dma_int_enx_s
28550    {
28551#if __BYTE_ORDER == __BIG_ENDIAN
28552        uint64_t reserved_2_63           : 62;
28553        uint64_t dmarq                   : 1;       /**< DMA Engine X DMARQ asserted interrupt enable */
28554        uint64_t done                    : 1;       /**< DMA Engine X request completion interrupt enable */
28555#else
28556        uint64_t done                    : 1;
28557        uint64_t dmarq                   : 1;
28558        uint64_t reserved_2_63           : 62;
28559#endif
28560    } s;
28561    struct cvmx_mio_boot_dma_int_enx_s   cn52xx;
28562    struct cvmx_mio_boot_dma_int_enx_s   cn52xxp1;
28563    struct cvmx_mio_boot_dma_int_enx_s   cn56xx;
28564    struct cvmx_mio_boot_dma_int_enx_s   cn56xxp1;
28565} cvmx_mio_boot_dma_int_enx_t;
28566
28567
28568/**
28569 * cvmx_mio_boot_dma_tim#
28570 *
28571 * MIO_BOOT_DMA_TIM = MIO Boot DMA Timing Register (1 per engine * 2 engines)
28572 *
28573 * DMACK_PI inverts the assertion level of boot_dmack[n].  The default polarity of boot_dmack[1:0] is
28574 * selected on the first de-assertion of reset by the values on boot_ad[12:11], where 0 is active high
28575 * and 1 is active low (see MIO_BOOT_PIN_DEFS for a read-only copy of the default polarity).
28576 * boot_ad[12:11] have internal pulldowns, so place a pullup on boot_ad[n+11] for active low default
28577 * polarity on engine n.  To interface with CF cards in True IDE Mode, either a pullup should be placed
28578 * on boot_ad[n+11] OR the corresponding DMACK_PI[n] should be set.
28579 *
28580 * DMARQ_PI inverts the assertion level of boot_dmarq[n].  The default polarity of boot_dmarq[1:0] is
28581 * active high, thus setting the polarity inversion bits changes the polarity to active low.  To
28582 * interface with CF cards in True IDE Mode, the corresponding DMARQ_PI[n] should be clear.
28583 *
28584 * TIM_MULT specifies the timing multiplier for an engine.  The timing multiplier applies to all timing
28585 * parameters, except for DMARQ and RD_DLY, which simply count eclks.  TIM_MULT is encoded as follows:
28586 * 0 = 4x, 1 = 1x, 2 = 2x, 3 = 8x.
28587 *
28588 * RD_DLY specifies the read sample delay in eclk cycles for an engine.  For reads, the data bus is
28589 * normally sampled on the same eclk edge that drives boot_oe_n high (and also low in DDR mode).
28590 * This parameter can delay that sampling edge by up to 7 eclks.  Note: the number of eclk cycles
28591 * counted by the OE_A and DMACK_H + PAUSE timing parameters must be greater than RD_DLY.
28592 *
28593 * If DDR is set, then WE_N must be less than WE_A.
28594 */
28595typedef union
28596{
28597    uint64_t u64;
28598    struct cvmx_mio_boot_dma_timx_s
28599    {
28600#if __BYTE_ORDER == __BIG_ENDIAN
28601        uint64_t dmack_pi                : 1;       /**< DMA Engine X DMA ack polarity inversion */
28602        uint64_t dmarq_pi                : 1;       /**< DMA Engine X DMA request polarity inversion */
28603        uint64_t tim_mult                : 2;       /**< DMA Engine X timing multiplier */
28604        uint64_t rd_dly                  : 3;       /**< DMA Engine X read sample delay */
28605        uint64_t ddr                     : 1;       /**< DMA Engine X DDR mode */
28606        uint64_t width                   : 1;       /**< DMA Engine X bus width (0 = 16 bits, 1 = 32 bits) */
28607        uint64_t reserved_48_54          : 7;
28608        uint64_t pause                   : 6;       /**< DMA Engine X pause count */
28609        uint64_t dmack_h                 : 6;       /**< DMA Engine X DMA ack hold count */
28610        uint64_t we_n                    : 6;       /**< DMA Engine X write enable negated count */
28611        uint64_t we_a                    : 6;       /**< DMA Engine X write enable asserted count */
28612        uint64_t oe_n                    : 6;       /**< DMA Engine X output enable negated count */
28613        uint64_t oe_a                    : 6;       /**< DMA Engine X output enable asserted count */
28614        uint64_t dmack_s                 : 6;       /**< DMA Engine X DMA ack setup count */
28615        uint64_t dmarq                   : 6;       /**< DMA Engine X DMA request count (must be non-zero) */
28616#else
28617        uint64_t dmarq                   : 6;
28618        uint64_t dmack_s                 : 6;
28619        uint64_t oe_a                    : 6;
28620        uint64_t oe_n                    : 6;
28621        uint64_t we_a                    : 6;
28622        uint64_t we_n                    : 6;
28623        uint64_t dmack_h                 : 6;
28624        uint64_t pause                   : 6;
28625        uint64_t reserved_48_54          : 7;
28626        uint64_t width                   : 1;
28627        uint64_t ddr                     : 1;
28628        uint64_t rd_dly                  : 3;
28629        uint64_t tim_mult                : 2;
28630        uint64_t dmarq_pi                : 1;
28631        uint64_t dmack_pi                : 1;
28632#endif
28633    } s;
28634    struct cvmx_mio_boot_dma_timx_s      cn52xx;
28635    struct cvmx_mio_boot_dma_timx_s      cn52xxp1;
28636    struct cvmx_mio_boot_dma_timx_s      cn56xx;
28637    struct cvmx_mio_boot_dma_timx_s      cn56xxp1;
28638} cvmx_mio_boot_dma_timx_t;
28639
28640
28641/**
28642 * cvmx_mio_boot_err
28643 *
28644 * MIO_BOOT_ERR = MIO Boot Error Register
28645 *
28646 * Contains the address decode error and wait mode error bits.  Address decode error is set when a
28647 * boot bus access does not hit in any of the 8 remote regions or 2 local regions.  Wait mode error is
28648 * set when wait mode is enabled and the external wait signal is not de-asserted after 32k eclk cycles.
28649 */
28650typedef union
28651{
28652    uint64_t u64;
28653    struct cvmx_mio_boot_err_s
28654    {
28655#if __BYTE_ORDER == __BIG_ENDIAN
28656        uint64_t reserved_2_63           : 62;
28657        uint64_t wait_err                : 1;       /**< Wait mode error */
28658        uint64_t adr_err                 : 1;       /**< Address decode error */
28659#else
28660        uint64_t adr_err                 : 1;
28661        uint64_t wait_err                : 1;
28662        uint64_t reserved_2_63           : 62;
28663#endif
28664    } s;
28665    struct cvmx_mio_boot_err_s           cn30xx;
28666    struct cvmx_mio_boot_err_s           cn31xx;
28667    struct cvmx_mio_boot_err_s           cn38xx;
28668    struct cvmx_mio_boot_err_s           cn38xxp2;
28669    struct cvmx_mio_boot_err_s           cn50xx;
28670    struct cvmx_mio_boot_err_s           cn52xx;
28671    struct cvmx_mio_boot_err_s           cn52xxp1;
28672    struct cvmx_mio_boot_err_s           cn56xx;
28673    struct cvmx_mio_boot_err_s           cn56xxp1;
28674    struct cvmx_mio_boot_err_s           cn58xx;
28675    struct cvmx_mio_boot_err_s           cn58xxp1;
28676} cvmx_mio_boot_err_t;
28677
28678
28679/**
28680 * cvmx_mio_boot_int
28681 *
28682 * MIO_BOOT_INT = MIO Boot Interrupt Register
28683 *
28684 * Contains the interrupt enable bits for address decode error and wait mode error.
28685 */
28686typedef union
28687{
28688    uint64_t u64;
28689    struct cvmx_mio_boot_int_s
28690    {
28691#if __BYTE_ORDER == __BIG_ENDIAN
28692        uint64_t reserved_2_63           : 62;
28693        uint64_t wait_int                : 1;       /**< Wait mode error interrupt enable */
28694        uint64_t adr_int                 : 1;       /**< Address decode error interrupt enable */
28695#else
28696        uint64_t adr_int                 : 1;
28697        uint64_t wait_int                : 1;
28698        uint64_t reserved_2_63           : 62;
28699#endif
28700    } s;
28701    struct cvmx_mio_boot_int_s           cn30xx;
28702    struct cvmx_mio_boot_int_s           cn31xx;
28703    struct cvmx_mio_boot_int_s           cn38xx;
28704    struct cvmx_mio_boot_int_s           cn38xxp2;
28705    struct cvmx_mio_boot_int_s           cn50xx;
28706    struct cvmx_mio_boot_int_s           cn52xx;
28707    struct cvmx_mio_boot_int_s           cn52xxp1;
28708    struct cvmx_mio_boot_int_s           cn56xx;
28709    struct cvmx_mio_boot_int_s           cn56xxp1;
28710    struct cvmx_mio_boot_int_s           cn58xx;
28711    struct cvmx_mio_boot_int_s           cn58xxp1;
28712} cvmx_mio_boot_int_t;
28713
28714
28715/**
28716 * cvmx_mio_boot_loc_adr
28717 *
28718 * MIO_BOOT_LOC_ADR = MIO Boot Local Memory Address Register
28719 *
28720 * Specifies the address for reading or writing the local memory.  This address will post-increment
28721 * following an access to the MIO Boot Local Memory Data Register (MIO_BOOT_LOC_DAT).
28722 *
28723 * Local memory region 0 exists from addresses 0x00 - 0x78.
28724 * Local memory region 1 exists from addresses 0x80 - 0xf8.
28725 */
28726typedef union
28727{
28728    uint64_t u64;
28729    struct cvmx_mio_boot_loc_adr_s
28730    {
28731#if __BYTE_ORDER == __BIG_ENDIAN
28732        uint64_t reserved_8_63           : 56;
28733        uint64_t adr                     : 5;       /**< Local memory address */
28734        uint64_t reserved_0_2            : 3;
28735#else
28736        uint64_t reserved_0_2            : 3;
28737        uint64_t adr                     : 5;
28738        uint64_t reserved_8_63           : 56;
28739#endif
28740    } s;
28741    struct cvmx_mio_boot_loc_adr_s       cn30xx;
28742    struct cvmx_mio_boot_loc_adr_s       cn31xx;
28743    struct cvmx_mio_boot_loc_adr_s       cn38xx;
28744    struct cvmx_mio_boot_loc_adr_s       cn38xxp2;
28745    struct cvmx_mio_boot_loc_adr_s       cn50xx;
28746    struct cvmx_mio_boot_loc_adr_s       cn52xx;
28747    struct cvmx_mio_boot_loc_adr_s       cn52xxp1;
28748    struct cvmx_mio_boot_loc_adr_s       cn56xx;
28749    struct cvmx_mio_boot_loc_adr_s       cn56xxp1;
28750    struct cvmx_mio_boot_loc_adr_s       cn58xx;
28751    struct cvmx_mio_boot_loc_adr_s       cn58xxp1;
28752} cvmx_mio_boot_loc_adr_t;
28753
28754
28755/**
28756 * cvmx_mio_boot_loc_cfg#
28757 *
28758 * MIO_BOOT_LOC_CFG = MIO Boot Local Region Config Register (1 per region * 2 regions)
28759 *
28760 * Contains local region enable and local region base address parameters.  Each local region is 128
28761 * bytes organized as 16 entries x 8 bytes.
28762 *
28763 * Base address specifies address bits [31:7] of the region.
28764 */
28765typedef union
28766{
28767    uint64_t u64;
28768    struct cvmx_mio_boot_loc_cfgx_s
28769    {
28770#if __BYTE_ORDER == __BIG_ENDIAN
28771        uint64_t reserved_32_63          : 32;
28772        uint64_t en                      : 1;       /**< Local region X enable */
28773        uint64_t reserved_28_30          : 3;
28774        uint64_t base                    : 25;      /**< Local region X base address */
28775        uint64_t reserved_0_2            : 3;
28776#else
28777        uint64_t reserved_0_2            : 3;
28778        uint64_t base                    : 25;
28779        uint64_t reserved_28_30          : 3;
28780        uint64_t en                      : 1;
28781        uint64_t reserved_32_63          : 32;
28782#endif
28783    } s;
28784    struct cvmx_mio_boot_loc_cfgx_s      cn30xx;
28785    struct cvmx_mio_boot_loc_cfgx_s      cn31xx;
28786    struct cvmx_mio_boot_loc_cfgx_s      cn38xx;
28787    struct cvmx_mio_boot_loc_cfgx_s      cn38xxp2;
28788    struct cvmx_mio_boot_loc_cfgx_s      cn50xx;
28789    struct cvmx_mio_boot_loc_cfgx_s      cn52xx;
28790    struct cvmx_mio_boot_loc_cfgx_s      cn52xxp1;
28791    struct cvmx_mio_boot_loc_cfgx_s      cn56xx;
28792    struct cvmx_mio_boot_loc_cfgx_s      cn56xxp1;
28793    struct cvmx_mio_boot_loc_cfgx_s      cn58xx;
28794    struct cvmx_mio_boot_loc_cfgx_s      cn58xxp1;
28795} cvmx_mio_boot_loc_cfgx_t;
28796
28797
28798/**
28799 * cvmx_mio_boot_loc_dat
28800 *
28801 * MIO_BOOT_LOC_DAT = MIO Boot Local Memory Data Register
28802 *
28803 * This is a pseudo-register that will read/write the local memory at the address specified by the MIO
28804 * Boot Local Address Register (MIO_BOOT_LOC_ADR) when accessed.
28805 */
28806typedef union
28807{
28808    uint64_t u64;
28809    struct cvmx_mio_boot_loc_dat_s
28810    {
28811#if __BYTE_ORDER == __BIG_ENDIAN
28812        uint64_t data                    : 64;      /**< Local memory data */
28813#else
28814        uint64_t data                    : 64;
28815#endif
28816    } s;
28817    struct cvmx_mio_boot_loc_dat_s       cn30xx;
28818    struct cvmx_mio_boot_loc_dat_s       cn31xx;
28819    struct cvmx_mio_boot_loc_dat_s       cn38xx;
28820    struct cvmx_mio_boot_loc_dat_s       cn38xxp2;
28821    struct cvmx_mio_boot_loc_dat_s       cn50xx;
28822    struct cvmx_mio_boot_loc_dat_s       cn52xx;
28823    struct cvmx_mio_boot_loc_dat_s       cn52xxp1;
28824    struct cvmx_mio_boot_loc_dat_s       cn56xx;
28825    struct cvmx_mio_boot_loc_dat_s       cn56xxp1;
28826    struct cvmx_mio_boot_loc_dat_s       cn58xx;
28827    struct cvmx_mio_boot_loc_dat_s       cn58xxp1;
28828} cvmx_mio_boot_loc_dat_t;
28829
28830
28831/**
28832 * cvmx_mio_boot_pin_defs
28833 *
28834 * MIO_BOOT_PIN_DEFS = MIO Boot Pin Defaults Register
28835 *
28836 */
28837typedef union
28838{
28839    uint64_t u64;
28840    struct cvmx_mio_boot_pin_defs_s
28841    {
28842#if __BYTE_ORDER == __BIG_ENDIAN
28843        uint64_t reserved_16_63          : 48;
28844        uint64_t ale                     : 1;       /**< Region 0 default ALE mode */
28845        uint64_t width                   : 1;       /**< Region 0 default bus width */
28846        uint64_t dmack_p2                : 1;       /**< boot_dmack[2] default polarity */
28847        uint64_t dmack_p1                : 1;       /**< boot_dmack[1] default polarity */
28848        uint64_t dmack_p0                : 1;       /**< boot_dmack[0] default polarity */
28849        uint64_t term                    : 2;       /**< Selects default driver termination */
28850        uint64_t nand                    : 1;       /**< Region 0 is NAND flash */
28851        uint64_t reserved_0_7            : 8;
28852#else
28853        uint64_t reserved_0_7            : 8;
28854        uint64_t nand                    : 1;
28855        uint64_t term                    : 2;
28856        uint64_t dmack_p0                : 1;
28857        uint64_t dmack_p1                : 1;
28858        uint64_t dmack_p2                : 1;
28859        uint64_t width                   : 1;
28860        uint64_t ale                     : 1;
28861        uint64_t reserved_16_63          : 48;
28862#endif
28863    } s;
28864    struct cvmx_mio_boot_pin_defs_cn52xx
28865    {
28866#if __BYTE_ORDER == __BIG_ENDIAN
28867        uint64_t reserved_16_63          : 48;
28868        uint64_t ale                     : 1;       /**< Region 0 default ALE mode */
28869        uint64_t width                   : 1;       /**< Region 0 default bus width */
28870        uint64_t reserved_13_13          : 1;
28871        uint64_t dmack_p1                : 1;       /**< boot_dmack[1] default polarity */
28872        uint64_t dmack_p0                : 1;       /**< boot_dmack[0] default polarity */
28873        uint64_t term                    : 2;       /**< Selects default driver termination */
28874        uint64_t nand                    : 1;       /**< Region 0 is NAND flash */
28875        uint64_t reserved_0_7            : 8;
28876#else
28877        uint64_t reserved_0_7            : 8;
28878        uint64_t nand                    : 1;
28879        uint64_t term                    : 2;
28880        uint64_t dmack_p0                : 1;
28881        uint64_t dmack_p1                : 1;
28882        uint64_t reserved_13_13          : 1;
28883        uint64_t width                   : 1;
28884        uint64_t ale                     : 1;
28885        uint64_t reserved_16_63          : 48;
28886#endif
28887    } cn52xx;
28888    struct cvmx_mio_boot_pin_defs_cn56xx
28889    {
28890#if __BYTE_ORDER == __BIG_ENDIAN
28891        uint64_t reserved_16_63          : 48;
28892        uint64_t ale                     : 1;       /**< Region 0 default ALE mode */
28893        uint64_t width                   : 1;       /**< Region 0 default bus width */
28894        uint64_t dmack_p2                : 1;       /**< boot_dmack[2] default polarity */
28895        uint64_t dmack_p1                : 1;       /**< boot_dmack[1] default polarity */
28896        uint64_t dmack_p0                : 1;       /**< boot_dmack[0] default polarity */
28897        uint64_t term                    : 2;       /**< Selects default driver termination */
28898        uint64_t reserved_0_8            : 9;
28899#else
28900        uint64_t reserved_0_8            : 9;
28901        uint64_t term                    : 2;
28902        uint64_t dmack_p0                : 1;
28903        uint64_t dmack_p1                : 1;
28904        uint64_t dmack_p2                : 1;
28905        uint64_t width                   : 1;
28906        uint64_t ale                     : 1;
28907        uint64_t reserved_16_63          : 48;
28908#endif
28909    } cn56xx;
28910} cvmx_mio_boot_pin_defs_t;
28911
28912
28913/**
28914 * cvmx_mio_boot_reg_cfg#
28915 */
28916typedef union
28917{
28918    uint64_t u64;
28919    struct cvmx_mio_boot_reg_cfgx_s
28920    {
28921#if __BYTE_ORDER == __BIG_ENDIAN
28922        uint64_t reserved_44_63          : 20;
28923        uint64_t dmack                   : 2;       /**< Region X DMACK */
28924        uint64_t tim_mult                : 2;       /**< Region X timing multiplier */
28925        uint64_t rd_dly                  : 3;       /**< Region X read sample delay */
28926        uint64_t sam                     : 1;       /**< Region X SAM mode */
28927        uint64_t we_ext                  : 2;       /**< Region X write enable count extension */
28928        uint64_t oe_ext                  : 2;       /**< Region X output enable count extension */
28929        uint64_t en                      : 1;       /**< Region X enable */
28930        uint64_t orbit                   : 1;       /**< Region X or bit */
28931        uint64_t ale                     : 1;       /**< Region X ALE mode */
28932        uint64_t width                   : 1;       /**< Region X bus width */
28933        uint64_t size                    : 12;      /**< Region X size */
28934        uint64_t base                    : 16;      /**< Region X base address */
28935#else
28936        uint64_t base                    : 16;
28937        uint64_t size                    : 12;
28938        uint64_t width                   : 1;
28939        uint64_t ale                     : 1;
28940        uint64_t orbit                   : 1;
28941        uint64_t en                      : 1;
28942        uint64_t oe_ext                  : 2;
28943        uint64_t we_ext                  : 2;
28944        uint64_t sam                     : 1;
28945        uint64_t rd_dly                  : 3;
28946        uint64_t tim_mult                : 2;
28947        uint64_t dmack                   : 2;
28948        uint64_t reserved_44_63          : 20;
28949#endif
28950    } s;
28951    struct cvmx_mio_boot_reg_cfgx_cn30xx
28952    {
28953#if __BYTE_ORDER == __BIG_ENDIAN
28954        uint64_t reserved_37_63          : 27;
28955        uint64_t sam                     : 1;       /**< Region X SAM mode */
28956        uint64_t we_ext                  : 2;       /**< Region X write enable count extension */
28957        uint64_t oe_ext                  : 2;       /**< Region X output enable count extension */
28958        uint64_t en                      : 1;       /**< Region X enable */
28959        uint64_t orbit                   : 1;       /**< Region X or bit */
28960        uint64_t ale                     : 1;       /**< Region X ALE mode */
28961        uint64_t width                   : 1;       /**< Region X bus width */
28962        uint64_t size                    : 12;      /**< Region X size */
28963        uint64_t base                    : 16;      /**< Region X base address */
28964#else
28965        uint64_t base                    : 16;
28966        uint64_t size                    : 12;
28967        uint64_t width                   : 1;
28968        uint64_t ale                     : 1;
28969        uint64_t orbit                   : 1;
28970        uint64_t en                      : 1;
28971        uint64_t oe_ext                  : 2;
28972        uint64_t we_ext                  : 2;
28973        uint64_t sam                     : 1;
28974        uint64_t reserved_37_63          : 27;
28975#endif
28976    } cn30xx;
28977    struct cvmx_mio_boot_reg_cfgx_cn30xx cn31xx;
28978    struct cvmx_mio_boot_reg_cfgx_cn38xx
28979    {
28980#if __BYTE_ORDER == __BIG_ENDIAN
28981        uint64_t reserved_32_63          : 32;
28982        uint64_t en                      : 1;       /**< Region X enable */
28983        uint64_t orbit                   : 1;       /**< Region X or bit */
28984        uint64_t reserved_28_29          : 2;
28985        uint64_t size                    : 12;      /**< Region X size */
28986        uint64_t base                    : 16;      /**< Region X base address */
28987#else
28988        uint64_t base                    : 16;
28989        uint64_t size                    : 12;
28990        uint64_t reserved_28_29          : 2;
28991        uint64_t orbit                   : 1;
28992        uint64_t en                      : 1;
28993        uint64_t reserved_32_63          : 32;
28994#endif
28995    } cn38xx;
28996    struct cvmx_mio_boot_reg_cfgx_cn38xx cn38xxp2;
28997    struct cvmx_mio_boot_reg_cfgx_cn50xx
28998    {
28999#if __BYTE_ORDER == __BIG_ENDIAN
29000        uint64_t reserved_42_63          : 22;
29001        uint64_t tim_mult                : 2;       /**< Region X timing multiplier */
29002        uint64_t rd_dly                  : 3;       /**< Region X read sample delay */
29003        uint64_t sam                     : 1;       /**< Region X SAM mode */
29004        uint64_t we_ext                  : 2;       /**< Region X write enable count extension */
29005        uint64_t oe_ext                  : 2;       /**< Region X output enable count extension */
29006        uint64_t en                      : 1;       /**< Region X enable */
29007        uint64_t orbit                   : 1;       /**< Region X or bit */
29008        uint64_t ale                     : 1;       /**< Region X ALE mode */
29009        uint64_t width                   : 1;       /**< Region X bus width */
29010        uint64_t size                    : 12;      /**< Region X size */
29011        uint64_t base                    : 16;      /**< Region X base address */
29012#else
29013        uint64_t base                    : 16;
29014        uint64_t size                    : 12;
29015        uint64_t width                   : 1;
29016        uint64_t ale                     : 1;
29017        uint64_t orbit                   : 1;
29018        uint64_t en                      : 1;
29019        uint64_t oe_ext                  : 2;
29020        uint64_t we_ext                  : 2;
29021        uint64_t sam                     : 1;
29022        uint64_t rd_dly                  : 3;
29023        uint64_t tim_mult                : 2;
29024        uint64_t reserved_42_63          : 22;
29025#endif
29026    } cn50xx;
29027    struct cvmx_mio_boot_reg_cfgx_s      cn52xx;
29028    struct cvmx_mio_boot_reg_cfgx_s      cn52xxp1;
29029    struct cvmx_mio_boot_reg_cfgx_s      cn56xx;
29030    struct cvmx_mio_boot_reg_cfgx_s      cn56xxp1;
29031    struct cvmx_mio_boot_reg_cfgx_cn30xx cn58xx;
29032    struct cvmx_mio_boot_reg_cfgx_cn30xx cn58xxp1;
29033} cvmx_mio_boot_reg_cfgx_t;
29034
29035
29036/**
29037 * cvmx_mio_boot_reg_tim#
29038 */
29039typedef union
29040{
29041    uint64_t u64;
29042    struct cvmx_mio_boot_reg_timx_s
29043    {
29044#if __BYTE_ORDER == __BIG_ENDIAN
29045        uint64_t pagem                   : 1;       /**< Region X page mode */
29046        uint64_t waitm                   : 1;       /**< Region X wait mode */
29047        uint64_t pages                   : 2;       /**< Region X page size */
29048        uint64_t ale                     : 6;       /**< Region X ALE count */
29049        uint64_t page                    : 6;       /**< Region X page count */
29050        uint64_t wait                    : 6;       /**< Region X wait count */
29051        uint64_t pause                   : 6;       /**< Region X pause count */
29052        uint64_t wr_hld                  : 6;       /**< Region X write hold count */
29053        uint64_t rd_hld                  : 6;       /**< Region X read hold count */
29054        uint64_t we                      : 6;       /**< Region X write enable count */
29055        uint64_t oe                      : 6;       /**< Region X output enable count */
29056        uint64_t ce                      : 6;       /**< Region X chip enable count */
29057        uint64_t adr                     : 6;       /**< Region X address count */
29058#else
29059        uint64_t adr                     : 6;
29060        uint64_t ce                      : 6;
29061        uint64_t oe                      : 6;
29062        uint64_t we                      : 6;
29063        uint64_t rd_hld                  : 6;
29064        uint64_t wr_hld                  : 6;
29065        uint64_t pause                   : 6;
29066        uint64_t wait                    : 6;
29067        uint64_t page                    : 6;
29068        uint64_t ale                     : 6;
29069        uint64_t pages                   : 2;
29070        uint64_t waitm                   : 1;
29071        uint64_t pagem                   : 1;
29072#endif
29073    } s;
29074    struct cvmx_mio_boot_reg_timx_s      cn30xx;
29075    struct cvmx_mio_boot_reg_timx_s      cn31xx;
29076    struct cvmx_mio_boot_reg_timx_cn38xx
29077    {
29078#if __BYTE_ORDER == __BIG_ENDIAN
29079        uint64_t pagem                   : 1;       /**< Region X page mode */
29080        uint64_t waitm                   : 1;       /**< Region X wait mode */
29081        uint64_t pages                   : 2;       /**< Region X page size (NOT IN PASS 1) */
29082        uint64_t reserved_54_59          : 6;
29083        uint64_t page                    : 6;       /**< Region X page count */
29084        uint64_t wait                    : 6;       /**< Region X wait count */
29085        uint64_t pause                   : 6;       /**< Region X pause count */
29086        uint64_t wr_hld                  : 6;       /**< Region X write hold count */
29087        uint64_t rd_hld                  : 6;       /**< Region X read hold count */
29088        uint64_t we                      : 6;       /**< Region X write enable count */
29089        uint64_t oe                      : 6;       /**< Region X output enable count */
29090        uint64_t ce                      : 6;       /**< Region X chip enable count */
29091        uint64_t adr                     : 6;       /**< Region X address count */
29092#else
29093        uint64_t adr                     : 6;
29094        uint64_t ce                      : 6;
29095        uint64_t oe                      : 6;
29096        uint64_t we                      : 6;
29097        uint64_t rd_hld                  : 6;
29098        uint64_t wr_hld                  : 6;
29099        uint64_t pause                   : 6;
29100        uint64_t wait                    : 6;
29101        uint64_t page                    : 6;
29102        uint64_t reserved_54_59          : 6;
29103        uint64_t pages                   : 2;
29104        uint64_t waitm                   : 1;
29105        uint64_t pagem                   : 1;
29106#endif
29107    } cn38xx;
29108    struct cvmx_mio_boot_reg_timx_cn38xx cn38xxp2;
29109    struct cvmx_mio_boot_reg_timx_s      cn50xx;
29110    struct cvmx_mio_boot_reg_timx_s      cn52xx;
29111    struct cvmx_mio_boot_reg_timx_s      cn52xxp1;
29112    struct cvmx_mio_boot_reg_timx_s      cn56xx;
29113    struct cvmx_mio_boot_reg_timx_s      cn56xxp1;
29114    struct cvmx_mio_boot_reg_timx_s      cn58xx;
29115    struct cvmx_mio_boot_reg_timx_s      cn58xxp1;
29116} cvmx_mio_boot_reg_timx_t;
29117
29118
29119/**
29120 * cvmx_mio_boot_thr
29121 *
29122 * MIO_BOOT_THR = MIO Boot Threshold Register
29123 *
29124 * Contains MIO Boot threshold values:
29125 *
29126 * FIF_THR = Assert ncb__busy when the Boot NCB input FIFO reaches this level (not typically for
29127 *           customer use).
29128 *
29129 * DMA_THR = When non-DMA accesses are pending, perform a DMA access after this value of non-DMA
29130 *           accesses have completed.  If set to zero, only perform a DMA access when non-DMA
29131 *           accesses are not pending.
29132 */
29133typedef union
29134{
29135    uint64_t u64;
29136    struct cvmx_mio_boot_thr_s
29137    {
29138#if __BYTE_ORDER == __BIG_ENDIAN
29139        uint64_t reserved_22_63          : 42;
29140        uint64_t dma_thr                 : 6;       /**< DMA threshold */
29141        uint64_t reserved_14_15          : 2;
29142        uint64_t fif_cnt                 : 6;       /**< Current NCB FIFO count */
29143        uint64_t reserved_6_7            : 2;
29144        uint64_t fif_thr                 : 6;       /**< NCB busy threshold */
29145#else
29146        uint64_t fif_thr                 : 6;
29147        uint64_t reserved_6_7            : 2;
29148        uint64_t fif_cnt                 : 6;
29149        uint64_t reserved_14_15          : 2;
29150        uint64_t dma_thr                 : 6;
29151        uint64_t reserved_22_63          : 42;
29152#endif
29153    } s;
29154    struct cvmx_mio_boot_thr_cn30xx
29155    {
29156#if __BYTE_ORDER == __BIG_ENDIAN
29157        uint64_t reserved_14_63          : 50;
29158        uint64_t fif_cnt                 : 6;       /**< Current NCB FIFO count */
29159        uint64_t reserved_6_7            : 2;
29160        uint64_t fif_thr                 : 6;       /**< NCB busy threshold */
29161#else
29162        uint64_t fif_thr                 : 6;
29163        uint64_t reserved_6_7            : 2;
29164        uint64_t fif_cnt                 : 6;
29165        uint64_t reserved_14_63          : 50;
29166#endif
29167    } cn30xx;
29168    struct cvmx_mio_boot_thr_cn30xx      cn31xx;
29169    struct cvmx_mio_boot_thr_cn30xx      cn38xx;
29170    struct cvmx_mio_boot_thr_cn30xx      cn38xxp2;
29171    struct cvmx_mio_boot_thr_cn30xx      cn50xx;
29172    struct cvmx_mio_boot_thr_s           cn52xx;
29173    struct cvmx_mio_boot_thr_s           cn52xxp1;
29174    struct cvmx_mio_boot_thr_s           cn56xx;
29175    struct cvmx_mio_boot_thr_s           cn56xxp1;
29176    struct cvmx_mio_boot_thr_cn30xx      cn58xx;
29177    struct cvmx_mio_boot_thr_cn30xx      cn58xxp1;
29178} cvmx_mio_boot_thr_t;
29179
29180
29181/**
29182 * cvmx_mio_fus_bnk_dat#
29183 *
29184 * Notes:
29185 * The intial state of MIO_FUS_BNK_DAT* is as if bank1 was just read i.e. DAT* = fus[511:256]
29186 *
29187 */
29188typedef union
29189{
29190    uint64_t u64;
29191    struct cvmx_mio_fus_bnk_datx_s
29192    {
29193#if __BYTE_ORDER == __BIG_ENDIAN
29194        uint64_t dat                     : 64;      /**< Efuse bank store
29195                                                         For reads, the DAT gets the fus bank last read
29196                                                         For write, the DAT determines which fuses to blow */
29197#else
29198        uint64_t dat                     : 64;
29199#endif
29200    } s;
29201    struct cvmx_mio_fus_bnk_datx_s       cn50xx;
29202    struct cvmx_mio_fus_bnk_datx_s       cn52xx;
29203    struct cvmx_mio_fus_bnk_datx_s       cn52xxp1;
29204    struct cvmx_mio_fus_bnk_datx_s       cn56xx;
29205    struct cvmx_mio_fus_bnk_datx_s       cn56xxp1;
29206    struct cvmx_mio_fus_bnk_datx_s       cn58xx;
29207    struct cvmx_mio_fus_bnk_datx_s       cn58xxp1;
29208} cvmx_mio_fus_bnk_datx_t;
29209
29210
29211/**
29212 * cvmx_mio_fus_dat0
29213 */
29214typedef union
29215{
29216    uint64_t u64;
29217    struct cvmx_mio_fus_dat0_s
29218    {
29219#if __BYTE_ORDER == __BIG_ENDIAN
29220        uint64_t reserved_32_63          : 32;
29221        uint64_t man_info                : 32;      /**< Fuse information - manufacturing info [31:0] */
29222#else
29223        uint64_t man_info                : 32;
29224        uint64_t reserved_32_63          : 32;
29225#endif
29226    } s;
29227    struct cvmx_mio_fus_dat0_s           cn30xx;
29228    struct cvmx_mio_fus_dat0_s           cn31xx;
29229    struct cvmx_mio_fus_dat0_s           cn38xx;
29230    struct cvmx_mio_fus_dat0_s           cn38xxp2;
29231    struct cvmx_mio_fus_dat0_s           cn50xx;
29232    struct cvmx_mio_fus_dat0_s           cn52xx;
29233    struct cvmx_mio_fus_dat0_s           cn52xxp1;
29234    struct cvmx_mio_fus_dat0_s           cn56xx;
29235    struct cvmx_mio_fus_dat0_s           cn56xxp1;
29236    struct cvmx_mio_fus_dat0_s           cn58xx;
29237    struct cvmx_mio_fus_dat0_s           cn58xxp1;
29238} cvmx_mio_fus_dat0_t;
29239
29240
29241/**
29242 * cvmx_mio_fus_dat1
29243 */
29244typedef union
29245{
29246    uint64_t u64;
29247    struct cvmx_mio_fus_dat1_s
29248    {
29249#if __BYTE_ORDER == __BIG_ENDIAN
29250        uint64_t reserved_32_63          : 32;
29251        uint64_t man_info                : 32;      /**< Fuse information - manufacturing info [63:32] */
29252#else
29253        uint64_t man_info                : 32;
29254        uint64_t reserved_32_63          : 32;
29255#endif
29256    } s;
29257    struct cvmx_mio_fus_dat1_s           cn30xx;
29258    struct cvmx_mio_fus_dat1_s           cn31xx;
29259    struct cvmx_mio_fus_dat1_s           cn38xx;
29260    struct cvmx_mio_fus_dat1_s           cn38xxp2;
29261    struct cvmx_mio_fus_dat1_s           cn50xx;
29262    struct cvmx_mio_fus_dat1_s           cn52xx;
29263    struct cvmx_mio_fus_dat1_s           cn52xxp1;
29264    struct cvmx_mio_fus_dat1_s           cn56xx;
29265    struct cvmx_mio_fus_dat1_s           cn56xxp1;
29266    struct cvmx_mio_fus_dat1_s           cn58xx;
29267    struct cvmx_mio_fus_dat1_s           cn58xxp1;
29268} cvmx_mio_fus_dat1_t;
29269
29270
29271/**
29272 * cvmx_mio_fus_dat2
29273 *
29274 * Notes:
29275 * CHIP_ID is consumed in several places within Octeon.
29276 *
29277 *    * Core COP0 ProcessorIdentification[Revision]
29278 *    * Core EJTAG DeviceIdentification[Version]
29279 *    * PCI_CFG02[RID]
29280 *    * JTAG controller
29281 *
29282 * Note: The JTAG controller gets CHIP_ID[3:0] solely from the laser fuses.
29283 * Modification to the efuses will not change what the JTAG controller reports
29284 * for CHIP_ID.
29285 */
29286typedef union
29287{
29288    uint64_t u64;
29289    struct cvmx_mio_fus_dat2_s
29290    {
29291#if __BYTE_ORDER == __BIG_ENDIAN
29292        uint64_t reserved_34_63          : 30;
29293        uint64_t fus318                  : 1;       /**< Fuse information - a copy of fuse318 */
29294        uint64_t raid_en                 : 1;       /**< Fuse information - RAID enabled */
29295        uint64_t reserved_30_31          : 2;
29296        uint64_t nokasu                  : 1;       /**< Fuse information - Disable Kasumi */
29297        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29298        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29299        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29300        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29301        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29302        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29303        uint64_t reserved_0_15           : 16;
29304#else
29305        uint64_t reserved_0_15           : 16;
29306        uint64_t chip_id                 : 8;
29307        uint64_t bist_dis                : 1;
29308        uint64_t rst_sht                 : 1;
29309        uint64_t nocrypto                : 1;
29310        uint64_t nomul                   : 1;
29311        uint64_t nodfa_cp2               : 1;
29312        uint64_t nokasu                  : 1;
29313        uint64_t reserved_30_31          : 2;
29314        uint64_t raid_en                 : 1;
29315        uint64_t fus318                  : 1;
29316        uint64_t reserved_34_63          : 30;
29317#endif
29318    } s;
29319    struct cvmx_mio_fus_dat2_cn30xx
29320    {
29321#if __BYTE_ORDER == __BIG_ENDIAN
29322        uint64_t reserved_29_63          : 35;
29323        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29324        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29325        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29326        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29327        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29328        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29329        uint64_t pll_off                 : 4;       /**< Fuse information - core pll offset
29330                                                         Used to compute the base offset for the core pll.
29331                                                         the offset will be (PLL_OFF ^ 8)
29332                                                         Note, these fuses can only be set from laser fuse */
29333        uint64_t reserved_1_11           : 11;
29334        uint64_t pp_dis                  : 1;       /**< Fuse information - PP_DISABLES */
29335#else
29336        uint64_t pp_dis                  : 1;
29337        uint64_t reserved_1_11           : 11;
29338        uint64_t pll_off                 : 4;
29339        uint64_t chip_id                 : 8;
29340        uint64_t bist_dis                : 1;
29341        uint64_t rst_sht                 : 1;
29342        uint64_t nocrypto                : 1;
29343        uint64_t nomul                   : 1;
29344        uint64_t nodfa_cp2               : 1;
29345        uint64_t reserved_29_63          : 35;
29346#endif
29347    } cn30xx;
29348    struct cvmx_mio_fus_dat2_cn31xx
29349    {
29350#if __BYTE_ORDER == __BIG_ENDIAN
29351        uint64_t reserved_29_63          : 35;
29352        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29353        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29354        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29355        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29356        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29357        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29358        uint64_t pll_off                 : 4;       /**< Fuse information - core pll offset
29359                                                         Used to compute the base offset for the core pll.
29360                                                         the offset will be (PLL_OFF ^ 8)
29361                                                         Note, these fuses can only be set from laser fuse */
29362        uint64_t reserved_2_11           : 10;
29363        uint64_t pp_dis                  : 2;       /**< Fuse information - PP_DISABLES */
29364#else
29365        uint64_t pp_dis                  : 2;
29366        uint64_t reserved_2_11           : 10;
29367        uint64_t pll_off                 : 4;
29368        uint64_t chip_id                 : 8;
29369        uint64_t bist_dis                : 1;
29370        uint64_t rst_sht                 : 1;
29371        uint64_t nocrypto                : 1;
29372        uint64_t nomul                   : 1;
29373        uint64_t nodfa_cp2               : 1;
29374        uint64_t reserved_29_63          : 35;
29375#endif
29376    } cn31xx;
29377    struct cvmx_mio_fus_dat2_cn38xx
29378    {
29379#if __BYTE_ORDER == __BIG_ENDIAN
29380        uint64_t reserved_29_63          : 35;
29381        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2)
29382                                                         (PASS2 Only) */
29383        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable
29384                                                         (PASS2 Only) */
29385        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable
29386                                                         (PASS2 Only) */
29387        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29388        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29389        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29390        uint64_t pp_dis                  : 16;      /**< Fuse information - PP_DISABLES */
29391#else
29392        uint64_t pp_dis                  : 16;
29393        uint64_t chip_id                 : 8;
29394        uint64_t bist_dis                : 1;
29395        uint64_t rst_sht                 : 1;
29396        uint64_t nocrypto                : 1;
29397        uint64_t nomul                   : 1;
29398        uint64_t nodfa_cp2               : 1;
29399        uint64_t reserved_29_63          : 35;
29400#endif
29401    } cn38xx;
29402    struct cvmx_mio_fus_dat2_cn38xx      cn38xxp2;
29403    struct cvmx_mio_fus_dat2_cn50xx
29404    {
29405#if __BYTE_ORDER == __BIG_ENDIAN
29406        uint64_t reserved_34_63          : 30;
29407        uint64_t fus318                  : 1;       /**< Fuse information - a copy of fuse318 */
29408        uint64_t raid_en                 : 1;       /**< Fuse information - RAID enabled
29409                                                         (5020 does not have RAID co-processor) */
29410        uint64_t reserved_30_31          : 2;
29411        uint64_t nokasu                  : 1;       /**< Fuse information - Disable Kasumi */
29412        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2)
29413                                                         (5020 does not have DFA co-processor) */
29414        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29415        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29416        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29417        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29418        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29419        uint64_t reserved_2_15           : 14;
29420        uint64_t pp_dis                  : 2;       /**< Fuse information - PP_DISABLES */
29421#else
29422        uint64_t pp_dis                  : 2;
29423        uint64_t reserved_2_15           : 14;
29424        uint64_t chip_id                 : 8;
29425        uint64_t bist_dis                : 1;
29426        uint64_t rst_sht                 : 1;
29427        uint64_t nocrypto                : 1;
29428        uint64_t nomul                   : 1;
29429        uint64_t nodfa_cp2               : 1;
29430        uint64_t nokasu                  : 1;
29431        uint64_t reserved_30_31          : 2;
29432        uint64_t raid_en                 : 1;
29433        uint64_t fus318                  : 1;
29434        uint64_t reserved_34_63          : 30;
29435#endif
29436    } cn50xx;
29437    struct cvmx_mio_fus_dat2_cn52xx
29438    {
29439#if __BYTE_ORDER == __BIG_ENDIAN
29440        uint64_t reserved_34_63          : 30;
29441        uint64_t fus318                  : 1;       /**< Fuse information - a copy of fuse318 */
29442        uint64_t raid_en                 : 1;       /**< Fuse information - RAID enabled */
29443        uint64_t reserved_30_31          : 2;
29444        uint64_t nokasu                  : 1;       /**< Fuse information - Disable Kasumi */
29445        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29446        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29447        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29448        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29449        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29450        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29451        uint64_t reserved_4_15           : 12;
29452        uint64_t pp_dis                  : 4;       /**< Fuse information - PP_DISABLES */
29453#else
29454        uint64_t pp_dis                  : 4;
29455        uint64_t reserved_4_15           : 12;
29456        uint64_t chip_id                 : 8;
29457        uint64_t bist_dis                : 1;
29458        uint64_t rst_sht                 : 1;
29459        uint64_t nocrypto                : 1;
29460        uint64_t nomul                   : 1;
29461        uint64_t nodfa_cp2               : 1;
29462        uint64_t nokasu                  : 1;
29463        uint64_t reserved_30_31          : 2;
29464        uint64_t raid_en                 : 1;
29465        uint64_t fus318                  : 1;
29466        uint64_t reserved_34_63          : 30;
29467#endif
29468    } cn52xx;
29469    struct cvmx_mio_fus_dat2_cn52xx      cn52xxp1;
29470    struct cvmx_mio_fus_dat2_cn56xx
29471    {
29472#if __BYTE_ORDER == __BIG_ENDIAN
29473        uint64_t reserved_34_63          : 30;
29474        uint64_t fus318                  : 1;       /**< Fuse information - a copy of fuse318 */
29475        uint64_t raid_en                 : 1;       /**< Fuse information - RAID enabled */
29476        uint64_t reserved_30_31          : 2;
29477        uint64_t nokasu                  : 1;       /**< Fuse information - Disable Kasumi */
29478        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29479        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29480        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29481        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29482        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29483        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29484        uint64_t reserved_12_15          : 4;
29485        uint64_t pp_dis                  : 12;      /**< Fuse information - PP_DISABLES */
29486#else
29487        uint64_t pp_dis                  : 12;
29488        uint64_t reserved_12_15          : 4;
29489        uint64_t chip_id                 : 8;
29490        uint64_t bist_dis                : 1;
29491        uint64_t rst_sht                 : 1;
29492        uint64_t nocrypto                : 1;
29493        uint64_t nomul                   : 1;
29494        uint64_t nodfa_cp2               : 1;
29495        uint64_t nokasu                  : 1;
29496        uint64_t reserved_30_31          : 2;
29497        uint64_t raid_en                 : 1;
29498        uint64_t fus318                  : 1;
29499        uint64_t reserved_34_63          : 30;
29500#endif
29501    } cn56xx;
29502    struct cvmx_mio_fus_dat2_cn56xx      cn56xxp1;
29503    struct cvmx_mio_fus_dat2_cn58xx
29504    {
29505#if __BYTE_ORDER == __BIG_ENDIAN
29506        uint64_t reserved_30_63          : 34;
29507        uint64_t nokasu                  : 1;       /**< Fuse information - Disable Kasumi */
29508        uint64_t nodfa_cp2               : 1;       /**< Fuse information - DFA Disable (CP2) */
29509        uint64_t nomul                   : 1;       /**< Fuse information - VMUL disable */
29510        uint64_t nocrypto                : 1;       /**< Fuse information - AES/DES/HASH disable */
29511        uint64_t rst_sht                 : 1;       /**< Fuse information - When set, use short reset count */
29512        uint64_t bist_dis                : 1;       /**< Fuse information - BIST Disable */
29513        uint64_t chip_id                 : 8;       /**< Fuse information - CHIP_ID */
29514        uint64_t pp_dis                  : 16;      /**< Fuse information - PP_DISABLES */
29515#else
29516        uint64_t pp_dis                  : 16;
29517        uint64_t chip_id                 : 8;
29518        uint64_t bist_dis                : 1;
29519        uint64_t rst_sht                 : 1;
29520        uint64_t nocrypto                : 1;
29521        uint64_t nomul                   : 1;
29522        uint64_t nodfa_cp2               : 1;
29523        uint64_t nokasu                  : 1;
29524        uint64_t reserved_30_63          : 34;
29525#endif
29526    } cn58xx;
29527    struct cvmx_mio_fus_dat2_cn58xx      cn58xxp1;
29528} cvmx_mio_fus_dat2_t;
29529
29530
29531/**
29532 * cvmx_mio_fus_dat3
29533 */
29534typedef union
29535{
29536    uint64_t u64;
29537    struct cvmx_mio_fus_dat3_s
29538    {
29539#if __BYTE_ORDER == __BIG_ENDIAN
29540        uint64_t reserved_32_63          : 32;
29541        uint64_t pll_div4                : 1;       /**< Fuse information - PLL DIV4 mode
29542                                                         (laser fuse only) */
29543        uint64_t zip_crip                : 2;       /**< Fuse information - Zip Cripple */
29544        uint64_t bar2_en                 : 1;       /**< Fuse information - BAR2 Enable (when blown '1') */
29545        uint64_t efus_lck                : 1;       /**< Fuse information - efuse lockdown */
29546        uint64_t efus_ign                : 1;       /**< Fuse information - efuse ignore
29547                                                         This bit only has side effects when blown in
29548                                                         the laser fuses.  It is ignore if only set in
29549                                                         efuse store. */
29550        uint64_t nozip                   : 1;       /**< Fuse information - ZIP disable */
29551        uint64_t nodfa_dte               : 1;       /**< Fuse information - DFA Disable (DTE) */
29552        uint64_t icache                  : 24;      /**< Fuse information - ICACHE Hard Repair Data */
29553#else
29554        uint64_t icache                  : 24;
29555        uint64_t nodfa_dte               : 1;
29556        uint64_t nozip                   : 1;
29557        uint64_t efus_ign                : 1;
29558        uint64_t efus_lck                : 1;
29559        uint64_t bar2_en                 : 1;
29560        uint64_t zip_crip                : 2;
29561        uint64_t pll_div4                : 1;
29562        uint64_t reserved_32_63          : 32;
29563#endif
29564    } s;
29565    struct cvmx_mio_fus_dat3_cn30xx
29566    {
29567#if __BYTE_ORDER == __BIG_ENDIAN
29568        uint64_t reserved_32_63          : 32;
29569        uint64_t pll_div4                : 1;       /**< Fuse information - PLL DIV4 mode
29570                                                         (laser fuse only) */
29571        uint64_t reserved_29_30          : 2;
29572        uint64_t bar2_en                 : 1;       /**< Fuse information - BAR2 Enable (when blown '1') */
29573        uint64_t efus_lck                : 1;       /**< Fuse information - efuse lockdown */
29574        uint64_t efus_ign                : 1;       /**< Fuse information - efuse ignore
29575                                                         This bit only has side effects when blown in
29576                                                         the laser fuses.  It is ignore if only set in
29577                                                         efuse store. */
29578        uint64_t nozip                   : 1;       /**< Fuse information - ZIP disable */
29579        uint64_t nodfa_dte               : 1;       /**< Fuse information - DFA Disable (DTE) */
29580        uint64_t icache                  : 24;      /**< Fuse information - ICACHE Hard Repair Data */
29581#else
29582        uint64_t icache                  : 24;
29583        uint64_t nodfa_dte               : 1;
29584        uint64_t nozip                   : 1;
29585        uint64_t efus_ign                : 1;
29586        uint64_t efus_lck                : 1;
29587        uint64_t bar2_en                 : 1;
29588        uint64_t reserved_29_30          : 2;
29589        uint64_t pll_div4                : 1;
29590        uint64_t reserved_32_63          : 32;
29591#endif
29592    } cn30xx;
29593    struct cvmx_mio_fus_dat3_s           cn31xx;
29594    struct cvmx_mio_fus_dat3_cn38xx
29595    {
29596#if __BYTE_ORDER == __BIG_ENDIAN
29597        uint64_t reserved_31_63          : 33;
29598        uint64_t zip_crip                : 2;       /**< Fuse information - Zip Cripple
29599                                                         (PASS3 Only) */
29600        uint64_t bar2_en                 : 1;       /**< Fuse information - BAR2 Enable (when blown '1')
29601                                                         (PASS2 Only) */
29602        uint64_t efus_lck                : 1;       /**< Fuse information - efuse lockdown
29603                                                         (PASS2 Only) */
29604        uint64_t efus_ign                : 1;       /**< Fuse information - efuse ignore
29605                                                         This bit only has side effects when blown in
29606                                                         the laser fuses.  It is ignore if only set in
29607                                                         efuse store.
29608                                                         (PASS2 Only) */
29609        uint64_t nozip                   : 1;       /**< Fuse information - ZIP disable
29610                                                         (PASS2 Only) */
29611        uint64_t nodfa_dte               : 1;       /**< Fuse information - DFA Disable (DTE)
29612                                                         (PASS2 Only) */
29613        uint64_t icache                  : 24;      /**< Fuse information - ICACHE Hard Repair Data */
29614#else
29615        uint64_t icache                  : 24;
29616        uint64_t nodfa_dte               : 1;
29617        uint64_t nozip                   : 1;
29618        uint64_t efus_ign                : 1;
29619        uint64_t efus_lck                : 1;
29620        uint64_t bar2_en                 : 1;
29621        uint64_t zip_crip                : 2;
29622        uint64_t reserved_31_63          : 33;
29623#endif
29624    } cn38xx;
29625    struct cvmx_mio_fus_dat3_cn38xxp2
29626    {
29627#if __BYTE_ORDER == __BIG_ENDIAN
29628        uint64_t reserved_29_63          : 35;
29629        uint64_t bar2_en                 : 1;       /**< Fuse information - BAR2 Enable (when blown '1')
29630                                                         (PASS2 Only) */
29631        uint64_t efus_lck                : 1;       /**< Fuse information - efuse lockdown
29632                                                         (PASS2 Only) */
29633        uint64_t efus_ign                : 1;       /**< Fuse information - efuse ignore
29634                                                         This bit only has side effects when blown in
29635                                                         the laser fuses.  It is ignore if only set in
29636                                                         efuse store.
29637                                                         (PASS2 Only) */
29638        uint64_t nozip                   : 1;       /**< Fuse information - ZIP disable
29639                                                         (PASS2 Only) */
29640        uint64_t nodfa_dte               : 1;       /**< Fuse information - DFA Disable (DTE)
29641                                                         (PASS2 Only) */
29642        uint64_t icache                  : 24;      /**< Fuse information - ICACHE Hard Repair Data */
29643#else
29644        uint64_t icache                  : 24;
29645        uint64_t nodfa_dte               : 1;
29646        uint64_t nozip                   : 1;
29647        uint64_t efus_ign                : 1;
29648        uint64_t efus_lck                : 1;
29649        uint64_t bar2_en                 : 1;
29650        uint64_t reserved_29_63          : 35;
29651#endif
29652    } cn38xxp2;
29653    struct cvmx_mio_fus_dat3_cn38xx      cn50xx;
29654    struct cvmx_mio_fus_dat3_cn38xx      cn52xx;
29655    struct cvmx_mio_fus_dat3_cn38xx      cn52xxp1;
29656    struct cvmx_mio_fus_dat3_cn38xx      cn56xx;
29657    struct cvmx_mio_fus_dat3_cn38xx      cn56xxp1;
29658    struct cvmx_mio_fus_dat3_cn38xx      cn58xx;
29659    struct cvmx_mio_fus_dat3_cn38xx      cn58xxp1;
29660} cvmx_mio_fus_dat3_t;
29661
29662
29663/**
29664 * cvmx_mio_fus_ema
29665 */
29666typedef union
29667{
29668    uint64_t u64;
29669    struct cvmx_mio_fus_ema_s
29670    {
29671#if __BYTE_ORDER == __BIG_ENDIAN
29672        uint64_t reserved_7_63           : 57;
29673        uint64_t eff_ema                 : 3;       /**< Effective EMA value */
29674        uint64_t reserved_3_3            : 1;
29675        uint64_t ema                     : 3;       /**< EMA Settings */
29676#else
29677        uint64_t ema                     : 3;
29678        uint64_t reserved_3_3            : 1;
29679        uint64_t eff_ema                 : 3;
29680        uint64_t reserved_7_63           : 57;
29681#endif
29682    } s;
29683    struct cvmx_mio_fus_ema_s            cn50xx;
29684    struct cvmx_mio_fus_ema_s            cn52xx;
29685    struct cvmx_mio_fus_ema_s            cn52xxp1;
29686    struct cvmx_mio_fus_ema_s            cn56xx;
29687    struct cvmx_mio_fus_ema_s            cn56xxp1;
29688    struct cvmx_mio_fus_ema_cn58xx
29689    {
29690#if __BYTE_ORDER == __BIG_ENDIAN
29691        uint64_t reserved_2_63           : 62;
29692        uint64_t ema                     : 2;       /**< EMA Settings */
29693#else
29694        uint64_t ema                     : 2;
29695        uint64_t reserved_2_63           : 62;
29696#endif
29697    } cn58xx;
29698    struct cvmx_mio_fus_ema_cn58xx       cn58xxp1;
29699} cvmx_mio_fus_ema_t;
29700
29701
29702/**
29703 * cvmx_mio_fus_pdf
29704 */
29705typedef union
29706{
29707    uint64_t u64;
29708    struct cvmx_mio_fus_pdf_s
29709    {
29710#if __BYTE_ORDER == __BIG_ENDIAN
29711        uint64_t pdf                     : 64;      /**< Fuse information - Product Definition Field */
29712#else
29713        uint64_t pdf                     : 64;
29714#endif
29715    } s;
29716    struct cvmx_mio_fus_pdf_s            cn50xx;
29717    struct cvmx_mio_fus_pdf_s            cn52xx;
29718    struct cvmx_mio_fus_pdf_s            cn52xxp1;
29719    struct cvmx_mio_fus_pdf_s            cn56xx;
29720    struct cvmx_mio_fus_pdf_s            cn56xxp1;
29721    struct cvmx_mio_fus_pdf_s            cn58xx;
29722} cvmx_mio_fus_pdf_t;
29723
29724
29725/**
29726 * cvmx_mio_fus_pll
29727 */
29728typedef union
29729{
29730    uint64_t u64;
29731    struct cvmx_mio_fus_pll_s
29732    {
29733#if __BYTE_ORDER == __BIG_ENDIAN
29734        uint64_t reserved_2_63           : 62;
29735        uint64_t rfslip                  : 1;       /**< PLL reference clock slip */
29736        uint64_t fbslip                  : 1;       /**< PLL feedback clock slip */
29737#else
29738        uint64_t fbslip                  : 1;
29739        uint64_t rfslip                  : 1;
29740        uint64_t reserved_2_63           : 62;
29741#endif
29742    } s;
29743    struct cvmx_mio_fus_pll_s            cn50xx;
29744    struct cvmx_mio_fus_pll_s            cn52xx;
29745    struct cvmx_mio_fus_pll_s            cn52xxp1;
29746    struct cvmx_mio_fus_pll_s            cn56xx;
29747    struct cvmx_mio_fus_pll_s            cn56xxp1;
29748    struct cvmx_mio_fus_pll_s            cn58xx;
29749    struct cvmx_mio_fus_pll_s            cn58xxp1;
29750} cvmx_mio_fus_pll_t;
29751
29752
29753/**
29754 * cvmx_mio_fus_prog
29755 *
29756 * Notes:
29757 * To write a bank of fuses, SW must set MIO_FUS_WADR[ADDR] to the bank to be
29758 * programmed and then set each bit within MIO_FUS_BNK_DATX to indicate which
29759 * fuses to blow.  Once ADDR, and DAT are setup, SW can write to
29760 * MIO_FUS_PROG[PROG] to start the bank write and poll on PROG.  Once PROG is
29761 * clear, the bank write is complete.
29762 */
29763typedef union
29764{
29765    uint64_t u64;
29766    struct cvmx_mio_fus_prog_s
29767    {
29768#if __BYTE_ORDER == __BIG_ENDIAN
29769        uint64_t reserved_1_63           : 63;
29770        uint64_t prog                    : 1;       /**< Blow the fuse bank
29771                                                         SW will set PROG, and then the HW will clear
29772                                                         when the PROG bank is complete */
29773#else
29774        uint64_t prog                    : 1;
29775        uint64_t reserved_1_63           : 63;
29776#endif
29777    } s;
29778    struct cvmx_mio_fus_prog_s           cn30xx;
29779    struct cvmx_mio_fus_prog_s           cn31xx;
29780    struct cvmx_mio_fus_prog_s           cn38xx;
29781    struct cvmx_mio_fus_prog_s           cn38xxp2;
29782    struct cvmx_mio_fus_prog_s           cn50xx;
29783    struct cvmx_mio_fus_prog_s           cn52xx;
29784    struct cvmx_mio_fus_prog_s           cn52xxp1;
29785    struct cvmx_mio_fus_prog_s           cn56xx;
29786    struct cvmx_mio_fus_prog_s           cn56xxp1;
29787    struct cvmx_mio_fus_prog_s           cn58xx;
29788    struct cvmx_mio_fus_prog_s           cn58xxp1;
29789} cvmx_mio_fus_prog_t;
29790
29791
29792/**
29793 * cvmx_mio_fus_prog_times
29794 *
29795 * Notes:
29796 * All values must be > 0 for correct electrical operation.
29797 *
29798 * The reset values are a conservative version for a 50MHz ref_clk.
29799 */
29800typedef union
29801{
29802    uint64_t u64;
29803    struct cvmx_mio_fus_prog_times_s
29804    {
29805#if __BYTE_ORDER == __BIG_ENDIAN
29806        uint64_t reserved_33_63          : 31;
29807        uint64_t prog_pin                : 1;       /**< efuse program pin */
29808        uint64_t out                     : 8;       /**< efuse timing param (ref_clks to delay 10ns) */
29809        uint64_t sclk_lo                 : 4;       /**< efuse timing param (ref_clks to delay 5ns) */
29810        uint64_t sclk_hi                 : 12;      /**< efuse timing param (ref_clks to delay 1000ns) */
29811        uint64_t setup                   : 8;       /**< efuse timing param (ref_clks to delay 10ns) */
29812#else
29813        uint64_t setup                   : 8;
29814        uint64_t sclk_hi                 : 12;
29815        uint64_t sclk_lo                 : 4;
29816        uint64_t out                     : 8;
29817        uint64_t prog_pin                : 1;
29818        uint64_t reserved_33_63          : 31;
29819#endif
29820    } s;
29821    struct cvmx_mio_fus_prog_times_s     cn50xx;
29822    struct cvmx_mio_fus_prog_times_s     cn52xx;
29823    struct cvmx_mio_fus_prog_times_s     cn52xxp1;
29824    struct cvmx_mio_fus_prog_times_s     cn56xx;
29825    struct cvmx_mio_fus_prog_times_s     cn56xxp1;
29826    struct cvmx_mio_fus_prog_times_s     cn58xx;
29827    struct cvmx_mio_fus_prog_times_s     cn58xxp1;
29828} cvmx_mio_fus_prog_times_t;
29829
29830
29831/**
29832 * cvmx_mio_fus_rcmd
29833 *
29834 * Notes:
29835 * To read an efuse, SW writes MIO_FUS_RCMD[ADDR,PEND] with the byte address of
29836 * the fuse in question, then SW can poll MIO_FUS_RCMD[PEND].  When PEND is
29837 * clear, then MIO_FUS_RCMD[DAT] is valid.  In addition, if the efuse read went
29838 * to the efuse banks (e.g. ADDR > (320/8) || EFUSE is set) SW can read
29839 * MIO_FUS_BNK_DATX which contains all 256 fuses in the bank associated in
29840 * ADDR.
29841 */
29842typedef union
29843{
29844    uint64_t u64;
29845    struct cvmx_mio_fus_rcmd_s
29846    {
29847#if __BYTE_ORDER == __BIG_ENDIAN
29848        uint64_t reserved_24_63          : 40;
29849        uint64_t dat                     : 8;       /**< 8bits of fuse data */
29850        uint64_t reserved_13_15          : 3;
29851        uint64_t pend                    : 1;       /**< SW sets this bit on a write to start FUSE read
29852                                                         operation.  HW clears when read is complete and
29853                                                         the DAT is valid */
29854        uint64_t reserved_9_11           : 3;
29855        uint64_t efuse                   : 1;       /**< When set, return data from the efuse storage
29856                                                         rather than the local storage for the 320 HW fuses */
29857        uint64_t addr                    : 8;       /**< The byte address of the fuse to read */
29858#else
29859        uint64_t addr                    : 8;
29860        uint64_t efuse                   : 1;
29861        uint64_t reserved_9_11           : 3;
29862        uint64_t pend                    : 1;
29863        uint64_t reserved_13_15          : 3;
29864        uint64_t dat                     : 8;
29865        uint64_t reserved_24_63          : 40;
29866#endif
29867    } s;
29868    struct cvmx_mio_fus_rcmd_cn30xx
29869    {
29870#if __BYTE_ORDER == __BIG_ENDIAN
29871        uint64_t reserved_24_63          : 40;
29872        uint64_t dat                     : 8;       /**< 8bits of fuse data */
29873        uint64_t reserved_13_15          : 3;
29874        uint64_t pend                    : 1;       /**< SW sets this bit on a write to start FUSE read
29875                                                         operation.  HW clears when read is complete and
29876                                                         the DAT is valid */
29877        uint64_t reserved_9_11           : 3;
29878        uint64_t efuse                   : 1;       /**< When set, return data from the efuse storage
29879                                                         rather than the local storage for the 320 HW fuses */
29880        uint64_t reserved_7_7            : 1;
29881        uint64_t addr                    : 7;       /**< The byte address of the fuse to read */
29882#else
29883        uint64_t addr                    : 7;
29884        uint64_t reserved_7_7            : 1;
29885        uint64_t efuse                   : 1;
29886        uint64_t reserved_9_11           : 3;
29887        uint64_t pend                    : 1;
29888        uint64_t reserved_13_15          : 3;
29889        uint64_t dat                     : 8;
29890        uint64_t reserved_24_63          : 40;
29891#endif
29892    } cn30xx;
29893    struct cvmx_mio_fus_rcmd_cn30xx      cn31xx;
29894    struct cvmx_mio_fus_rcmd_cn30xx      cn38xx;
29895    struct cvmx_mio_fus_rcmd_cn30xx      cn38xxp2;
29896    struct cvmx_mio_fus_rcmd_cn30xx      cn50xx;
29897    struct cvmx_mio_fus_rcmd_s           cn52xx;
29898    struct cvmx_mio_fus_rcmd_s           cn52xxp1;
29899    struct cvmx_mio_fus_rcmd_s           cn56xx;
29900    struct cvmx_mio_fus_rcmd_s           cn56xxp1;
29901    struct cvmx_mio_fus_rcmd_cn30xx      cn58xx;
29902    struct cvmx_mio_fus_rcmd_cn30xx      cn58xxp1;
29903} cvmx_mio_fus_rcmd_t;
29904
29905
29906/**
29907 * cvmx_mio_fus_spr_repair_res
29908 *
29909 * Notes:
29910 * Pass3 Only
29911 *
29912 */
29913typedef union
29914{
29915    uint64_t u64;
29916    struct cvmx_mio_fus_spr_repair_res_s
29917    {
29918#if __BYTE_ORDER == __BIG_ENDIAN
29919        uint64_t reserved_42_63          : 22;
29920        uint64_t repair2                 : 14;      /**< SPR BISR Results */
29921        uint64_t repair1                 : 14;      /**< SPR BISR Results */
29922        uint64_t repair0                 : 14;      /**< SPR BISR Results */
29923#else
29924        uint64_t repair0                 : 14;
29925        uint64_t repair1                 : 14;
29926        uint64_t repair2                 : 14;
29927        uint64_t reserved_42_63          : 22;
29928#endif
29929    } s;
29930    struct cvmx_mio_fus_spr_repair_res_s cn30xx;
29931    struct cvmx_mio_fus_spr_repair_res_s cn31xx;
29932    struct cvmx_mio_fus_spr_repair_res_s cn38xx;
29933    struct cvmx_mio_fus_spr_repair_res_s cn50xx;
29934    struct cvmx_mio_fus_spr_repair_res_s cn52xx;
29935    struct cvmx_mio_fus_spr_repair_res_s cn52xxp1;
29936    struct cvmx_mio_fus_spr_repair_res_s cn56xx;
29937    struct cvmx_mio_fus_spr_repair_res_s cn56xxp1;
29938    struct cvmx_mio_fus_spr_repair_res_s cn58xx;
29939    struct cvmx_mio_fus_spr_repair_res_s cn58xxp1;
29940} cvmx_mio_fus_spr_repair_res_t;
29941
29942
29943/**
29944 * cvmx_mio_fus_spr_repair_sum
29945 *
29946 * Notes:
29947 * Pass3 Only
29948 *
29949 */
29950typedef union
29951{
29952    uint64_t u64;
29953    struct cvmx_mio_fus_spr_repair_sum_s
29954    {
29955#if __BYTE_ORDER == __BIG_ENDIAN
29956        uint64_t reserved_1_63           : 63;
29957        uint64_t too_many                : 1;       /**< Too Many Defects - cannot repair - bad part */
29958#else
29959        uint64_t too_many                : 1;
29960        uint64_t reserved_1_63           : 63;
29961#endif
29962    } s;
29963    struct cvmx_mio_fus_spr_repair_sum_s cn30xx;
29964    struct cvmx_mio_fus_spr_repair_sum_s cn31xx;
29965    struct cvmx_mio_fus_spr_repair_sum_s cn38xx;
29966    struct cvmx_mio_fus_spr_repair_sum_s cn50xx;
29967    struct cvmx_mio_fus_spr_repair_sum_s cn52xx;
29968    struct cvmx_mio_fus_spr_repair_sum_s cn52xxp1;
29969    struct cvmx_mio_fus_spr_repair_sum_s cn56xx;
29970    struct cvmx_mio_fus_spr_repair_sum_s cn56xxp1;
29971    struct cvmx_mio_fus_spr_repair_sum_s cn58xx;
29972    struct cvmx_mio_fus_spr_repair_sum_s cn58xxp1;
29973} cvmx_mio_fus_spr_repair_sum_t;
29974
29975
29976/**
29977 * cvmx_mio_fus_unlock
29978 */
29979typedef union
29980{
29981    uint64_t u64;
29982    struct cvmx_mio_fus_unlock_s
29983    {
29984#if __BYTE_ORDER == __BIG_ENDIAN
29985        uint64_t reserved_24_63          : 40;
29986        uint64_t key                     : 24;      /**< When set to the typical value, allows SW to
29987                                                         program the efuses */
29988#else
29989        uint64_t key                     : 24;
29990        uint64_t reserved_24_63          : 40;
29991#endif
29992    } s;
29993    struct cvmx_mio_fus_unlock_s         cn30xx;
29994    struct cvmx_mio_fus_unlock_s         cn31xx;
29995} cvmx_mio_fus_unlock_t;
29996
29997
29998/**
29999 * cvmx_mio_fus_wadr
30000 */
30001typedef union
30002{
30003    uint64_t u64;
30004    struct cvmx_mio_fus_wadr_s
30005    {
30006#if __BYTE_ORDER == __BIG_ENDIAN
30007        uint64_t reserved_10_63          : 54;
30008        uint64_t addr                    : 10;      /**< Which of the four banks of 256 fuses to blow */
30009#else
30010        uint64_t addr                    : 10;
30011        uint64_t reserved_10_63          : 54;
30012#endif
30013    } s;
30014    struct cvmx_mio_fus_wadr_s           cn30xx;
30015    struct cvmx_mio_fus_wadr_s           cn31xx;
30016    struct cvmx_mio_fus_wadr_s           cn38xx;
30017    struct cvmx_mio_fus_wadr_s           cn38xxp2;
30018    struct cvmx_mio_fus_wadr_cn50xx
30019    {
30020#if __BYTE_ORDER == __BIG_ENDIAN
30021        uint64_t reserved_2_63           : 62;
30022        uint64_t addr                    : 2;       /**< Which of the four banks of 256 fuses to blow */
30023#else
30024        uint64_t addr                    : 2;
30025        uint64_t reserved_2_63           : 62;
30026#endif
30027    } cn50xx;
30028    struct cvmx_mio_fus_wadr_cn52xx
30029    {
30030#if __BYTE_ORDER == __BIG_ENDIAN
30031        uint64_t reserved_3_63           : 61;
30032        uint64_t addr                    : 3;       /**< Which of the four banks of 256 fuses to blow */
30033#else
30034        uint64_t addr                    : 3;
30035        uint64_t reserved_3_63           : 61;
30036#endif
30037    } cn52xx;
30038    struct cvmx_mio_fus_wadr_cn52xx      cn52xxp1;
30039    struct cvmx_mio_fus_wadr_cn52xx      cn56xx;
30040    struct cvmx_mio_fus_wadr_cn52xx      cn56xxp1;
30041    struct cvmx_mio_fus_wadr_cn50xx      cn58xx;
30042    struct cvmx_mio_fus_wadr_cn50xx      cn58xxp1;
30043} cvmx_mio_fus_wadr_t;
30044
30045
30046/**
30047 * cvmx_mio_ndf_dma_cfg
30048 *
30049 * MIO_NDF_DMA_CFG = MIO NAND Flash DMA Config Register
30050 *
30051 * SIZE is specified in number of 64 bit transfers (encoded in -1 notation).
30052 *
30053 * ADR must be 64 bit aligned.
30054 */
30055typedef union
30056{
30057    uint64_t u64;
30058    struct cvmx_mio_ndf_dma_cfg_s
30059    {
30060#if __BYTE_ORDER == __BIG_ENDIAN
30061        uint64_t en                      : 1;       /**< DMA Engine enable */
30062        uint64_t rw                      : 1;       /**< DMA Engine R/W bit (0 = read, 1 = write) */
30063        uint64_t clr                     : 1;       /**< DMA Engine clear EN on device terminated burst */
30064        uint64_t reserved_60_60          : 1;
30065        uint64_t swap32                  : 1;       /**< DMA Engine 32 bit swap */
30066        uint64_t swap16                  : 1;       /**< DMA Engine 16 bit swap */
30067        uint64_t swap8                   : 1;       /**< DMA Engine 8 bit swap */
30068        uint64_t endian                  : 1;       /**< DMA Engine NCB endian mode (0 = big, 1 = little) */
30069        uint64_t size                    : 20;      /**< DMA Engine size */
30070        uint64_t adr                     : 36;      /**< DMA Engine address */
30071#else
30072        uint64_t adr                     : 36;
30073        uint64_t size                    : 20;
30074        uint64_t endian                  : 1;
30075        uint64_t swap8                   : 1;
30076        uint64_t swap16                  : 1;
30077        uint64_t swap32                  : 1;
30078        uint64_t reserved_60_60          : 1;
30079        uint64_t clr                     : 1;
30080        uint64_t rw                      : 1;
30081        uint64_t en                      : 1;
30082#endif
30083    } s;
30084    struct cvmx_mio_ndf_dma_cfg_s        cn52xx;
30085} cvmx_mio_ndf_dma_cfg_t;
30086
30087
30088/**
30089 * cvmx_mio_ndf_dma_int
30090 *
30091 * MIO_NDF_DMA_INT = MIO NAND Flash DMA Interrupt Register
30092 *
30093 */
30094typedef union
30095{
30096    uint64_t u64;
30097    struct cvmx_mio_ndf_dma_int_s
30098    {
30099#if __BYTE_ORDER == __BIG_ENDIAN
30100        uint64_t reserved_1_63           : 63;
30101        uint64_t done                    : 1;       /**< DMA Engine request completion interrupt */
30102#else
30103        uint64_t done                    : 1;
30104        uint64_t reserved_1_63           : 63;
30105#endif
30106    } s;
30107    struct cvmx_mio_ndf_dma_int_s        cn52xx;
30108} cvmx_mio_ndf_dma_int_t;
30109
30110
30111/**
30112 * cvmx_mio_ndf_dma_int_en
30113 *
30114 * MIO_NDF_DMA_INT_EN = MIO NAND Flash DMA Interrupt Enable Register
30115 *
30116 */
30117typedef union
30118{
30119    uint64_t u64;
30120    struct cvmx_mio_ndf_dma_int_en_s
30121    {
30122#if __BYTE_ORDER == __BIG_ENDIAN
30123        uint64_t reserved_1_63           : 63;
30124        uint64_t done                    : 1;       /**< DMA Engine request completion interrupt enable */
30125#else
30126        uint64_t done                    : 1;
30127        uint64_t reserved_1_63           : 63;
30128#endif
30129    } s;
30130    struct cvmx_mio_ndf_dma_int_en_s     cn52xx;
30131} cvmx_mio_ndf_dma_int_en_t;
30132
30133
30134/**
30135 * cvmx_mio_pll_ctl
30136 */
30137typedef union
30138{
30139    uint64_t u64;
30140    struct cvmx_mio_pll_ctl_s
30141    {
30142#if __BYTE_ORDER == __BIG_ENDIAN
30143        uint64_t reserved_5_63           : 59;
30144        uint64_t bw_ctl                  : 5;       /**< Core PLL bandwidth control */
30145#else
30146        uint64_t bw_ctl                  : 5;
30147        uint64_t reserved_5_63           : 59;
30148#endif
30149    } s;
30150    struct cvmx_mio_pll_ctl_s            cn30xx;
30151    struct cvmx_mio_pll_ctl_s            cn31xx;
30152} cvmx_mio_pll_ctl_t;
30153
30154
30155/**
30156 * cvmx_mio_pll_setting
30157 */
30158typedef union
30159{
30160    uint64_t u64;
30161    struct cvmx_mio_pll_setting_s
30162    {
30163#if __BYTE_ORDER == __BIG_ENDIAN
30164        uint64_t reserved_17_63          : 47;
30165        uint64_t setting                 : 17;      /**< Core PLL setting */
30166#else
30167        uint64_t setting                 : 17;
30168        uint64_t reserved_17_63          : 47;
30169#endif
30170    } s;
30171    struct cvmx_mio_pll_setting_s        cn30xx;
30172    struct cvmx_mio_pll_setting_s        cn31xx;
30173} cvmx_mio_pll_setting_t;
30174
30175
30176/**
30177 * cvmx_mio_tws#_int
30178 *
30179 * MIO_TWSX_INT = TWSX Interrupt Register
30180 *
30181 * This register contains the TWSI interrupt enable mask and the interrupt source bits.  Note: the
30182 * interrupt source bit for the TWSI core interrupt (CORE_INT) is read-only, the appropriate sequence
30183 * must be written to the TWSI core to clear this interrupt.  The other interrupt source bits are write-
30184 * one-to-clear.  TS_INT is set on the update of the MIO_TWS_TWSI_SW register (i.e. when it is written
30185 * by a TWSI device).  ST_INT is set whenever the valid bit of the MIO_TWS_SW_TWSI is cleared (see above
30186 * for reasons).
30187 *
30188 * Note: When using the high-level controller, CORE_EN should be clear and CORE_INT should be ignored.
30189 * Conversely, when the high-level controller is disabled, ST_EN / TS_EN should be clear and ST_INT /
30190 * TS_INT should be ignored.
30191 *
30192 * This register also contains a read-only copy of the TWSI bus (SCL and SDA) as well as control bits to
30193 * override the current state of the TWSI bus (SCL_OVR and SDA_OVR).  Setting an override bit high will
30194 * result in the open drain driver being activated, thus driving the corresponding signal low.
30195 */
30196typedef union
30197{
30198    uint64_t u64;
30199    struct cvmx_mio_twsx_int_s
30200    {
30201#if __BYTE_ORDER == __BIG_ENDIAN
30202        uint64_t reserved_12_63          : 52;
30203        uint64_t scl                     : 1;       /**< SCL (NOT IN PASS1 OR PASS2) */
30204        uint64_t sda                     : 1;       /**< SDA (NOT IN PASS1 OR PASS2) */
30205        uint64_t scl_ovr                 : 1;       /**< SCL override (NOT IN PASS1 OR PASS2) */
30206        uint64_t sda_ovr                 : 1;       /**< SDA override (NOT IN PASS1 OR PASS2) */
30207        uint64_t reserved_7_7            : 1;
30208        uint64_t core_en                 : 1;       /**< TWSI core interrupt enable */
30209        uint64_t ts_en                   : 1;       /**< MIO_TWS_TWSI_SW register update interrupt enable */
30210        uint64_t st_en                   : 1;       /**< MIO_TWS_SW_TWSI register update interrupt enable */
30211        uint64_t reserved_3_3            : 1;
30212        uint64_t core_int                : 1;       /**< TWSI core interrupt */
30213        uint64_t ts_int                  : 1;       /**< MIO_TWS_TWSI_SW register update interrupt */
30214        uint64_t st_int                  : 1;       /**< MIO_TWS_SW_TWSI register update interrupt */
30215#else
30216        uint64_t st_int                  : 1;
30217        uint64_t ts_int                  : 1;
30218        uint64_t core_int                : 1;
30219        uint64_t reserved_3_3            : 1;
30220        uint64_t st_en                   : 1;
30221        uint64_t ts_en                   : 1;
30222        uint64_t core_en                 : 1;
30223        uint64_t reserved_7_7            : 1;
30224        uint64_t sda_ovr                 : 1;
30225        uint64_t scl_ovr                 : 1;
30226        uint64_t sda                     : 1;
30227        uint64_t scl                     : 1;
30228        uint64_t reserved_12_63          : 52;
30229#endif
30230    } s;
30231    struct cvmx_mio_twsx_int_s           cn30xx;
30232    struct cvmx_mio_twsx_int_s           cn31xx;
30233    struct cvmx_mio_twsx_int_s           cn38xx;
30234    struct cvmx_mio_twsx_int_cn38xxp2
30235    {
30236#if __BYTE_ORDER == __BIG_ENDIAN
30237        uint64_t reserved_7_63           : 57;
30238        uint64_t core_en                 : 1;       /**< TWSI core interrupt enable */
30239        uint64_t ts_en                   : 1;       /**< MIO_TWS_TWSI_SW register update interrupt enable */
30240        uint64_t st_en                   : 1;       /**< MIO_TWS_SW_TWSI register update interrupt enable */
30241        uint64_t reserved_3_3            : 1;
30242        uint64_t core_int                : 1;       /**< TWSI core interrupt */
30243        uint64_t ts_int                  : 1;       /**< MIO_TWS_TWSI_SW register update interrupt */
30244        uint64_t st_int                  : 1;       /**< MIO_TWS_SW_TWSI register update interrupt */
30245#else
30246        uint64_t st_int                  : 1;
30247        uint64_t ts_int                  : 1;
30248        uint64_t core_int                : 1;
30249        uint64_t reserved_3_3            : 1;
30250        uint64_t st_en                   : 1;
30251        uint64_t ts_en                   : 1;
30252        uint64_t core_en                 : 1;
30253        uint64_t reserved_7_63           : 57;
30254#endif
30255    } cn38xxp2;
30256    struct cvmx_mio_twsx_int_s           cn50xx;
30257    struct cvmx_mio_twsx_int_s           cn52xx;
30258    struct cvmx_mio_twsx_int_s           cn52xxp1;
30259    struct cvmx_mio_twsx_int_s           cn56xx;
30260    struct cvmx_mio_twsx_int_s           cn56xxp1;
30261    struct cvmx_mio_twsx_int_s           cn58xx;
30262    struct cvmx_mio_twsx_int_s           cn58xxp1;
30263} cvmx_mio_twsx_int_t;
30264
30265
30266/**
30267 * cvmx_mio_tws#_sw_twsi
30268 *
30269 * MIO_TWSX_SW_TWSI = TWSX Software to TWSI Register
30270 *
30271 * This register allows software to
30272 *    - initiate TWSI interface master-mode operations with a write and read the result with a read
30273 *    - load four bytes for later retrieval (slave mode) with a write and check validity with a read
30274 *    - launch a TWSI controller configuration read/write with a write and read the result with a read
30275 *
30276 * This register should be read or written by software, and read by the TWSI device. The TWSI device can
30277 * use either two-byte or five-byte reads to reference this register.
30278 *
30279 * The TWSI device considers this register valid when V==1 and SLONLY==1.
30280 */
30281typedef union
30282{
30283    uint64_t u64;
30284    struct cvmx_mio_twsx_sw_twsi_s
30285    {
30286#if __BYTE_ORDER == __BIG_ENDIAN
30287        uint64_t v                       : 1;       /**< Valid bit
30288                                                         - Set on a write (should always be written with
30289                                                           a 1)
30290                                                         - Cleared when a TWSI master mode op completes
30291                                                         - Cleared when a TWSI configuration register
30292                                                           access completes
30293                                                         - Cleared when the TWSI device reads the
30294                                                           register if SLONLY==1 */
30295        uint64_t slonly                  : 1;       /**< Slave Only Mode
30296                                                         - No operation is initiated with a write when
30297                                                           this bit is set - only D field is updated in
30298                                                           this case
30299                                                         - When clear, a write initiates either a TWSI
30300                                                           master-mode operation or a TWSI configuration
30301                                                           register access */
30302        uint64_t eia                     : 1;       /**< Extended Internal Address - send additional
30303                                                         internal address byte (MSB of IA is from IA field
30304                                                         of MIO_TWS_SW_TWSI_EXT) (NOT IN PASS 1) */
30305        uint64_t op                      : 4;       /**< Opcode field - When the register is written with
30306                                                         SLONLY==0, initiate a read or write:
30307                                                           0000 => 7-bit Byte Master Mode TWSI Op
30308                                                           0001 => 7-bit Byte Combined Read Master Mode Op
30309                                                                   7-bit Byte Write w/ IA Master Mode Op
30310                                                           0010 => 10-bit Byte Master Mode TWSI Op
30311                                                           0011 => 10-bit Byte Combined Read Master Mode Op
30312                                                                   10-bit Byte Write w/ IA Master Mode Op
30313                                                           0100 => TWSI Master Clock Register
30314                                                           0110 => See EOP field
30315                                                           1000 => 7-bit 4-byte Master Mode TWSI Op
30316                                                           1001 => 7-bit 4-byte Comb. Read Master Mode Op
30317                                                                   7-bit 4-byte Write w/ IA Master Mode Op
30318                                                           1010 => 10-bit 4-byte Master Mode TWSI Op
30319                                                           1011 => 10-bit 4-byte Comb. Read Master Mode Op
30320                                                                   10-bit 4-byte Write w/ IA Master Mode Op */
30321        uint64_t r                       : 1;       /**< Read bit or result
30322                                                         - If set on a write when SLONLY==0, the
30323                                                           operation is a read
30324                                                         - On a read, this bit returns the result
30325                                                           indication for the most recent master mode
30326                                                           operation (1 = success, 0 = fail) */
30327        uint64_t sovr                    : 1;       /**< Size Override - if set, use the SIZE field to
30328                                                         determine Master Mode Op size rather than what
30329                                                         the Opcode field specifies.  For operations
30330                                                         greater than 4 bytes, the additional data will be
30331                                                         contained in the D field of MIO_TWS_SW_TWSI_EXT
30332                                                         (NOT IN PASS 1) */
30333        uint64_t size                    : 3;       /**< Size in bytes of Master Mode Op if the Size
30334                                                         Override bit is set.  Specified in -1 notation
30335                                                         (i.e. 0 = 1 byte, 1 = 2 bytes ... 7 = 8 bytes)
30336                                                         (NOT IN PASS 1) */
30337        uint64_t scr                     : 2;       /**< Scratch - unused, but retain state */
30338        uint64_t a                       : 10;      /**< Address field
30339                                                         - the address of the remote device for a master
30340                                                           mode operation
30341                                                         - A<9:7> are only used for 10-bit addressing */
30342        uint64_t ia                      : 5;       /**< Internal Address - Used when launching a master
30343                                                         mode combined read / write with internal address
30344                                                         (lower 3 bits are contained in the EOP_IA field) */
30345        uint64_t eop_ia                  : 3;       /**< Extra opcode (when OP<3:0> == 0110 and SLONLY==0):
30346                                                           000 => TWSI Slave Address Register
30347                                                           001 => TWSI Data Register
30348                                                           010 => TWSI Control Register
30349                                                           011 => TWSI Clock Control Register (when R == 0)
30350                                                           011 => TWSI Status Register (when R == 1)
30351                                                           100 => TWSI Extended Slave Register
30352                                                           111 => TWSI Soft Reset Register
30353                                                         Also the lower 3 bits of Internal Address when
30354                                                           launching a master mode combined read / write
30355                                                           with internal address */
30356        uint64_t d                       : 32;      /**< Data Field
30357                                                         Used on a write when
30358                                                           - initiating a master-mode write (SLONLY==0)
30359                                                           - writing a TWSI config register (SLONLY==0)
30360                                                           - a slave mode write (SLONLY==1)
30361                                                         The read value is updated by
30362                                                           - a write to this register
30363                                                           - master mode completion (contains result or
30364                                                             error code)
30365                                                           - TWSI config register read (contains result) */
30366#else
30367        uint64_t d                       : 32;
30368        uint64_t eop_ia                  : 3;
30369        uint64_t ia                      : 5;
30370        uint64_t a                       : 10;
30371        uint64_t scr                     : 2;
30372        uint64_t size                    : 3;
30373        uint64_t sovr                    : 1;
30374        uint64_t r                       : 1;
30375        uint64_t op                      : 4;
30376        uint64_t eia                     : 1;
30377        uint64_t slonly                  : 1;
30378        uint64_t v                       : 1;
30379#endif
30380    } s;
30381    struct cvmx_mio_twsx_sw_twsi_s       cn30xx;
30382    struct cvmx_mio_twsx_sw_twsi_s       cn31xx;
30383    struct cvmx_mio_twsx_sw_twsi_s       cn38xx;
30384    struct cvmx_mio_twsx_sw_twsi_s       cn38xxp2;
30385    struct cvmx_mio_twsx_sw_twsi_s       cn50xx;
30386    struct cvmx_mio_twsx_sw_twsi_s       cn52xx;
30387    struct cvmx_mio_twsx_sw_twsi_s       cn52xxp1;
30388    struct cvmx_mio_twsx_sw_twsi_s       cn56xx;
30389    struct cvmx_mio_twsx_sw_twsi_s       cn56xxp1;
30390    struct cvmx_mio_twsx_sw_twsi_s       cn58xx;
30391    struct cvmx_mio_twsx_sw_twsi_s       cn58xxp1;
30392} cvmx_mio_twsx_sw_twsi_t;
30393
30394
30395/**
30396 * cvmx_mio_tws#_sw_twsi_ext
30397 *
30398 * MIO_TWSX_SW_TWSI_EXT = TWSX Software to TWSI Extension Register
30399 *
30400 * This register contains an additional byte of internal address and 4 additional bytes of data to be
30401 * used with TWSI master mode operations.  IA will be sent as the first byte of internal address when
30402 * performing master mode combined read / write with internal address operations and the EIA bit of
30403 * MIO_TWS_SW_TWSI is set.  D extends the data field of MIO_TWS_SW_TWSI for a total of 8 bytes (SOVR
30404 * must be set to perform operations greater than 4 bytes).
30405 */
30406typedef union
30407{
30408    uint64_t u64;
30409    struct cvmx_mio_twsx_sw_twsi_ext_s
30410    {
30411#if __BYTE_ORDER == __BIG_ENDIAN
30412        uint64_t reserved_40_63          : 24;
30413        uint64_t ia                      : 8;       /**< Extended Internal Address */
30414        uint64_t d                       : 32;      /**< Extended Data Field */
30415#else
30416        uint64_t d                       : 32;
30417        uint64_t ia                      : 8;
30418        uint64_t reserved_40_63          : 24;
30419#endif
30420    } s;
30421    struct cvmx_mio_twsx_sw_twsi_ext_s   cn30xx;
30422    struct cvmx_mio_twsx_sw_twsi_ext_s   cn31xx;
30423    struct cvmx_mio_twsx_sw_twsi_ext_s   cn38xx;
30424    struct cvmx_mio_twsx_sw_twsi_ext_s   cn38xxp2;
30425    struct cvmx_mio_twsx_sw_twsi_ext_s   cn50xx;
30426    struct cvmx_mio_twsx_sw_twsi_ext_s   cn52xx;
30427    struct cvmx_mio_twsx_sw_twsi_ext_s   cn52xxp1;
30428    struct cvmx_mio_twsx_sw_twsi_ext_s   cn56xx;
30429    struct cvmx_mio_twsx_sw_twsi_ext_s   cn56xxp1;
30430    struct cvmx_mio_twsx_sw_twsi_ext_s   cn58xx;
30431    struct cvmx_mio_twsx_sw_twsi_ext_s   cn58xxp1;
30432} cvmx_mio_twsx_sw_twsi_ext_t;
30433
30434
30435/**
30436 * cvmx_mio_tws#_twsi_sw
30437 *
30438 * MIO_TWSX_TWSI_SW = TWSX TWSI to Software Register
30439 *
30440 * This register allows the TWSI device to transfer data to software and later check that software has
30441 * received the information.
30442 *
30443 * This register should be read or written by the TWSI device, and read by software. The TWSI device can
30444 * use one-byte or four-byte payload writes, and two-byte payload reads.
30445 *
30446 * The TWSI device considers this register valid when V==1.
30447 */
30448typedef union
30449{
30450    uint64_t u64;
30451    struct cvmx_mio_twsx_twsi_sw_s
30452    {
30453#if __BYTE_ORDER == __BIG_ENDIAN
30454        uint64_t v                       : 2;       /**< Valid Bits
30455                                                         - Not directly writable
30456                                                         - Set to 1 on any write by the TWSI device
30457                                                         - Cleared on any read by software */
30458        uint64_t reserved_32_61          : 30;
30459        uint64_t d                       : 32;      /**< Data Field - updated on a write by the TWSI device */
30460#else
30461        uint64_t d                       : 32;
30462        uint64_t reserved_32_61          : 30;
30463        uint64_t v                       : 2;
30464#endif
30465    } s;
30466    struct cvmx_mio_twsx_twsi_sw_s       cn30xx;
30467    struct cvmx_mio_twsx_twsi_sw_s       cn31xx;
30468    struct cvmx_mio_twsx_twsi_sw_s       cn38xx;
30469    struct cvmx_mio_twsx_twsi_sw_s       cn38xxp2;
30470    struct cvmx_mio_twsx_twsi_sw_s       cn50xx;
30471    struct cvmx_mio_twsx_twsi_sw_s       cn52xx;
30472    struct cvmx_mio_twsx_twsi_sw_s       cn52xxp1;
30473    struct cvmx_mio_twsx_twsi_sw_s       cn56xx;
30474    struct cvmx_mio_twsx_twsi_sw_s       cn56xxp1;
30475    struct cvmx_mio_twsx_twsi_sw_s       cn58xx;
30476    struct cvmx_mio_twsx_twsi_sw_s       cn58xxp1;
30477} cvmx_mio_twsx_twsi_sw_t;
30478
30479
30480/**
30481 * cvmx_mio_uart#_dlh
30482 *
30483 * MIO_UARTX_DLH = MIO UARTX Divisor Latch High Register
30484 *
30485 * The DLH (Divisor Latch High) register in conjunction with DLL (Divisor Latch Low) register form a
30486 * 16-bit, read/write, Divisor Latch register that contains the baud rate divisor for the UART. It is
30487 * accessed by first setting the DLAB bit (bit 7) in the Line Control Register (LCR). The output baud
30488 * rate is equal to eclk frequency divided by sixteen times the value of the baud rate divisor, as
30489 * follows: baud rate = eclk / (16 * divisor).
30490 *
30491 * Note that the BUSY bit (bit 0) of the UART Status Register (USR) must be clear before writing this
30492 * register. BUSY bit is always clear in PASS3.
30493 *
30494 * Note that with the Divisor Latch Registers (DLL and DLH) set to zero, the baud clock is disabled
30495 * and no serial communications will occur. Also, once the DLL or DLH is set, at least 8 clock cycles
30496 * of eclk should be allowed to pass before transmitting or receiving data.
30497 *
30498 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
30499 * IER and DLH registers are the same.
30500 */
30501typedef union
30502{
30503    uint64_t u64;
30504    struct cvmx_mio_uartx_dlh_s
30505    {
30506#if __BYTE_ORDER == __BIG_ENDIAN
30507        uint64_t reserved_8_63           : 56;
30508        uint64_t dlh                     : 8;       /**< Divisor Latch High Register */
30509#else
30510        uint64_t dlh                     : 8;
30511        uint64_t reserved_8_63           : 56;
30512#endif
30513    } s;
30514    struct cvmx_mio_uartx_dlh_s          cn30xx;
30515    struct cvmx_mio_uartx_dlh_s          cn31xx;
30516    struct cvmx_mio_uartx_dlh_s          cn38xx;
30517    struct cvmx_mio_uartx_dlh_s          cn38xxp2;
30518    struct cvmx_mio_uartx_dlh_s          cn50xx;
30519    struct cvmx_mio_uartx_dlh_s          cn52xx;
30520    struct cvmx_mio_uartx_dlh_s          cn52xxp1;
30521    struct cvmx_mio_uartx_dlh_s          cn56xx;
30522    struct cvmx_mio_uartx_dlh_s          cn56xxp1;
30523    struct cvmx_mio_uartx_dlh_s          cn58xx;
30524    struct cvmx_mio_uartx_dlh_s          cn58xxp1;
30525} cvmx_mio_uartx_dlh_t;
30526typedef cvmx_mio_uartx_dlh_t cvmx_uart_dlh_t;
30527
30528
30529/**
30530 * cvmx_mio_uart#_dll
30531 *
30532 * MIO_UARTX_DLL = MIO UARTX Divisor Latch Low Register
30533 *
30534 * The DLH (Divisor Latch High) register in conjunction with DLL (Divisor Latch Low) register form a
30535 * 16-bit, read/write, Divisor Latch register that contains the baud rate divisor for the UART. It is
30536 * accessed by first setting the DLAB bit (bit 7) in the Line Control Register (LCR). The output baud
30537 * rate is equal to eclk frequency divided by sixteen times the value of the baud rate divisor, as
30538 * follows: baud rate = eclk / (16 * divisor).
30539 *
30540 * Note that the BUSY bit (bit 0) of the UART Status Register (USR) must be clear before writing this
30541 * register. BUSY bit is always clear in PASS3.
30542 *
30543 * Note that with the Divisor Latch Registers (DLL and DLH) set to zero, the baud clock is disabled
30544 * and no serial communications will occur. Also, once the DLL or DLH is set, at least 8 clock cycles
30545 * of eclk should be allowed to pass before transmitting or receiving data.
30546 *
30547 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
30548 * RBR, THR, and DLL registers are the same.
30549 */
30550typedef union
30551{
30552    uint64_t u64;
30553    struct cvmx_mio_uartx_dll_s
30554    {
30555#if __BYTE_ORDER == __BIG_ENDIAN
30556        uint64_t reserved_8_63           : 56;
30557        uint64_t dll                     : 8;       /**< Divisor Latch Low Register */
30558#else
30559        uint64_t dll                     : 8;
30560        uint64_t reserved_8_63           : 56;
30561#endif
30562    } s;
30563    struct cvmx_mio_uartx_dll_s          cn30xx;
30564    struct cvmx_mio_uartx_dll_s          cn31xx;
30565    struct cvmx_mio_uartx_dll_s          cn38xx;
30566    struct cvmx_mio_uartx_dll_s          cn38xxp2;
30567    struct cvmx_mio_uartx_dll_s          cn50xx;
30568    struct cvmx_mio_uartx_dll_s          cn52xx;
30569    struct cvmx_mio_uartx_dll_s          cn52xxp1;
30570    struct cvmx_mio_uartx_dll_s          cn56xx;
30571    struct cvmx_mio_uartx_dll_s          cn56xxp1;
30572    struct cvmx_mio_uartx_dll_s          cn58xx;
30573    struct cvmx_mio_uartx_dll_s          cn58xxp1;
30574} cvmx_mio_uartx_dll_t;
30575typedef cvmx_mio_uartx_dll_t cvmx_uart_dll_t;
30576
30577
30578/**
30579 * cvmx_mio_uart#_far
30580 *
30581 * MIO_UARTX_FAR = MIO UARTX FIFO Access Register
30582 *
30583 * The FIFO Access Register (FAR) is used to enable a FIFO access mode for testing, so that the receive
30584 * FIFO can be written by software and the transmit FIFO can be read by software when the FIFOs are
30585 * enabled. When FIFOs are not enabled it allows the RBR to be written by software and the THR to be read
30586 * by software. Note, that when the FIFO access mode is enabled/disabled, the control portion of the
30587 * receive FIFO and transmit FIFO is reset and the FIFOs are treated as empty.
30588 */
30589typedef union
30590{
30591    uint64_t u64;
30592    struct cvmx_mio_uartx_far_s
30593    {
30594#if __BYTE_ORDER == __BIG_ENDIAN
30595        uint64_t reserved_1_63           : 63;
30596        uint64_t far                     : 1;       /**< FIFO Access Register */
30597#else
30598        uint64_t far                     : 1;
30599        uint64_t reserved_1_63           : 63;
30600#endif
30601    } s;
30602    struct cvmx_mio_uartx_far_s          cn30xx;
30603    struct cvmx_mio_uartx_far_s          cn31xx;
30604    struct cvmx_mio_uartx_far_s          cn38xx;
30605    struct cvmx_mio_uartx_far_s          cn38xxp2;
30606    struct cvmx_mio_uartx_far_s          cn50xx;
30607    struct cvmx_mio_uartx_far_s          cn52xx;
30608    struct cvmx_mio_uartx_far_s          cn52xxp1;
30609    struct cvmx_mio_uartx_far_s          cn56xx;
30610    struct cvmx_mio_uartx_far_s          cn56xxp1;
30611    struct cvmx_mio_uartx_far_s          cn58xx;
30612    struct cvmx_mio_uartx_far_s          cn58xxp1;
30613} cvmx_mio_uartx_far_t;
30614typedef cvmx_mio_uartx_far_t cvmx_uart_far_t;
30615
30616
30617/**
30618 * cvmx_mio_uart#_fcr
30619 *
30620 * MIO_UARTX_FCR = MIO UARTX FIFO Control Register
30621 *
30622 * The FIFO Control Register (FCR) is a write-only register that controls the read and write data FIFO
30623 * operation. When FIFOs and Programmable THRE Interrupt mode are enabled, this register also controls
30624 * the THRE Interrupt empty threshold level.
30625 *
30626 * Setting bit 0 of the FCR enables the transmit and receive FIFOs. Whenever the value of this bit is
30627 * changed both the TX and RX FIFOs will be reset.
30628 *
30629 * Writing a '1' to bit 1 of the FCR resets and flushes data in the receive FIFO. Note that this bit is
30630 * self-clearing and it is not necessary to clear this bit.
30631 *
30632 * Writing a '1' to bit 2 of the FCR resets and flushes data in the transmit FIFO. Note that this bit is
30633 * self-clearing and it is not necessary to clear this bit.
30634 *
30635 * If the FIFOs and Programmable THRE Interrupt mode are enabled, bits 4 and 5 control the empty
30636 * threshold level at which THRE Interrupts are generated when the mode is active.  See the following
30637 * table for encodings:
30638 *
30639 * TX Trigger
30640 * ----------
30641 * 00 = empty FIFO
30642 * 01 = 2 chars in FIFO
30643 * 10 = FIFO 1/4 full
30644 * 11 = FIFO 1/2 full
30645 *
30646 * If the FIFO mode is enabled (bit 0 of the FCR is set to '1') bits 6 and 7 are active. Bit 6 and bit 7
30647 * set the trigger level in the receiver FIFO for the Enable Received Data Available Interrupt (ERBFI).
30648 * In auto flow control mode the trigger is used to determine when the rts_n signal will be deasserted.
30649 * See the following table for encodings:
30650 *
30651 * RX Trigger
30652 * ----------
30653 * 00 = 1 char in FIFO
30654 * 01 = FIFO 1/4 full
30655 * 10 = FIFO 1/2 full
30656 * 11 = FIFO 2 chars less than full
30657 *
30658 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
30659 * IIR and FCR registers are the same.
30660 */
30661typedef union
30662{
30663    uint64_t u64;
30664    struct cvmx_mio_uartx_fcr_s
30665    {
30666#if __BYTE_ORDER == __BIG_ENDIAN
30667        uint64_t reserved_8_63           : 56;
30668        uint64_t rxtrig                  : 2;       /**< RX Trigger */
30669        uint64_t txtrig                  : 2;       /**< TX Trigger */
30670        uint64_t reserved_3_3            : 1;
30671        uint64_t txfr                    : 1;       /**< TX FIFO reset */
30672        uint64_t rxfr                    : 1;       /**< RX FIFO reset */
30673        uint64_t en                      : 1;       /**< FIFO enable */
30674#else
30675        uint64_t en                      : 1;
30676        uint64_t rxfr                    : 1;
30677        uint64_t txfr                    : 1;
30678        uint64_t reserved_3_3            : 1;
30679        uint64_t txtrig                  : 2;
30680        uint64_t rxtrig                  : 2;
30681        uint64_t reserved_8_63           : 56;
30682#endif
30683    } s;
30684    struct cvmx_mio_uartx_fcr_s          cn30xx;
30685    struct cvmx_mio_uartx_fcr_s          cn31xx;
30686    struct cvmx_mio_uartx_fcr_s          cn38xx;
30687    struct cvmx_mio_uartx_fcr_s          cn38xxp2;
30688    struct cvmx_mio_uartx_fcr_s          cn50xx;
30689    struct cvmx_mio_uartx_fcr_s          cn52xx;
30690    struct cvmx_mio_uartx_fcr_s          cn52xxp1;
30691    struct cvmx_mio_uartx_fcr_s          cn56xx;
30692    struct cvmx_mio_uartx_fcr_s          cn56xxp1;
30693    struct cvmx_mio_uartx_fcr_s          cn58xx;
30694    struct cvmx_mio_uartx_fcr_s          cn58xxp1;
30695} cvmx_mio_uartx_fcr_t;
30696typedef cvmx_mio_uartx_fcr_t cvmx_uart_fcr_t;
30697
30698
30699/**
30700 * cvmx_mio_uart#_htx
30701 *
30702 * MIO_UARTX_HTX = MIO UARTX Halt TX Register
30703 *
30704 * The Halt TX Register (HTX) is used to halt transmissions for testing, so that the transmit FIFO can be
30705 * filled by software when FIFOs are enabled. If FIFOs are not enabled, setting the HTX register will
30706 * have no effect.
30707 */
30708typedef union
30709{
30710    uint64_t u64;
30711    struct cvmx_mio_uartx_htx_s
30712    {
30713#if __BYTE_ORDER == __BIG_ENDIAN
30714        uint64_t reserved_1_63           : 63;
30715        uint64_t htx                     : 1;       /**< Halt TX */
30716#else
30717        uint64_t htx                     : 1;
30718        uint64_t reserved_1_63           : 63;
30719#endif
30720    } s;
30721    struct cvmx_mio_uartx_htx_s          cn30xx;
30722    struct cvmx_mio_uartx_htx_s          cn31xx;
30723    struct cvmx_mio_uartx_htx_s          cn38xx;
30724    struct cvmx_mio_uartx_htx_s          cn38xxp2;
30725    struct cvmx_mio_uartx_htx_s          cn50xx;
30726    struct cvmx_mio_uartx_htx_s          cn52xx;
30727    struct cvmx_mio_uartx_htx_s          cn52xxp1;
30728    struct cvmx_mio_uartx_htx_s          cn56xx;
30729    struct cvmx_mio_uartx_htx_s          cn56xxp1;
30730    struct cvmx_mio_uartx_htx_s          cn58xx;
30731    struct cvmx_mio_uartx_htx_s          cn58xxp1;
30732} cvmx_mio_uartx_htx_t;
30733typedef cvmx_mio_uartx_htx_t cvmx_uart_htx_t;
30734
30735
30736/**
30737 * cvmx_mio_uart#_ier
30738 *
30739 * MIO_UARTX_IER = MIO UARTX Interrupt Enable Register
30740 *
30741 * Interrupt Enable Register (IER) is a read/write register that contains four bits that enable
30742 * the generation of interrupts. These four bits are the Enable Received Data Available Interrupt
30743 * (ERBFI), the Enable Transmitter Holding Register Empty Interrupt (ETBEI), the Enable Receiver Line
30744 * Status Interrupt (ELSI), and the Enable Modem Status Interrupt (EDSSI).
30745 *
30746 * The IER also contains an enable bit (PTIME) for the Programmable THRE Interrupt mode.
30747 *
30748 * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access
30749 * this register.
30750 *
30751 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
30752 * IER and DLH registers are the same.
30753 */
30754typedef union
30755{
30756    uint64_t u64;
30757    struct cvmx_mio_uartx_ier_s
30758    {
30759#if __BYTE_ORDER == __BIG_ENDIAN
30760        uint64_t reserved_8_63           : 56;
30761        uint64_t ptime                   : 1;       /**< Programmable THRE Interrupt mode enable */
30762        uint64_t reserved_4_6            : 3;
30763        uint64_t edssi                   : 1;       /**< Enable Modem Status Interrupt */
30764        uint64_t elsi                    : 1;       /**< Enable Receiver Line Status Interrupt */
30765        uint64_t etbei                   : 1;       /**< Enable Transmitter Holding Register Empty Interrupt */
30766        uint64_t erbfi                   : 1;       /**< Enable Received Data Available Interrupt */
30767#else
30768        uint64_t erbfi                   : 1;
30769        uint64_t etbei                   : 1;
30770        uint64_t elsi                    : 1;
30771        uint64_t edssi                   : 1;
30772        uint64_t reserved_4_6            : 3;
30773        uint64_t ptime                   : 1;
30774        uint64_t reserved_8_63           : 56;
30775#endif
30776    } s;
30777    struct cvmx_mio_uartx_ier_s          cn30xx;
30778    struct cvmx_mio_uartx_ier_s          cn31xx;
30779    struct cvmx_mio_uartx_ier_s          cn38xx;
30780    struct cvmx_mio_uartx_ier_s          cn38xxp2;
30781    struct cvmx_mio_uartx_ier_s          cn50xx;
30782    struct cvmx_mio_uartx_ier_s          cn52xx;
30783    struct cvmx_mio_uartx_ier_s          cn52xxp1;
30784    struct cvmx_mio_uartx_ier_s          cn56xx;
30785    struct cvmx_mio_uartx_ier_s          cn56xxp1;
30786    struct cvmx_mio_uartx_ier_s          cn58xx;
30787    struct cvmx_mio_uartx_ier_s          cn58xxp1;
30788} cvmx_mio_uartx_ier_t;
30789typedef cvmx_mio_uartx_ier_t cvmx_uart_ier_t;
30790
30791
30792/**
30793 * cvmx_mio_uart#_iir
30794 *
30795 * MIO_UARTX_IIR = MIO UARTX Interrupt Identity Register
30796 *
30797 * The Interrupt Identity Register (IIR) is a read-only register that identifies the source of an
30798 * interrupt. The upper two bits of the register are FIFO-enabled bits. These bits are '00' if the FIFOs
30799 * are disabled, and '11' if they are enabled. The lower four bits identify the highest priority pending
30800 * interrupt. The following table defines interrupt source decoding, interrupt priority, and interrupt
30801 * reset control:
30802 *
30803 * Interrupt   Priority   Interrupt         Interrupt                                       Interrupt
30804 * ID          Level      Type              Source                                          Reset By
30805 * ---------------------------------------------------------------------------------------------------------------------------------
30806 * 0001        -          None              None                                            -
30807 *
30808 * 0110        Highest    Receiver Line     Overrun, parity, or framing errors or break     Reading the Line Status Register
30809 *                        Status            interrupt
30810 *
30811 * 0100        Second     Received Data     Receiver data available (FIFOs disabled) or     Reading the Receiver Buffer Register
30812 *                        Available         RX FIFO trigger level reached (FIFOs            (FIFOs disabled) or the FIFO drops below
30813 *                                          enabled)                                        the trigger level (FIFOs enabled)
30814 *
30815 * 1100        Second     Character         No characters in or out of the RX FIFO          Reading the Receiver Buffer Register
30816 *                        Timeout           during the last 4 character times and there
30817 *                        Indication        is at least 1 character in it during this
30818 *                                          time
30819 *
30820 * 0010        Third      Transmitter       Transmitter Holding Register Empty              Reading the Interrupt Identity Register
30821 *                        Holding           (Programmable THRE Mode disabled) or TX         (if source of interrupt) or writing into
30822 *                        Register          FIFO at or below threshold (Programmable        THR (FIFOs or THRE Mode disabled) or TX
30823 *                        Empty             THRE Mode enabled)                              FIFO above threshold (FIFOs and THRE
30824 *                                                                                          Mode enabled)
30825 *
30826 * 0000        Fourth     Modem Status      Clear To Send (CTS) or Data Set Ready (DSR)     Reading the Modem Status Register
30827 *                        Changed           or Ring Indicator (RI) or Data Carrier
30828 *                                          Detect (DCD) changed (note: if auto flow
30829 *                                          control mode is enabled, a change in CTS
30830 *                                          will not cause an interrupt)
30831 *
30832 * 0111        Fifth      Busy Detect       Software has tried to write to the Line         Reading the UART Status Register
30833 *                        Indication        Control Register while the BUSY bit of the
30834 *                                          UART Status Register was set
30835 *
30836 * Note: The Busy Detect Indication interrupt has been removed from PASS3 and will never assert.
30837 *
30838 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
30839 * IIR and FCR registers are the same.
30840 */
30841typedef union
30842{
30843    uint64_t u64;
30844    struct cvmx_mio_uartx_iir_s
30845    {
30846#if __BYTE_ORDER == __BIG_ENDIAN
30847        uint64_t reserved_8_63           : 56;
30848        uint64_t fen                     : 2;       /**< FIFO-enabled bits */
30849        uint64_t reserved_4_5            : 2;
30850        cvmx_uart_iid_t iid              : 4;       /**< Interrupt ID */
30851#else
30852        cvmx_uart_iid_t iid              : 4;
30853        uint64_t reserved_4_5            : 2;
30854        uint64_t fen                     : 2;
30855        uint64_t reserved_8_63           : 56;
30856#endif
30857    } s;
30858    struct cvmx_mio_uartx_iir_s          cn30xx;
30859    struct cvmx_mio_uartx_iir_s          cn31xx;
30860    struct cvmx_mio_uartx_iir_s          cn38xx;
30861    struct cvmx_mio_uartx_iir_s          cn38xxp2;
30862    struct cvmx_mio_uartx_iir_s          cn50xx;
30863    struct cvmx_mio_uartx_iir_s          cn52xx;
30864    struct cvmx_mio_uartx_iir_s          cn52xxp1;
30865    struct cvmx_mio_uartx_iir_s          cn56xx;
30866    struct cvmx_mio_uartx_iir_s          cn56xxp1;
30867    struct cvmx_mio_uartx_iir_s          cn58xx;
30868    struct cvmx_mio_uartx_iir_s          cn58xxp1;
30869} cvmx_mio_uartx_iir_t;
30870typedef cvmx_mio_uartx_iir_t cvmx_uart_iir_t;
30871
30872
30873/**
30874 * cvmx_mio_uart#_lcr
30875 *
30876 * MIO_UARTX_LCR = MIO UARTX Line Control Register
30877 *
30878 * The Line Control Register (LCR) controls the format of the data that is transmitted and received by
30879 * the UART.
30880 *
30881 * LCR bits 0 and 1 are the Character Length Select field. This field is used to select the number of
30882 * data bits per character that are transmitted and received. See the following table for encodings:
30883 *
30884 * CLS
30885 * ---
30886 * 00 = 5 bits (bits 0-4 sent)
30887 * 01 = 6 bits (bits 0-5 sent)
30888 * 10 = 7 bits (bits 0-6 sent)
30889 * 11 = 8 bits (all bits sent)
30890 *
30891 * LCR bit 2 controls the number of stop bits transmitted. If bit 2 is a '0', one stop bit is transmitted
30892 * in the serial data. If bit 2 is a '1' and the data bits are set to '00', one and a half stop bits are
30893 * generated. Otherwise, two stop bits are generated and transmitted in the serial data out. Note that
30894 * regardless of the number of stop bits selected the receiver will only check the first stop bit.
30895 *
30896 * LCR bit 3 is the Parity Enable bit. This bit is used to enable and disable parity generation and
30897 * detection in transmitted and received serial character respectively.
30898 *
30899 * LCR bit 4 is the Even Parity Select bit. If parity is enabled, bit 4 selects between even and odd
30900 * parity. If bit 4 is a '1', an even number of ones is transmitted or checked. If bit 4 is a '0', an odd
30901 * number of ones is transmitted or checked.
30902 *
30903 * LCR bit 6 is the Break Control bit. Setting the Break bit sends a break signal by holding the sout
30904 * line low (when not in Loopback mode, as determined by Modem Control Register bit 4). When in Loopback
30905 * mode, the break condition is internally looped back to the receiver.
30906 *
30907 * LCR bit 7 is the Divisor Latch Address bit. Setting this bit enables reading and writing of the
30908 * Divisor Latch register (DLL and DLH) to set the baud rate of the UART. This bit must be cleared after
30909 * initial baud rate setup in order to access other registers.
30910 *
30911 * Note: The LCR is writeable only when the UART is not busy (when the BUSY bit (bit 0) of the UART
30912 * Status Register (USR) is clear). The LCR is always readable. In PASS3, the LCR is always writable
30913 * because the BUSY bit is always clear.
30914 */
30915typedef union
30916{
30917    uint64_t u64;
30918    struct cvmx_mio_uartx_lcr_s
30919    {
30920#if __BYTE_ORDER == __BIG_ENDIAN
30921        uint64_t reserved_8_63           : 56;
30922        uint64_t dlab                    : 1;       /**< Divisor Latch Address bit */
30923        uint64_t brk                     : 1;       /**< Break Control bit */
30924        uint64_t reserved_5_5            : 1;
30925        uint64_t eps                     : 1;       /**< Even Parity Select bit */
30926        uint64_t pen                     : 1;       /**< Parity Enable bit */
30927        uint64_t stop                    : 1;       /**< Stop Control bit */
30928        cvmx_uart_bits_t cls             : 2;       /**< Character Length Select */
30929#else
30930        cvmx_uart_bits_t cls             : 2;
30931        uint64_t stop                    : 1;
30932        uint64_t pen                     : 1;
30933        uint64_t eps                     : 1;
30934        uint64_t reserved_5_5            : 1;
30935        uint64_t brk                     : 1;
30936        uint64_t dlab                    : 1;
30937        uint64_t reserved_8_63           : 56;
30938#endif
30939    } s;
30940    struct cvmx_mio_uartx_lcr_s          cn30xx;
30941    struct cvmx_mio_uartx_lcr_s          cn31xx;
30942    struct cvmx_mio_uartx_lcr_s          cn38xx;
30943    struct cvmx_mio_uartx_lcr_s          cn38xxp2;
30944    struct cvmx_mio_uartx_lcr_s          cn50xx;
30945    struct cvmx_mio_uartx_lcr_s          cn52xx;
30946    struct cvmx_mio_uartx_lcr_s          cn52xxp1;
30947    struct cvmx_mio_uartx_lcr_s          cn56xx;
30948    struct cvmx_mio_uartx_lcr_s          cn56xxp1;
30949    struct cvmx_mio_uartx_lcr_s          cn58xx;
30950    struct cvmx_mio_uartx_lcr_s          cn58xxp1;
30951} cvmx_mio_uartx_lcr_t;
30952typedef cvmx_mio_uartx_lcr_t cvmx_uart_lcr_t;
30953
30954
30955/**
30956 * cvmx_mio_uart#_lsr
30957 *
30958 * MIO_UARTX_LSR = MIO UARTX Line Status Register
30959 *
30960 * The Line Status Register (LSR) contains status of the receiver and transmitter data transfers. This
30961 * status can be read by the user at anytime.
30962 *
30963 * LSR bit 0 is the Data Ready (DR) bit. When set, this bit indicates the receiver contains at least one
30964 * character in the RBR or the receiver FIFO. This bit is cleared when the RBR is read in the non-FIFO
30965 * mode, or when the receiver FIFO is empty, in FIFO mode.
30966 *
30967 * LSR bit 1 is the Overrun Error (OE) bit. When set, this bit indicates an overrun error has occurred
30968 * because a new data character was received before the previous data was read. In the non-FIFO mode, the
30969 * OE bit is set when a new character arrives in the receiver before the previous character was read from
30970 * the RBR. When this happens, the data in the RBR is overwritten. In the FIFO mode, an overrun error
30971 * occurs when the FIFO is full and a new character arrives at the receiver. The data in the FIFO is
30972 * retained and the data in the receive shift register is lost.
30973 *
30974 * LSR bit 2 is the Parity Error (PE) bit. This bit is set whenever there is a parity error in the
30975 * receiver if the Parity Enable (PEN) bit in the LCR is set. In the FIFO mode, since the parity error is
30976 * associated with a character received, it is revealed when the character with the parity error arrives
30977 * at the top of the FIFO. It should be noted that the Parity Error (PE) bit will be set if a break
30978 * interrupt has occurred, as indicated by the Break Interrupt (BI) bit.
30979 *
30980 * LSR bit 3 is the Framing Error (FE) bit. This bit is set whenever there is a framing error in the
30981 * receiver. A framing error occurs when the receiver does not detect a valid STOP bit in the received
30982 * data. In the FIFO mode, since the framing error is associated with a character received, it is
30983 * revealed when the character with the framing error is at the top of the FIFO. When a framing error
30984 * occurs the UART will try resynchronize. It does this by assuming that the error was due to the start
30985 * bit of the next character and then continues receiving the other bits (i.e. data and/or parity and
30986 * stop). It should be noted that the Framing Error (FE) bit will be set if a break interrupt has
30987 * occurred, as indicated by the Break Interrupt (BI) bit.
30988 *
30989 * Note: The OE, PE, and FE bits are reset when a read of the LSR is performed.
30990 *
30991 * LSR bit 4 is the Break Interrupt (BI) bit. This bit is set whenever the serial input (sin) is held in
30992 * a 0 state for longer than the sum of start time + data bits + parity + stop bits. A break condition on
30993 * sin causes one and only one character, consisting of all zeros, to be received by the UART. In the
30994 * FIFO mode, the character associated with the break condition is carried through the FIFO and is
30995 * revealed when the character is at the top of the FIFO. Reading the LSR clears the BI bit. In the non-
30996 * FIFO mode, the BI indication occurs immediately and persists until the LSR is read.
30997 *
30998 * LSR bit 5 is the Transmitter Holding Register Empty (THRE) bit. When Programmable THRE Interrupt mode
30999 * is disabled, this bit indicates that the UART can accept a new character for transmission. This bit is
31000 * set whenever data is transferred from the THR (or TX FIFO) to the transmitter shift register and no
31001 * new data has been written to the THR (or TX FIFO). This also causes a THRE Interrupt to occur, if the
31002 * THRE Interrupt is enabled. When FIFOs and Programmable THRE Interrupt mode are enabled, LSR bit 5
31003 * functionality is switched to indicate the transmitter FIFO is full, and no longer controls THRE
31004 * Interrupts, which are then controlled by the FCR[5:4] threshold setting.
31005 *
31006 * LSR bit 6 is the Transmitter Empty (TEMT) bit. In the FIFO mode, this bit is set whenever the
31007 * Transmitter Shift Register and the FIFO are both empty. In the non-FIFO mode, this bit is set whenever
31008 * the Transmitter Holding Register and the Transmitter Shift Register are both empty. This bit is
31009 * typically used to make sure it is safe to change control registers. Changing control registers while
31010 * the transmitter is busy can result in corrupt data being transmitted.
31011 *
31012 * LSR bit 7 is the Error in Receiver FIFO (FERR) bit. This bit is active only when FIFOs are enabled. It
31013 * is set when there is at least one parity error, framing error, or break indication in the FIFO. This
31014 * bit is cleared when the LSR is read and the character with the error is at the top of the receiver
31015 * FIFO and there are no subsequent errors in the FIFO.
31016 */
31017typedef union
31018{
31019    uint64_t u64;
31020    struct cvmx_mio_uartx_lsr_s
31021    {
31022#if __BYTE_ORDER == __BIG_ENDIAN
31023        uint64_t reserved_8_63           : 56;
31024        uint64_t ferr                    : 1;       /**< Error in Receiver FIFO bit */
31025        uint64_t temt                    : 1;       /**< Transmitter Empty bit */
31026        uint64_t thre                    : 1;       /**< Transmitter Holding Register Empty bit */
31027        uint64_t bi                      : 1;       /**< Break Interrupt bit */
31028        uint64_t fe                      : 1;       /**< Framing Error bit */
31029        uint64_t pe                      : 1;       /**< Parity Error bit */
31030        uint64_t oe                      : 1;       /**< Overrun Error bit */
31031        uint64_t dr                      : 1;       /**< Data Ready bit */
31032#else
31033        uint64_t dr                      : 1;
31034        uint64_t oe                      : 1;
31035        uint64_t pe                      : 1;
31036        uint64_t fe                      : 1;
31037        uint64_t bi                      : 1;
31038        uint64_t thre                    : 1;
31039        uint64_t temt                    : 1;
31040        uint64_t ferr                    : 1;
31041        uint64_t reserved_8_63           : 56;
31042#endif
31043    } s;
31044    struct cvmx_mio_uartx_lsr_s          cn30xx;
31045    struct cvmx_mio_uartx_lsr_s          cn31xx;
31046    struct cvmx_mio_uartx_lsr_s          cn38xx;
31047    struct cvmx_mio_uartx_lsr_s          cn38xxp2;
31048    struct cvmx_mio_uartx_lsr_s          cn50xx;
31049    struct cvmx_mio_uartx_lsr_s          cn52xx;
31050    struct cvmx_mio_uartx_lsr_s          cn52xxp1;
31051    struct cvmx_mio_uartx_lsr_s          cn56xx;
31052    struct cvmx_mio_uartx_lsr_s          cn56xxp1;
31053    struct cvmx_mio_uartx_lsr_s          cn58xx;
31054    struct cvmx_mio_uartx_lsr_s          cn58xxp1;
31055} cvmx_mio_uartx_lsr_t;
31056typedef cvmx_mio_uartx_lsr_t cvmx_uart_lsr_t;
31057
31058
31059/**
31060 * cvmx_mio_uart#_mcr
31061 *
31062 * MIO_UARTX_MCR = MIO UARTX Modem Control Register
31063 *
31064 * The lower four bits of the Modem Control Register (MCR) directly manipulate the outputs of the UART.
31065 * The DTR (bit 0), RTS (bit 1), OUT1 (bit 2), and OUT2 (bit 3) bits are inverted and then drive the
31066 * corresponding UART outputs, dtr_n, rts_n, out1_n, and out2_n.  In loopback mode, these outputs are
31067 * driven inactive high while the values in these locations are internally looped back to the inputs.
31068 *
31069 * Note: When Auto RTS is enabled, the rts_n output is controlled in the same way, but is also gated
31070 * with the receiver FIFO threshold trigger (rts_n is inactive high when above the threshold). The
31071 * rts_n output will be de-asserted whenever RTS (bit 1) is set low.
31072 *
31073 * Note: The UART0 out1_n and out2_n outputs are not present on the pins of the chip, but the UART0 OUT1
31074 * and OUT2 bits still function in Loopback mode.  The UART1 dtr_n, out1_n, and out2_n outputs are not
31075 * present on the pins of the chip, but the UART1 DTR, OUT1, and OUT2 bits still function in Loopback
31076 * mode.
31077 *
31078 * MCR bit 4 is the Loopback bit. When set, data on the sout line is held high, while serial data output
31079 * is looped back to the sin line, internally. In this mode all the interrupts are fully functional. This
31080 * feature is used for diagnostic purposes. Also, in loopback mode, the modem control inputs (dsr_n,
31081 * cts_n, ri_n, dcd_n) are disconnected and the four modem control outputs (dtr_n, rts_n, out1_n, out1_n)
31082 * are looped back to the inputs, internally.
31083 *
31084 * MCR bit 5 is the Auto Flow Control Enable (AFCE) bit. When FIFOs are enabled and this bit is set,
31085 * 16750-compatible Auto RTS and Auto CTS serial data flow control features are enabled.
31086 *
31087 * Auto RTS becomes active when the following occurs:
31088 * 1. MCR bit 1 is set
31089 * 2. FIFOs are enabled by setting FIFO Control Register (FCR) bit 0
31090 * 3. MCR bit 5 is set (must be set after FCR bit 0)
31091 *
31092 * When active, the rts_n output is forced inactive-high when the receiver FIFO level reaches the
31093 * threshold set by FCR[7:6]. When rts_n is connected to the cts_n input of another UART device, the
31094 * other UART stops sending serial data until the receiver FIFO has available space.
31095 *
31096 * The selectable receiver FIFO threshold values are: 1, 1/4, 1/2, and 2 less than full. Since one
31097 * additional character may be transmitted to the UART after rts_n has become inactive (due to data
31098 * already having entered the transmitter block in the other UART), setting the threshold to 2 less
31099 * than full allows maximum use of the FIFO with a safety zone of one character.
31100 *
31101 * Once the receiver FIFO becomes completely empty by reading the Receiver Buffer Register (RBR), rts_n
31102 * again becomes active-low, signalling the other UART to continue sending data. It is important to note
31103 * that, even if everything else is set to Enabled and the correct MCR bits are set, if the FIFOs are
31104 * disabled through FCR[0], Auto Flow Control is also disabled. When Auto RTS is disabled or inactive,
31105 * rts_n is controlled solely by MCR[1].
31106 *
31107 * Auto CTS becomes active when the following occurs:
31108 * 1. FIFOs are enabled by setting FIFO Control Register (FCR) bit 0
31109 * 2. MCR bit 5 is set (must be set after FCR bit 0)
31110 *
31111 * When active, the UART transmitter is disabled whenever the cts_n input becomes inactive-high. This
31112 * prevents overflowing the FIFO of the receiving UART.
31113 *
31114 * Note that, if the cts_n input is not inactivated before the middle of the last stop bit, another
31115 * character is transmitted before the transmitter is disabled. While the transmitter is disabled, the
31116 * transmitter FIFO can still be written to, and even overflowed. Therefore, when using this mode, either
31117 * the true FIFO depth (64 characters) must be known to software, or the Programmable THRE Interrupt mode
31118 * must be enabled to access the FIFO full status through the Line Status Register. When using the FIFO
31119 * full status, software can poll this before each write to the Transmitter FIFO.
31120 *
31121 * Note: FIFO full status is also available in the UART Status Register (USR) or the actual level of the
31122 * FIFO may be read through the Transmit FIFO Level (TFL) register.
31123 *
31124 * When the cts_n input becomes active-low again, transmission resumes. It is important to note that,
31125 * even if everything else is set to Enabled, Auto Flow Control is also disabled if the FIFOs are
31126 * disabled through FCR[0]. When Auto CTS is disabled or inactive, the transmitter is unaffected by
31127 * cts_n.
31128 */
31129typedef union
31130{
31131    uint64_t u64;
31132    struct cvmx_mio_uartx_mcr_s
31133    {
31134#if __BYTE_ORDER == __BIG_ENDIAN
31135        uint64_t reserved_6_63           : 58;
31136        uint64_t afce                    : 1;       /**< Auto Flow Control Enable bit */
31137        uint64_t loop                    : 1;       /**< Loopback bit */
31138        uint64_t out2                    : 1;       /**< OUT2 output bit */
31139        uint64_t out1                    : 1;       /**< OUT1 output bit */
31140        uint64_t rts                     : 1;       /**< Request To Send output bit */
31141        uint64_t dtr                     : 1;       /**< Data Terminal Ready output bit */
31142#else
31143        uint64_t dtr                     : 1;
31144        uint64_t rts                     : 1;
31145        uint64_t out1                    : 1;
31146        uint64_t out2                    : 1;
31147        uint64_t loop                    : 1;
31148        uint64_t afce                    : 1;
31149        uint64_t reserved_6_63           : 58;
31150#endif
31151    } s;
31152    struct cvmx_mio_uartx_mcr_s          cn30xx;
31153    struct cvmx_mio_uartx_mcr_s          cn31xx;
31154    struct cvmx_mio_uartx_mcr_s          cn38xx;
31155    struct cvmx_mio_uartx_mcr_s          cn38xxp2;
31156    struct cvmx_mio_uartx_mcr_s          cn50xx;
31157    struct cvmx_mio_uartx_mcr_s          cn52xx;
31158    struct cvmx_mio_uartx_mcr_s          cn52xxp1;
31159    struct cvmx_mio_uartx_mcr_s          cn56xx;
31160    struct cvmx_mio_uartx_mcr_s          cn56xxp1;
31161    struct cvmx_mio_uartx_mcr_s          cn58xx;
31162    struct cvmx_mio_uartx_mcr_s          cn58xxp1;
31163} cvmx_mio_uartx_mcr_t;
31164typedef cvmx_mio_uartx_mcr_t cvmx_uart_mcr_t;
31165
31166
31167/**
31168 * cvmx_mio_uart#_msr
31169 *
31170 * MIO_UARTX_MSR = MIO UARTX Modem Status Register
31171 *
31172 * The Modem Status Register (MSR) contains the current status of the modem control input lines and if
31173 * they changed.
31174 *
31175 * DCTS (bit 0), DDSR (bit 1), and DDCD (bit 3) bits record whether the modem control lines (cts_n,
31176 * dsr_n, and dcd_n) have changed since the last time the user read the MSR. TERI (bit 2) indicates ri_n
31177 * has changed from an active-low, to an inactive-high state since the last time the MSR was read. In
31178 * Loopback mode, DCTS reflects changes on MCR bit 1 (RTS), DDSR reflects changes on MCR bit 0 (DTR), and
31179 * DDCD reflects changes on MCR bit 3 (Out2), while TERI reflects when MCR bit 2 (Out1) has changed state
31180 * from a high to a low.
31181 *
31182 * Note: if the DCTS bit is not set and the cts_n signal is asserted (low) and a reset occurs (software
31183 * or otherwise), then the DCTS bit will get set when the reset is removed if the cts_n signal remains
31184 * asserted.
31185 *
31186 * The CTS, DSR, RI, and DCD Modem Status bits contain information on the current state of the modem
31187 * control lines. CTS (bit 4) is the compliment of cts_n, DSR (bit 5) is the compliment of dsr_n, RI
31188 * (bit 6) is the compliment of ri_n, and DCD (bit 7) is the compliment of dcd_n. In Loopback mode, CTS
31189 * is the same as MCR bit 1 (RTS), DSR is the same as MCR bit 0 (DTR), RI is the same as MCR bit 2
31190 * (Out1), and DCD is the same as MCR bit 3 (Out2).
31191 *
31192 * Note: The UART0 dsr_n and ri_n inputs are internally tied to power and not present on the pins of chip.
31193 * Thus the UART0 DSR and RI bits will be '0' when not in Loopback mode.  The UART1 dsr_n, ri_n, and dcd_n
31194 * inputs are internally tied to power and not present on the pins of chip. Thus the UART1 DSR, RI, and
31195 * DCD bits will be '0' when not in Loopback mode.
31196 */
31197typedef union
31198{
31199    uint64_t u64;
31200    struct cvmx_mio_uartx_msr_s
31201    {
31202#if __BYTE_ORDER == __BIG_ENDIAN
31203        uint64_t reserved_8_63           : 56;
31204        uint64_t dcd                     : 1;       /**< Data Carrier Detect input bit */
31205        uint64_t ri                      : 1;       /**< Ring Indicator input bit */
31206        uint64_t dsr                     : 1;       /**< Data Set Ready input bit */
31207        uint64_t cts                     : 1;       /**< Clear To Send input bit */
31208        uint64_t ddcd                    : 1;       /**< Delta Data Carrier Detect bit */
31209        uint64_t teri                    : 1;       /**< Trailing Edge of Ring Indicator bit */
31210        uint64_t ddsr                    : 1;       /**< Delta Data Set Ready bit */
31211        uint64_t dcts                    : 1;       /**< Delta Clear To Send bit */
31212#else
31213        uint64_t dcts                    : 1;
31214        uint64_t ddsr                    : 1;
31215        uint64_t teri                    : 1;
31216        uint64_t ddcd                    : 1;
31217        uint64_t cts                     : 1;
31218        uint64_t dsr                     : 1;
31219        uint64_t ri                      : 1;
31220        uint64_t dcd                     : 1;
31221        uint64_t reserved_8_63           : 56;
31222#endif
31223    } s;
31224    struct cvmx_mio_uartx_msr_s          cn30xx;
31225    struct cvmx_mio_uartx_msr_s          cn31xx;
31226    struct cvmx_mio_uartx_msr_s          cn38xx;
31227    struct cvmx_mio_uartx_msr_s          cn38xxp2;
31228    struct cvmx_mio_uartx_msr_s          cn50xx;
31229    struct cvmx_mio_uartx_msr_s          cn52xx;
31230    struct cvmx_mio_uartx_msr_s          cn52xxp1;
31231    struct cvmx_mio_uartx_msr_s          cn56xx;
31232    struct cvmx_mio_uartx_msr_s          cn56xxp1;
31233    struct cvmx_mio_uartx_msr_s          cn58xx;
31234    struct cvmx_mio_uartx_msr_s          cn58xxp1;
31235} cvmx_mio_uartx_msr_t;
31236typedef cvmx_mio_uartx_msr_t cvmx_uart_msr_t;
31237
31238
31239/**
31240 * cvmx_mio_uart#_rbr
31241 *
31242 * MIO_UARTX_RBR = MIO UARTX Receive Buffer Register
31243 *
31244 * The Receive Buffer Register (RBR) is a read-only register that contains the data byte received on the
31245 * serial input port (sin). The data in this register is valid only if the Data Ready (DR) bit in the
31246 * Line status Register (LSR) is set. When the FIFOs are programmed OFF, the data in the RBR must be
31247 * read before the next data arrives, otherwise it is overwritten, resulting in an overrun error. When
31248 * the FIFOs are programmed ON, this register accesses the head of the receive FIFO. If the receive FIFO
31249 * is full (64 characters) and this register is not read before the next data character arrives, then the
31250 * data already in the FIFO is preserved, but any incoming data is lost. An overrun error also occurs.
31251 *
31252 * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access
31253 * this register.
31254 *
31255 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
31256 * RBR, THR, and DLL registers are the same.
31257 */
31258typedef union
31259{
31260    uint64_t u64;
31261    struct cvmx_mio_uartx_rbr_s
31262    {
31263#if __BYTE_ORDER == __BIG_ENDIAN
31264        uint64_t reserved_8_63           : 56;
31265        uint64_t rbr                     : 8;       /**< Receive Buffer Register */
31266#else
31267        uint64_t rbr                     : 8;
31268        uint64_t reserved_8_63           : 56;
31269#endif
31270    } s;
31271    struct cvmx_mio_uartx_rbr_s          cn30xx;
31272    struct cvmx_mio_uartx_rbr_s          cn31xx;
31273    struct cvmx_mio_uartx_rbr_s          cn38xx;
31274    struct cvmx_mio_uartx_rbr_s          cn38xxp2;
31275    struct cvmx_mio_uartx_rbr_s          cn50xx;
31276    struct cvmx_mio_uartx_rbr_s          cn52xx;
31277    struct cvmx_mio_uartx_rbr_s          cn52xxp1;
31278    struct cvmx_mio_uartx_rbr_s          cn56xx;
31279    struct cvmx_mio_uartx_rbr_s          cn56xxp1;
31280    struct cvmx_mio_uartx_rbr_s          cn58xx;
31281    struct cvmx_mio_uartx_rbr_s          cn58xxp1;
31282} cvmx_mio_uartx_rbr_t;
31283typedef cvmx_mio_uartx_rbr_t cvmx_uart_rbr_t;
31284
31285
31286/**
31287 * cvmx_mio_uart#_rfl
31288 *
31289 * MIO_UARTX_RFL = MIO UARTX Receive FIFO Level Register
31290 *
31291 * The Receive FIFO Level Register (RFL) indicates the number of data entries in the receive FIFO.
31292 */
31293typedef union
31294{
31295    uint64_t u64;
31296    struct cvmx_mio_uartx_rfl_s
31297    {
31298#if __BYTE_ORDER == __BIG_ENDIAN
31299        uint64_t reserved_7_63           : 57;
31300        uint64_t rfl                     : 7;       /**< Receive FIFO Level Register */
31301#else
31302        uint64_t rfl                     : 7;
31303        uint64_t reserved_7_63           : 57;
31304#endif
31305    } s;
31306    struct cvmx_mio_uartx_rfl_s          cn30xx;
31307    struct cvmx_mio_uartx_rfl_s          cn31xx;
31308    struct cvmx_mio_uartx_rfl_s          cn38xx;
31309    struct cvmx_mio_uartx_rfl_s          cn38xxp2;
31310    struct cvmx_mio_uartx_rfl_s          cn50xx;
31311    struct cvmx_mio_uartx_rfl_s          cn52xx;
31312    struct cvmx_mio_uartx_rfl_s          cn52xxp1;
31313    struct cvmx_mio_uartx_rfl_s          cn56xx;
31314    struct cvmx_mio_uartx_rfl_s          cn56xxp1;
31315    struct cvmx_mio_uartx_rfl_s          cn58xx;
31316    struct cvmx_mio_uartx_rfl_s          cn58xxp1;
31317} cvmx_mio_uartx_rfl_t;
31318typedef cvmx_mio_uartx_rfl_t cvmx_uart_rfl_t;
31319
31320
31321/**
31322 * cvmx_mio_uart#_rfw
31323 *
31324 * MIO_UARTX_RFW = MIO UARTX Receive FIFO Write Register
31325 *
31326 * The Receive FIFO Write Register (RFW) is only valid when FIFO access mode is enabled (FAR bit 0 is
31327 * set). When FIFOs are enabled, this register is used to write data to the receive FIFO. Each
31328 * consecutive write pushes the new data to the next write location in the receive FIFO. When FIFOs are
31329 * not enabled, this register is used to write data to the RBR.
31330 */
31331typedef union
31332{
31333    uint64_t u64;
31334    struct cvmx_mio_uartx_rfw_s
31335    {
31336#if __BYTE_ORDER == __BIG_ENDIAN
31337        uint64_t reserved_10_63          : 54;
31338        uint64_t rffe                    : 1;       /**< Receive FIFO Framing Error */
31339        uint64_t rfpe                    : 1;       /**< Receive FIFO Parity Error */
31340        uint64_t rfwd                    : 8;       /**< Receive FIFO Write Data */
31341#else
31342        uint64_t rfwd                    : 8;
31343        uint64_t rfpe                    : 1;
31344        uint64_t rffe                    : 1;
31345        uint64_t reserved_10_63          : 54;
31346#endif
31347    } s;
31348    struct cvmx_mio_uartx_rfw_s          cn30xx;
31349    struct cvmx_mio_uartx_rfw_s          cn31xx;
31350    struct cvmx_mio_uartx_rfw_s          cn38xx;
31351    struct cvmx_mio_uartx_rfw_s          cn38xxp2;
31352    struct cvmx_mio_uartx_rfw_s          cn50xx;
31353    struct cvmx_mio_uartx_rfw_s          cn52xx;
31354    struct cvmx_mio_uartx_rfw_s          cn52xxp1;
31355    struct cvmx_mio_uartx_rfw_s          cn56xx;
31356    struct cvmx_mio_uartx_rfw_s          cn56xxp1;
31357    struct cvmx_mio_uartx_rfw_s          cn58xx;
31358    struct cvmx_mio_uartx_rfw_s          cn58xxp1;
31359} cvmx_mio_uartx_rfw_t;
31360typedef cvmx_mio_uartx_rfw_t cvmx_uart_rfw_t;
31361
31362
31363/**
31364 * cvmx_mio_uart#_sbcr
31365 *
31366 * MIO_UARTX_SBCR = MIO UARTX Shadow Break Control Register
31367 *
31368 * The Shadow Break Control Register (SBCR) is a shadow register for the BREAK bit (LCR bit 6) that can
31369 * be used to remove the burden of having to perform a read-modify-write on the LCR.
31370 */
31371typedef union
31372{
31373    uint64_t u64;
31374    struct cvmx_mio_uartx_sbcr_s
31375    {
31376#if __BYTE_ORDER == __BIG_ENDIAN
31377        uint64_t reserved_1_63           : 63;
31378        uint64_t sbcr                    : 1;       /**< Shadow Break Control */
31379#else
31380        uint64_t sbcr                    : 1;
31381        uint64_t reserved_1_63           : 63;
31382#endif
31383    } s;
31384    struct cvmx_mio_uartx_sbcr_s         cn30xx;
31385    struct cvmx_mio_uartx_sbcr_s         cn31xx;
31386    struct cvmx_mio_uartx_sbcr_s         cn38xx;
31387    struct cvmx_mio_uartx_sbcr_s         cn38xxp2;
31388    struct cvmx_mio_uartx_sbcr_s         cn50xx;
31389    struct cvmx_mio_uartx_sbcr_s         cn52xx;
31390    struct cvmx_mio_uartx_sbcr_s         cn52xxp1;
31391    struct cvmx_mio_uartx_sbcr_s         cn56xx;
31392    struct cvmx_mio_uartx_sbcr_s         cn56xxp1;
31393    struct cvmx_mio_uartx_sbcr_s         cn58xx;
31394    struct cvmx_mio_uartx_sbcr_s         cn58xxp1;
31395} cvmx_mio_uartx_sbcr_t;
31396typedef cvmx_mio_uartx_sbcr_t cvmx_uart_sbcr_t;
31397
31398
31399/**
31400 * cvmx_mio_uart#_scr
31401 *
31402 * MIO_UARTX_SCR = MIO UARTX Scratchpad Register
31403 *
31404 * The Scratchpad Register (SCR) is an 8-bit read/write register for programmers to use as a temporary
31405 * storage space.
31406 */
31407typedef union
31408{
31409    uint64_t u64;
31410    struct cvmx_mio_uartx_scr_s
31411    {
31412#if __BYTE_ORDER == __BIG_ENDIAN
31413        uint64_t reserved_8_63           : 56;
31414        uint64_t scr                     : 8;       /**< Scratchpad Register */
31415#else
31416        uint64_t scr                     : 8;
31417        uint64_t reserved_8_63           : 56;
31418#endif
31419    } s;
31420    struct cvmx_mio_uartx_scr_s          cn30xx;
31421    struct cvmx_mio_uartx_scr_s          cn31xx;
31422    struct cvmx_mio_uartx_scr_s          cn38xx;
31423    struct cvmx_mio_uartx_scr_s          cn38xxp2;
31424    struct cvmx_mio_uartx_scr_s          cn50xx;
31425    struct cvmx_mio_uartx_scr_s          cn52xx;
31426    struct cvmx_mio_uartx_scr_s          cn52xxp1;
31427    struct cvmx_mio_uartx_scr_s          cn56xx;
31428    struct cvmx_mio_uartx_scr_s          cn56xxp1;
31429    struct cvmx_mio_uartx_scr_s          cn58xx;
31430    struct cvmx_mio_uartx_scr_s          cn58xxp1;
31431} cvmx_mio_uartx_scr_t;
31432typedef cvmx_mio_uartx_scr_t cvmx_uart_scr_t;
31433
31434
31435/**
31436 * cvmx_mio_uart#_sfe
31437 *
31438 * MIO_UARTX_SFE = MIO UARTX Shadow FIFO Enable Register
31439 *
31440 * The Shadow FIFO Enable Register (SFE) is a shadow register for the FIFO enable bit (FCR bit 0) that
31441 * can be used to remove the burden of having to store the previously written value to the FCR in memory
31442 * and having to mask this value so that only the FIFO enable bit gets updated.
31443 */
31444typedef union
31445{
31446    uint64_t u64;
31447    struct cvmx_mio_uartx_sfe_s
31448    {
31449#if __BYTE_ORDER == __BIG_ENDIAN
31450        uint64_t reserved_1_63           : 63;
31451        uint64_t sfe                     : 1;       /**< Shadow FIFO Enable */
31452#else
31453        uint64_t sfe                     : 1;
31454        uint64_t reserved_1_63           : 63;
31455#endif
31456    } s;
31457    struct cvmx_mio_uartx_sfe_s          cn30xx;
31458    struct cvmx_mio_uartx_sfe_s          cn31xx;
31459    struct cvmx_mio_uartx_sfe_s          cn38xx;
31460    struct cvmx_mio_uartx_sfe_s          cn38xxp2;
31461    struct cvmx_mio_uartx_sfe_s          cn50xx;
31462    struct cvmx_mio_uartx_sfe_s          cn52xx;
31463    struct cvmx_mio_uartx_sfe_s          cn52xxp1;
31464    struct cvmx_mio_uartx_sfe_s          cn56xx;
31465    struct cvmx_mio_uartx_sfe_s          cn56xxp1;
31466    struct cvmx_mio_uartx_sfe_s          cn58xx;
31467    struct cvmx_mio_uartx_sfe_s          cn58xxp1;
31468} cvmx_mio_uartx_sfe_t;
31469typedef cvmx_mio_uartx_sfe_t cvmx_uart_sfe_t;
31470
31471
31472/**
31473 * cvmx_mio_uart#_srr
31474 *
31475 * MIO_UARTX_SRR = MIO UARTX Software Reset Register
31476 *
31477 * The Software Reset Register (SRR) is a write-only register that resets the UART and/or the receive
31478 * FIFO and/or the transmit FIFO.
31479 *
31480 * Bit 0 of the SRR is the UART Soft Reset (USR) bit.  Setting this bit resets the UART.
31481 *
31482 * Bit 1 of the SRR is a shadow copy of the RX FIFO Reset bit (FCR bit 1). This can be used to remove
31483 * the burden on software having to store previously written FCR values (which are pretty static) just
31484 * to reset the receive FIFO.
31485 *
31486 * Bit 2 of the SRR is a shadow copy of the TX FIFO Reset bit (FCR bit 2). This can be used to remove
31487 * the burden on software having to store previously written FCR values (which are pretty static) just
31488 * to reset the transmit FIFO.
31489 */
31490typedef union
31491{
31492    uint64_t u64;
31493    struct cvmx_mio_uartx_srr_s
31494    {
31495#if __BYTE_ORDER == __BIG_ENDIAN
31496        uint64_t reserved_3_63           : 61;
31497        uint64_t stfr                    : 1;       /**< Shadow TX FIFO Reset */
31498        uint64_t srfr                    : 1;       /**< Shadow RX FIFO Reset */
31499        uint64_t usr                     : 1;       /**< UART Soft Reset */
31500#else
31501        uint64_t usr                     : 1;
31502        uint64_t srfr                    : 1;
31503        uint64_t stfr                    : 1;
31504        uint64_t reserved_3_63           : 61;
31505#endif
31506    } s;
31507    struct cvmx_mio_uartx_srr_s          cn30xx;
31508    struct cvmx_mio_uartx_srr_s          cn31xx;
31509    struct cvmx_mio_uartx_srr_s          cn38xx;
31510    struct cvmx_mio_uartx_srr_s          cn38xxp2;
31511    struct cvmx_mio_uartx_srr_s          cn50xx;
31512    struct cvmx_mio_uartx_srr_s          cn52xx;
31513    struct cvmx_mio_uartx_srr_s          cn52xxp1;
31514    struct cvmx_mio_uartx_srr_s          cn56xx;
31515    struct cvmx_mio_uartx_srr_s          cn56xxp1;
31516    struct cvmx_mio_uartx_srr_s          cn58xx;
31517    struct cvmx_mio_uartx_srr_s          cn58xxp1;
31518} cvmx_mio_uartx_srr_t;
31519typedef cvmx_mio_uartx_srr_t cvmx_uart_srr_t;
31520
31521
31522/**
31523 * cvmx_mio_uart#_srt
31524 *
31525 * MIO_UARTX_SRT = MIO UARTX Shadow RX Trigger Register
31526 *
31527 * The Shadow RX Trigger Register (SRT) is a shadow register for the RX Trigger bits (FCR bits 7:6) that
31528 * can be used to remove the burden of having to store the previously written value to the FCR in memory
31529 * and having to mask this value so that only the RX Trigger bits get updated.
31530 */
31531typedef union
31532{
31533    uint64_t u64;
31534    struct cvmx_mio_uartx_srt_s
31535    {
31536#if __BYTE_ORDER == __BIG_ENDIAN
31537        uint64_t reserved_2_63           : 62;
31538        uint64_t srt                     : 2;       /**< Shadow RX Trigger */
31539#else
31540        uint64_t srt                     : 2;
31541        uint64_t reserved_2_63           : 62;
31542#endif
31543    } s;
31544    struct cvmx_mio_uartx_srt_s          cn30xx;
31545    struct cvmx_mio_uartx_srt_s          cn31xx;
31546    struct cvmx_mio_uartx_srt_s          cn38xx;
31547    struct cvmx_mio_uartx_srt_s          cn38xxp2;
31548    struct cvmx_mio_uartx_srt_s          cn50xx;
31549    struct cvmx_mio_uartx_srt_s          cn52xx;
31550    struct cvmx_mio_uartx_srt_s          cn52xxp1;
31551    struct cvmx_mio_uartx_srt_s          cn56xx;
31552    struct cvmx_mio_uartx_srt_s          cn56xxp1;
31553    struct cvmx_mio_uartx_srt_s          cn58xx;
31554    struct cvmx_mio_uartx_srt_s          cn58xxp1;
31555} cvmx_mio_uartx_srt_t;
31556typedef cvmx_mio_uartx_srt_t cvmx_uart_srt_t;
31557
31558
31559/**
31560 * cvmx_mio_uart#_srts
31561 *
31562 * MIO_UARTX_SRTS = MIO UARTX Shadow Request To Send Register
31563 *
31564 * The Shadow Request To Send Register (SRTS) is a shadow register for the RTS bit (MCR bit 1) that can
31565 * be used to remove the burden of having to perform a read-modify-write on the MCR.
31566 */
31567typedef union
31568{
31569    uint64_t u64;
31570    struct cvmx_mio_uartx_srts_s
31571    {
31572#if __BYTE_ORDER == __BIG_ENDIAN
31573        uint64_t reserved_1_63           : 63;
31574        uint64_t srts                    : 1;       /**< Shadow Request To Send */
31575#else
31576        uint64_t srts                    : 1;
31577        uint64_t reserved_1_63           : 63;
31578#endif
31579    } s;
31580    struct cvmx_mio_uartx_srts_s         cn30xx;
31581    struct cvmx_mio_uartx_srts_s         cn31xx;
31582    struct cvmx_mio_uartx_srts_s         cn38xx;
31583    struct cvmx_mio_uartx_srts_s         cn38xxp2;
31584    struct cvmx_mio_uartx_srts_s         cn50xx;
31585    struct cvmx_mio_uartx_srts_s         cn52xx;
31586    struct cvmx_mio_uartx_srts_s         cn52xxp1;
31587    struct cvmx_mio_uartx_srts_s         cn56xx;
31588    struct cvmx_mio_uartx_srts_s         cn56xxp1;
31589    struct cvmx_mio_uartx_srts_s         cn58xx;
31590    struct cvmx_mio_uartx_srts_s         cn58xxp1;
31591} cvmx_mio_uartx_srts_t;
31592typedef cvmx_mio_uartx_srts_t cvmx_uart_srts_t;
31593
31594
31595/**
31596 * cvmx_mio_uart#_stt
31597 *
31598 * MIO_UARTX_STT = MIO UARTX Shadow TX Trigger Register
31599 *
31600 * The Shadow TX Trigger Register (STT) is a shadow register for the TX Trigger bits (FCR bits 5:4) that
31601 * can be used to remove the burden of having to store the previously written value to the FCR in memory
31602 * and having to mask this value so that only the TX Trigger bits get updated.
31603 */
31604typedef union
31605{
31606    uint64_t u64;
31607    struct cvmx_mio_uartx_stt_s
31608    {
31609#if __BYTE_ORDER == __BIG_ENDIAN
31610        uint64_t reserved_2_63           : 62;
31611        uint64_t stt                     : 2;       /**< Shadow TX Trigger */
31612#else
31613        uint64_t stt                     : 2;
31614        uint64_t reserved_2_63           : 62;
31615#endif
31616    } s;
31617    struct cvmx_mio_uartx_stt_s          cn30xx;
31618    struct cvmx_mio_uartx_stt_s          cn31xx;
31619    struct cvmx_mio_uartx_stt_s          cn38xx;
31620    struct cvmx_mio_uartx_stt_s          cn38xxp2;
31621    struct cvmx_mio_uartx_stt_s          cn50xx;
31622    struct cvmx_mio_uartx_stt_s          cn52xx;
31623    struct cvmx_mio_uartx_stt_s          cn52xxp1;
31624    struct cvmx_mio_uartx_stt_s          cn56xx;
31625    struct cvmx_mio_uartx_stt_s          cn56xxp1;
31626    struct cvmx_mio_uartx_stt_s          cn58xx;
31627    struct cvmx_mio_uartx_stt_s          cn58xxp1;
31628} cvmx_mio_uartx_stt_t;
31629typedef cvmx_mio_uartx_stt_t cvmx_uart_stt_t;
31630
31631
31632/**
31633 * cvmx_mio_uart#_tfl
31634 *
31635 * MIO_UARTX_TFL = MIO UARTX Transmit FIFO Level Register
31636 *
31637 * The Transmit FIFO Level Register (TFL) indicates the number of data entries in the transmit FIFO.
31638 */
31639typedef union
31640{
31641    uint64_t u64;
31642    struct cvmx_mio_uartx_tfl_s
31643    {
31644#if __BYTE_ORDER == __BIG_ENDIAN
31645        uint64_t reserved_7_63           : 57;
31646        uint64_t tfl                     : 7;       /**< Transmit FIFO Level Register */
31647#else
31648        uint64_t tfl                     : 7;
31649        uint64_t reserved_7_63           : 57;
31650#endif
31651    } s;
31652    struct cvmx_mio_uartx_tfl_s          cn30xx;
31653    struct cvmx_mio_uartx_tfl_s          cn31xx;
31654    struct cvmx_mio_uartx_tfl_s          cn38xx;
31655    struct cvmx_mio_uartx_tfl_s          cn38xxp2;
31656    struct cvmx_mio_uartx_tfl_s          cn50xx;
31657    struct cvmx_mio_uartx_tfl_s          cn52xx;
31658    struct cvmx_mio_uartx_tfl_s          cn52xxp1;
31659    struct cvmx_mio_uartx_tfl_s          cn56xx;
31660    struct cvmx_mio_uartx_tfl_s          cn56xxp1;
31661    struct cvmx_mio_uartx_tfl_s          cn58xx;
31662    struct cvmx_mio_uartx_tfl_s          cn58xxp1;
31663} cvmx_mio_uartx_tfl_t;
31664typedef cvmx_mio_uartx_tfl_t cvmx_uart_tfl_t;
31665
31666
31667/**
31668 * cvmx_mio_uart#_tfr
31669 *
31670 * MIO_UARTX_TFR = MIO UARTX Transmit FIFO Read Register
31671 *
31672 * The Transmit FIFO Read Register (TFR) is only valid when FIFO access mode is enabled (FAR bit 0 is
31673 * set). When FIFOs are enabled, reading this register gives the data at the top of the transmit FIFO.
31674 * Each consecutive read pops the transmit FIFO and gives the next data value that is currently at the
31675 * top of the FIFO. When FIFOs are not enabled, reading this register gives the data in the THR.
31676 */
31677typedef union
31678{
31679    uint64_t u64;
31680    struct cvmx_mio_uartx_tfr_s
31681    {
31682#if __BYTE_ORDER == __BIG_ENDIAN
31683        uint64_t reserved_8_63           : 56;
31684        uint64_t tfr                     : 8;       /**< Transmit FIFO Read Register */
31685#else
31686        uint64_t tfr                     : 8;
31687        uint64_t reserved_8_63           : 56;
31688#endif
31689    } s;
31690    struct cvmx_mio_uartx_tfr_s          cn30xx;
31691    struct cvmx_mio_uartx_tfr_s          cn31xx;
31692    struct cvmx_mio_uartx_tfr_s          cn38xx;
31693    struct cvmx_mio_uartx_tfr_s          cn38xxp2;
31694    struct cvmx_mio_uartx_tfr_s          cn50xx;
31695    struct cvmx_mio_uartx_tfr_s          cn52xx;
31696    struct cvmx_mio_uartx_tfr_s          cn52xxp1;
31697    struct cvmx_mio_uartx_tfr_s          cn56xx;
31698    struct cvmx_mio_uartx_tfr_s          cn56xxp1;
31699    struct cvmx_mio_uartx_tfr_s          cn58xx;
31700    struct cvmx_mio_uartx_tfr_s          cn58xxp1;
31701} cvmx_mio_uartx_tfr_t;
31702typedef cvmx_mio_uartx_tfr_t cvmx_uart_tfr_t;
31703
31704
31705/**
31706 * cvmx_mio_uart#_thr
31707 *
31708 * MIO_UARTX_THR = MIO UARTX Transmit Holding Register
31709 *
31710 * Transmit Holding Register (THR) is a write-only register that contains data to be transmitted on the
31711 * serial output port (sout). Data can be written to the THR any time that the THR Empty (THRE) bit of
31712 * the Line Status Register (LSR) is set.
31713 *
31714 * If FIFOs are not enabled and THRE is set, writing a single character to the THR clears the THRE. Any
31715 * additional writes to the THR before the THRE is set again causes the THR data to be overwritten.
31716 *
31717 * If FIFOs are enabled and THRE is set (and Programmable THRE mode disabled), 64 characters of data may
31718 * be written to the THR before the FIFO is full. Any attempt to write data when the FIFO is full results
31719 * in the write data being lost.
31720 *
31721 * Note: The Divisor Latch Address Bit (DLAB) of the Line Control Register (LCR) must be clear to access
31722 * this register.
31723 *
31724 * Note: The address below is an alias to simplify these CSR descriptions. It should be known that the
31725 * RBR, THR, and DLL registers are the same.
31726 */
31727typedef union
31728{
31729    uint64_t u64;
31730    struct cvmx_mio_uartx_thr_s
31731    {
31732#if __BYTE_ORDER == __BIG_ENDIAN
31733        uint64_t reserved_8_63           : 56;
31734        uint64_t thr                     : 8;       /**< Transmit Holding Register */
31735#else
31736        uint64_t thr                     : 8;
31737        uint64_t reserved_8_63           : 56;
31738#endif
31739    } s;
31740    struct cvmx_mio_uartx_thr_s          cn30xx;
31741    struct cvmx_mio_uartx_thr_s          cn31xx;
31742    struct cvmx_mio_uartx_thr_s          cn38xx;
31743    struct cvmx_mio_uartx_thr_s          cn38xxp2;
31744    struct cvmx_mio_uartx_thr_s          cn50xx;
31745    struct cvmx_mio_uartx_thr_s          cn52xx;
31746    struct cvmx_mio_uartx_thr_s          cn52xxp1;
31747    struct cvmx_mio_uartx_thr_s          cn56xx;
31748    struct cvmx_mio_uartx_thr_s          cn56xxp1;
31749    struct cvmx_mio_uartx_thr_s          cn58xx;
31750    struct cvmx_mio_uartx_thr_s          cn58xxp1;
31751} cvmx_mio_uartx_thr_t;
31752typedef cvmx_mio_uartx_thr_t cvmx_uart_thr_t;
31753
31754
31755/**
31756 * cvmx_mio_uart#_usr
31757 *
31758 * MIO_UARTX_USR = MIO UARTX UART Status Register
31759 *
31760 * The UART Status Register (USR) contains UART status information.
31761 *
31762 * USR bit 0 is the BUSY bit.  When set this bit indicates that a serial transfer is in progress, when
31763 * clear it indicates that the UART is idle or inactive.
31764 *
31765 * Note: In PASS3, the BUSY bit will always be clear.
31766 *
31767 * USR bits 1-4 indicate the following FIFO status: TX FIFO Not Full (TFNF), TX FIFO Empty (TFE), RX
31768 * FIFO Not Empty (RFNE), and RX FIFO Full (RFF).
31769 */
31770typedef union
31771{
31772    uint64_t u64;
31773    struct cvmx_mio_uartx_usr_s
31774    {
31775#if __BYTE_ORDER == __BIG_ENDIAN
31776        uint64_t reserved_5_63           : 59;
31777        uint64_t rff                     : 1;       /**< RX FIFO Full */
31778        uint64_t rfne                    : 1;       /**< RX FIFO Not Empty */
31779        uint64_t tfe                     : 1;       /**< TX FIFO Empty */
31780        uint64_t tfnf                    : 1;       /**< TX FIFO Not Full */
31781        uint64_t busy                    : 1;       /**< Busy bit (always 0 in PASS3) */
31782#else
31783        uint64_t busy                    : 1;
31784        uint64_t tfnf                    : 1;
31785        uint64_t tfe                     : 1;
31786        uint64_t rfne                    : 1;
31787        uint64_t rff                     : 1;
31788        uint64_t reserved_5_63           : 59;
31789#endif
31790    } s;
31791    struct cvmx_mio_uartx_usr_s          cn30xx;
31792    struct cvmx_mio_uartx_usr_s          cn31xx;
31793    struct cvmx_mio_uartx_usr_s          cn38xx;
31794    struct cvmx_mio_uartx_usr_s          cn38xxp2;
31795    struct cvmx_mio_uartx_usr_s          cn50xx;
31796    struct cvmx_mio_uartx_usr_s          cn52xx;
31797    struct cvmx_mio_uartx_usr_s          cn52xxp1;
31798    struct cvmx_mio_uartx_usr_s          cn56xx;
31799    struct cvmx_mio_uartx_usr_s          cn56xxp1;
31800    struct cvmx_mio_uartx_usr_s          cn58xx;
31801    struct cvmx_mio_uartx_usr_s          cn58xxp1;
31802} cvmx_mio_uartx_usr_t;
31803typedef cvmx_mio_uartx_usr_t cvmx_uart_usr_t;
31804
31805
31806/**
31807 * cvmx_mio_uart2_dlh
31808 */
31809typedef union
31810{
31811    uint64_t u64;
31812    struct cvmx_mio_uart2_dlh_s
31813    {
31814#if __BYTE_ORDER == __BIG_ENDIAN
31815        uint64_t reserved_8_63           : 56;
31816        uint64_t dlh                     : 8;       /**< Divisor Latch High Register */
31817#else
31818        uint64_t dlh                     : 8;
31819        uint64_t reserved_8_63           : 56;
31820#endif
31821    } s;
31822    struct cvmx_mio_uart2_dlh_s          cn52xx;
31823    struct cvmx_mio_uart2_dlh_s          cn52xxp1;
31824} cvmx_mio_uart2_dlh_t;
31825
31826
31827/**
31828 * cvmx_mio_uart2_dll
31829 */
31830typedef union
31831{
31832    uint64_t u64;
31833    struct cvmx_mio_uart2_dll_s
31834    {
31835#if __BYTE_ORDER == __BIG_ENDIAN
31836        uint64_t reserved_8_63           : 56;
31837        uint64_t dll                     : 8;       /**< Divisor Latch Low Register */
31838#else
31839        uint64_t dll                     : 8;
31840        uint64_t reserved_8_63           : 56;
31841#endif
31842    } s;
31843    struct cvmx_mio_uart2_dll_s          cn52xx;
31844    struct cvmx_mio_uart2_dll_s          cn52xxp1;
31845} cvmx_mio_uart2_dll_t;
31846
31847
31848/**
31849 * cvmx_mio_uart2_far
31850 */
31851typedef union
31852{
31853    uint64_t u64;
31854    struct cvmx_mio_uart2_far_s
31855    {
31856#if __BYTE_ORDER == __BIG_ENDIAN
31857        uint64_t reserved_1_63           : 63;
31858        uint64_t far                     : 1;       /**< FIFO Access Register */
31859#else
31860        uint64_t far                     : 1;
31861        uint64_t reserved_1_63           : 63;
31862#endif
31863    } s;
31864    struct cvmx_mio_uart2_far_s          cn52xx;
31865    struct cvmx_mio_uart2_far_s          cn52xxp1;
31866} cvmx_mio_uart2_far_t;
31867
31868
31869/**
31870 * cvmx_mio_uart2_fcr
31871 */
31872typedef union
31873{
31874    uint64_t u64;
31875    struct cvmx_mio_uart2_fcr_s
31876    {
31877#if __BYTE_ORDER == __BIG_ENDIAN
31878        uint64_t reserved_8_63           : 56;
31879        uint64_t rxtrig                  : 2;       /**< RX Trigger */
31880        uint64_t txtrig                  : 2;       /**< TX Trigger */
31881        uint64_t reserved_3_3            : 1;
31882        uint64_t txfr                    : 1;       /**< TX FIFO reset */
31883        uint64_t rxfr                    : 1;       /**< RX FIFO reset */
31884        uint64_t en                      : 1;       /**< FIFO enable */
31885#else
31886        uint64_t en                      : 1;
31887        uint64_t rxfr                    : 1;
31888        uint64_t txfr                    : 1;
31889        uint64_t reserved_3_3            : 1;
31890        uint64_t txtrig                  : 2;
31891        uint64_t rxtrig                  : 2;
31892        uint64_t reserved_8_63           : 56;
31893#endif
31894    } s;
31895    struct cvmx_mio_uart2_fcr_s          cn52xx;
31896    struct cvmx_mio_uart2_fcr_s          cn52xxp1;
31897} cvmx_mio_uart2_fcr_t;
31898
31899
31900/**
31901 * cvmx_mio_uart2_htx
31902 */
31903typedef union
31904{
31905    uint64_t u64;
31906    struct cvmx_mio_uart2_htx_s
31907    {
31908#if __BYTE_ORDER == __BIG_ENDIAN
31909        uint64_t reserved_1_63           : 63;
31910        uint64_t htx                     : 1;       /**< Halt TX */
31911#else
31912        uint64_t htx                     : 1;
31913        uint64_t reserved_1_63           : 63;
31914#endif
31915    } s;
31916    struct cvmx_mio_uart2_htx_s          cn52xx;
31917    struct cvmx_mio_uart2_htx_s          cn52xxp1;
31918} cvmx_mio_uart2_htx_t;
31919
31920
31921/**
31922 * cvmx_mio_uart2_ier
31923 */
31924typedef union
31925{
31926    uint64_t u64;
31927    struct cvmx_mio_uart2_ier_s
31928    {
31929#if __BYTE_ORDER == __BIG_ENDIAN
31930        uint64_t reserved_8_63           : 56;
31931        uint64_t ptime                   : 1;       /**< Programmable THRE Interrupt mode enable */
31932        uint64_t reserved_4_6            : 3;
31933        uint64_t edssi                   : 1;       /**< Enable Modem Status Interrupt */
31934        uint64_t elsi                    : 1;       /**< Enable Receiver Line Status Interrupt */
31935        uint64_t etbei                   : 1;       /**< Enable Transmitter Holding Register Empty Interrupt */
31936        uint64_t erbfi                   : 1;       /**< Enable Received Data Available Interrupt */
31937#else
31938        uint64_t erbfi                   : 1;
31939        uint64_t etbei                   : 1;
31940        uint64_t elsi                    : 1;
31941        uint64_t edssi                   : 1;
31942        uint64_t reserved_4_6            : 3;
31943        uint64_t ptime                   : 1;
31944        uint64_t reserved_8_63           : 56;
31945#endif
31946    } s;
31947    struct cvmx_mio_uart2_ier_s          cn52xx;
31948    struct cvmx_mio_uart2_ier_s          cn52xxp1;
31949} cvmx_mio_uart2_ier_t;
31950
31951
31952/**
31953 * cvmx_mio_uart2_iir
31954 */
31955typedef union
31956{
31957    uint64_t u64;
31958    struct cvmx_mio_uart2_iir_s
31959    {
31960#if __BYTE_ORDER == __BIG_ENDIAN
31961        uint64_t reserved_8_63           : 56;
31962        uint64_t fen                     : 2;       /**< FIFO-enabled bits */
31963        uint64_t reserved_4_5            : 2;
31964        uint64_t iid                     : 4;       /**< Interrupt ID */
31965#else
31966        uint64_t iid                     : 4;
31967        uint64_t reserved_4_5            : 2;
31968        uint64_t fen                     : 2;
31969        uint64_t reserved_8_63           : 56;
31970#endif
31971    } s;
31972    struct cvmx_mio_uart2_iir_s          cn52xx;
31973    struct cvmx_mio_uart2_iir_s          cn52xxp1;
31974} cvmx_mio_uart2_iir_t;
31975
31976
31977/**
31978 * cvmx_mio_uart2_lcr
31979 */
31980typedef union
31981{
31982    uint64_t u64;
31983    struct cvmx_mio_uart2_lcr_s
31984    {
31985#if __BYTE_ORDER == __BIG_ENDIAN
31986        uint64_t reserved_8_63           : 56;
31987        uint64_t dlab                    : 1;       /**< Divisor Latch Address bit */
31988        uint64_t brk                     : 1;       /**< Break Control bit */
31989        uint64_t reserved_5_5            : 1;
31990        uint64_t eps                     : 1;       /**< Even Parity Select bit */
31991        uint64_t pen                     : 1;       /**< Parity Enable bit */
31992        uint64_t stop                    : 1;       /**< Stop Control bit */
31993        uint64_t cls                     : 2;       /**< Character Length Select */
31994#else
31995        uint64_t cls                     : 2;
31996        uint64_t stop                    : 1;
31997        uint64_t pen                     : 1;
31998        uint64_t eps                     : 1;
31999        uint64_t reserved_5_5            : 1;
32000        uint64_t brk                     : 1;
32001        uint64_t dlab                    : 1;
32002        uint64_t reserved_8_63           : 56;
32003#endif
32004    } s;
32005    struct cvmx_mio_uart2_lcr_s          cn52xx;
32006    struct cvmx_mio_uart2_lcr_s          cn52xxp1;
32007} cvmx_mio_uart2_lcr_t;
32008
32009
32010/**
32011 * cvmx_mio_uart2_lsr
32012 */
32013typedef union
32014{
32015    uint64_t u64;
32016    struct cvmx_mio_uart2_lsr_s
32017    {
32018#if __BYTE_ORDER == __BIG_ENDIAN
32019        uint64_t reserved_8_63           : 56;
32020        uint64_t ferr                    : 1;       /**< Error in Receiver FIFO bit */
32021        uint64_t temt                    : 1;       /**< Transmitter Empty bit */
32022        uint64_t thre                    : 1;       /**< Transmitter Holding Register Empty bit */
32023        uint64_t bi                      : 1;       /**< Break Interrupt bit */
32024        uint64_t fe                      : 1;       /**< Framing Error bit */
32025        uint64_t pe                      : 1;       /**< Parity Error bit */
32026        uint64_t oe                      : 1;       /**< Overrun Error bit */
32027        uint64_t dr                      : 1;       /**< Data Ready bit */
32028#else
32029        uint64_t dr                      : 1;
32030        uint64_t oe                      : 1;
32031        uint64_t pe                      : 1;
32032        uint64_t fe                      : 1;
32033        uint64_t bi                      : 1;
32034        uint64_t thre                    : 1;
32035        uint64_t temt                    : 1;
32036        uint64_t ferr                    : 1;
32037        uint64_t reserved_8_63           : 56;
32038#endif
32039    } s;
32040    struct cvmx_mio_uart2_lsr_s          cn52xx;
32041    struct cvmx_mio_uart2_lsr_s          cn52xxp1;
32042} cvmx_mio_uart2_lsr_t;
32043
32044
32045/**
32046 * cvmx_mio_uart2_mcr
32047 */
32048typedef union
32049{
32050    uint64_t u64;
32051    struct cvmx_mio_uart2_mcr_s
32052    {
32053#if __BYTE_ORDER == __BIG_ENDIAN
32054        uint64_t reserved_6_63           : 58;
32055        uint64_t afce                    : 1;       /**< Auto Flow Control Enable bit */
32056        uint64_t loop                    : 1;       /**< Loopback bit */
32057        uint64_t out2                    : 1;       /**< OUT2 output bit */
32058        uint64_t out1                    : 1;       /**< OUT1 output bit */
32059        uint64_t rts                     : 1;       /**< Request To Send output bit */
32060        uint64_t dtr                     : 1;       /**< Data Terminal Ready output bit */
32061#else
32062        uint64_t dtr                     : 1;
32063        uint64_t rts                     : 1;
32064        uint64_t out1                    : 1;
32065        uint64_t out2                    : 1;
32066        uint64_t loop                    : 1;
32067        uint64_t afce                    : 1;
32068        uint64_t reserved_6_63           : 58;
32069#endif
32070    } s;
32071    struct cvmx_mio_uart2_mcr_s          cn52xx;
32072    struct cvmx_mio_uart2_mcr_s          cn52xxp1;
32073} cvmx_mio_uart2_mcr_t;
32074
32075
32076/**
32077 * cvmx_mio_uart2_msr
32078 */
32079typedef union
32080{
32081    uint64_t u64;
32082    struct cvmx_mio_uart2_msr_s
32083    {
32084#if __BYTE_ORDER == __BIG_ENDIAN
32085        uint64_t reserved_8_63           : 56;
32086        uint64_t dcd                     : 1;       /**< Data Carrier Detect input bit */
32087        uint64_t ri                      : 1;       /**< Ring Indicator input bit */
32088        uint64_t dsr                     : 1;       /**< Data Set Ready input bit */
32089        uint64_t cts                     : 1;       /**< Clear To Send input bit */
32090        uint64_t ddcd                    : 1;       /**< Delta Data Carrier Detect bit */
32091        uint64_t teri                    : 1;       /**< Trailing Edge of Ring Indicator bit */
32092        uint64_t ddsr                    : 1;       /**< Delta Data Set Ready bit */
32093        uint64_t dcts                    : 1;       /**< Delta Clear To Send bit */
32094#else
32095        uint64_t dcts                    : 1;
32096        uint64_t ddsr                    : 1;
32097        uint64_t teri                    : 1;
32098        uint64_t ddcd                    : 1;
32099        uint64_t cts                     : 1;
32100        uint64_t dsr                     : 1;
32101        uint64_t ri                      : 1;
32102        uint64_t dcd                     : 1;
32103        uint64_t reserved_8_63           : 56;
32104#endif
32105    } s;
32106    struct cvmx_mio_uart2_msr_s          cn52xx;
32107    struct cvmx_mio_uart2_msr_s          cn52xxp1;
32108} cvmx_mio_uart2_msr_t;
32109
32110
32111/**
32112 * cvmx_mio_uart2_rbr
32113 */
32114typedef union
32115{
32116    uint64_t u64;
32117    struct cvmx_mio_uart2_rbr_s
32118    {
32119#if __BYTE_ORDER == __BIG_ENDIAN
32120        uint64_t reserved_8_63           : 56;
32121        uint64_t rbr                     : 8;       /**< Receive Buffer Register */
32122#else
32123        uint64_t rbr                     : 8;
32124        uint64_t reserved_8_63           : 56;
32125#endif
32126    } s;
32127    struct cvmx_mio_uart2_rbr_s          cn52xx;
32128    struct cvmx_mio_uart2_rbr_s          cn52xxp1;
32129} cvmx_mio_uart2_rbr_t;
32130
32131
32132/**
32133 * cvmx_mio_uart2_rfl
32134 */
32135typedef union
32136{
32137    uint64_t u64;
32138    struct cvmx_mio_uart2_rfl_s
32139    {
32140#if __BYTE_ORDER == __BIG_ENDIAN
32141        uint64_t reserved_7_63           : 57;
32142        uint64_t rfl                     : 7;       /**< Receive FIFO Level Register */
32143#else
32144        uint64_t rfl                     : 7;
32145        uint64_t reserved_7_63           : 57;
32146#endif
32147    } s;
32148    struct cvmx_mio_uart2_rfl_s          cn52xx;
32149    struct cvmx_mio_uart2_rfl_s          cn52xxp1;
32150} cvmx_mio_uart2_rfl_t;
32151
32152
32153/**
32154 * cvmx_mio_uart2_rfw
32155 */
32156typedef union
32157{
32158    uint64_t u64;
32159    struct cvmx_mio_uart2_rfw_s
32160    {
32161#if __BYTE_ORDER == __BIG_ENDIAN
32162        uint64_t reserved_10_63          : 54;
32163        uint64_t rffe                    : 1;       /**< Receive FIFO Framing Error */
32164        uint64_t rfpe                    : 1;       /**< Receive FIFO Parity Error */
32165        uint64_t rfwd                    : 8;       /**< Receive FIFO Write Data */
32166#else
32167        uint64_t rfwd                    : 8;
32168        uint64_t rfpe                    : 1;
32169        uint64_t rffe                    : 1;
32170        uint64_t reserved_10_63          : 54;
32171#endif
32172    } s;
32173    struct cvmx_mio_uart2_rfw_s          cn52xx;
32174    struct cvmx_mio_uart2_rfw_s          cn52xxp1;
32175} cvmx_mio_uart2_rfw_t;
32176
32177
32178/**
32179 * cvmx_mio_uart2_sbcr
32180 */
32181typedef union
32182{
32183    uint64_t u64;
32184    struct cvmx_mio_uart2_sbcr_s
32185    {
32186#if __BYTE_ORDER == __BIG_ENDIAN
32187        uint64_t reserved_1_63           : 63;
32188        uint64_t sbcr                    : 1;       /**< Shadow Break Control */
32189#else
32190        uint64_t sbcr                    : 1;
32191        uint64_t reserved_1_63           : 63;
32192#endif
32193    } s;
32194    struct cvmx_mio_uart2_sbcr_s         cn52xx;
32195    struct cvmx_mio_uart2_sbcr_s         cn52xxp1;
32196} cvmx_mio_uart2_sbcr_t;
32197
32198
32199/**
32200 * cvmx_mio_uart2_scr
32201 */
32202typedef union
32203{
32204    uint64_t u64;
32205    struct cvmx_mio_uart2_scr_s
32206    {
32207#if __BYTE_ORDER == __BIG_ENDIAN
32208        uint64_t reserved_8_63           : 56;
32209        uint64_t scr                     : 8;       /**< Scratchpad Register */
32210#else
32211        uint64_t scr                     : 8;
32212        uint64_t reserved_8_63           : 56;
32213#endif
32214    } s;
32215    struct cvmx_mio_uart2_scr_s          cn52xx;
32216    struct cvmx_mio_uart2_scr_s          cn52xxp1;
32217} cvmx_mio_uart2_scr_t;
32218
32219
32220/**
32221 * cvmx_mio_uart2_sfe
32222 */
32223typedef union
32224{
32225    uint64_t u64;
32226    struct cvmx_mio_uart2_sfe_s
32227    {
32228#if __BYTE_ORDER == __BIG_ENDIAN
32229        uint64_t reserved_1_63           : 63;
32230        uint64_t sfe                     : 1;       /**< Shadow FIFO Enable */
32231#else
32232        uint64_t sfe                     : 1;
32233        uint64_t reserved_1_63           : 63;
32234#endif
32235    } s;
32236    struct cvmx_mio_uart2_sfe_s          cn52xx;
32237    struct cvmx_mio_uart2_sfe_s          cn52xxp1;
32238} cvmx_mio_uart2_sfe_t;
32239
32240
32241/**
32242 * cvmx_mio_uart2_srr
32243 */
32244typedef union
32245{
32246    uint64_t u64;
32247    struct cvmx_mio_uart2_srr_s
32248    {
32249#if __BYTE_ORDER == __BIG_ENDIAN
32250        uint64_t reserved_3_63           : 61;
32251        uint64_t stfr                    : 1;       /**< Shadow TX FIFO Reset */
32252        uint64_t srfr                    : 1;       /**< Shadow RX FIFO Reset */
32253        uint64_t usr                     : 1;       /**< UART Soft Reset */
32254#else
32255        uint64_t usr                     : 1;
32256        uint64_t srfr                    : 1;
32257        uint64_t stfr                    : 1;
32258        uint64_t reserved_3_63           : 61;
32259#endif
32260    } s;
32261    struct cvmx_mio_uart2_srr_s          cn52xx;
32262    struct cvmx_mio_uart2_srr_s          cn52xxp1;
32263} cvmx_mio_uart2_srr_t;
32264
32265
32266/**
32267 * cvmx_mio_uart2_srt
32268 */
32269typedef union
32270{
32271    uint64_t u64;
32272    struct cvmx_mio_uart2_srt_s
32273    {
32274#if __BYTE_ORDER == __BIG_ENDIAN
32275        uint64_t reserved_2_63           : 62;
32276        uint64_t srt                     : 2;       /**< Shadow RX Trigger */
32277#else
32278        uint64_t srt                     : 2;
32279        uint64_t reserved_2_63           : 62;
32280#endif
32281    } s;
32282    struct cvmx_mio_uart2_srt_s          cn52xx;
32283    struct cvmx_mio_uart2_srt_s          cn52xxp1;
32284} cvmx_mio_uart2_srt_t;
32285
32286
32287/**
32288 * cvmx_mio_uart2_srts
32289 */
32290typedef union
32291{
32292    uint64_t u64;
32293    struct cvmx_mio_uart2_srts_s
32294    {
32295#if __BYTE_ORDER == __BIG_ENDIAN
32296        uint64_t reserved_1_63           : 63;
32297        uint64_t srts                    : 1;       /**< Shadow Request To Send */
32298#else
32299        uint64_t srts                    : 1;
32300        uint64_t reserved_1_63           : 63;
32301#endif
32302    } s;
32303    struct cvmx_mio_uart2_srts_s         cn52xx;
32304    struct cvmx_mio_uart2_srts_s         cn52xxp1;
32305} cvmx_mio_uart2_srts_t;
32306
32307
32308/**
32309 * cvmx_mio_uart2_stt
32310 */
32311typedef union
32312{
32313    uint64_t u64;
32314    struct cvmx_mio_uart2_stt_s
32315    {
32316#if __BYTE_ORDER == __BIG_ENDIAN
32317        uint64_t reserved_2_63           : 62;
32318        uint64_t stt                     : 2;       /**< Shadow TX Trigger */
32319#else
32320        uint64_t stt                     : 2;
32321        uint64_t reserved_2_63           : 62;
32322#endif
32323    } s;
32324    struct cvmx_mio_uart2_stt_s          cn52xx;
32325    struct cvmx_mio_uart2_stt_s          cn52xxp1;
32326} cvmx_mio_uart2_stt_t;
32327
32328
32329/**
32330 * cvmx_mio_uart2_tfl
32331 */
32332typedef union
32333{
32334    uint64_t u64;
32335    struct cvmx_mio_uart2_tfl_s
32336    {
32337#if __BYTE_ORDER == __BIG_ENDIAN
32338        uint64_t reserved_7_63           : 57;
32339        uint64_t tfl                     : 7;       /**< Transmit FIFO Level Register */
32340#else
32341        uint64_t tfl                     : 7;
32342        uint64_t reserved_7_63           : 57;
32343#endif
32344    } s;
32345    struct cvmx_mio_uart2_tfl_s          cn52xx;
32346    struct cvmx_mio_uart2_tfl_s          cn52xxp1;
32347} cvmx_mio_uart2_tfl_t;
32348
32349
32350/**
32351 * cvmx_mio_uart2_tfr
32352 */
32353typedef union
32354{
32355    uint64_t u64;
32356    struct cvmx_mio_uart2_tfr_s
32357    {
32358#if __BYTE_ORDER == __BIG_ENDIAN
32359        uint64_t reserved_8_63           : 56;
32360        uint64_t tfr                     : 8;       /**< Transmit FIFO Read Register */
32361#else
32362        uint64_t tfr                     : 8;
32363        uint64_t reserved_8_63           : 56;
32364#endif
32365    } s;
32366    struct cvmx_mio_uart2_tfr_s          cn52xx;
32367    struct cvmx_mio_uart2_tfr_s          cn52xxp1;
32368} cvmx_mio_uart2_tfr_t;
32369
32370
32371/**
32372 * cvmx_mio_uart2_thr
32373 */
32374typedef union
32375{
32376    uint64_t u64;
32377    struct cvmx_mio_uart2_thr_s
32378    {
32379#if __BYTE_ORDER == __BIG_ENDIAN
32380        uint64_t reserved_8_63           : 56;
32381        uint64_t thr                     : 8;       /**< Transmit Holding Register */
32382#else
32383        uint64_t thr                     : 8;
32384        uint64_t reserved_8_63           : 56;
32385#endif
32386    } s;
32387    struct cvmx_mio_uart2_thr_s          cn52xx;
32388    struct cvmx_mio_uart2_thr_s          cn52xxp1;
32389} cvmx_mio_uart2_thr_t;
32390
32391
32392/**
32393 * cvmx_mio_uart2_usr
32394 */
32395typedef union
32396{
32397    uint64_t u64;
32398    struct cvmx_mio_uart2_usr_s
32399    {
32400#if __BYTE_ORDER == __BIG_ENDIAN
32401        uint64_t reserved_5_63           : 59;
32402        uint64_t rff                     : 1;       /**< RX FIFO Full */
32403        uint64_t rfne                    : 1;       /**< RX FIFO Not Empty */
32404        uint64_t tfe                     : 1;       /**< TX FIFO Empty */
32405        uint64_t tfnf                    : 1;       /**< TX FIFO Not Full */
32406        uint64_t busy                    : 1;       /**< Busy bit (always 0 in PASS3) */
32407#else
32408        uint64_t busy                    : 1;
32409        uint64_t tfnf                    : 1;
32410        uint64_t tfe                     : 1;
32411        uint64_t rfne                    : 1;
32412        uint64_t rff                     : 1;
32413        uint64_t reserved_5_63           : 59;
32414#endif
32415    } s;
32416    struct cvmx_mio_uart2_usr_s          cn52xx;
32417    struct cvmx_mio_uart2_usr_s          cn52xxp1;
32418} cvmx_mio_uart2_usr_t;
32419
32420
32421/**
32422 * cvmx_mix#_bist
32423 *
32424 * MIX_BIST = MIX BIST Register
32425 *
32426 * Description:
32427 *  NOTE: To read the MIX_BIST register, a device would issue an IOBLD64 directed at the MIO.
32428 */
32429typedef union
32430{
32431    uint64_t u64;
32432    struct cvmx_mixx_bist_s
32433    {
32434#if __BYTE_ORDER == __BIG_ENDIAN
32435        uint64_t reserved_4_63           : 60;
32436        uint64_t mrqdat                  : 1;       /**< Bist Results for NBR CSR RdReq RAM
32437                                                         - 0: GOOD (or bist in progress/never run)
32438                                                         - 1: BAD */
32439        uint64_t ipfdat                  : 1;       /**< Bist Results for MIX Inbound Packet RAM
32440                                                         - 0: GOOD (or bist in progress/never run)
32441                                                         - 1: BAD */
32442        uint64_t irfdat                  : 1;       /**< Bist Results for MIX I-Ring Entry RAM
32443                                                         - 0: GOOD (or bist in progress/never run)
32444                                                         - 1: BAD */
32445        uint64_t orfdat                  : 1;       /**< Bist Results for MIX O-Ring Entry RAM
32446                                                         - 0: GOOD (or bist in progress/never run)
32447                                                         - 1: BAD */
32448#else
32449        uint64_t orfdat                  : 1;
32450        uint64_t irfdat                  : 1;
32451        uint64_t ipfdat                  : 1;
32452        uint64_t mrqdat                  : 1;
32453        uint64_t reserved_4_63           : 60;
32454#endif
32455    } s;
32456    struct cvmx_mixx_bist_s              cn52xx;
32457    struct cvmx_mixx_bist_s              cn52xxp1;
32458    struct cvmx_mixx_bist_s              cn56xx;
32459    struct cvmx_mixx_bist_s              cn56xxp1;
32460} cvmx_mixx_bist_t;
32461
32462
32463/**
32464 * cvmx_mix#_ctl
32465 *
32466 * MIX_CTL = MIX Control Register
32467 *
32468 * Description:
32469 *  NOTE: To write to the MIX_CTL register, a device would issue an IOBST directed at the MIO.
32470 *        To read the MIX_CTL register, a device would issue an IOBLD64 directed at the MIO.
32471 */
32472typedef union
32473{
32474    uint64_t u64;
32475    struct cvmx_mixx_ctl_s
32476    {
32477#if __BYTE_ORDER == __BIG_ENDIAN
32478        uint64_t reserved_8_63           : 56;
32479        uint64_t crc_strip               : 1;       /**< HW CRC Strip Enable
32480                                                         When enabled, the last 4 bytes(CRC) of the ingress packet
32481                                                         are not included in cumulative packet byte length.
32482                                                         In other words, the cumulative LEN field for all
32483                                                         I-Ring Buffer Entries associated with a given ingress
32484                                                         packet will be 4 bytes less (so that the final 4B HW CRC
32485                                                         packet data is not processed by software). */
32486        uint64_t busy                    : 1;       /**< MIX Busy Status bit
32487                                                         MIX will assert busy status any time there are:
32488                                                           1) L2/DRAM reads in-flight (NCB-arb to read
32489                                                              response)
32490                                                           2) L2/DRAM writes in-flight (NCB-arb to write
32491                                                              data is sent.
32492                                                           3) L2/DRAM write commits in-flight (NCB-arb to write
32493                                                              commit response).
32494                                                         NOTE: After MIX_CTL[EN]=0, the MIX will eventually
32495                                                         complete any "inflight" transactions, at which point the
32496                                                         BUSY will de-assert. */
32497        uint64_t en                      : 1;       /**< MIX Enable bit
32498                                                         When EN=0, MIX will no longer arbitrate for
32499                                                         any new L2/DRAM read/write requests on the NCB Bus.
32500                                                         MIX will complete any requests that are currently
32501                                                         pended for the NCB Bus. */
32502        uint64_t reset                   : 1;       /**< MIX Soft Reset
32503                                                         When SW writes a '1' to MIX_CTL[RESET], the
32504                                                         MIX logic will be soft reset.
32505                                                         NOTE: The MIX-AGL RSL-CSR accesses are not effected
32506                                                         by soft reset (to allow RSL accesses during soft reset).
32507                                                         NOTE: The MIX-MIX NCB-direct CSR accesses are not effected
32508                                                         by soft reset (to allow RSL accesses during soft reset).
32509                                                         NOTE: Writing '1' will create a "64 eclk" soft reset
32510                                                         pulse chain used by both MIX/AGL subcomponents to
32511                                                         soft reset the MIX/AGL. SW should avoid sending any MIX/AGL
32512                                                         CSR R/Ws until after this 64 eclk reset window has
32513                                                         expired (unpredictable results).
32514                                                         NOTE: RESET is intentionally 'read as zero'.
32515                                                         The intended "soft reset" sequence is:
32516                                                            1) Write MIX_CTL[EN]=0
32517                                                               [To prevent any NEW transactions from being started]
32518                                                            2) Wait for MIX_CTL[BUSY]=0
32519                                                               [To indicate that all inflight transactions have
32520                                                                completed]
32521                                                            3) Write MIX_CTL[RESET]=1, followed by a MIX_CTL CSR read
32522                                                               and wait for the result.
32523                                                               This will generate the soft-reset pulse chain that will
32524                                                               reset MIX/AGL (except logic to gain access to CSRs).
32525                                                            4) Re-Initialize the MIX/AGL just as would be done
32526                                                               for a hard reset. */
32527        uint64_t lendian                 : 1;       /**< Packet Little Endian Mode
32528                                                         (0: Big Endian Mode/1: Little Endian Mode)
32529                                                         When the mode is set, MIX will byte-swap packet data
32530                                                         loads/stores at the MIX/NCB boundary. */
32531        uint64_t nbtarb                  : 1;       /**< MIX CB-Request Arbitration Mode.
32532                                                         When set to zero, the arbiter is fixed priority with
32533                                                         the following priority scheme:
32534                                                             Highest Priority: I-Ring Packet Write Request
32535                                                                               O-Ring Packet Read Request
32536                                                                               I-Ring Entry Write Request
32537                                                                               I-Ring Entry Read Request
32538                                                                               O-Ring Entry Read Request
32539                                                         When set to one, the arbiter is round robin. */
32540        uint64_t mrq_hwm                 : 2;       /**< MIX CB-Request FIFO Programmable High Water Mark.
32541                                                         The MRQ contains 16 CB-Requests which are CSR Rd/Wr
32542                                                         Requests. If the MRQ backs up with "HWM" entries,
32543                                                         then new CB-Requests are 'stalled'.
32544                                                            [0]: HWM = 16
32545                                                            [1]: HWM = 15
32546                                                            [2]: HWM = 14
32547                                                            [3]: HWM = 13
32548                                                         NOTE: This must only be written at power-on/boot time. */
32549#else
32550        uint64_t mrq_hwm                 : 2;
32551        uint64_t nbtarb                  : 1;
32552        uint64_t lendian                 : 1;
32553        uint64_t reset                   : 1;
32554        uint64_t en                      : 1;
32555        uint64_t busy                    : 1;
32556        uint64_t crc_strip               : 1;
32557        uint64_t reserved_8_63           : 56;
32558#endif
32559    } s;
32560    struct cvmx_mixx_ctl_s               cn52xx;
32561    struct cvmx_mixx_ctl_s               cn52xxp1;
32562    struct cvmx_mixx_ctl_s               cn56xx;
32563    struct cvmx_mixx_ctl_s               cn56xxp1;
32564} cvmx_mixx_ctl_t;
32565
32566
32567/**
32568 * cvmx_mix#_intena
32569 *
32570 * MIX_INTENA = MIX Local Interrupt Enable Mask Register
32571 *
32572 * Description:
32573 *  NOTE: To write to the MIX_INTENA register, a device would issue an IOBST directed at the MIO.
32574 *        To read the MIX_INTENA register, a device would issue an IOBLD64 directed at the MIO.
32575 */
32576typedef union
32577{
32578    uint64_t u64;
32579    struct cvmx_mixx_intena_s
32580    {
32581#if __BYTE_ORDER == __BIG_ENDIAN
32582        uint64_t reserved_7_63           : 57;
32583        uint64_t orunena                 : 1;       /**< ORCNT UnderFlow Detected
32584                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32585                                                         and this local interrupt mask bit is set, than an
32586                                                         interrupt is reported for an ORCNT underflow condition
32587                                                         MIX_ISR[ORUN]. */
32588        uint64_t irunena                 : 1;       /**< IRCNT UnderFlow Interrupt Enable
32589                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32590                                                         and this local interrupt mask bit is set, than an
32591                                                         interrupt is reported for an IRCNT underflow condition
32592                                                         MIX_ISR[IRUN]. */
32593        uint64_t data_drpena             : 1;       /**< Data was dropped due to RX FIFO full Interrupt
32594                                                         enable. If both the global interrupt mask bits
32595                                                         (CIU_INTx_EN*[MII]) and the local interrupt mask
32596                                                         bit(DATA_DRPENA) is set, than an interrupt is
32597                                                         reported for this event. */
32598        uint64_t ithena                  : 1;       /**< Inbound Ring Threshold Exceeded Interrupt Enable
32599                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32600                                                         and this local interrupt mask bit is set, than an
32601                                                         interrupt is reported for an Inbound Ring Threshold
32602                                                         Exceeded event(IRTHRESH). */
32603        uint64_t othena                  : 1;       /**< Outbound Ring Threshold Exceeded Interrupt Enable
32604                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32605                                                         and this local interrupt mask bit is set, than an
32606                                                         interrupt is reported for an Outbound Ring Threshold
32607                                                         Exceeded event(ORTHRESH). */
32608        uint64_t ivfena                  : 1;       /**< Inbound DoorBell(IDBELL) Overflow Detected
32609                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32610                                                         and this local interrupt mask bit is set, than an
32611                                                         interrupt is reported for an Inbound Doorbell Overflow
32612                                                         event(IDBOVF). */
32613        uint64_t ovfena                  : 1;       /**< Outbound DoorBell(ODBELL) Overflow Interrupt Enable
32614                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32615                                                         and this local interrupt mask bit is set, than an
32616                                                         interrupt is reported for an Outbound Doorbell Overflow
32617                                                         event(ODBOVF). */
32618#else
32619        uint64_t ovfena                  : 1;
32620        uint64_t ivfena                  : 1;
32621        uint64_t othena                  : 1;
32622        uint64_t ithena                  : 1;
32623        uint64_t data_drpena             : 1;
32624        uint64_t irunena                 : 1;
32625        uint64_t orunena                 : 1;
32626        uint64_t reserved_7_63           : 57;
32627#endif
32628    } s;
32629    struct cvmx_mixx_intena_s            cn52xx;
32630    struct cvmx_mixx_intena_s            cn52xxp1;
32631    struct cvmx_mixx_intena_s            cn56xx;
32632    struct cvmx_mixx_intena_s            cn56xxp1;
32633} cvmx_mixx_intena_t;
32634
32635
32636/**
32637 * cvmx_mix#_ircnt
32638 *
32639 * MIX_IRCNT = MIX I-Ring Pending Packet Counter
32640 *
32641 * Description:
32642 *  NOTE: To write to the MIX_IRCNT register, a device would issue an IOBST directed at the MIO.
32643 *        To read the MIX_IRCNT register, a device would issue an IOBLD64 directed at the MIO.
32644 */
32645typedef union
32646{
32647    uint64_t u64;
32648    struct cvmx_mixx_ircnt_s
32649    {
32650#if __BYTE_ORDER == __BIG_ENDIAN
32651        uint64_t reserved_20_63          : 44;
32652        uint64_t ircnt                   : 20;      /**< Pending \# of I-Ring Packets.
32653                                                         Whenever HW writes a completion code of Done, Trunc,
32654                                                         CRCErr or Err, it increments the IRCNT (to indicate
32655                                                         to SW the \# of pending Input packets in system memory).
32656                                                         NOTE: The HW guarantees that the completion code write
32657                                                         is always visible in system memory BEFORE it increments
32658                                                         the IRCNT.
32659                                                         Reads of IRCNT return the current inbound packet count.
32660                                                         Writes of IRCNT decrement the count by the value
32661                                                         written.
32662                                                         This register is used to generate interrupts to alert
32663                                                         SW of pending inbound MIX packets in system memory.
32664                                                         NOTE: In the case of inbound packets that span multiple
32665                                                         I-Ring entries, SW must keep track of the \# of I-Ring Entries
32666                                                         associated with a given inbound packet to reclaim the
32667                                                         proper \# of I-Ring Entries for re-use. */
32668#else
32669        uint64_t ircnt                   : 20;
32670        uint64_t reserved_20_63          : 44;
32671#endif
32672    } s;
32673    struct cvmx_mixx_ircnt_s             cn52xx;
32674    struct cvmx_mixx_ircnt_s             cn52xxp1;
32675    struct cvmx_mixx_ircnt_s             cn56xx;
32676    struct cvmx_mixx_ircnt_s             cn56xxp1;
32677} cvmx_mixx_ircnt_t;
32678
32679
32680/**
32681 * cvmx_mix#_irhwm
32682 *
32683 * MIX_IRHWM = MIX I-Ring High-Water Mark Threshold Register
32684 *
32685 * Description:
32686 *  NOTE: To write to the MIX_IHWM register, a device would issue an IOBST directed at the MIO.
32687 *        To read the MIX_IHWM register, a device would issue an IOBLD64 directed at the MIO.
32688 */
32689typedef union
32690{
32691    uint64_t u64;
32692    struct cvmx_mixx_irhwm_s
32693    {
32694#if __BYTE_ORDER == __BIG_ENDIAN
32695        uint64_t reserved_40_63          : 24;
32696        uint64_t ibplwm                  : 20;      /**< I-Ring BackPressure Low Water Mark Threshold.
32697                                                         When the \#of available I-Ring Entries (IDBELL)
32698                                                         is less than IBPLWM, the AGL-MAC will:
32699                                                           a) In full-duplex mode: send periodic PAUSE packets.
32700                                                           b) In half-duplex mode: Force collisions.
32701                                                         This programmable mechanism is provided as a means
32702                                                         to backpressure input traffic 'early' enough (so
32703                                                         that packets are not 'dropped' by OCTEON). */
32704        uint64_t irhwm                   : 20;      /**< I-Ring Entry High Water Mark Threshold.
32705                                                         Used to determine when the \# of Inbound packets
32706                                                         in system memory(MIX_IRCNT[IRCNT]) exceeds this IRHWM
32707                                                         threshold.
32708                                                         NOTE: The power-on value of the CIU_INTx_EN*[MII]
32709                                                         interrupt enable bits is zero and must be enabled
32710                                                         to allow interrupts to be reported. */
32711#else
32712        uint64_t irhwm                   : 20;
32713        uint64_t ibplwm                  : 20;
32714        uint64_t reserved_40_63          : 24;
32715#endif
32716    } s;
32717    struct cvmx_mixx_irhwm_s             cn52xx;
32718    struct cvmx_mixx_irhwm_s             cn52xxp1;
32719    struct cvmx_mixx_irhwm_s             cn56xx;
32720    struct cvmx_mixx_irhwm_s             cn56xxp1;
32721} cvmx_mixx_irhwm_t;
32722
32723
32724/**
32725 * cvmx_mix#_iring1
32726 *
32727 * MIX_IRING1 = MIX Inbound Ring Register \#1
32728 *
32729 * Description:
32730 *  NOTE: To write to the MIX_IRING1 register, a device would issue an IOBST directed at the MIO.
32731 *        To read the MIX_IRING1 register, a device would issue an IOBLD64 directed at the MIO.
32732 */
32733typedef union
32734{
32735    uint64_t u64;
32736    struct cvmx_mixx_iring1_s
32737    {
32738#if __BYTE_ORDER == __BIG_ENDIAN
32739        uint64_t reserved_60_63          : 4;
32740        uint64_t isize                   : 20;      /**< Represents the Inbound Ring Buffer's Size(in 8B
32741                                                         words). The ring can be as large as 1M entries.
32742                                                         NOTE: This CSR MUST BE setup written by SW poweron
32743                                                         (when IDBELL/IRCNT=0). */
32744        uint64_t reserved_36_39          : 4;
32745        uint64_t ibase                   : 33;      /**< Represents the 8B-aligned base address of the first
32746                                                         Inbound Ring entry in system memory.
32747                                                         NOTE: SW MUST ONLY write to this register during
32748                                                         power-on/boot code. */
32749        uint64_t reserved_0_2            : 3;
32750#else
32751        uint64_t reserved_0_2            : 3;
32752        uint64_t ibase                   : 33;
32753        uint64_t reserved_36_39          : 4;
32754        uint64_t isize                   : 20;
32755        uint64_t reserved_60_63          : 4;
32756#endif
32757    } s;
32758    struct cvmx_mixx_iring1_s            cn52xx;
32759    struct cvmx_mixx_iring1_s            cn52xxp1;
32760    struct cvmx_mixx_iring1_s            cn56xx;
32761    struct cvmx_mixx_iring1_s            cn56xxp1;
32762} cvmx_mixx_iring1_t;
32763
32764
32765/**
32766 * cvmx_mix#_iring2
32767 *
32768 * MIX_IRING2 = MIX Inbound Ring Register \#2
32769 *
32770 * Description:
32771 *  NOTE: To write to the MIX_IRING2 register, a device would issue an IOBST directed at the MIO.
32772 *        To read the MIX_IRING2 register, a device would issue an IOBLD64 directed at the MIO.
32773 */
32774typedef union
32775{
32776    uint64_t u64;
32777    struct cvmx_mixx_iring2_s
32778    {
32779#if __BYTE_ORDER == __BIG_ENDIAN
32780        uint64_t reserved_52_63          : 12;
32781        uint64_t itlptr                  : 20;      /**< The Inbound Ring Tail Pointer selects the I-Ring
32782                                                         Entry that the HW will process next. After the HW
32783                                                         completes receiving an inbound packet, it increments
32784                                                         the I-Ring Tail Pointer. [NOTE: The I-Ring Tail
32785                                                         Pointer HW increment is always modulo ISIZE.
32786                                                         NOTE: This field is 'read-only' to SW. */
32787        uint64_t reserved_20_31          : 12;
32788        uint64_t idbell                  : 20;      /**< Represents the cumulative total of pending
32789                                                         Inbound Ring Buffer Entries. Each I-Ring
32790                                                         Buffer Entry contains 1) an L2/DRAM byte pointer
32791                                                         along with a 2) a Byte Length.
32792                                                         After SW inserts a new entry into the I-Ring Buffer,
32793                                                         it "rings the doorbell for the inbound ring". When
32794                                                         the MIX HW receives the doorbell ring, it advances
32795                                                         the doorbell count for the I-Ring.
32796                                                         SW must never cause the doorbell count for the
32797                                                         I-Ring to exceed the size of the I-ring(ISIZE).
32798                                                         A read of the CSR indicates the current doorbell
32799                                                         count. */
32800#else
32801        uint64_t idbell                  : 20;
32802        uint64_t reserved_20_31          : 12;
32803        uint64_t itlptr                  : 20;
32804        uint64_t reserved_52_63          : 12;
32805#endif
32806    } s;
32807    struct cvmx_mixx_iring2_s            cn52xx;
32808    struct cvmx_mixx_iring2_s            cn52xxp1;
32809    struct cvmx_mixx_iring2_s            cn56xx;
32810    struct cvmx_mixx_iring2_s            cn56xxp1;
32811} cvmx_mixx_iring2_t;
32812
32813
32814/**
32815 * cvmx_mix#_isr
32816 *
32817 * MIX_ISR = MIX Interrupt/Status Register
32818 *
32819 * Description:
32820 *  NOTE: To write to the MIX_ISR register, a device would issue an IOBST directed at the MIO.
32821 *        To read the MIX_ISR register, a device would issue an IOBLD64 directed at the MIO.
32822 */
32823typedef union
32824{
32825    uint64_t u64;
32826    struct cvmx_mixx_isr_s
32827    {
32828#if __BYTE_ORDER == __BIG_ENDIAN
32829        uint64_t reserved_7_63           : 57;
32830        uint64_t orun                    : 1;       /**< ORCNT UnderFlow Detected
32831                                                         If SW writes a larger value than what is currently
32832                                                         in the MIX_ORCNT[ORCNT], then HW will report the
32833                                                         underflow condition.
32834                                                         NOTE: The MIX_ORCNT[IOCNT] will clamp to to zero.
32835                                                         NOTE: If an ORUN underflow condition is detected,
32836                                                         the integrity of the MIX/AGL HW state has
32837                                                         been compromised. To recover, SW must issue a
32838                                                         software reset sequence (see: MIX_CTL[RESET] */
32839        uint64_t irun                    : 1;       /**< IRCNT UnderFlow Detected
32840                                                         If SW writes a larger value than what is currently
32841                                                         in the MIX_IRCNT[IRCNT], then HW will report the
32842                                                         underflow condition.
32843                                                         NOTE: The MIX_IRCNT[IRCNT] will clamp to to zero.
32844                                                         NOTE: If an IRUN underflow condition is detected,
32845                                                         the integrity of the MIX/AGL HW state has
32846                                                         been compromised. To recover, SW must issue a
32847                                                         software reset sequence (see: MIX_CTL[RESET] */
32848        uint64_t data_drp                : 1;       /**< Data was dropped due to RX FIFO full
32849                                                         If this does occur, the DATA_DRP is set and the
32850                                                         CIU_INTx_SUM0,4[MII] bits are set.
32851                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32852                                                         and the local interrupt mask bit(DATA_DRPENA) is set, than an
32853                                                         interrupt is reported for this event. */
32854        uint64_t irthresh                : 1;       /**< Inbound Ring Packet Threshold Exceeded
32855                                                         When the pending \#inbound packets in system
32856                                                         memory(IRCNT) has exceeded a programmable threshold
32857                                                         (IRHWM), then this bit is set. If this does occur,
32858                                                         the IRTHRESH is set and the CIU_INTx_SUM0,4[MII] bits
32859                                                         are set if ((MIX_ISR & MIX_INTENA) != 0)).
32860                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32861                                                         and the local interrupt mask bit(ITHENA) is set, than an
32862                                                         interrupt is reported for this event. */
32863        uint64_t orthresh                : 1;       /**< Outbound Ring Packet Threshold Exceeded
32864                                                         When the pending \#outbound packets in system
32865                                                         memory(ORCNT) has exceeded a programmable threshold
32866                                                         (ORHWM), then this bit is set. If this does occur,
32867                                                         the ORTHRESH is set and the CIU_INTx_SUM0,4[MII] bits
32868                                                         are set if ((MIX_ISR & MIX_INTENA) != 0)).
32869                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32870                                                         and the local interrupt mask bit(OTHENA) is set, than an
32871                                                         interrupt is reported for this event. */
32872        uint64_t idblovf                 : 1;       /**< Inbound DoorBell(IDBELL) Overflow Detected
32873                                                         If SW attempts to write to the MIX_IRING2[IDBELL]
32874                                                         with a value greater than the remaining \#of
32875                                                         I-Ring Buffer Entries (MIX_REMCNT[IREMCNT]), then
32876                                                         the following occurs:
32877                                                         1) The  MIX_IRING2[IDBELL] write is IGNORED
32878                                                         2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII]
32879                                                            bits are set if ((MIX_ISR & MIX_INTENA) != 0)).
32880                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32881                                                         and the local interrupt mask bit(IVFENA) is set, than an
32882                                                         interrupt is reported for this event.
32883                                                         SW should keep track of the \#I-Ring Entries in use
32884                                                         (ie: cumulative \# of IDBELL writes),  and ensure that
32885                                                         future IDBELL writes don't exceed the size of the
32886                                                         I-Ring Buffer (MIX_IRING2[ISIZE]).
32887                                                         SW must reclaim I-Ring Entries by keeping track of the
32888                                                         \#IRing-Entries, and writing to the MIX_IRCNT[IRCNT].
32889                                                         NOTE: The MIX_IRCNT[IRCNT] register represents the
32890                                                         total \#packets(not IRing Entries) and SW must further
32891                                                         keep track of the \# of I-Ring Entries associated with
32892                                                         each packet as they are processed.
32893                                                         NOTE: There is no recovery from an IDBLOVF Interrupt.
32894                                                         If it occurs, it's an indication that SW has
32895                                                         overwritten the I-Ring buffer, and the only recourse
32896                                                         is a HW reset. */
32897        uint64_t odblovf                 : 1;       /**< Outbound DoorBell(ODBELL) Overflow Detected
32898                                                         If SW attempts to write to the MIX_ORING2[ODBELL]
32899                                                         with a value greater than the remaining \#of
32900                                                         O-Ring Buffer Entries (MIX_REMCNT[OREMCNT]), then
32901                                                         the following occurs:
32902                                                         1) The  MIX_ORING2[ODBELL] write is IGNORED
32903                                                         2) The ODBLOVF is set and the CIU_INTx_SUM0,4[MII]
32904                                                            bits are set if ((MIX_ISR & MIX_INTENA) != 0)).
32905                                                         If both the global interrupt mask bits (CIU_INTx_EN*[MII])
32906                                                         and the local interrupt mask bit(OVFENA) is set, than an
32907                                                         interrupt is reported for this event.
32908                                                         SW should keep track of the \#I-Ring Entries in use
32909                                                         (ie: cumulative \# of ODBELL writes),  and ensure that
32910                                                         future ODBELL writes don't exceed the size of the
32911                                                         O-Ring Buffer (MIX_ORING2[OSIZE]).
32912                                                         SW must reclaim O-Ring Entries by writing to the
32913                                                         MIX_ORCNT[ORCNT]. .
32914                                                         NOTE: There is no recovery from an ODBLOVF Interrupt.
32915                                                         If it occurs, it's an indication that SW has
32916                                                         overwritten the O-Ring buffer, and the only recourse
32917                                                         is a HW reset. */
32918#else
32919        uint64_t odblovf                 : 1;
32920        uint64_t idblovf                 : 1;
32921        uint64_t orthresh                : 1;
32922        uint64_t irthresh                : 1;
32923        uint64_t data_drp                : 1;
32924        uint64_t irun                    : 1;
32925        uint64_t orun                    : 1;
32926        uint64_t reserved_7_63           : 57;
32927#endif
32928    } s;
32929    struct cvmx_mixx_isr_s               cn52xx;
32930    struct cvmx_mixx_isr_s               cn52xxp1;
32931    struct cvmx_mixx_isr_s               cn56xx;
32932    struct cvmx_mixx_isr_s               cn56xxp1;
32933} cvmx_mixx_isr_t;
32934
32935
32936/**
32937 * cvmx_mix#_orcnt
32938 *
32939 * MIX_ORCNT = MIX O-Ring Packets Sent Counter
32940 *
32941 * Description:
32942 *  NOTE: To write to the MIX_ORCNT register, a device would issue an IOBST directed at the MIO.
32943 *        To read the MIX_ORCNT register, a device would issue an IOBLD64 directed at the MIO.
32944 */
32945typedef union
32946{
32947    uint64_t u64;
32948    struct cvmx_mixx_orcnt_s
32949    {
32950#if __BYTE_ORDER == __BIG_ENDIAN
32951        uint64_t reserved_20_63          : 44;
32952        uint64_t orcnt                   : 20;      /**< Pending \# of O-Ring Packets.
32953                                                         Whenever HW removes a packet from the O-Ring, it
32954                                                         increments the ORCNT (to indicate to SW the \# of
32955                                                         Output packets in system memory that can be reclaimed).
32956                                                         Reads of ORCNT return the current count.
32957                                                         Writes of ORCNT decrement the count by the value
32958                                                         written.
32959                                                         This register is used to generate interrupts to alert
32960                                                         SW of pending outbound MIX packets that have been
32961                                                         removed from system memory. (see MIX_ISR[ORTHRESH]
32962                                                         description for more details).
32963                                                         NOTE: For outbound packets, the \# of O-Ring Packets
32964                                                         is equal to the \# of O-Ring Entries. */
32965#else
32966        uint64_t orcnt                   : 20;
32967        uint64_t reserved_20_63          : 44;
32968#endif
32969    } s;
32970    struct cvmx_mixx_orcnt_s             cn52xx;
32971    struct cvmx_mixx_orcnt_s             cn52xxp1;
32972    struct cvmx_mixx_orcnt_s             cn56xx;
32973    struct cvmx_mixx_orcnt_s             cn56xxp1;
32974} cvmx_mixx_orcnt_t;
32975
32976
32977/**
32978 * cvmx_mix#_orhwm
32979 *
32980 * MIX_ORHWM = MIX O-Ring High-Water Mark Threshold Register
32981 *
32982 * Description:
32983 *  NOTE: To write to the MIX_ORHWM register, a device would issue an IOBST directed at the MIO.
32984 *        To read the MIX_ORHWM register, a device would issue an IOBLD64 directed at the MIO.
32985 */
32986typedef union
32987{
32988    uint64_t u64;
32989    struct cvmx_mixx_orhwm_s
32990    {
32991#if __BYTE_ORDER == __BIG_ENDIAN
32992        uint64_t reserved_20_63          : 44;
32993        uint64_t orhwm                   : 20;      /**< O-Ring Entry High Water Mark Threshold.
32994                                                         Used to determine when the \# of Outbound packets
32995                                                         in system memory that can be reclaimed
32996                                                         (MIX_ORCNT[ORCNT]) exceeds this ORHWM threshold.
32997                                                         NOTE: The power-on value of the CIU_INTx_EN*[MII]
32998                                                         interrupt enable bits is zero and must be enabled
32999                                                         to allow interrupts to be reported. */
33000#else
33001        uint64_t orhwm                   : 20;
33002        uint64_t reserved_20_63          : 44;
33003#endif
33004    } s;
33005    struct cvmx_mixx_orhwm_s             cn52xx;
33006    struct cvmx_mixx_orhwm_s             cn52xxp1;
33007    struct cvmx_mixx_orhwm_s             cn56xx;
33008    struct cvmx_mixx_orhwm_s             cn56xxp1;
33009} cvmx_mixx_orhwm_t;
33010
33011
33012/**
33013 * cvmx_mix#_oring1
33014 *
33015 * MIX_ORING1 = MIX Outbound Ring Register \#1
33016 *
33017 * Description:
33018 *  NOTE: To write to the MIX_ORING1 register, a device would issue an IOBST directed at the MIO.
33019 *        To read the MIX_ORING1 register, a device would issue an IOBLD64 directed at the MIO.
33020 */
33021typedef union
33022{
33023    uint64_t u64;
33024    struct cvmx_mixx_oring1_s
33025    {
33026#if __BYTE_ORDER == __BIG_ENDIAN
33027        uint64_t reserved_60_63          : 4;
33028        uint64_t osize                   : 20;      /**< Represents the Outbound Ring Buffer's Size(in 8B
33029                                                         words). The ring can be as large as 1M entries.
33030                                                         NOTE: This CSR MUST BE setup written by SW poweron
33031                                                         (when ODBELL/ORCNT=0). */
33032        uint64_t reserved_36_39          : 4;
33033        uint64_t obase                   : 33;      /**< Represents the 8B-aligned base address of the first
33034                                                         Outbound Ring(O-Ring) Entry in system memory.
33035                                                         NOTE: SW MUST ONLY write to this register during
33036                                                         power-on/boot code. */
33037        uint64_t reserved_0_2            : 3;
33038#else
33039        uint64_t reserved_0_2            : 3;
33040        uint64_t obase                   : 33;
33041        uint64_t reserved_36_39          : 4;
33042        uint64_t osize                   : 20;
33043        uint64_t reserved_60_63          : 4;
33044#endif
33045    } s;
33046    struct cvmx_mixx_oring1_s            cn52xx;
33047    struct cvmx_mixx_oring1_s            cn52xxp1;
33048    struct cvmx_mixx_oring1_s            cn56xx;
33049    struct cvmx_mixx_oring1_s            cn56xxp1;
33050} cvmx_mixx_oring1_t;
33051
33052
33053/**
33054 * cvmx_mix#_oring2
33055 *
33056 * MIX_ORING2 = MIX Outbound Ring Register \#2
33057 *
33058 * Description:
33059 *  NOTE: To write to the MIX_ORING2 register, a device would issue an IOBST directed at the MIO.
33060 *        To read the MIX_ORING2 register, a device would issue an IOBLD64 directed at the MIO.
33061 */
33062typedef union
33063{
33064    uint64_t u64;
33065    struct cvmx_mixx_oring2_s
33066    {
33067#if __BYTE_ORDER == __BIG_ENDIAN
33068        uint64_t reserved_52_63          : 12;
33069        uint64_t otlptr                  : 20;      /**< The Outbound Ring Tail Pointer selects the O-Ring
33070                                                         Entry that the HW will process next. After the HW
33071                                                         completes sending an outbound packet, it increments
33072                                                         the O-Ring Tail Pointer. [NOTE: The O-Ring Tail
33073                                                         Pointer HW increment is always modulo
33074                                                         MIX_ORING2[OSIZE].
33075                                                         NOTE: This field is 'read-only' to SW. */
33076        uint64_t reserved_20_31          : 12;
33077        uint64_t odbell                  : 20;      /**< Represents the cumulative total of pending
33078                                                         Outbound Ring(O-Ring) Buffer Entries. Each O-Ring
33079                                                         Buffer Entry contains 1) an L2/DRAM byte pointer
33080                                                         along with a 2) a Byte Length.
33081                                                         After SW inserts new entries into the O-Ring Buffer,
33082                                                         it "rings the doorbell with the count of the newly
33083                                                         inserted entries". When the MIX HW receives the
33084                                                         doorbell ring, it increments the current doorbell
33085                                                         count by the CSR write value.
33086                                                         SW must never cause the doorbell count for the
33087                                                         O-Ring to exceed the size of the ring(OSIZE).
33088                                                         A read of the CSR indicates the current doorbell
33089                                                         count. */
33090#else
33091        uint64_t odbell                  : 20;
33092        uint64_t reserved_20_31          : 12;
33093        uint64_t otlptr                  : 20;
33094        uint64_t reserved_52_63          : 12;
33095#endif
33096    } s;
33097    struct cvmx_mixx_oring2_s            cn52xx;
33098    struct cvmx_mixx_oring2_s            cn52xxp1;
33099    struct cvmx_mixx_oring2_s            cn56xx;
33100    struct cvmx_mixx_oring2_s            cn56xxp1;
33101} cvmx_mixx_oring2_t;
33102
33103
33104/**
33105 * cvmx_mix#_remcnt
33106 *
33107 * MIX_REMCNT = MIX Ring Buffer Remainder Counts (useful for HW debug only)
33108 *
33109 * Description:
33110 *  NOTE: To read the MIX_REMCNT register, a device would issue an IOBLD64 directed at the MIO.
33111 */
33112typedef union
33113{
33114    uint64_t u64;
33115    struct cvmx_mixx_remcnt_s
33116    {
33117#if __BYTE_ORDER == __BIG_ENDIAN
33118        uint64_t reserved_52_63          : 12;
33119        uint64_t iremcnt                 : 20;      /**< Remaining I-Ring Buffer Count
33120                                                         Reflects the \# of unused/remaining I-Ring Entries
33121                                                         that HW  currently detects in the I-Ring Buffer.
33122                                                         HW uses this value to detect I-Ring Doorbell overflows.
33123                                                         (see: MIX_ISR[IDBLOVF])
33124                                                         When SW writes the MIX_IRING1[ISIZE], the IREMCNT
33125                                                         is loaded with MIX_IRING2[ISIZE] value. (NOTE: ISIZE should only
33126                                                         be written at power-on, when it's known that there are
33127                                                         no I-Ring Entries currently in use by HW).
33128                                                         When SW writes to the IDBELL register, the IREMCNT
33129                                                         is decremented by the CSR write value.
33130                                                         When HW issues an IRing Write Request(onto NCB Bus),
33131                                                         the IREMCNT is incremented by 1. */
33132        uint64_t reserved_20_31          : 12;
33133        uint64_t oremcnt                 : 20;      /**< Remaining O-Ring Buffer Count
33134                                                         Reflects the \# of unused/remaining O-Ring Entries
33135                                                         that HW  currently detects in the O-Ring Buffer.
33136                                                         HW uses this value to detect O-Ring Doorbell overflows.
33137                                                         (see: MIX_ISR[ODBLOVF])
33138                                                         When SW writes the MIX_IRING1[OSIZE], the OREMCNT
33139                                                         is loaded with MIX_ORING2[OSIZE] value. (NOTE: OSIZE should only
33140                                                         be written at power-on, when it's known that there are
33141                                                         no O-Ring Entries currently in use by HW).
33142                                                         When SW writes to the ODBELL register, the OREMCNT
33143                                                         is decremented by the CSR write value.
33144                                                         When SW writes to MIX_[OREMCNT], the OREMCNT is decremented
33145                                                         by the CSR write value. */
33146#else
33147        uint64_t oremcnt                 : 20;
33148        uint64_t reserved_20_31          : 12;
33149        uint64_t iremcnt                 : 20;
33150        uint64_t reserved_52_63          : 12;
33151#endif
33152    } s;
33153    struct cvmx_mixx_remcnt_s            cn52xx;
33154    struct cvmx_mixx_remcnt_s            cn52xxp1;
33155    struct cvmx_mixx_remcnt_s            cn56xx;
33156    struct cvmx_mixx_remcnt_s            cn56xxp1;
33157} cvmx_mixx_remcnt_t;
33158
33159
33160/**
33161 * cvmx_mpi_cfg
33162 */
33163typedef union
33164{
33165    uint64_t u64;
33166    struct cvmx_mpi_cfg_s
33167    {
33168#if __BYTE_ORDER == __BIG_ENDIAN
33169        uint64_t reserved_29_63          : 35;
33170        uint64_t clkdiv                  : 13;      /**< Fsclk = Feclk / (2 * CLKDIV)
33171                                                         CLKDIV = Feclk / (2 * Fsclk) */
33172        uint64_t reserved_12_15          : 4;
33173        uint64_t cslate                  : 1;       /**< If 0, MPI_CS asserts 1/2 SCLK before transaction
33174                                                            1, MPI_CS assert coincident with transaction
33175                                                         NOTE: only used if CSENA == 1 */
33176        uint64_t tritx                   : 1;       /**< If 0, MPI_TX pin is driven when slave is not
33177                                                               expected to be driving
33178                                                            1, MPI_TX pin is tristated when not transmitting
33179                                                         NOTE: only used when WIREOR==1 */
33180        uint64_t idleclks                : 2;       /**< Guarantee IDLECLKS idle sclk cycles between
33181                                                         commands. */
33182        uint64_t cshi                    : 1;       /**< If 0, CS is low asserted
33183                                                         1, CS is high asserted */
33184        uint64_t csena                   : 1;       /**< If 0, the MPI_CS is a GPIO, not used by MPI_TX
33185                                                         1, CS is driven per MPI_TX intruction */
33186        uint64_t int_ena                 : 1;       /**< If 0, polling is required
33187                                                         1, MPI engine interrupts X end of transaction */
33188        uint64_t lsbfirst                : 1;       /**< If 0, shift MSB first
33189                                                         1, shift LSB first */
33190        uint64_t wireor                  : 1;       /**< If 0, MPI_TX and MPI_RX are separate wires (SPI)
33191                                                               MPI_TX pin is always driven
33192                                                            1, MPI_TX/RX is all from MPI_TX pin (MPI)
33193                                                               MPI_TX pin is tristated when not transmitting
33194                                                         NOTE: if WIREOR==1, MPI_RX pin is not used by the
33195                                                               MPI engine */
33196        uint64_t clk_cont                : 1;       /**< If 0, clock idles to value given by IDLELO after
33197                                                            completion of MPI transaction
33198                                                         1, clock never idles, requires CS deassertion
33199                                                            assertion between commands */
33200        uint64_t idlelo                  : 1;       /**< If 0, MPI_CLK idles high, 1st transition is hi->lo
33201                                                         1, MPI_CLK idles low, 1st transition is lo->hi */
33202        uint64_t enable                  : 1;       /**< If 0, all MPI pins are GPIOs
33203                                                         1, MPI_CLK, MPI_CS, and MPI_TX are driven */
33204#else
33205        uint64_t enable                  : 1;
33206        uint64_t idlelo                  : 1;
33207        uint64_t clk_cont                : 1;
33208        uint64_t wireor                  : 1;
33209        uint64_t lsbfirst                : 1;
33210        uint64_t int_ena                 : 1;
33211        uint64_t csena                   : 1;
33212        uint64_t cshi                    : 1;
33213        uint64_t idleclks                : 2;
33214        uint64_t tritx                   : 1;
33215        uint64_t cslate                  : 1;
33216        uint64_t reserved_12_15          : 4;
33217        uint64_t clkdiv                  : 13;
33218        uint64_t reserved_29_63          : 35;
33219#endif
33220    } s;
33221    struct cvmx_mpi_cfg_s                cn30xx;
33222    struct cvmx_mpi_cfg_cn31xx
33223    {
33224#if __BYTE_ORDER == __BIG_ENDIAN
33225        uint64_t reserved_29_63          : 35;
33226        uint64_t clkdiv                  : 13;      /**< Fsclk = Feclk / (2 * CLKDIV)
33227                                                         CLKDIV = Feclk / (2 * Fsclk) */
33228        uint64_t reserved_11_15          : 5;
33229        uint64_t tritx                   : 1;       /**< If 0, MPI_TX pin is driven when slave is not
33230                                                               expected to be driving
33231                                                            1, MPI_TX pin is tristated when not transmitting
33232                                                         NOTE: only used when WIREOR==1 */
33233        uint64_t idleclks                : 2;       /**< Guarantee IDLECLKS idle sclk cycles between
33234                                                         commands. */
33235        uint64_t cshi                    : 1;       /**< If 0, CS is low asserted
33236                                                         1, CS is high asserted */
33237        uint64_t csena                   : 1;       /**< If 0, the MPI_CS is a GPIO, not used by MPI_TX
33238                                                         1, CS is driven per MPI_TX intruction */
33239        uint64_t int_ena                 : 1;       /**< If 0, polling is required
33240                                                         1, MPI engine interrupts X end of transaction */
33241        uint64_t lsbfirst                : 1;       /**< If 0, shift MSB first
33242                                                         1, shift LSB first */
33243        uint64_t wireor                  : 1;       /**< If 0, MPI_TX and MPI_RX are separate wires (SPI)
33244                                                               MPI_TX pin is always driven
33245                                                            1, MPI_TX/RX is all from MPI_TX pin (MPI)
33246                                                               MPI_TX pin is tristated when not transmitting
33247                                                         NOTE: if WIREOR==1, MPI_RX pin is not used by the
33248                                                               MPI engine */
33249        uint64_t clk_cont                : 1;       /**< If 0, clock idles to value given by IDLELO after
33250                                                            completion of MPI transaction
33251                                                         1, clock never idles, requires CS deassertion
33252                                                            assertion between commands */
33253        uint64_t idlelo                  : 1;       /**< If 0, MPI_CLK idles high, 1st transition is hi->lo
33254                                                         1, MPI_CLK idles low, 1st transition is lo->hi */
33255        uint64_t enable                  : 1;       /**< If 0, all MPI pins are GPIOs
33256                                                         1, MPI_CLK, MPI_CS, and MPI_TX are driven */
33257#else
33258        uint64_t enable                  : 1;
33259        uint64_t idlelo                  : 1;
33260        uint64_t clk_cont                : 1;
33261        uint64_t wireor                  : 1;
33262        uint64_t lsbfirst                : 1;
33263        uint64_t int_ena                 : 1;
33264        uint64_t csena                   : 1;
33265        uint64_t cshi                    : 1;
33266        uint64_t idleclks                : 2;
33267        uint64_t tritx                   : 1;
33268        uint64_t reserved_11_15          : 5;
33269        uint64_t clkdiv                  : 13;
33270        uint64_t reserved_29_63          : 35;
33271#endif
33272    } cn31xx;
33273    struct cvmx_mpi_cfg_s                cn50xx;
33274} cvmx_mpi_cfg_t;
33275
33276
33277/**
33278 * cvmx_mpi_dat#
33279 */
33280typedef union
33281{
33282    uint64_t u64;
33283    struct cvmx_mpi_datx_s
33284    {
33285#if __BYTE_ORDER == __BIG_ENDIAN
33286        uint64_t reserved_8_63           : 56;
33287        uint64_t data                    : 8;       /**< Data to transmit/received */
33288#else
33289        uint64_t data                    : 8;
33290        uint64_t reserved_8_63           : 56;
33291#endif
33292    } s;
33293    struct cvmx_mpi_datx_s               cn30xx;
33294    struct cvmx_mpi_datx_s               cn31xx;
33295    struct cvmx_mpi_datx_s               cn50xx;
33296} cvmx_mpi_datx_t;
33297
33298
33299/**
33300 * cvmx_mpi_sts
33301 */
33302typedef union
33303{
33304    uint64_t u64;
33305    struct cvmx_mpi_sts_s
33306    {
33307#if __BYTE_ORDER == __BIG_ENDIAN
33308        uint64_t reserved_13_63          : 51;
33309        uint64_t rxnum                   : 5;       /**< Number of bytes written for transaction */
33310        uint64_t reserved_1_7            : 7;
33311        uint64_t busy                    : 1;       /**< If 0, no MPI transaction in progress
33312                                                         1, MPI engine is processing a transaction */
33313#else
33314        uint64_t busy                    : 1;
33315        uint64_t reserved_1_7            : 7;
33316        uint64_t rxnum                   : 5;
33317        uint64_t reserved_13_63          : 51;
33318#endif
33319    } s;
33320    struct cvmx_mpi_sts_s                cn30xx;
33321    struct cvmx_mpi_sts_s                cn31xx;
33322    struct cvmx_mpi_sts_s                cn50xx;
33323} cvmx_mpi_sts_t;
33324
33325
33326/**
33327 * cvmx_mpi_tx
33328 */
33329typedef union
33330{
33331    uint64_t u64;
33332    struct cvmx_mpi_tx_s
33333    {
33334#if __BYTE_ORDER == __BIG_ENDIAN
33335        uint64_t reserved_17_63          : 47;
33336        uint64_t leavecs                 : 1;       /**< If 0, deassert CS after transaction is done
33337                                                         1, leave CS asserted after transactrion is done */
33338        uint64_t reserved_13_15          : 3;
33339        uint64_t txnum                   : 5;       /**< Number of bytes to transmit */
33340        uint64_t reserved_5_7            : 3;
33341        uint64_t totnum                  : 5;       /**< Number of bytes to shift (transmit + receive) */
33342#else
33343        uint64_t totnum                  : 5;
33344        uint64_t reserved_5_7            : 3;
33345        uint64_t txnum                   : 5;
33346        uint64_t reserved_13_15          : 3;
33347        uint64_t leavecs                 : 1;
33348        uint64_t reserved_17_63          : 47;
33349#endif
33350    } s;
33351    struct cvmx_mpi_tx_s                 cn30xx;
33352    struct cvmx_mpi_tx_s                 cn31xx;
33353    struct cvmx_mpi_tx_s                 cn50xx;
33354} cvmx_mpi_tx_t;
33355
33356
33357/**
33358 * cvmx_ndf_bt_pg_info
33359 *
33360 * Notes:
33361 * NDF_BT_PG_INFO provides page size and number of column plus row address cycles information. SW writes to this CSR
33362 * during boot from Nand Flash. Additionally SW also writes the multiplier value for timing parameters. This value is
33363 * used during boot, in the SET_TM_PARAM command. This information is used only by the boot load state machine and is
33364 * otherwise a don't care, once boot is disabled. Also, boot dma's do not use this value.
33365 *
33366 * Bytes per Nand Flash page = 2 ** (SIZE + 1) times 256 bytes.
33367 * 512, 1k, 2k, 4k, 8k, 16k, 32k and 64k are legal bytes per page values
33368 *
33369 * Legal values for ADR_CYC field are 3 through 8. SW CSR writes with a value less than 3 will write a 3 to this
33370 * field, and a SW CSR write with a value greater than 8, will write an 8 to this field.
33371 *
33372 * Like all NDF_... registers, 64-bit operations must be used to access this register
33373 */
33374typedef union
33375{
33376    uint64_t u64;
33377    struct cvmx_ndf_bt_pg_info_s
33378    {
33379#if __BYTE_ORDER == __BIG_ENDIAN
33380        uint64_t reserved_11_63          : 53;
33381        uint64_t t_mult                  : 4;       /**< Boot time TIM_MULT[3:0] field of SET__TM_PAR[63:0]
33382                                                         command */
33383        uint64_t adr_cyc                 : 4;       /**< # of column address cycles */
33384        uint64_t size                    : 3;       /**< bytes per page in the nand device */
33385#else
33386        uint64_t size                    : 3;
33387        uint64_t adr_cyc                 : 4;
33388        uint64_t t_mult                  : 4;
33389        uint64_t reserved_11_63          : 53;
33390#endif
33391    } s;
33392    struct cvmx_ndf_bt_pg_info_s         cn52xx;
33393} cvmx_ndf_bt_pg_info_t;
33394
33395
33396/**
33397 * cvmx_ndf_cmd
33398 *
33399 * Notes:
33400 * When SW reads this csr, RD_VAL bit in NDF_MISC csr is cleared to 0. SW must always write all 8 bytes whenever it writes
33401 * this csr. If there are fewer than 8 bytes left in the command sequence that SW wants the NAND flash controller to execute, it
33402 * must insert Idle (WAIT) commands to make up 8 bytes. SW also must ensure there is enough vacancy in the command fifo to accept these
33403 * 8 bytes, by first reading the FR_BYT field in the NDF_MISC csr.
33404 *
33405 * Like all NDF_... registers, 64-bit operations must be used to access this register
33406 */
33407typedef union
33408{
33409    uint64_t u64;
33410    struct cvmx_ndf_cmd_s
33411    {
33412#if __BYTE_ORDER == __BIG_ENDIAN
33413        uint64_t nf_cmd                  : 64;      /**< 8 Command Bytes */
33414#else
33415        uint64_t nf_cmd                  : 64;
33416#endif
33417    } s;
33418    struct cvmx_ndf_cmd_s                cn52xx;
33419} cvmx_ndf_cmd_t;
33420
33421
33422/**
33423 * cvmx_ndf_drbell
33424 *
33425 * Notes:
33426 * SW csr writes will increment CNT by the signed 8 bit value being written. SW csr reads return the current CNT value.
33427 * HW will also modify the value of the CNT field. Everytime HW executes a BUS_ACQ[15:0] command, to arbitrate and win the
33428 * flash bus, it decrements the CNT field by 1. If the CNT field is already 0 or negative, HW command execution unit will
33429 * stall when it fetches the new BUS_ACQ[15:0] command, from the command fifo. Only when the SW writes to this CSR with a
33430 * non-zero data value, can the execution unit come out of the stalled condition, and resume execution.
33431 *
33432 * The intended use of this doorbell CSR is to control execution of the Nand Flash commands. The NDF execution unit
33433 * has to arbitrate for the flash bus, before it can enable a Nand Flash device connected to the Octeon chip, by
33434 * asserting the device's chip enable. Therefore SW should first load the command fifo, with a full sequence of
33435 * commands to perform a Nand Flash device task. This command sequence will start with a bus acquire command and
33436 * the last command in the sequence will be a bus release command. The execution unit will start execution of
33437 * the sequence only if the [CNT] field is non-zero when it fetches the bus acquire command, which is the first
33438 * command in this sequence. SW can also, load multiple such sequences, each starting with a chip enable command
33439 * and ending with a chip disable command, and then write a non-zero data value to this csr to increment the
33440 * CNT field by the number of the command sequences, loaded to the command fifo.
33441 *
33442 * Like all NDF_... registers, 64-bit operations must be used to access this register
33443 */
33444typedef union
33445{
33446    uint64_t u64;
33447    struct cvmx_ndf_drbell_s
33448    {
33449#if __BYTE_ORDER == __BIG_ENDIAN
33450        uint64_t reserved_8_63           : 56;
33451        uint64_t cnt                     : 8;       /**< Doorbell count register, 2's complement 8 bit value */
33452#else
33453        uint64_t cnt                     : 8;
33454        uint64_t reserved_8_63           : 56;
33455#endif
33456    } s;
33457    struct cvmx_ndf_drbell_s             cn52xx;
33458} cvmx_ndf_drbell_t;
33459
33460
33461/**
33462 * cvmx_ndf_ecc_cnt
33463 *
33464 * Notes:
33465 * XOR_ECC[31:8] = [ecc_gen_byt258, ecc_gen_byt257, ecc_gen_byt256] xor [ecc_258, ecc_257, ecc_256]
33466 *         ecc_258, ecc_257 and ecc_256 are bytes stored in Nand Flash and read out during boot
33467 *         ecc_gen_byt258, ecc_gen_byt257, ecc_gen_byt256 are generated from data read out from Nand Flash
33468 *
33469 * Like all NDF_... registers, 64-bit operations must be used to access this register
33470 */
33471typedef union
33472{
33473    uint64_t u64;
33474    struct cvmx_ndf_ecc_cnt_s
33475    {
33476#if __BYTE_ORDER == __BIG_ENDIAN
33477        uint64_t reserved_32_63          : 32;
33478        uint64_t xor_ecc                 : 24;      /**< result of XOR of ecc read bytes and ecc genarated
33479                                                         bytes. The value pertains to the last 1 bit ecc err */
33480        uint64_t ecc_err                 : 8;       /**< Count = \# of 1 bit errors fixed during boot
33481                                                         This count saturates instead of wrapping around. */
33482#else
33483        uint64_t ecc_err                 : 8;
33484        uint64_t xor_ecc                 : 24;
33485        uint64_t reserved_32_63          : 32;
33486#endif
33487    } s;
33488    struct cvmx_ndf_ecc_cnt_s            cn52xx;
33489} cvmx_ndf_ecc_cnt_t;
33490
33491
33492/**
33493 * cvmx_ndf_int
33494 *
33495 * Notes:
33496 * FULL status is updated when the command fifo becomes full as a result of SW writing a new command to it.
33497 *
33498 * EMPTY status is updated when the command fifo becomes empty as a result of command execution unit fetching the
33499 * last instruction out of the command fifo.
33500 *
33501 * Like all NDF_... registers, 64-bit operations must be used to access this register
33502 */
33503typedef union
33504{
33505    uint64_t u64;
33506    struct cvmx_ndf_int_s
33507    {
33508#if __BYTE_ORDER == __BIG_ENDIAN
33509        uint64_t reserved_7_63           : 57;
33510        uint64_t ovrf                    : 1;       /**< NDF_CMD write when fifo is full. Generally a
33511                                                         fatal error. */
33512        uint64_t ecc_mult                : 1;       /**< Multi bit ECC error detected during boot */
33513        uint64_t ecc_1bit                : 1;       /**< Single bit ECC error detected and fixed during boot */
33514        uint64_t sm_bad                  : 1;       /**< One of the state machines in a bad state */
33515        uint64_t wdog                    : 1;       /**< Watch Dog timer expired during command execution */
33516        uint64_t full                    : 1;       /**< Command fifo is full */
33517        uint64_t empty                   : 1;       /**< Command fifo is empty */
33518#else
33519        uint64_t empty                   : 1;
33520        uint64_t full                    : 1;
33521        uint64_t wdog                    : 1;
33522        uint64_t sm_bad                  : 1;
33523        uint64_t ecc_1bit                : 1;
33524        uint64_t ecc_mult                : 1;
33525        uint64_t ovrf                    : 1;
33526        uint64_t reserved_7_63           : 57;
33527#endif
33528    } s;
33529    struct cvmx_ndf_int_s                cn52xx;
33530} cvmx_ndf_int_t;
33531
33532
33533/**
33534 * cvmx_ndf_int_en
33535 *
33536 * Notes:
33537 * Like all NDF_... registers, 64-bit operations must be used to access this register
33538 *
33539 */
33540typedef union
33541{
33542    uint64_t u64;
33543    struct cvmx_ndf_int_en_s
33544    {
33545#if __BYTE_ORDER == __BIG_ENDIAN
33546        uint64_t reserved_7_63           : 57;
33547        uint64_t ovrf                    : 1;       /**< Wrote to a full command fifo */
33548        uint64_t ecc_mult                : 1;       /**< Multi bit ECC error detected during boot */
33549        uint64_t ecc_1bit                : 1;       /**< Single bit ECC error detected and fixed during boot */
33550        uint64_t sm_bad                  : 1;       /**< One of the state machines in a bad state */
33551        uint64_t wdog                    : 1;       /**< Watch Dog timer expired during command execution */
33552        uint64_t full                    : 1;       /**< Command fifo is full */
33553        uint64_t empty                   : 1;       /**< Command fifo is empty */
33554#else
33555        uint64_t empty                   : 1;
33556        uint64_t full                    : 1;
33557        uint64_t wdog                    : 1;
33558        uint64_t sm_bad                  : 1;
33559        uint64_t ecc_1bit                : 1;
33560        uint64_t ecc_mult                : 1;
33561        uint64_t ovrf                    : 1;
33562        uint64_t reserved_7_63           : 57;
33563#endif
33564    } s;
33565    struct cvmx_ndf_int_en_s             cn52xx;
33566} cvmx_ndf_int_en_t;
33567
33568
33569/**
33570 * cvmx_ndf_misc
33571 *
33572 * Notes:
33573 * NBR_HWM this field specifies the high water mark for the NCB outbound load/store commands receive fifo.
33574 *   the fifo size is 16 entries.
33575 *
33576 * WAIT_CNT this field allows glitch filtering of the WAIT_n input to octeon, from Flash Memory. The count
33577 *   represents number of eclk cycles.
33578 *
33579 * FR_BYT  this field specifies \# of unfilled bytes in the command fifo. Bytes become unfilled as commands
33580 *   complete execution and exit. (fifo is 256 bytes when BT_DIS=0,  and 1536 bytes when BT_DIS=1)
33581 *
33582 * RD_DONE this W1C bit is set to 1 by HW when it reads the last 8 bytes out of the command fifo,
33583 *   in response to RD_CMD bit being set to 1 by SW.
33584 *
33585 * RD_VAL  this read only bit is set to 1 by HW when it reads next 8 bytes from command fifo in response
33586 *   to RD_CMD bit being set to 1. A SW read of NDF_CMD csr clears this bit to 0.
33587 *
33588 * RD_CMD  this R/W bit starts read out from the command fifo, 8 bytes at a time. SW should first read the
33589 *   RD_VAL bit in  this csr to see if next 8 bytes from the command fifo are available in the
33590 *   NDF_CMD csr. All command fifo reads start and end on an 8 byte boundary. A RD_CMD in the
33591 *   middle of command execution will cause the execution to freeze until RD_DONE is set to 1. RD_CMD
33592 *   bit will be cleared on any NDF_CMD csr write by SW.
33593 *
33594 * BT_DMA  this indicates to the NAND flash boot control state machine that boot dma read can begin.
33595 *   SW should set this bit to 1 after SW has loaded the command fifo. HW sets the bit to 0
33596 *   when boot dma command execution is complete. If chip enable 0 is not nand flash, this bit is
33597 *   permanently 1'b0 with SW writes ignored. Whenever BT_DIS=1, this bit will be 0.
33598 *
33599 * BT_DIS  this R/W bit indicates to NAND flash boot control state machine that boot operation has ended.
33600 *   whenever this bit changes from 0 to a 1, the command fifo is emptied as a side effect. This bit must
33601 *   never be set when booting from nand flash and region zero is enabled.
33602 *
33603 * EX_DIS  When 1, command execution stops after completing execution of all commands currently in the command
33604 *   fifo. Once command execution has stopped, and then new commands are loaded into the command fifo, execution
33605 *   will not resume as long as this bit is 1. When this bit is 0, command execution will resume if command fifo
33606 *   is not empty. EX_DIS should be set to 1, during boot i.e. when BT_DIS = 0.
33607 *
33608 * RST_FF  reset command fifo to make it empty, any command inflight is not aborted before reseting
33609 *   the fifo. The fifo comes up empty at the end of power on reset.
33610 *
33611 * Like all NDF_... registers, 64-bit operations must be used to access this register
33612 */
33613typedef union
33614{
33615    uint64_t u64;
33616    struct cvmx_ndf_misc_s
33617    {
33618#if __BYTE_ORDER == __BIG_ENDIAN
33619        uint64_t reserved_27_63          : 37;
33620        uint64_t nbr_hwm                 : 3;       /**< Hi Water mark for NBR fifo or load/stores */
33621        uint64_t wait_cnt                : 6;       /**< WAIT input filter count */
33622        uint64_t fr_byt                  : 11;      /**< Number of unfilled Command fifo bytes */
33623        uint64_t rd_done                 : 1;       /**< This W1C bit is set to 1 by HW when it completes
33624                                                         command fifo read out, in response to RD_CMD */
33625        uint64_t rd_val                  : 1;       /**< This RO bit is set to 1 by HW when it reads next 8
33626                                                         bytes from Command fifo into the NDF_CMD csr
33627                                                         SW reads NDF_CMD csr, HW clears this bit to 0 */
33628        uint64_t rd_cmd                  : 1;       /**< When 1, HW reads out contents of the Command fifo 8
33629                                                         bytes at a time into the NDF_CMD csr */
33630        uint64_t bt_dma                  : 1;       /**< When set to 1, boot time dma is enabled */
33631        uint64_t bt_dis                  : 1;       /**< When boot operation is over SW must set to 1
33632                                                         causes boot state mchines to sleep */
33633        uint64_t ex_dis                  : 1;       /**< When set to 1, suspends execution of commands at
33634                                                         next command in the fifo. */
33635        uint64_t rst_ff                  : 1;       /**< 1=reset command fifo to make it empty,
33636                                                         0=normal operation */
33637#else
33638        uint64_t rst_ff                  : 1;
33639        uint64_t ex_dis                  : 1;
33640        uint64_t bt_dis                  : 1;
33641        uint64_t bt_dma                  : 1;
33642        uint64_t rd_cmd                  : 1;
33643        uint64_t rd_val                  : 1;
33644        uint64_t rd_done                 : 1;
33645        uint64_t fr_byt                  : 11;
33646        uint64_t wait_cnt                : 6;
33647        uint64_t nbr_hwm                 : 3;
33648        uint64_t reserved_27_63          : 37;
33649#endif
33650    } s;
33651    struct cvmx_ndf_misc_s               cn52xx;
33652} cvmx_ndf_misc_t;
33653
33654
33655/**
33656 * cvmx_ndf_st_reg
33657 *
33658 * Notes:
33659 * This CSR aggregates all state machines used in nand flash controller for debug.
33660 * Like all NDF_... registers, 64-bit operations must be used to access this register
33661 */
33662typedef union
33663{
33664    uint64_t u64;
33665    struct cvmx_ndf_st_reg_s
33666    {
33667#if __BYTE_ORDER == __BIG_ENDIAN
33668        uint64_t reserved_16_63          : 48;
33669        uint64_t exe_idle                : 1;       /**< Command Execution status 1=IDLE, 0=Busy
33670                                                         1 means execution of command sequence is complete
33671                                                         and command fifo is empty */
33672        uint64_t exe_sm                  : 4;       /**< Command Execution State machine states */
33673        uint64_t bt_sm                   : 4;       /**< Boot load and Boot dma State machine states */
33674        uint64_t rd_ff_bad               : 1;       /**< CMD fifo read back State machine in bad state */
33675        uint64_t rd_ff                   : 2;       /**< CMD fifo read back State machine states */
33676        uint64_t main_bad                : 1;       /**< Main State machine in bad state */
33677        uint64_t main_sm                 : 3;       /**< Main State machine states */
33678#else
33679        uint64_t main_sm                 : 3;
33680        uint64_t main_bad                : 1;
33681        uint64_t rd_ff                   : 2;
33682        uint64_t rd_ff_bad               : 1;
33683        uint64_t bt_sm                   : 4;
33684        uint64_t exe_sm                  : 4;
33685        uint64_t exe_idle                : 1;
33686        uint64_t reserved_16_63          : 48;
33687#endif
33688    } s;
33689    struct cvmx_ndf_st_reg_s             cn52xx;
33690} cvmx_ndf_st_reg_t;
33691
33692
33693/**
33694 * cvmx_npei_bar1_index#
33695 *
33696 * Total Address is 16Kb; 0x0000 - 0x3fff, 0x000 - 0x7fe(Reg, every other 8B)
33697 *
33698 * General  5kb; 0x0000 - 0x13ff, 0x000 - 0x27e(Reg-General)
33699 * PktMem  10Kb; 0x1400 - 0x3bff, 0x280 - 0x77e(Reg-General-Packet)
33700 * Rsvd     1Kb; 0x3c00 - 0x3fff, 0x780 - 0x7fe(Reg-NCB Only Mode)
33701 *                                   == NPEI_PKT_CNT_INT_ENB[PORT]
33702 *                                   == NPEI_PKT_TIME_INT_ENB[PORT]
33703 *                                   == NPEI_PKT_CNT_INT[PORT]
33704 *                                   == NPEI_PKT_TIME_INT[PORT]
33705 *                                   == NPEI_PKT_PCIE_PORT[PP]
33706 *                                   == NPEI_PKT_SLIST_ROR[ROR]
33707 *                                   == NPEI_PKT_SLIST_ROR[NSR] ?
33708 *                                   == NPEI_PKT_SLIST_ES[ES]
33709 *                                   == NPEI_PKTn_SLIST_BAOFF_DBELL[AOFF]
33710 *                                   == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL]
33711 *                                   == NPEI_PKTn_CNTS[CNT]
33712 * NPEI_CTL_STATUS[OUTn_ENB]         == NPEI_PKT_OUT_ENB[ENB]
33713 * NPEI_BASE_ADDRESS_OUTPUTn[BADDR]  == NPEI_PKTn_SLIST_BADDR[ADDR]
33714 * NPEI_DESC_OUTPUTn[SIZE]           == NPEI_PKTn_SLIST_FIFO_RSIZE[RSIZE]
33715 * NPEI_Pn_DBPAIR_ADDR[NADDR]        == NPEI_PKTn_SLIST_BADDR[ADDR] + NPEI_PKTn_SLIST_BAOFF_DBELL[AOFF]
33716 * NPEI_PKT_CREDITSn[PTR_CNT]        == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL]
33717 * NPEI_P0_PAIR_CNTS[AVAIL]          == NPEI_PKTn_SLIST_BAOFF_DBELL[DBELL]
33718 * NPEI_P0_PAIR_CNTS[FCNT]           ==
33719 * NPEI_PKTS_SENTn[PKT_CNT]          == NPEI_PKTn_CNTS[CNT]
33720 * NPEI_OUTPUT_CONTROL[Pn_BMODE]     == NPEI_PKT_OUT_BMODE[BMODE]
33721 * NPEI_PKT_CREDITSn[PKT_CNT]        == NPEI_PKTn_CNTS[CNT]
33722 * NPEI_BUFF_SIZE_OUTPUTn[BSIZE]     == NPEI_PKT_SLIST_ID_SIZE[BSIZE]
33723 * NPEI_BUFF_SIZE_OUTPUTn[ISIZE]     == NPEI_PKT_SLIST_ID_SIZE[ISIZE]
33724 * NPEI_OUTPUT_CONTROL[On_CSRM]      == NPEI_PKT_DPADDR[DPTR] & NPEI_PKT_OUT_USE_IPTR[PORT]
33725 * NPEI_OUTPUT_CONTROL[On_ES]        == NPEI_PKT_DATA_OUT_ES[ES]
33726 * NPEI_OUTPUT_CONTROL[On_NS]        == NPEI_PKT_DATA_OUT_NS[NSR] ?
33727 * NPEI_OUTPUT_CONTROL[On_RO]        == NPEI_PKT_DATA_OUT_ROR[ROR]
33728 * NPEI_PKTS_SENT_INT_LEVn[PKT_CNT]  == NPEI_PKT_INT_LEVELS[CNT]
33729 * NPEI_PKTS_SENT_TIMEn[PKT_TIME]    == NPEI_PKT_INT_LEVELS[TIME]
33730 * NPEI_OUTPUT_CONTROL[IPTR_On]      == NPEI_PKT_IPTR[IPTR]
33731 * NPEI_PCIE_PORT_OUTPUT[]           == NPEI_PKT_PCIE_PORT[PP]
33732 *
33733 *                  NPEI_BAR1_INDEXX = NPEI BAR1 IndexX Register
33734 *
33735 * Contains address index and control bits for access to memory ranges of BAR-1. Index is build from supplied address [25:22].
33736 * NPEI_BAR1_INDEX0 through NPEI_BAR1_INDEX15 is used for transactions orginating with PCIE-PORT0 and NPEI_BAR1_INDEX16
33737 * through NPEI_BAR1_INDEX31 is used for transactions originating with PCIE-PORT1.
33738 */
33739typedef union
33740{
33741    uint32_t u32;
33742    struct cvmx_npei_bar1_indexx_s
33743    {
33744#if __BYTE_ORDER == __BIG_ENDIAN
33745        uint32_t reserved_18_31          : 14;
33746        uint32_t addr_idx                : 14;      /**< Address bits [35:22] sent to L2C */
33747        uint32_t ca                      : 1;       /**< Set '1' when access is not to be cached in L2. */
33748        uint32_t end_swp                 : 2;       /**< Endian Swap Mode */
33749        uint32_t addr_v                  : 1;       /**< Set '1' when the selected address range is valid. */
33750#else
33751        uint32_t addr_v                  : 1;
33752        uint32_t end_swp                 : 2;
33753        uint32_t ca                      : 1;
33754        uint32_t addr_idx                : 14;
33755        uint32_t reserved_18_31          : 14;
33756#endif
33757    } s;
33758    struct cvmx_npei_bar1_indexx_s       cn52xx;
33759    struct cvmx_npei_bar1_indexx_s       cn52xxp1;
33760    struct cvmx_npei_bar1_indexx_s       cn56xx;
33761    struct cvmx_npei_bar1_indexx_s       cn56xxp1;
33762} cvmx_npei_bar1_indexx_t;
33763
33764
33765/**
33766 * cvmx_npei_bist_status
33767 *
33768 * NPEI_BIST_STATUS = NPI's BIST Status Register
33769 *
33770 * Results from BIST runs of NPEI's memories.
33771 */
33772typedef union
33773{
33774    uint64_t u64;
33775    struct cvmx_npei_bist_status_s
33776    {
33777#if __BYTE_ORDER == __BIG_ENDIAN
33778        uint64_t pkt_rdf                 : 1;       /**< BIST Status for PKT Read FIFO */
33779        uint64_t reserved_60_62          : 3;
33780        uint64_t pcr_gim                 : 1;       /**< BIST Status for PKT Gather Instr MEM */
33781        uint64_t pkt_pif                 : 1;       /**< BIST Status for PKT INB FIFO */
33782        uint64_t pcsr_int                : 1;       /**< BIST Status for PKT pout_int_bstatus */
33783        uint64_t pcsr_im                 : 1;       /**< BIST Status for PKT pcsr_instr_mem_bstatus */
33784        uint64_t pcsr_cnt                : 1;       /**< BIST Status for PKT pin_cnt_bstatus */
33785        uint64_t pcsr_id                 : 1;       /**< BIST Status for PKT pcsr_in_done_bstatus */
33786        uint64_t pcsr_sl                 : 1;       /**< BIST Status for PKT pcsr_slist_bstatus */
33787        uint64_t reserved_50_52          : 3;
33788        uint64_t pkt_ind                 : 1;       /**< BIST Status for PKT Instruction Done MEM */
33789        uint64_t pkt_slm                 : 1;       /**< BIST Status for PKT SList MEM */
33790        uint64_t reserved_36_47          : 12;
33791        uint64_t d0_pst                  : 1;       /**< BIST Status for DMA0 Pcie Store */
33792        uint64_t d1_pst                  : 1;       /**< BIST Status for DMA1 Pcie Store */
33793        uint64_t d2_pst                  : 1;       /**< BIST Status for DMA2 Pcie Store */
33794        uint64_t d3_pst                  : 1;       /**< BIST Status for DMA3 Pcie Store */
33795        uint64_t reserved_31_31          : 1;
33796        uint64_t n2p0_c                  : 1;       /**< BIST Status for N2P Port0 Cmd */
33797        uint64_t n2p0_o                  : 1;       /**< BIST Status for N2P Port0 Data */
33798        uint64_t n2p1_c                  : 1;       /**< BIST Status for N2P Port1 Cmd */
33799        uint64_t n2p1_o                  : 1;       /**< BIST Status for N2P Port1 Data */
33800        uint64_t cpl_p0                  : 1;       /**< BIST Status for CPL Port 0 */
33801        uint64_t cpl_p1                  : 1;       /**< BIST Status for CPL Port 1 */
33802        uint64_t p2n1_po                 : 1;       /**< BIST Status for P2N Port1 P Order */
33803        uint64_t p2n1_no                 : 1;       /**< BIST Status for P2N Port1 N Order */
33804        uint64_t p2n1_co                 : 1;       /**< BIST Status for P2N Port1 C Order */
33805        uint64_t p2n0_po                 : 1;       /**< BIST Status for P2N Port0 P Order */
33806        uint64_t p2n0_no                 : 1;       /**< BIST Status for P2N Port0 N Order */
33807        uint64_t p2n0_co                 : 1;       /**< BIST Status for P2N Port0 C Order */
33808        uint64_t p2n0_c0                 : 1;       /**< BIST Status for P2N Port0 C0 */
33809        uint64_t p2n0_c1                 : 1;       /**< BIST Status for P2N Port0 C1 */
33810        uint64_t p2n0_n                  : 1;       /**< BIST Status for P2N Port0 N */
33811        uint64_t p2n0_p0                 : 1;       /**< BIST Status for P2N Port0 P0 */
33812        uint64_t p2n0_p1                 : 1;       /**< BIST Status for P2N Port0 P1 */
33813        uint64_t p2n1_c0                 : 1;       /**< BIST Status for P2N Port1 C0 */
33814        uint64_t p2n1_c1                 : 1;       /**< BIST Status for P2N Port1 C1 */
33815        uint64_t p2n1_n                  : 1;       /**< BIST Status for P2N Port1 N */
33816        uint64_t p2n1_p0                 : 1;       /**< BIST Status for P2N Port1 P0 */
33817        uint64_t p2n1_p1                 : 1;       /**< BIST Status for P2N Port1 P1 */
33818        uint64_t csm0                    : 1;       /**< BIST Status for CSM0 */
33819        uint64_t csm1                    : 1;       /**< BIST Status for CSM1 */
33820        uint64_t dif0                    : 1;       /**< BIST Status for DMA Instr0 */
33821        uint64_t dif1                    : 1;       /**< BIST Status for DMA Instr0 */
33822        uint64_t dif2                    : 1;       /**< BIST Status for DMA Instr0 */
33823        uint64_t dif3                    : 1;       /**< BIST Status for DMA Instr0 */
33824        uint64_t reserved_2_2            : 1;
33825        uint64_t msi                     : 1;       /**< BIST Status for MSI Memory Map */
33826        uint64_t ncb_cmd                 : 1;       /**< BIST Status for NCB Outbound Commands */
33827#else
33828        uint64_t ncb_cmd                 : 1;
33829        uint64_t msi                     : 1;
33830        uint64_t reserved_2_2            : 1;
33831        uint64_t dif3                    : 1;
33832        uint64_t dif2                    : 1;
33833        uint64_t dif1                    : 1;
33834        uint64_t dif0                    : 1;
33835        uint64_t csm1                    : 1;
33836        uint64_t csm0                    : 1;
33837        uint64_t p2n1_p1                 : 1;
33838        uint64_t p2n1_p0                 : 1;
33839        uint64_t p2n1_n                  : 1;
33840        uint64_t p2n1_c1                 : 1;
33841        uint64_t p2n1_c0                 : 1;
33842        uint64_t p2n0_p1                 : 1;
33843        uint64_t p2n0_p0                 : 1;
33844        uint64_t p2n0_n                  : 1;
33845        uint64_t p2n0_c1                 : 1;
33846        uint64_t p2n0_c0                 : 1;
33847        uint64_t p2n0_co                 : 1;
33848        uint64_t p2n0_no                 : 1;
33849        uint64_t p2n0_po                 : 1;
33850        uint64_t p2n1_co                 : 1;
33851        uint64_t p2n1_no                 : 1;
33852        uint64_t p2n1_po                 : 1;
33853        uint64_t cpl_p1                  : 1;
33854        uint64_t cpl_p0                  : 1;
33855        uint64_t n2p1_o                  : 1;
33856        uint64_t n2p1_c                  : 1;
33857        uint64_t n2p0_o                  : 1;
33858        uint64_t n2p0_c                  : 1;
33859        uint64_t reserved_31_31          : 1;
33860        uint64_t d3_pst                  : 1;
33861        uint64_t d2_pst                  : 1;
33862        uint64_t d1_pst                  : 1;
33863        uint64_t d0_pst                  : 1;
33864        uint64_t reserved_36_47          : 12;
33865        uint64_t pkt_slm                 : 1;
33866        uint64_t pkt_ind                 : 1;
33867        uint64_t reserved_50_52          : 3;
33868        uint64_t pcsr_sl                 : 1;
33869        uint64_t pcsr_id                 : 1;
33870        uint64_t pcsr_cnt                : 1;
33871        uint64_t pcsr_im                 : 1;
33872        uint64_t pcsr_int                : 1;
33873        uint64_t pkt_pif                 : 1;
33874        uint64_t pcr_gim                 : 1;
33875        uint64_t reserved_60_62          : 3;
33876        uint64_t pkt_rdf                 : 1;
33877#endif
33878    } s;
33879    struct cvmx_npei_bist_status_cn52xx
33880    {
33881#if __BYTE_ORDER == __BIG_ENDIAN
33882        uint64_t pkt_rdf                 : 1;       /**< BIST Status for PKT Read FIFO */
33883        uint64_t reserved_60_62          : 3;
33884        uint64_t pcr_gim                 : 1;       /**< BIST Status for PKT Gather Instr MEM */
33885        uint64_t pkt_pif                 : 1;       /**< BIST Status for PKT INB FIFO */
33886        uint64_t pcsr_int                : 1;       /**< BIST Status for PKT OUTB Interrupt MEM */
33887        uint64_t pcsr_im                 : 1;       /**< BIST Status for PKT CSR Instr MEM */
33888        uint64_t pcsr_cnt                : 1;       /**< BIST Status for PKT INB Count MEM */
33889        uint64_t pcsr_id                 : 1;       /**< BIST Status for PKT INB Instr Done MEM */
33890        uint64_t pcsr_sl                 : 1;       /**< BIST Status for PKT OUTB SLIST MEM */
33891        uint64_t pkt_imem                : 1;       /**< BIST Status for PKT OUTB IFIFO */
33892        uint64_t pkt_pfm                 : 1;       /**< BIST Status for PKT Front MEM */
33893        uint64_t pkt_pof                 : 1;       /**< BIST Status for PKT OUTB FIFO */
33894        uint64_t reserved_48_49          : 2;
33895        uint64_t pkt_pop0                : 1;       /**< BIST Status for PKT OUTB Slist0 */
33896        uint64_t pkt_pop1                : 1;       /**< BIST Status for PKT OUTB Slist1 */
33897        uint64_t d0_mem                  : 1;       /**< BIST Status for DMA MEM 0 */
33898        uint64_t d1_mem                  : 1;       /**< BIST Status for DMA MEM 1 */
33899        uint64_t d2_mem                  : 1;       /**< BIST Status for DMA MEM 2 */
33900        uint64_t d3_mem                  : 1;       /**< BIST Status for DMA MEM 3 */
33901        uint64_t d4_mem                  : 1;       /**< BIST Status for DMA MEM 4 */
33902        uint64_t ds_mem                  : 1;       /**< BIST Status for DMA  Memory */
33903        uint64_t reserved_36_39          : 4;
33904        uint64_t d0_pst                  : 1;       /**< BIST Status for DMA0 Pcie Store */
33905        uint64_t d1_pst                  : 1;       /**< BIST Status for DMA1 Pcie Store */
33906        uint64_t d2_pst                  : 1;       /**< BIST Status for DMA2 Pcie Store */
33907        uint64_t d3_pst                  : 1;       /**< BIST Status for DMA3 Pcie Store */
33908        uint64_t d4_pst                  : 1;       /**< BIST Status for DMA4 Pcie Store */
33909        uint64_t n2p0_c                  : 1;       /**< BIST Status for N2P Port0 Cmd */
33910        uint64_t n2p0_o                  : 1;       /**< BIST Status for N2P Port0 Data */
33911        uint64_t n2p1_c                  : 1;       /**< BIST Status for N2P Port1 Cmd */
33912        uint64_t n2p1_o                  : 1;       /**< BIST Status for N2P Port1 Data */
33913        uint64_t cpl_p0                  : 1;       /**< BIST Status for CPL Port 0 */
33914        uint64_t cpl_p1                  : 1;       /**< BIST Status for CPL Port 1 */
33915        uint64_t p2n1_po                 : 1;       /**< BIST Status for P2N Port1 P Order */
33916        uint64_t p2n1_no                 : 1;       /**< BIST Status for P2N Port1 N Order */
33917        uint64_t p2n1_co                 : 1;       /**< BIST Status for P2N Port1 C Order */
33918        uint64_t p2n0_po                 : 1;       /**< BIST Status for P2N Port0 P Order */
33919        uint64_t p2n0_no                 : 1;       /**< BIST Status for P2N Port0 N Order */
33920        uint64_t p2n0_co                 : 1;       /**< BIST Status for P2N Port0 C Order */
33921        uint64_t p2n0_c0                 : 1;       /**< BIST Status for P2N Port0 C0 */
33922        uint64_t p2n0_c1                 : 1;       /**< BIST Status for P2N Port0 C1 */
33923        uint64_t p2n0_n                  : 1;       /**< BIST Status for P2N Port0 N */
33924        uint64_t p2n0_p0                 : 1;       /**< BIST Status for P2N Port0 P0 */
33925        uint64_t p2n0_p1                 : 1;       /**< BIST Status for P2N Port0 P1 */
33926        uint64_t p2n1_c0                 : 1;       /**< BIST Status for P2N Port1 C0 */
33927        uint64_t p2n1_c1                 : 1;       /**< BIST Status for P2N Port1 C1 */
33928        uint64_t p2n1_n                  : 1;       /**< BIST Status for P2N Port1 N */
33929        uint64_t p2n1_p0                 : 1;       /**< BIST Status for P2N Port1 P0 */
33930        uint64_t p2n1_p1                 : 1;       /**< BIST Status for P2N Port1 P1 */
33931        uint64_t csm0                    : 1;       /**< BIST Status for CSM0 */
33932        uint64_t csm1                    : 1;       /**< BIST Status for CSM1 */
33933        uint64_t dif0                    : 1;       /**< BIST Status for DMA Instr0 */
33934        uint64_t dif1                    : 1;       /**< BIST Status for DMA Instr0 */
33935        uint64_t dif2                    : 1;       /**< BIST Status for DMA Instr0 */
33936        uint64_t dif3                    : 1;       /**< BIST Status for DMA Instr0 */
33937        uint64_t dif4                    : 1;       /**< BIST Status for DMA Instr0 */
33938        uint64_t msi                     : 1;       /**< BIST Status for MSI Memory Map */
33939        uint64_t ncb_cmd                 : 1;       /**< BIST Status for NCB Outbound Commands */
33940#else
33941        uint64_t ncb_cmd                 : 1;
33942        uint64_t msi                     : 1;
33943        uint64_t dif4                    : 1;
33944        uint64_t dif3                    : 1;
33945        uint64_t dif2                    : 1;
33946        uint64_t dif1                    : 1;
33947        uint64_t dif0                    : 1;
33948        uint64_t csm1                    : 1;
33949        uint64_t csm0                    : 1;
33950        uint64_t p2n1_p1                 : 1;
33951        uint64_t p2n1_p0                 : 1;
33952        uint64_t p2n1_n                  : 1;
33953        uint64_t p2n1_c1                 : 1;
33954        uint64_t p2n1_c0                 : 1;
33955        uint64_t p2n0_p1                 : 1;
33956        uint64_t p2n0_p0                 : 1;
33957        uint64_t p2n0_n                  : 1;
33958        uint64_t p2n0_c1                 : 1;
33959        uint64_t p2n0_c0                 : 1;
33960        uint64_t p2n0_co                 : 1;
33961        uint64_t p2n0_no                 : 1;
33962        uint64_t p2n0_po                 : 1;
33963        uint64_t p2n1_co                 : 1;
33964        uint64_t p2n1_no                 : 1;
33965        uint64_t p2n1_po                 : 1;
33966        uint64_t cpl_p1                  : 1;
33967        uint64_t cpl_p0                  : 1;
33968        uint64_t n2p1_o                  : 1;
33969        uint64_t n2p1_c                  : 1;
33970        uint64_t n2p0_o                  : 1;
33971        uint64_t n2p0_c                  : 1;
33972        uint64_t d4_pst                  : 1;
33973        uint64_t d3_pst                  : 1;
33974        uint64_t d2_pst                  : 1;
33975        uint64_t d1_pst                  : 1;
33976        uint64_t d0_pst                  : 1;
33977        uint64_t reserved_36_39          : 4;
33978        uint64_t ds_mem                  : 1;
33979        uint64_t d4_mem                  : 1;
33980        uint64_t d3_mem                  : 1;
33981        uint64_t d2_mem                  : 1;
33982        uint64_t d1_mem                  : 1;
33983        uint64_t d0_mem                  : 1;
33984        uint64_t pkt_pop1                : 1;
33985        uint64_t pkt_pop0                : 1;
33986        uint64_t reserved_48_49          : 2;
33987        uint64_t pkt_pof                 : 1;
33988        uint64_t pkt_pfm                 : 1;
33989        uint64_t pkt_imem                : 1;
33990        uint64_t pcsr_sl                 : 1;
33991        uint64_t pcsr_id                 : 1;
33992        uint64_t pcsr_cnt                : 1;
33993        uint64_t pcsr_im                 : 1;
33994        uint64_t pcsr_int                : 1;
33995        uint64_t pkt_pif                 : 1;
33996        uint64_t pcr_gim                 : 1;
33997        uint64_t reserved_60_62          : 3;
33998        uint64_t pkt_rdf                 : 1;
33999#endif
34000    } cn52xx;
34001    struct cvmx_npei_bist_status_cn52xxp1
34002    {
34003#if __BYTE_ORDER == __BIG_ENDIAN
34004        uint64_t reserved_46_63          : 18;
34005        uint64_t d0_mem0                 : 1;       /**< BIST Status for DMA0 Memory */
34006        uint64_t d1_mem1                 : 1;       /**< BIST Status for DMA1 Memory */
34007        uint64_t d2_mem2                 : 1;       /**< BIST Status for DMA2 Memory */
34008        uint64_t d3_mem3                 : 1;       /**< BIST Status for DMA3 Memory */
34009        uint64_t dr0_mem                 : 1;       /**< BIST Status for DMA0 Store */
34010        uint64_t d0_mem                  : 1;       /**< BIST Status for DMA0 Memory */
34011        uint64_t d1_mem                  : 1;       /**< BIST Status for DMA1 Memory */
34012        uint64_t d2_mem                  : 1;       /**< BIST Status for DMA2 Memory */
34013        uint64_t d3_mem                  : 1;       /**< BIST Status for DMA3 Memory */
34014        uint64_t dr1_mem                 : 1;       /**< BIST Status for DMA1 Store */
34015        uint64_t d0_pst                  : 1;       /**< BIST Status for DMA0 Pcie Store */
34016        uint64_t d1_pst                  : 1;       /**< BIST Status for DMA1 Pcie Store */
34017        uint64_t d2_pst                  : 1;       /**< BIST Status for DMA2 Pcie Store */
34018        uint64_t d3_pst                  : 1;       /**< BIST Status for DMA3 Pcie Store */
34019        uint64_t dr2_mem                 : 1;       /**< BIST Status for DMA2 Store */
34020        uint64_t n2p0_c                  : 1;       /**< BIST Status for N2P Port0 Cmd */
34021        uint64_t n2p0_o                  : 1;       /**< BIST Status for N2P Port0 Data */
34022        uint64_t n2p1_c                  : 1;       /**< BIST Status for N2P Port1 Cmd */
34023        uint64_t n2p1_o                  : 1;       /**< BIST Status for N2P Port1 Data */
34024        uint64_t cpl_p0                  : 1;       /**< BIST Status for CPL Port 0 */
34025        uint64_t cpl_p1                  : 1;       /**< BIST Status for CPL Port 1 */
34026        uint64_t p2n1_po                 : 1;       /**< BIST Status for P2N Port1 P Order */
34027        uint64_t p2n1_no                 : 1;       /**< BIST Status for P2N Port1 N Order */
34028        uint64_t p2n1_co                 : 1;       /**< BIST Status for P2N Port1 C Order */
34029        uint64_t p2n0_po                 : 1;       /**< BIST Status for P2N Port0 P Order */
34030        uint64_t p2n0_no                 : 1;       /**< BIST Status for P2N Port0 N Order */
34031        uint64_t p2n0_co                 : 1;       /**< BIST Status for P2N Port0 C Order */
34032        uint64_t p2n0_c0                 : 1;       /**< BIST Status for P2N Port0 C0 */
34033        uint64_t p2n0_c1                 : 1;       /**< BIST Status for P2N Port0 C1 */
34034        uint64_t p2n0_n                  : 1;       /**< BIST Status for P2N Port0 N */
34035        uint64_t p2n0_p0                 : 1;       /**< BIST Status for P2N Port0 P0 */
34036        uint64_t p2n0_p1                 : 1;       /**< BIST Status for P2N Port0 P1 */
34037        uint64_t p2n1_c0                 : 1;       /**< BIST Status for P2N Port1 C0 */
34038        uint64_t p2n1_c1                 : 1;       /**< BIST Status for P2N Port1 C1 */
34039        uint64_t p2n1_n                  : 1;       /**< BIST Status for P2N Port1 N */
34040        uint64_t p2n1_p0                 : 1;       /**< BIST Status for P2N Port1 P0 */
34041        uint64_t p2n1_p1                 : 1;       /**< BIST Status for P2N Port1 P1 */
34042        uint64_t csm0                    : 1;       /**< BIST Status for CSM0 */
34043        uint64_t csm1                    : 1;       /**< BIST Status for CSM1 */
34044        uint64_t dif0                    : 1;       /**< BIST Status for DMA Instr0 */
34045        uint64_t dif1                    : 1;       /**< BIST Status for DMA Instr0 */
34046        uint64_t dif2                    : 1;       /**< BIST Status for DMA Instr0 */
34047        uint64_t dif3                    : 1;       /**< BIST Status for DMA Instr0 */
34048        uint64_t dr3_mem                 : 1;       /**< BIST Status for DMA3 Store */
34049        uint64_t msi                     : 1;       /**< BIST Status for MSI Memory Map */
34050        uint64_t ncb_cmd                 : 1;       /**< BIST Status for NCB Outbound Commands */
34051#else
34052        uint64_t ncb_cmd                 : 1;
34053        uint64_t msi                     : 1;
34054        uint64_t dr3_mem                 : 1;
34055        uint64_t dif3                    : 1;
34056        uint64_t dif2                    : 1;
34057        uint64_t dif1                    : 1;
34058        uint64_t dif0                    : 1;
34059        uint64_t csm1                    : 1;
34060        uint64_t csm0                    : 1;
34061        uint64_t p2n1_p1                 : 1;
34062        uint64_t p2n1_p0                 : 1;
34063        uint64_t p2n1_n                  : 1;
34064        uint64_t p2n1_c1                 : 1;
34065        uint64_t p2n1_c0                 : 1;
34066        uint64_t p2n0_p1                 : 1;
34067        uint64_t p2n0_p0                 : 1;
34068        uint64_t p2n0_n                  : 1;
34069        uint64_t p2n0_c1                 : 1;
34070        uint64_t p2n0_c0                 : 1;
34071        uint64_t p2n0_co                 : 1;
34072        uint64_t p2n0_no                 : 1;
34073        uint64_t p2n0_po                 : 1;
34074        uint64_t p2n1_co                 : 1;
34075        uint64_t p2n1_no                 : 1;
34076        uint64_t p2n1_po                 : 1;
34077        uint64_t cpl_p1                  : 1;
34078        uint64_t cpl_p0                  : 1;
34079        uint64_t n2p1_o                  : 1;
34080        uint64_t n2p1_c                  : 1;
34081        uint64_t n2p0_o                  : 1;
34082        uint64_t n2p0_c                  : 1;
34083        uint64_t dr2_mem                 : 1;
34084        uint64_t d3_pst                  : 1;
34085        uint64_t d2_pst                  : 1;
34086        uint64_t d1_pst                  : 1;
34087        uint64_t d0_pst                  : 1;
34088        uint64_t dr1_mem                 : 1;
34089        uint64_t d3_mem                  : 1;
34090        uint64_t d2_mem                  : 1;
34091        uint64_t d1_mem                  : 1;
34092        uint64_t d0_mem                  : 1;
34093        uint64_t dr0_mem                 : 1;
34094        uint64_t d3_mem3                 : 1;
34095        uint64_t d2_mem2                 : 1;
34096        uint64_t d1_mem1                 : 1;
34097        uint64_t d0_mem0                 : 1;
34098        uint64_t reserved_46_63          : 18;
34099#endif
34100    } cn52xxp1;
34101    struct cvmx_npei_bist_status_cn52xx  cn56xx;
34102    struct cvmx_npei_bist_status_cn56xxp1
34103    {
34104#if __BYTE_ORDER == __BIG_ENDIAN
34105        uint64_t reserved_58_63          : 6;
34106        uint64_t pcsr_int                : 1;       /**< BIST Status for PKT pout_int_bstatus */
34107        uint64_t pcsr_im                 : 1;       /**< BIST Status for PKT pcsr_instr_mem_bstatus */
34108        uint64_t pcsr_cnt                : 1;       /**< BIST Status for PKT pin_cnt_bstatus */
34109        uint64_t pcsr_id                 : 1;       /**< BIST Status for PKT pcsr_in_done_bstatus */
34110        uint64_t pcsr_sl                 : 1;       /**< BIST Status for PKT pcsr_slist_bstatus */
34111        uint64_t pkt_pout                : 1;       /**< BIST Status for PKT OUT Count MEM */
34112        uint64_t pkt_imem                : 1;       /**< BIST Status for PKT Instruction MEM */
34113        uint64_t pkt_cntm                : 1;       /**< BIST Status for PKT Count MEM */
34114        uint64_t pkt_ind                 : 1;       /**< BIST Status for PKT Instruction Done MEM */
34115        uint64_t pkt_slm                 : 1;       /**< BIST Status for PKT SList MEM */
34116        uint64_t pkt_odf                 : 1;       /**< BIST Status for PKT Output Data FIFO */
34117        uint64_t pkt_oif                 : 1;       /**< BIST Status for PKT Output INFO FIFO */
34118        uint64_t pkt_out                 : 1;       /**< BIST Status for PKT Output FIFO */
34119        uint64_t pkt_i0                  : 1;       /**< BIST Status for PKT Instr0 */
34120        uint64_t pkt_i1                  : 1;       /**< BIST Status for PKT Instr1 */
34121        uint64_t pkt_s0                  : 1;       /**< BIST Status for PKT Slist0 */
34122        uint64_t pkt_s1                  : 1;       /**< BIST Status for PKT Slist1 */
34123        uint64_t d0_mem                  : 1;       /**< BIST Status for DMA0 Memory */
34124        uint64_t d1_mem                  : 1;       /**< BIST Status for DMA1 Memory */
34125        uint64_t d2_mem                  : 1;       /**< BIST Status for DMA2 Memory */
34126        uint64_t d3_mem                  : 1;       /**< BIST Status for DMA3 Memory */
34127        uint64_t d4_mem                  : 1;       /**< BIST Status for DMA4 Memory */
34128        uint64_t d0_pst                  : 1;       /**< BIST Status for DMA0 Pcie Store */
34129        uint64_t d1_pst                  : 1;       /**< BIST Status for DMA1 Pcie Store */
34130        uint64_t d2_pst                  : 1;       /**< BIST Status for DMA2 Pcie Store */
34131        uint64_t d3_pst                  : 1;       /**< BIST Status for DMA3 Pcie Store */
34132        uint64_t d4_pst                  : 1;       /**< BIST Status for DMA4 Pcie Store */
34133        uint64_t n2p0_c                  : 1;       /**< BIST Status for N2P Port0 Cmd */
34134        uint64_t n2p0_o                  : 1;       /**< BIST Status for N2P Port0 Data */
34135        uint64_t n2p1_c                  : 1;       /**< BIST Status for N2P Port1 Cmd */
34136        uint64_t n2p1_o                  : 1;       /**< BIST Status for N2P Port1 Data */
34137        uint64_t cpl_p0                  : 1;       /**< BIST Status for CPL Port 0 */
34138        uint64_t cpl_p1                  : 1;       /**< BIST Status for CPL Port 1 */
34139        uint64_t p2n1_po                 : 1;       /**< BIST Status for P2N Port1 P Order */
34140        uint64_t p2n1_no                 : 1;       /**< BIST Status for P2N Port1 N Order */
34141        uint64_t p2n1_co                 : 1;       /**< BIST Status for P2N Port1 C Order */
34142        uint64_t p2n0_po                 : 1;       /**< BIST Status for P2N Port0 P Order */
34143        uint64_t p2n0_no                 : 1;       /**< BIST Status for P2N Port0 N Order */
34144        uint64_t p2n0_co                 : 1;       /**< BIST Status for P2N Port0 C Order */
34145        uint64_t p2n0_c0                 : 1;       /**< BIST Status for P2N Port0 C0 */
34146        uint64_t p2n0_c1                 : 1;       /**< BIST Status for P2N Port0 C1 */
34147        uint64_t p2n0_n                  : 1;       /**< BIST Status for P2N Port0 N */
34148        uint64_t p2n0_p0                 : 1;       /**< BIST Status for P2N Port0 P0 */
34149        uint64_t p2n0_p1                 : 1;       /**< BIST Status for P2N Port0 P1 */
34150        uint64_t p2n1_c0                 : 1;       /**< BIST Status for P2N Port1 C0 */
34151        uint64_t p2n1_c1                 : 1;       /**< BIST Status for P2N Port1 C1 */
34152        uint64_t p2n1_n                  : 1;       /**< BIST Status for P2N Port1 N */
34153        uint64_t p2n1_p0                 : 1;       /**< BIST Status for P2N Port1 P0 */
34154        uint64_t p2n1_p1                 : 1;       /**< BIST Status for P2N Port1 P1 */
34155        uint64_t csm0                    : 1;       /**< BIST Status for CSM0 */
34156        uint64_t csm1                    : 1;       /**< BIST Status for CSM1 */
34157        uint64_t dif0                    : 1;       /**< BIST Status for DMA Instr0 */
34158        uint64_t dif1                    : 1;       /**< BIST Status for DMA Instr0 */
34159        uint64_t dif2                    : 1;       /**< BIST Status for DMA Instr0 */
34160        uint64_t dif3                    : 1;       /**< BIST Status for DMA Instr0 */
34161        uint64_t dif4                    : 1;       /**< BIST Status for DMA Instr0 */
34162        uint64_t msi                     : 1;       /**< BIST Status for MSI Memory Map */
34163        uint64_t ncb_cmd                 : 1;       /**< BIST Status for NCB Outbound Commands */
34164#else
34165        uint64_t ncb_cmd                 : 1;
34166        uint64_t msi                     : 1;
34167        uint64_t dif4                    : 1;
34168        uint64_t dif3                    : 1;
34169        uint64_t dif2                    : 1;
34170        uint64_t dif1                    : 1;
34171        uint64_t dif0                    : 1;
34172        uint64_t csm1                    : 1;
34173        uint64_t csm0                    : 1;
34174        uint64_t p2n1_p1                 : 1;
34175        uint64_t p2n1_p0                 : 1;
34176        uint64_t p2n1_n                  : 1;
34177        uint64_t p2n1_c1                 : 1;
34178        uint64_t p2n1_c0                 : 1;
34179        uint64_t p2n0_p1                 : 1;
34180        uint64_t p2n0_p0                 : 1;
34181        uint64_t p2n0_n                  : 1;
34182        uint64_t p2n0_c1                 : 1;
34183        uint64_t p2n0_c0                 : 1;
34184        uint64_t p2n0_co                 : 1;
34185        uint64_t p2n0_no                 : 1;
34186        uint64_t p2n0_po                 : 1;
34187        uint64_t p2n1_co                 : 1;
34188        uint64_t p2n1_no                 : 1;
34189        uint64_t p2n1_po                 : 1;
34190        uint64_t cpl_p1                  : 1;
34191        uint64_t cpl_p0                  : 1;
34192        uint64_t n2p1_o                  : 1;
34193        uint64_t n2p1_c                  : 1;
34194        uint64_t n2p0_o                  : 1;
34195        uint64_t n2p0_c                  : 1;
34196        uint64_t d4_pst                  : 1;
34197        uint64_t d3_pst                  : 1;
34198        uint64_t d2_pst                  : 1;
34199        uint64_t d1_pst                  : 1;
34200        uint64_t d0_pst                  : 1;
34201        uint64_t d4_mem                  : 1;
34202        uint64_t d3_mem                  : 1;
34203        uint64_t d2_mem                  : 1;
34204        uint64_t d1_mem                  : 1;
34205        uint64_t d0_mem                  : 1;
34206        uint64_t pkt_s1                  : 1;
34207        uint64_t pkt_s0                  : 1;
34208        uint64_t pkt_i1                  : 1;
34209        uint64_t pkt_i0                  : 1;
34210        uint64_t pkt_out                 : 1;
34211        uint64_t pkt_oif                 : 1;
34212        uint64_t pkt_odf                 : 1;
34213        uint64_t pkt_slm                 : 1;
34214        uint64_t pkt_ind                 : 1;
34215        uint64_t pkt_cntm                : 1;
34216        uint64_t pkt_imem                : 1;
34217        uint64_t pkt_pout                : 1;
34218        uint64_t pcsr_sl                 : 1;
34219        uint64_t pcsr_id                 : 1;
34220        uint64_t pcsr_cnt                : 1;
34221        uint64_t pcsr_im                 : 1;
34222        uint64_t pcsr_int                : 1;
34223        uint64_t reserved_58_63          : 6;
34224#endif
34225    } cn56xxp1;
34226} cvmx_npei_bist_status_t;
34227
34228
34229/**
34230 * cvmx_npei_bist_status2
34231 *
34232 * NPEI_BIST_STATUS2 = NPI's BIST Status Register2
34233 *
34234 * Results from BIST runs of NPEI's memories.
34235 */
34236typedef union
34237{
34238    uint64_t u64;
34239    struct cvmx_npei_bist_status2_s
34240    {
34241#if __BYTE_ORDER == __BIG_ENDIAN
34242        uint64_t reserved_14_63          : 50;
34243        uint64_t prd_tag                 : 1;       /**< BIST Status for DMA PCIE RD Tag MEM */
34244        uint64_t prd_st0                 : 1;       /**< BIST Status for DMA PCIE RD state MEM 0 */
34245        uint64_t prd_st1                 : 1;       /**< BIST Status for DMA PCIE RD state MEM 1 */
34246        uint64_t prd_err                 : 1;       /**< BIST Status for DMA PCIE RD ERR state MEM */
34247        uint64_t nrd_st                  : 1;       /**< BIST Status for DMA L2C RD state MEM */
34248        uint64_t nwe_st                  : 1;       /**< BIST Status for DMA L2C WR state MEM */
34249        uint64_t nwe_wr0                 : 1;       /**< BIST Status for DMA L2C WR MEM 0 */
34250        uint64_t nwe_wr1                 : 1;       /**< BIST Status for DMA L2C WR MEM 1 */
34251        uint64_t pkt_rd                  : 1;       /**< BIST Status for Inbound PKT MEM */
34252        uint64_t psc_p0                  : 1;       /**< BIST Status for PSC TLP 0 MEM */
34253        uint64_t psc_p1                  : 1;       /**< BIST Status for PSC TLP 1 MEM */
34254        uint64_t pkt_gd                  : 1;       /**< BIST Status for PKT OUTB Gather Data FIFO */
34255        uint64_t pkt_gl                  : 1;       /**< BIST Status for PKT_OUTB Gather List FIFO */
34256        uint64_t pkt_blk                 : 1;       /**< BIST Status for PKT OUTB Blocked FIFO */
34257#else
34258        uint64_t pkt_blk                 : 1;
34259        uint64_t pkt_gl                  : 1;
34260        uint64_t pkt_gd                  : 1;
34261        uint64_t psc_p1                  : 1;
34262        uint64_t psc_p0                  : 1;
34263        uint64_t pkt_rd                  : 1;
34264        uint64_t nwe_wr1                 : 1;
34265        uint64_t nwe_wr0                 : 1;
34266        uint64_t nwe_st                  : 1;
34267        uint64_t nrd_st                  : 1;
34268        uint64_t prd_err                 : 1;
34269        uint64_t prd_st1                 : 1;
34270        uint64_t prd_st0                 : 1;
34271        uint64_t prd_tag                 : 1;
34272        uint64_t reserved_14_63          : 50;
34273#endif
34274    } s;
34275    struct cvmx_npei_bist_status2_s      cn52xx;
34276    struct cvmx_npei_bist_status2_s      cn56xx;
34277} cvmx_npei_bist_status2_t;
34278
34279
34280/**
34281 * cvmx_npei_ctl_port0
34282 *
34283 * NPEI_CTL_PORT0 = NPEI's Control Port 0
34284 *
34285 * Contains control for access for Port0
34286 */
34287typedef union
34288{
34289    uint64_t u64;
34290    struct cvmx_npei_ctl_port0_s
34291    {
34292#if __BYTE_ORDER == __BIG_ENDIAN
34293        uint64_t reserved_21_63          : 43;
34294        uint64_t waitl_com               : 1;       /**< When set '1' casues the NPI to wait for a commit
34295                                                         from the L2C before sending additional completions
34296                                                         to the L2C from the PCIe.
34297                                                         Set this for more conservative behavior. Clear
34298                                                         this for more aggressive, higher-performance
34299                                                         behavior */
34300        uint64_t intd                    : 1;       /**< When '0' Intd wire asserted. Before mapping. */
34301        uint64_t intc                    : 1;       /**< When '0' Intc wire asserted. Before mapping. */
34302        uint64_t intb                    : 1;       /**< When '0' Intb wire asserted. Before mapping. */
34303        uint64_t inta                    : 1;       /**< When '0' Inta wire asserted. Before mapping. */
34304        uint64_t intd_map                : 2;       /**< Maps INTD to INTA(00), INTB(01), INTC(10) or
34305                                                         INTD (11). */
34306        uint64_t intc_map                : 2;       /**< Maps INTC to INTA(00), INTB(01), INTC(10) or
34307                                                         INTD (11). */
34308        uint64_t intb_map                : 2;       /**< Maps INTB to INTA(00), INTB(01), INTC(10) or
34309                                                         INTD (11). */
34310        uint64_t inta_map                : 2;       /**< Maps INTA to INTA(00), INTB(01), INTC(10) or
34311                                                         INTD (11). */
34312        uint64_t ctlp_ro                 : 1;       /**< Relaxed ordering enable for Completion TLPS. */
34313        uint64_t reserved_6_6            : 1;
34314        uint64_t ptlp_ro                 : 1;       /**< Relaxed ordering enable for Posted TLPS. */
34315        uint64_t bar2_enb                : 1;       /**< When set '1' BAR2 is enable and will respond when
34316                                                         clear '0' BAR2 access will cause UR responses. */
34317        uint64_t bar2_esx                : 2;       /**< Value will be XORed with pci-address[37:36] to
34318                                                         determine the endian swap mode. */
34319        uint64_t bar2_cax                : 1;       /**< Value will be XORed with pcie-address[38] to
34320                                                         determine the L2 cache attribute.
34321                                                         Not cached in L2 if XOR result is 1 */
34322        uint64_t wait_com                : 1;       /**< When set '1' casues the NPI to wait for a commit
34323                                                         from the L2C before sending additional stores to
34324                                                         the L2C from the PCIe.
34325                                                         Most applications will not notice a difference, so
34326                                                         should not set this bit. Setting the bit is more
34327                                                         conservative on ordering, lower performance */
34328#else
34329        uint64_t wait_com                : 1;
34330        uint64_t bar2_cax                : 1;
34331        uint64_t bar2_esx                : 2;
34332        uint64_t bar2_enb                : 1;
34333        uint64_t ptlp_ro                 : 1;
34334        uint64_t reserved_6_6            : 1;
34335        uint64_t ctlp_ro                 : 1;
34336        uint64_t inta_map                : 2;
34337        uint64_t intb_map                : 2;
34338        uint64_t intc_map                : 2;
34339        uint64_t intd_map                : 2;
34340        uint64_t inta                    : 1;
34341        uint64_t intb                    : 1;
34342        uint64_t intc                    : 1;
34343        uint64_t intd                    : 1;
34344        uint64_t waitl_com               : 1;
34345        uint64_t reserved_21_63          : 43;
34346#endif
34347    } s;
34348    struct cvmx_npei_ctl_port0_s         cn52xx;
34349    struct cvmx_npei_ctl_port0_s         cn52xxp1;
34350    struct cvmx_npei_ctl_port0_s         cn56xx;
34351    struct cvmx_npei_ctl_port0_s         cn56xxp1;
34352} cvmx_npei_ctl_port0_t;
34353
34354
34355/**
34356 * cvmx_npei_ctl_port1
34357 *
34358 * NPEI_CTL_PORT1 = NPEI's Control Port1
34359 *
34360 * Contains control for access for Port1
34361 */
34362typedef union
34363{
34364    uint64_t u64;
34365    struct cvmx_npei_ctl_port1_s
34366    {
34367#if __BYTE_ORDER == __BIG_ENDIAN
34368        uint64_t reserved_21_63          : 43;
34369        uint64_t waitl_com               : 1;       /**< When set '1' casues the NPI to wait for a commit
34370                                                         from the L2C before sending additional completions
34371                                                         to the L2C from the PCIe.
34372                                                         Set this for more conservative behavior. Clear
34373                                                         this for more aggressive, higher-performance */
34374        uint64_t intd                    : 1;       /**< When '0' Intd wire asserted. Before mapping. */
34375        uint64_t intc                    : 1;       /**< When '0' Intc wire asserted. Before mapping. */
34376        uint64_t intb                    : 1;       /**< When '0' Intv wire asserted. Before mapping. */
34377        uint64_t inta                    : 1;       /**< When '0' Inta wire asserted. Before mapping. */
34378        uint64_t intd_map                : 2;       /**< Maps INTD to INTA(00), INTB(01), INTC(10) or
34379                                                         INTD (11). */
34380        uint64_t intc_map                : 2;       /**< Maps INTC to INTA(00), INTB(01), INTC(10) or
34381                                                         INTD (11). */
34382        uint64_t intb_map                : 2;       /**< Maps INTB to INTA(00), INTB(01), INTC(10) or
34383                                                         INTD (11). */
34384        uint64_t inta_map                : 2;       /**< Maps INTA to INTA(00), INTB(01), INTC(10) or
34385                                                         INTD (11). */
34386        uint64_t ctlp_ro                 : 1;       /**< Relaxed ordering enable for Completion TLPS. */
34387        uint64_t reserved_6_6            : 1;
34388        uint64_t ptlp_ro                 : 1;       /**< Relaxed ordering enable for Posted TLPS. */
34389        uint64_t bar2_enb                : 1;       /**< When set '1' BAR2 is enable and will respond when
34390                                                         clear '0' BAR2 access will cause UR responses. */
34391        uint64_t bar2_esx                : 2;       /**< Value will be XORed with pci-address[37:36] to
34392                                                         determine the endian swap mode. */
34393        uint64_t bar2_cax                : 1;       /**< Value will be XORed with pcie-address[38] to
34394                                                         determine the L2 cache attribute.
34395                                                         Not cached in L2 if XOR result is 1 */
34396        uint64_t wait_com                : 1;       /**< When set '1' casues the NPI to wait for a commit
34397                                                         from the L2C before sending additional stores to
34398                                                         the L2C from the PCIe.
34399                                                         Most applications will not notice a difference, so
34400                                                         should not set this bit. Setting the bit is more
34401                                                         conservative on ordering, lower performance */
34402#else
34403        uint64_t wait_com                : 1;
34404        uint64_t bar2_cax                : 1;
34405        uint64_t bar2_esx                : 2;
34406        uint64_t bar2_enb                : 1;
34407        uint64_t ptlp_ro                 : 1;
34408        uint64_t reserved_6_6            : 1;
34409        uint64_t ctlp_ro                 : 1;
34410        uint64_t inta_map                : 2;
34411        uint64_t intb_map                : 2;
34412        uint64_t intc_map                : 2;
34413        uint64_t intd_map                : 2;
34414        uint64_t inta                    : 1;
34415        uint64_t intb                    : 1;
34416        uint64_t intc                    : 1;
34417        uint64_t intd                    : 1;
34418        uint64_t waitl_com               : 1;
34419        uint64_t reserved_21_63          : 43;
34420#endif
34421    } s;
34422    struct cvmx_npei_ctl_port1_s         cn52xx;
34423    struct cvmx_npei_ctl_port1_s         cn52xxp1;
34424    struct cvmx_npei_ctl_port1_s         cn56xx;
34425    struct cvmx_npei_ctl_port1_s         cn56xxp1;
34426} cvmx_npei_ctl_port1_t;
34427
34428
34429/**
34430 * cvmx_npei_ctl_status
34431 *
34432 * NPEI_CTL_STATUS = NPEI Control Status Register
34433 *
34434 * Contains control and status for NPEI. Writes to this register are not oSrdered with writes/reads to the PCIe Memory space.
34435 * To ensure that a write has completed the user must read the register before making an access(i.e. PCIe memory space)
34436 * that requires the value of this register to be updated.
34437 */
34438typedef union
34439{
34440    uint64_t u64;
34441    struct cvmx_npei_ctl_status_s
34442    {
34443#if __BYTE_ORDER == __BIG_ENDIAN
34444        uint64_t reserved_44_63          : 20;
34445        uint64_t p1_ntags                : 6;       /**< Number of tags avaiable for PCIe Port1.
34446                                                         In RC mode 1 tag is needed for each outbound TLP
34447                                                         that requires a CPL TLP. In Endpoint mode the
34448                                                         number of tags required for a TLP request is
34449                                                         1 per 64-bytes of CPL data + 1.
34450                                                         This field should only be written as part of
34451                                                         reset sequence, before issuing any reads, CFGs, or
34452                                                         IO transactions from the core(s). */
34453        uint64_t p0_ntags                : 6;       /**< Number of tags avaiable for PCIe Port0.
34454                                                         In RC mode 1 tag is needed for each outbound TLP
34455                                                         that requires a CPL TLP. In Endpoint mode the
34456                                                         number of tags required for a TLP request is
34457                                                         1 per 64-bytes of CPL data + 1.
34458                                                         This field should only be written as part of
34459                                                         reset sequence, before issuing any reads, CFGs, or
34460                                                         IO transactions from the core(s). */
34461        uint64_t cfg_rtry                : 16;      /**< The time x 0x10000 in core clocks to wait for a
34462                                                         CPL to a CFG RD that does not carry a Retry Status.
34463                                                         Until such time that the timeout occurs and Retry
34464                                                         Status is received for a CFG RD, the Read CFG Read
34465                                                         will be resent. A value of 0 disables retries and
34466                                                         treats a CPL Retry as a CPL UR. */
34467        uint64_t ring_en                 : 1;       /**< When '0' forces "relative Q position" received
34468                                                         from PKO to be zero, and replicates the back-
34469                                                         pressure indication for the first ring attached
34470                                                         to a PKO port across all the rings attached to a
34471                                                         PKO port. When '0', only rings 0-3 can be used. */
34472        uint64_t lnk_rst                 : 1;       /**< Set when PCIe Core 0 request a link reset due to
34473                                                         link down state. This bit is only reset on raw
34474                                                         reset so it can be read for state to determine if
34475                                                         a reset occured. Bit is cleared when a '1' is
34476                                                         written to this field. */
34477        uint64_t arb                     : 1;       /**< PCIe switch arbitration mode. '0' == fixed priority
34478                                                         NPEI, PCIe0, then PCIe1. '1' == round robin. */
34479        uint64_t pkt_bp                  : 4;       /**< Unused */
34480        uint64_t host_mode               : 1;       /**< Host mode */
34481        uint64_t chip_rev                : 8;       /**< The chip revision. */
34482#else
34483        uint64_t chip_rev                : 8;
34484        uint64_t host_mode               : 1;
34485        uint64_t pkt_bp                  : 4;
34486        uint64_t arb                     : 1;
34487        uint64_t lnk_rst                 : 1;
34488        uint64_t ring_en                 : 1;
34489        uint64_t cfg_rtry                : 16;
34490        uint64_t p0_ntags                : 6;
34491        uint64_t p1_ntags                : 6;
34492        uint64_t reserved_44_63          : 20;
34493#endif
34494    } s;
34495    struct cvmx_npei_ctl_status_s        cn52xx;
34496    struct cvmx_npei_ctl_status_cn52xxp1
34497    {
34498#if __BYTE_ORDER == __BIG_ENDIAN
34499        uint64_t reserved_44_63          : 20;
34500        uint64_t p1_ntags                : 6;       /**< Number of tags avaiable for PCIe Port1.
34501                                                         In RC mode 1 tag is needed for each outbound TLP
34502                                                         that requires a CPL TLP. In Endpoint mode the
34503                                                         number of tags required for a TLP request is
34504                                                         1 per 64-bytes of CPL data + 1.
34505                                                         This field should only be written as part of
34506                                                         reset sequence, before issuing any reads, CFGs, or
34507                                                         IO transactions from the core(s). */
34508        uint64_t p0_ntags                : 6;       /**< Number of tags avaiable for PCIe Port0.
34509                                                         In RC mode 1 tag is needed for each outbound TLP
34510                                                         that requires a CPL TLP. In Endpoint mode the
34511                                                         number of tags required for a TLP request is
34512                                                         1 per 64-bytes of CPL data + 1.
34513                                                         This field should only be written as part of
34514                                                         reset sequence, before issuing any reads, CFGs, or
34515                                                         IO transactions from the core(s). */
34516        uint64_t cfg_rtry                : 16;      /**< The time x 0x10000 in core clocks to wait for a
34517                                                         CPL to a CFG RD that does not carry a Retry Status.
34518                                                         Until such time that the timeout occurs and Retry
34519                                                         Status is received for a CFG RD, the Read CFG Read
34520                                                         will be resent. A value of 0 disables retries and
34521                                                         treats a CPL Retry as a CPL UR. */
34522        uint64_t reserved_15_15          : 1;
34523        uint64_t lnk_rst                 : 1;       /**< Set when PCIe Core 0 request a link reset due to
34524                                                         link down state. This bit is only reset on raw
34525                                                         reset so it can be read for state to determine if
34526                                                         a reset occured. Bit is cleared when a '1' is
34527                                                         written to this field. */
34528        uint64_t arb                     : 1;       /**< PCIe switch arbitration mode. '0' == fixed priority
34529                                                         NPEI, PCIe0, then PCIe1. '1' == round robin. */
34530        uint64_t reserved_9_12           : 4;
34531        uint64_t host_mode               : 1;       /**< Host mode */
34532        uint64_t chip_rev                : 8;       /**< The chip revision. */
34533#else
34534        uint64_t chip_rev                : 8;
34535        uint64_t host_mode               : 1;
34536        uint64_t reserved_9_12           : 4;
34537        uint64_t arb                     : 1;
34538        uint64_t lnk_rst                 : 1;
34539        uint64_t reserved_15_15          : 1;
34540        uint64_t cfg_rtry                : 16;
34541        uint64_t p0_ntags                : 6;
34542        uint64_t p1_ntags                : 6;
34543        uint64_t reserved_44_63          : 20;
34544#endif
34545    } cn52xxp1;
34546    struct cvmx_npei_ctl_status_s        cn56xx;
34547    struct cvmx_npei_ctl_status_cn56xxp1
34548    {
34549#if __BYTE_ORDER == __BIG_ENDIAN
34550        uint64_t reserved_15_63          : 49;
34551        uint64_t lnk_rst                 : 1;       /**< Set when PCIe Core 0 request a link reset due to
34552                                                         link down state. This bit is only reset on raw
34553                                                         reset so it can be read for state to determine if
34554                                                         a reset occured. Bit is cleared when a '1' is
34555                                                         written to this field. */
34556        uint64_t arb                     : 1;       /**< PCIe switch arbitration mode. '0' == fixed priority
34557                                                         NPEI, PCIe0, then PCIe1. '1' == round robin. */
34558        uint64_t pkt_bp                  : 4;       /**< Unused */
34559        uint64_t host_mode               : 1;       /**< Host mode */
34560        uint64_t chip_rev                : 8;       /**< The chip revision. */
34561#else
34562        uint64_t chip_rev                : 8;
34563        uint64_t host_mode               : 1;
34564        uint64_t pkt_bp                  : 4;
34565        uint64_t arb                     : 1;
34566        uint64_t lnk_rst                 : 1;
34567        uint64_t reserved_15_63          : 49;
34568#endif
34569    } cn56xxp1;
34570} cvmx_npei_ctl_status_t;
34571
34572
34573/**
34574 * cvmx_npei_ctl_status2
34575 *
34576 * NPEI_CTL_STATUS2 = NPEI's Control Status2 Register
34577 *
34578 * Contains control and status for NPEI.
34579 * Writes to this register are not ordered with writes/reads to the PCI Memory space.
34580 * To ensure that a write has completed the user must read the register before
34581 * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
34582 */
34583typedef union
34584{
34585    uint64_t u64;
34586    struct cvmx_npei_ctl_status2_s
34587    {
34588#if __BYTE_ORDER == __BIG_ENDIAN
34589        uint64_t reserved_16_63          : 48;
34590        uint64_t mps                     : 1;       /**< Max Payload Size
34591                                                                  0  = 128B
34592                                                                  1  = 256B
34593                                                         Note: PCIE*_CFG030[MPS] must be set to the same
34594                                                               value for proper function. */
34595        uint64_t mrrs                    : 3;       /**< Max Read Request Size
34596                                                                 0 = 128B
34597                                                                 1 = 256B
34598                                                                 2 = 512B
34599                                                                 3 = 1024B
34600                                                                 4 = 2048B
34601                                                                 5 = 4096B
34602                                                         Note: This field must not exceed the desired
34603                                                               max read request size. This means this field
34604                                                               should not exceed PCIE*_CFG030[MRRS]. */
34605        uint64_t c1_w_flt                : 1;       /**< When '1' enables the window filter for reads and
34606                                                         writes using the window registers.
34607                                                         PCIE-Port1.
34608                                                         Unfilter writes are:
34609                                                         MIO,   SubId0
34610                                                         MIO,   SubId7
34611                                                         NPEI,  SubId0
34612                                                         NPEI,  SubId7
34613                                                         POW,   SubId7
34614                                                         IPD,   SubId7
34615                                                         USBN0, SubId7
34616                                                         Unfiltered Reads are:
34617                                                         MIO,   SubId0
34618                                                         MIO,   SubId7
34619                                                         NPEI,  SubId0
34620                                                         NPEI,  SubId7
34621                                                         POW,   SubId1
34622                                                         POW,   SubId2
34623                                                         POW,   SubId3
34624                                                         POW,   SubId7
34625                                                         IPD,   SubId7
34626                                                         USBN0, SubId7 */
34627        uint64_t c0_w_flt                : 1;       /**< When '1' enables the window filter for reads and
34628                                                         writes using the window registers.
34629                                                         PCIE-Port0.
34630                                                         Unfilter writes are:
34631                                                         MIO,   SubId0
34632                                                         MIO,   SubId7
34633                                                         NPEI,  SubId0
34634                                                         NPEI,  SubId7
34635                                                         POW,   SubId7
34636                                                         IPD,   SubId7
34637                                                         USBN0, SubId7
34638                                                         Unfiltered Reads are:
34639                                                         MIO,   SubId0
34640                                                         MIO,   SubId7
34641                                                         NPEI,  SubId0
34642                                                         NPEI,  SubId7
34643                                                         POW,   SubId1
34644                                                         POW,   SubId2
34645                                                         POW,   SubId3
34646                                                         POW,   SubId7
34647                                                         IPD,   SubId7
34648                                                         USBN0, SubId7 */
34649        uint64_t c1_b1_s                 : 3;       /**< Pcie-Port1, Bar1 Size. 1 == 64MB, 2 == 128MB,
34650                                                         3 == 256MB, 4 == 512MB, 5 == 1024MB, 6 == 2048MB,
34651                                                         0 and 7 are reserved. */
34652        uint64_t c0_b1_s                 : 3;       /**< Pcie-Port0, Bar1 Size. 1 == 64MB, 2 == 128MB,
34653                                                         3 == 256MB, 4 == 512MB, 5 == 1024MB, 6 == 2048MB,
34654                                                         0 and 7 are reserved. */
34655        uint64_t c1_wi_d                 : 1;       /**< When set '1' disables access to the Window
34656                                                         Registers from the PCIe-Port1. */
34657        uint64_t c1_b0_d                 : 1;       /**< When set '1' disables access from PCIe-Port1 to
34658                                                         BAR-0 address offsets: Less Than 0x270,
34659                                                         Greater than 0x270 AND less than 0x0520, 0x3BC0,
34660                                                         0x3CD0. */
34661        uint64_t c0_wi_d                 : 1;       /**< When set '1' disables access to the Window
34662                                                         Registers from the PCIe-Port0. */
34663        uint64_t c0_b0_d                 : 1;       /**< When set '1' disables access from PCIe-Port0 to
34664                                                         BAR-0 address offsets: Less Than 0x270,
34665                                                         Greater than 0x270 AND less than 0x0520, 0x3BC0,
34666                                                         0x3CD0. */
34667#else
34668        uint64_t c0_b0_d                 : 1;
34669        uint64_t c0_wi_d                 : 1;
34670        uint64_t c1_b0_d                 : 1;
34671        uint64_t c1_wi_d                 : 1;
34672        uint64_t c0_b1_s                 : 3;
34673        uint64_t c1_b1_s                 : 3;
34674        uint64_t c0_w_flt                : 1;
34675        uint64_t c1_w_flt                : 1;
34676        uint64_t mrrs                    : 3;
34677        uint64_t mps                     : 1;
34678        uint64_t reserved_16_63          : 48;
34679#endif
34680    } s;
34681    struct cvmx_npei_ctl_status2_s       cn52xx;
34682    struct cvmx_npei_ctl_status2_s       cn52xxp1;
34683    struct cvmx_npei_ctl_status2_s       cn56xx;
34684    struct cvmx_npei_ctl_status2_s       cn56xxp1;
34685} cvmx_npei_ctl_status2_t;
34686
34687
34688/**
34689 * cvmx_npei_data_out_cnt
34690 *
34691 * NPEI_DATA_OUT_CNT = NPEI DATA OUT COUNT
34692 *
34693 * The EXEC data out fifo-count and the data unload counter.
34694 */
34695typedef union
34696{
34697    uint64_t u64;
34698    struct cvmx_npei_data_out_cnt_s
34699    {
34700#if __BYTE_ORDER == __BIG_ENDIAN
34701        uint64_t reserved_44_63          : 20;
34702        uint64_t p1_ucnt                 : 16;      /**< PCIE-Port1 Fifo Unload Count. This counter is
34703                                                         incremented by '1' every time a word is removed
34704                                                         from the Data Out FIFO, whose count is shown in
34705                                                         P0_FCNT. */
34706        uint64_t p1_fcnt                 : 6;       /**< PCIE-Port1 Data Out Fifo Count. Number of address
34707                                                         data words to be sent out the PCIe port presently
34708                                                         buffered in the FIFO. */
34709        uint64_t p0_ucnt                 : 16;      /**< PCIE-Port0 Fifo Unload Count. This counter is
34710                                                         incremented by '1' every time a word is removed
34711                                                         from the Data Out FIFO, whose count is shown in
34712                                                         P0_FCNT. */
34713        uint64_t p0_fcnt                 : 6;       /**< PCIE-Port0 Data Out Fifo Count. Number of address
34714                                                         data words to be sent out the PCIe port presently
34715                                                         buffered in the FIFO. */
34716#else
34717        uint64_t p0_fcnt                 : 6;
34718        uint64_t p0_ucnt                 : 16;
34719        uint64_t p1_fcnt                 : 6;
34720        uint64_t p1_ucnt                 : 16;
34721        uint64_t reserved_44_63          : 20;
34722#endif
34723    } s;
34724    struct cvmx_npei_data_out_cnt_s      cn52xx;
34725    struct cvmx_npei_data_out_cnt_s      cn52xxp1;
34726    struct cvmx_npei_data_out_cnt_s      cn56xx;
34727    struct cvmx_npei_data_out_cnt_s      cn56xxp1;
34728} cvmx_npei_data_out_cnt_t;
34729
34730
34731/**
34732 * cvmx_npei_dbg_data
34733 *
34734 * NPEI_DBG_DATA = NPEI Debug Data Register
34735 *
34736 * Value returned on the debug-data lines from the RSLs
34737 */
34738typedef union
34739{
34740    uint64_t u64;
34741    struct cvmx_npei_dbg_data_s
34742    {
34743#if __BYTE_ORDER == __BIG_ENDIAN
34744        uint64_t reserved_28_63          : 36;
34745        uint64_t qlm0_rev_lanes          : 1;       /**< Lane reversal for PCIe port 0 */
34746        uint64_t reserved_25_26          : 2;
34747        uint64_t qlm1_spd                : 2;       /**< Sets the QLM1 frequency
34748                                                         0=1.25 Gbaud
34749                                                         1=2.5 Gbaud
34750                                                         2=3.125 Gbaud
34751                                                         3=3.75 Gbaud */
34752        uint64_t c_mul                   : 5;       /**< PLL_MUL pins sampled at DCOK assertion
34753                                                         Core frequency = 50MHz*C_MUL */
34754        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
34755                                                         debug select value. */
34756        uint64_t data                    : 17;      /**< Value on the debug data lines. */
34757#else
34758        uint64_t data                    : 17;
34759        uint64_t dsel_ext                : 1;
34760        uint64_t c_mul                   : 5;
34761        uint64_t qlm1_spd                : 2;
34762        uint64_t reserved_25_26          : 2;
34763        uint64_t qlm0_rev_lanes          : 1;
34764        uint64_t reserved_28_63          : 36;
34765#endif
34766    } s;
34767    struct cvmx_npei_dbg_data_cn52xx
34768    {
34769#if __BYTE_ORDER == __BIG_ENDIAN
34770        uint64_t reserved_29_63          : 35;
34771        uint64_t qlm0_link_width         : 1;       /**< Link width of PCIe port 0
34772                                                         0 = PCIe port 0 is 2 lanes,
34773                                                             2 lane PCIe port 1 exists
34774                                                         1 = PCIe port 0 is 4 lanes,
34775                                                             PCIe port 1 does not exist */
34776        uint64_t qlm0_rev_lanes          : 1;       /**< Lane reversal for PCIe port 0 */
34777        uint64_t qlm1_mode               : 2;       /**< Sets the QLM1 Mode
34778                                                         0=Reserved
34779                                                         1=XAUI
34780                                                         2=SGMII
34781                                                         3=PICMG */
34782        uint64_t qlm1_spd                : 2;       /**< Sets the QLM1 frequency
34783                                                         0=1.25 Gbaud
34784                                                         1=2.5 Gbaud
34785                                                         2=3.125 Gbaud
34786                                                         3=3.75 Gbaud */
34787        uint64_t c_mul                   : 5;       /**< PLL_MUL pins sampled at DCOK assertion
34788                                                         Core frequency = 50MHz*C_MUL */
34789        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
34790                                                         debug select value. */
34791        uint64_t data                    : 17;      /**< Value on the debug data lines. */
34792#else
34793        uint64_t data                    : 17;
34794        uint64_t dsel_ext                : 1;
34795        uint64_t c_mul                   : 5;
34796        uint64_t qlm1_spd                : 2;
34797        uint64_t qlm1_mode               : 2;
34798        uint64_t qlm0_rev_lanes          : 1;
34799        uint64_t qlm0_link_width         : 1;
34800        uint64_t reserved_29_63          : 35;
34801#endif
34802    } cn52xx;
34803    struct cvmx_npei_dbg_data_cn52xx     cn52xxp1;
34804    struct cvmx_npei_dbg_data_cn56xx
34805    {
34806#if __BYTE_ORDER == __BIG_ENDIAN
34807        uint64_t reserved_29_63          : 35;
34808        uint64_t qlm2_rev_lanes          : 1;       /**< Lane reversal for PCIe port 1 */
34809        uint64_t qlm0_rev_lanes          : 1;       /**< Lane reversal for PCIe port 0 */
34810        uint64_t qlm3_spd                : 2;       /**< Sets the QLM3 frequency
34811                                                         0=1.25 Gbaud
34812                                                         1=2.5 Gbaud
34813                                                         2=3.125 Gbaud
34814                                                         3=3.75 Gbaud */
34815        uint64_t qlm1_spd                : 2;       /**< Sets the QLM1 frequency
34816                                                         0=1.25 Gbaud
34817                                                         1=2.5 Gbaud
34818                                                         2=3.125 Gbaud
34819                                                         3=3.75 Gbaud */
34820        uint64_t c_mul                   : 5;       /**< PLL_MUL pins sampled at DCOK assertion
34821                                                         Core frequency = 50MHz*C_MUL */
34822        uint64_t dsel_ext                : 1;       /**< Allows changes in the external pins to set the
34823                                                         debug select value. */
34824        uint64_t data                    : 17;      /**< Value on the debug data lines. */
34825#else
34826        uint64_t data                    : 17;
34827        uint64_t dsel_ext                : 1;
34828        uint64_t c_mul                   : 5;
34829        uint64_t qlm1_spd                : 2;
34830        uint64_t qlm3_spd                : 2;
34831        uint64_t qlm0_rev_lanes          : 1;
34832        uint64_t qlm2_rev_lanes          : 1;
34833        uint64_t reserved_29_63          : 35;
34834#endif
34835    } cn56xx;
34836    struct cvmx_npei_dbg_data_cn56xx     cn56xxp1;
34837} cvmx_npei_dbg_data_t;
34838
34839
34840/**
34841 * cvmx_npei_dbg_select
34842 *
34843 * NPEI_DBG_SELECT = Debug Select Register
34844 *
34845 * Contains the debug select value last written to the RSLs.
34846 */
34847typedef union
34848{
34849    uint64_t u64;
34850    struct cvmx_npei_dbg_select_s
34851    {
34852#if __BYTE_ORDER == __BIG_ENDIAN
34853        uint64_t reserved_16_63          : 48;
34854        uint64_t dbg_sel                 : 16;      /**< When this register is written its value is sent to
34855                                                         all RSLs. */
34856#else
34857        uint64_t dbg_sel                 : 16;
34858        uint64_t reserved_16_63          : 48;
34859#endif
34860    } s;
34861    struct cvmx_npei_dbg_select_s        cn52xx;
34862    struct cvmx_npei_dbg_select_s        cn52xxp1;
34863    struct cvmx_npei_dbg_select_s        cn56xx;
34864    struct cvmx_npei_dbg_select_s        cn56xxp1;
34865} cvmx_npei_dbg_select_t;
34866
34867
34868/**
34869 * cvmx_npei_dma#_counts
34870 *
34871 * NPEI_DMA[0..4]_COUNTS = DMA Instruction Counts
34872 *
34873 * Values for determing the number of instructions for DMA[0..4] in the NPEI.
34874 */
34875typedef union
34876{
34877    uint64_t u64;
34878    struct cvmx_npei_dmax_counts_s
34879    {
34880#if __BYTE_ORDER == __BIG_ENDIAN
34881        uint64_t reserved_39_63          : 25;
34882        uint64_t fcnt                    : 7;       /**< Number of words in the Instruction FIFO. */
34883        uint64_t dbell                   : 32;      /**< Number of available words of Instructions to read. */
34884#else
34885        uint64_t dbell                   : 32;
34886        uint64_t fcnt                    : 7;
34887        uint64_t reserved_39_63          : 25;
34888#endif
34889    } s;
34890    struct cvmx_npei_dmax_counts_s       cn52xx;
34891    struct cvmx_npei_dmax_counts_s       cn52xxp1;
34892    struct cvmx_npei_dmax_counts_s       cn56xx;
34893    struct cvmx_npei_dmax_counts_s       cn56xxp1;
34894} cvmx_npei_dmax_counts_t;
34895
34896
34897/**
34898 * cvmx_npei_dma#_dbell
34899 *
34900 * NPEI_DMA_DBELL[0..4] = DMA Door Bell
34901 *
34902 * The door bell register for DMA[0..4] queue.
34903 */
34904typedef union
34905{
34906    uint32_t u32;
34907    struct cvmx_npei_dmax_dbell_s
34908    {
34909#if __BYTE_ORDER == __BIG_ENDIAN
34910        uint32_t reserved_16_31          : 16;
34911        uint32_t dbell                   : 16;      /**< The value written to this register is added to the
34912                                                         number of 8byte words to be read and processes for
34913                                                         the low priority dma queue. */
34914#else
34915        uint32_t dbell                   : 16;
34916        uint32_t reserved_16_31          : 16;
34917#endif
34918    } s;
34919    struct cvmx_npei_dmax_dbell_s        cn52xx;
34920    struct cvmx_npei_dmax_dbell_s        cn52xxp1;
34921    struct cvmx_npei_dmax_dbell_s        cn56xx;
34922    struct cvmx_npei_dmax_dbell_s        cn56xxp1;
34923} cvmx_npei_dmax_dbell_t;
34924
34925
34926/**
34927 * cvmx_npei_dma#_ibuff_saddr
34928 *
34929 * NPEI_DMA[0..4]_IBUFF_SADDR = DMA Instruction Buffer Starting Address
34930 *
34931 * The address to start reading Instructions from for DMA[0..4].
34932 */
34933typedef union
34934{
34935    uint64_t u64;
34936    struct cvmx_npei_dmax_ibuff_saddr_s
34937    {
34938#if __BYTE_ORDER == __BIG_ENDIAN
34939        uint64_t reserved_37_63          : 27;
34940        uint64_t idle                    : 1;       /**< DMA Engine IDLE state */
34941        uint64_t saddr                   : 29;      /**< The 128 byte aligned starting address to read the
34942                                                         first instruction. SADDR is address bit 35:7 of the
34943                                                         first instructions address. */
34944        uint64_t reserved_0_6            : 7;
34945#else
34946        uint64_t reserved_0_6            : 7;
34947        uint64_t saddr                   : 29;
34948        uint64_t idle                    : 1;
34949        uint64_t reserved_37_63          : 27;
34950#endif
34951    } s;
34952    struct cvmx_npei_dmax_ibuff_saddr_s  cn52xx;
34953    struct cvmx_npei_dmax_ibuff_saddr_cn52xxp1
34954    {
34955#if __BYTE_ORDER == __BIG_ENDIAN
34956        uint64_t reserved_36_63          : 28;
34957        uint64_t saddr                   : 29;      /**< The 128 byte aligned starting address to read the
34958                                                         first instruction. SADDR is address bit 35:7 of the
34959                                                         first instructions address. */
34960        uint64_t reserved_0_6            : 7;
34961#else
34962        uint64_t reserved_0_6            : 7;
34963        uint64_t saddr                   : 29;
34964        uint64_t reserved_36_63          : 28;
34965#endif
34966    } cn52xxp1;
34967    struct cvmx_npei_dmax_ibuff_saddr_s  cn56xx;
34968    struct cvmx_npei_dmax_ibuff_saddr_cn52xxp1 cn56xxp1;
34969} cvmx_npei_dmax_ibuff_saddr_t;
34970
34971
34972/**
34973 * cvmx_npei_dma#_naddr
34974 *
34975 * NPEI_DMA[0..4]_NADDR = DMA Next Ichunk Address
34976 *
34977 * Place NPEI will read the next Ichunk data from. This is valid when state is 0
34978 */
34979typedef union
34980{
34981    uint64_t u64;
34982    struct cvmx_npei_dmax_naddr_s
34983    {
34984#if __BYTE_ORDER == __BIG_ENDIAN
34985        uint64_t reserved_36_63          : 28;
34986        uint64_t addr                    : 36;      /**< The next L2C address to read DMA# instructions
34987                                                         from. */
34988#else
34989        uint64_t addr                    : 36;
34990        uint64_t reserved_36_63          : 28;
34991#endif
34992    } s;
34993    struct cvmx_npei_dmax_naddr_s        cn52xx;
34994    struct cvmx_npei_dmax_naddr_s        cn52xxp1;
34995    struct cvmx_npei_dmax_naddr_s        cn56xx;
34996    struct cvmx_npei_dmax_naddr_s        cn56xxp1;
34997} cvmx_npei_dmax_naddr_t;
34998
34999
35000/**
35001 * cvmx_npei_dma0_int_level
35002 *
35003 * NPEI_DMA0_INT_LEVEL = NPEI DMA0 Interrupt Level
35004 *
35005 * Thresholds for DMA count and timer interrupts for DMA0.
35006 */
35007typedef union
35008{
35009    uint64_t u64;
35010    struct cvmx_npei_dma0_int_level_s
35011    {
35012#if __BYTE_ORDER == __BIG_ENDIAN
35013        uint64_t time                    : 32;      /**< Whenever the DMA_CNT0 timer exceeds
35014                                                         this value, NPEI_INT_SUM[DTIME0] is set.
35015                                                         The DMA_CNT0 timer increments every core clock
35016                                                         whenever NPEI_DMA_CNTS[DMA0]!=0, and is cleared
35017                                                         when NPEI_INT_SUM[DTIME0] is written with one. */
35018        uint64_t cnt                     : 32;      /**< Whenever NPEI_DMA_CNTS[DMA0] exceeds this value,
35019                                                         NPEI_INT_SUM[DCNT0] is set. */
35020#else
35021        uint64_t cnt                     : 32;
35022        uint64_t time                    : 32;
35023#endif
35024    } s;
35025    struct cvmx_npei_dma0_int_level_s    cn52xx;
35026    struct cvmx_npei_dma0_int_level_s    cn52xxp1;
35027    struct cvmx_npei_dma0_int_level_s    cn56xx;
35028    struct cvmx_npei_dma0_int_level_s    cn56xxp1;
35029} cvmx_npei_dma0_int_level_t;
35030
35031
35032/**
35033 * cvmx_npei_dma1_int_level
35034 *
35035 * NPEI_DMA1_INT_LEVEL = NPEI DMA1 Interrupt Level
35036 *
35037 * Thresholds for DMA count and timer interrupts for DMA1.
35038 */
35039typedef union
35040{
35041    uint64_t u64;
35042    struct cvmx_npei_dma1_int_level_s
35043    {
35044#if __BYTE_ORDER == __BIG_ENDIAN
35045        uint64_t time                    : 32;      /**< Whenever the DMA_CNT1 timer exceeds
35046                                                         this value, NPEI_INT_SUM[DTIME1] is set.
35047                                                         The DMA_CNT1 timer increments every core clock
35048                                                         whenever NPEI_DMA_CNTS[DMA1]!=0, and is cleared
35049                                                         when NPEI_INT_SUM[DTIME1] is written with one. */
35050        uint64_t cnt                     : 32;      /**< Whenever NPEI_DMA_CNTS[DMA1] exceeds this value,
35051                                                         NPEI_INT_SUM[DCNT1] is set. */
35052#else
35053        uint64_t cnt                     : 32;
35054        uint64_t time                    : 32;
35055#endif
35056    } s;
35057    struct cvmx_npei_dma1_int_level_s    cn52xx;
35058    struct cvmx_npei_dma1_int_level_s    cn52xxp1;
35059    struct cvmx_npei_dma1_int_level_s    cn56xx;
35060    struct cvmx_npei_dma1_int_level_s    cn56xxp1;
35061} cvmx_npei_dma1_int_level_t;
35062
35063
35064/**
35065 * cvmx_npei_dma_cnts
35066 *
35067 * NPEI_DMA_CNTS = NPEI DMA Count
35068 *
35069 * The DMA Count values for DMA0 and DMA1.
35070 */
35071typedef union
35072{
35073    uint64_t u64;
35074    struct cvmx_npei_dma_cnts_s
35075    {
35076#if __BYTE_ORDER == __BIG_ENDIAN
35077        uint64_t dma1                    : 32;      /**< The DMA counter 1.
35078                                                         Writing this field will cause the written value to
35079                                                         be subtracted from DMA1. SW should use a 4-byte
35080                                                         write to access this field so as not to change the
35081                                                         value of other fields in this register.
35082                                                         HW will optionally increment this field after
35083                                                         it completes an OUTBOUND or EXTERNAL-ONLY DMA
35084                                                         instruction. These increments may cause interrupts.
35085                                                         Refer to NPEI_DMA1_INT_LEVEL and
35086                                                         NPEI_INT_SUM[DCNT1,DTIME1]. */
35087        uint64_t dma0                    : 32;      /**< The DMA counter 0.
35088                                                         Writing this field will cause the written value to
35089                                                         be subtracted from DMA0. SW should use a 4-byte
35090                                                         write to access this field so as not to change the
35091                                                         value of other fields in this register.
35092                                                         HW will optionally increment this field after
35093                                                         it completes an OUTBOUND or EXTERNAL-ONLY DMA
35094                                                         instruction. These increments may cause interrupts.
35095                                                         Refer to NPEI_DMA0_INT_LEVEL and
35096                                                         NPEI_INT_SUM[DCNT0,DTIME0]. */
35097#else
35098        uint64_t dma0                    : 32;
35099        uint64_t dma1                    : 32;
35100#endif
35101    } s;
35102    struct cvmx_npei_dma_cnts_s          cn52xx;
35103    struct cvmx_npei_dma_cnts_s          cn52xxp1;
35104    struct cvmx_npei_dma_cnts_s          cn56xx;
35105    struct cvmx_npei_dma_cnts_s          cn56xxp1;
35106} cvmx_npei_dma_cnts_t;
35107
35108
35109/**
35110 * cvmx_npei_dma_control
35111 *
35112 * NPEI_DMA_CONTROL = DMA Control Register
35113 *
35114 * Controls operation of the DMA IN/OUT.
35115 */
35116typedef union
35117{
35118    uint64_t u64;
35119    struct cvmx_npei_dma_control_s
35120    {
35121#if __BYTE_ORDER == __BIG_ENDIAN
35122        uint64_t reserved_40_63          : 24;
35123        uint64_t p_32b_m                 : 1;       /**< DMA PCIE 32-bit word read disable bit
35124                                                         When 0, enable the feature */
35125        uint64_t dma4_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35126                                                         engine. After being enabled a DMA engine should not
35127                                                         be dis-abled while processing instructions. */
35128        uint64_t dma3_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35129                                                         engine. After being enabled a DMA engine should not
35130                                                         be dis-abled while processing instructions. */
35131        uint64_t dma2_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35132                                                         engine. After being enabled a DMA engine should not
35133                                                         be dis-abled while processing instructions. */
35134        uint64_t dma1_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35135                                                         engine. After being enabled a DMA engine should not
35136                                                         be dis-abled while processing instructions. */
35137        uint64_t dma0_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35138                                                         engine. After being enabled a DMA engine should not
35139                                                         be dis-abled while processing instructions. */
35140        uint64_t b0_lend                 : 1;       /**< When set '1' and the NPEI is in the mode to write
35141                                                         0 to L2C memory when a DMA is done, the address
35142                                                         to be written to will be treated as a Little
35143                                                         Endian address. */
35144        uint64_t dwb_denb                : 1;       /**< When set '1' the NPEI will send a value in the DWB
35145                                                         field for a free page operation for the memory
35146                                                         that contained the data. */
35147        uint64_t dwb_ichk                : 9;       /**< When Instruction Chunks for DMA operations are freed
35148                                                         this value is used for the DWB field of the
35149                                                         operation. */
35150        uint64_t fpa_que                 : 3;       /**< The FPA queue that the instruction-chunk page will
35151                                                         be returned to when used. */
35152        uint64_t o_add1                  : 1;       /**< When set '1' 1 will be added to the DMA counters,
35153                                                         if '0' then the number of bytes in the dma transfer
35154                                                         will be added to the count register. */
35155        uint64_t o_ro                    : 1;       /**< Relaxed Ordering Mode for DMA. */
35156        uint64_t o_ns                    : 1;       /**< Nosnoop For DMA. */
35157        uint64_t o_es                    : 2;       /**< Endian Swap Mode for DMA. */
35158        uint64_t o_mode                  : 1;       /**< Select PCI_POINTER MODE to be used.
35159                                                         '1' use pointer values for address and register
35160                                                         values for RO, ES, and NS, '0' use register
35161                                                         values for address and pointer values for
35162                                                         RO, ES, and NS. */
35163        uint64_t csize                   : 14;      /**< The size in words of the DMA Instruction Chunk.
35164                                                         This value should only be written once. After
35165                                                         writing this value a new value will not be
35166                                                         recognized until the end of the DMA I-Chunk is
35167                                                         reached. */
35168#else
35169        uint64_t csize                   : 14;
35170        uint64_t o_mode                  : 1;
35171        uint64_t o_es                    : 2;
35172        uint64_t o_ns                    : 1;
35173        uint64_t o_ro                    : 1;
35174        uint64_t o_add1                  : 1;
35175        uint64_t fpa_que                 : 3;
35176        uint64_t dwb_ichk                : 9;
35177        uint64_t dwb_denb                : 1;
35178        uint64_t b0_lend                 : 1;
35179        uint64_t dma0_enb                : 1;
35180        uint64_t dma1_enb                : 1;
35181        uint64_t dma2_enb                : 1;
35182        uint64_t dma3_enb                : 1;
35183        uint64_t dma4_enb                : 1;
35184        uint64_t p_32b_m                 : 1;
35185        uint64_t reserved_40_63          : 24;
35186#endif
35187    } s;
35188    struct cvmx_npei_dma_control_s       cn52xx;
35189    struct cvmx_npei_dma_control_cn52xxp1
35190    {
35191#if __BYTE_ORDER == __BIG_ENDIAN
35192        uint64_t reserved_38_63          : 26;
35193        uint64_t dma3_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35194                                                         engine. After being enabled a DMA engine should not
35195                                                         be dis-abled while processing instructions. */
35196        uint64_t dma2_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35197                                                         engine. After being enabled a DMA engine should not
35198                                                         be dis-abled while processing instructions. */
35199        uint64_t dma1_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35200                                                         engine. After being enabled a DMA engine should not
35201                                                         be dis-abled while processing instructions. */
35202        uint64_t dma0_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35203                                                         engine. After being enabled a DMA engine should not
35204                                                         be dis-abled while processing instructions. */
35205        uint64_t b0_lend                 : 1;       /**< When set '1' and the NPEI is in the mode to write
35206                                                         0 to L2C memory when a DMA is done, the address
35207                                                         to be written to will be treated as a Little
35208                                                         Endian address. */
35209        uint64_t dwb_denb                : 1;       /**< When set '1' the NPEI will send a value in the DWB
35210                                                         field for a free page operation for the memory
35211                                                         that contained the data. */
35212        uint64_t dwb_ichk                : 9;       /**< When Instruction Chunks for DMA operations are freed
35213                                                         this value is used for the DWB field of the
35214                                                         operation. */
35215        uint64_t fpa_que                 : 3;       /**< The FPA queue that the instruction-chunk page will
35216                                                         be returned to when used. */
35217        uint64_t o_add1                  : 1;       /**< When set '1' 1 will be added to the DMA counters,
35218                                                         if '0' then the number of bytes in the dma transfer
35219                                                         will be added to the count register. */
35220        uint64_t o_ro                    : 1;       /**< Relaxed Ordering Mode for DMA. */
35221        uint64_t o_ns                    : 1;       /**< Nosnoop For DMA. */
35222        uint64_t o_es                    : 2;       /**< Endian Swap Mode for DMA. */
35223        uint64_t o_mode                  : 1;       /**< Select PCI_POINTER MODE to be used.
35224                                                         '1' use pointer values for address and register
35225                                                         values for RO, ES, and NS, '0' use register
35226                                                         values for address and pointer values for
35227                                                         RO, ES, and NS. */
35228        uint64_t csize                   : 14;      /**< The size in words of the DMA Instruction Chunk.
35229                                                         This value should only be written once. After
35230                                                         writing this value a new value will not be
35231                                                         recognized until the end of the DMA I-Chunk is
35232                                                         reached. */
35233#else
35234        uint64_t csize                   : 14;
35235        uint64_t o_mode                  : 1;
35236        uint64_t o_es                    : 2;
35237        uint64_t o_ns                    : 1;
35238        uint64_t o_ro                    : 1;
35239        uint64_t o_add1                  : 1;
35240        uint64_t fpa_que                 : 3;
35241        uint64_t dwb_ichk                : 9;
35242        uint64_t dwb_denb                : 1;
35243        uint64_t b0_lend                 : 1;
35244        uint64_t dma0_enb                : 1;
35245        uint64_t dma1_enb                : 1;
35246        uint64_t dma2_enb                : 1;
35247        uint64_t dma3_enb                : 1;
35248        uint64_t reserved_38_63          : 26;
35249#endif
35250    } cn52xxp1;
35251    struct cvmx_npei_dma_control_s       cn56xx;
35252    struct cvmx_npei_dma_control_cn56xxp1
35253    {
35254#if __BYTE_ORDER == __BIG_ENDIAN
35255        uint64_t reserved_39_63          : 25;
35256        uint64_t dma4_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35257                                                         engine. After being enabled a DMA engine should not
35258                                                         be dis-abled while processing instructions. */
35259        uint64_t dma3_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35260                                                         engine. After being enabled a DMA engine should not
35261                                                         be dis-abled while processing instructions. */
35262        uint64_t dma2_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35263                                                         engine. After being enabled a DMA engine should not
35264                                                         be dis-abled while processing instructions. */
35265        uint64_t dma1_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35266                                                         engine. After being enabled a DMA engine should not
35267                                                         be dis-abled while processing instructions. */
35268        uint64_t dma0_enb                : 1;       /**< DMA# enable. Enables the operation of the DMA
35269                                                         engine. After being enabled a DMA engine should not
35270                                                         be dis-abled while processing instructions. */
35271        uint64_t b0_lend                 : 1;       /**< When set '1' and the NPEI is in the mode to write
35272                                                         0 to L2C memory when a DMA is done, the address
35273                                                         to be written to will be treated as a Little
35274                                                         Endian address. */
35275        uint64_t dwb_denb                : 1;       /**< When set '1' the NPEI will send a value in the DWB
35276                                                         field for a free page operation for the memory
35277                                                         that contained the data. */
35278        uint64_t dwb_ichk                : 9;       /**< When Instruction Chunks for DMA operations are freed
35279                                                         this value is used for the DWB field of the
35280                                                         operation. */
35281        uint64_t fpa_que                 : 3;       /**< The FPA queue that the instruction-chunk page will
35282                                                         be returned to when used. */
35283        uint64_t o_add1                  : 1;       /**< When set '1' 1 will be added to the DMA counters,
35284                                                         if '0' then the number of bytes in the dma transfer
35285                                                         will be added to the count register. */
35286        uint64_t o_ro                    : 1;       /**< Relaxed Ordering Mode for DMA. */
35287        uint64_t o_ns                    : 1;       /**< Nosnoop For DMA. */
35288        uint64_t o_es                    : 2;       /**< Endian Swap Mode for DMA. */
35289        uint64_t o_mode                  : 1;       /**< Select PCI_POINTER MODE to be used.
35290                                                         '1' use pointer values for address and register
35291                                                         values for RO, ES, and NS, '0' use register
35292                                                         values for address and pointer values for
35293                                                         RO, ES, and NS. */
35294        uint64_t csize                   : 14;      /**< The size in words of the DMA Instruction Chunk.
35295                                                         This value should only be written once. After
35296                                                         writing this value a new value will not be
35297                                                         recognized until the end of the DMA I-Chunk is
35298                                                         reached. */
35299#else
35300        uint64_t csize                   : 14;
35301        uint64_t o_mode                  : 1;
35302        uint64_t o_es                    : 2;
35303        uint64_t o_ns                    : 1;
35304        uint64_t o_ro                    : 1;
35305        uint64_t o_add1                  : 1;
35306        uint64_t fpa_que                 : 3;
35307        uint64_t dwb_ichk                : 9;
35308        uint64_t dwb_denb                : 1;
35309        uint64_t b0_lend                 : 1;
35310        uint64_t dma0_enb                : 1;
35311        uint64_t dma1_enb                : 1;
35312        uint64_t dma2_enb                : 1;
35313        uint64_t dma3_enb                : 1;
35314        uint64_t dma4_enb                : 1;
35315        uint64_t reserved_39_63          : 25;
35316#endif
35317    } cn56xxp1;
35318} cvmx_npei_dma_control_t;
35319
35320
35321/**
35322 * cvmx_npei_dma_pcie_req_num
35323 *
35324 * NPEI_DMA_PCIE_REQ_NUM = NPEI DMA PCIE Outstanding Read Request Number
35325 *
35326 * Outstanding PCIE read request number for DMAs and Packet, maximum number is 16
35327 */
35328typedef union
35329{
35330    uint64_t u64;
35331    struct cvmx_npei_dma_pcie_req_num_s
35332    {
35333#if __BYTE_ORDER == __BIG_ENDIAN
35334        uint64_t dma_arb                 : 1;       /**< DMA_PKT Read Request Arbitration
35335                                                         - 1: DMA0-4 and PKT are round robin. i.e.
35336                                                             DMA0-DMA1-DMA2-DMA3-DMA4-PKT...
35337                                                         - 0: DMA0-4 are round robin, pkt gets selected
35338                                                             half the time. i.e.
35339                                                             DMA0-PKT-DMA1-PKT-DMA2-PKT-DMA3-PKT-DMA4-PKT... */
35340        uint64_t reserved_53_62          : 10;
35341        uint64_t pkt_cnt                 : 5;       /**< PKT outstanding PCIE Read Request Number for each
35342                                                         PCIe port
35343                                                         When PKT_CNT=x, for each PCIe port, the number
35344                                                         of outstanding PCIe memory space reads by the PCIe
35345                                                         packet input/output will not exceed x.
35346                                                         Valid Number is between 1 and 16 */
35347        uint64_t reserved_45_47          : 3;
35348        uint64_t dma4_cnt                : 5;       /**< DMA4 outstanding PCIE Read Request Number
35349                                                         When DMA4_CNT=x, the number of outstanding PCIe
35350                                                         memory space reads by the PCIe DMA engine 4
35351                                                         will not exceed x.
35352                                                         Valid Number is between 1 and 16 */
35353        uint64_t reserved_37_39          : 3;
35354        uint64_t dma3_cnt                : 5;       /**< DMA3 outstanding PCIE Read Request Number
35355                                                         When DMA3_CNT=x, the number of outstanding PCIe
35356                                                         memory space reads by the PCIe DMA engine 3
35357                                                         will not exceed x.
35358                                                         Valid Number is between 1 and 16 */
35359        uint64_t reserved_29_31          : 3;
35360        uint64_t dma2_cnt                : 5;       /**< DMA2 outstanding PCIE Read Request Number
35361                                                         When DMA2_CNT=x, the number of outstanding PCIe
35362                                                         memory space reads by the PCIe DMA engine 2
35363                                                         will not exceed x.
35364                                                         Valid Number is between 1 and 16 */
35365        uint64_t reserved_21_23          : 3;
35366        uint64_t dma1_cnt                : 5;       /**< DMA1 outstanding PCIE Read Request Number
35367                                                         When DMA1_CNT=x, the number of outstanding PCIe
35368                                                         memory space reads by the PCIe DMA engine 1
35369                                                         will not exceed x.
35370                                                         Valid Number is between 1 and 16 */
35371        uint64_t reserved_13_15          : 3;
35372        uint64_t dma0_cnt                : 5;       /**< DMA0 outstanding PCIE Read Request Number
35373                                                         When DMA0_CNT=x, the number of outstanding PCIe
35374                                                         memory space reads by the PCIe DMA engine 0
35375                                                         will not exceed x.
35376                                                         Valid Number is between 1 and 16 */
35377        uint64_t reserved_5_7            : 3;
35378        uint64_t dma_cnt                 : 5;       /**< Total outstanding PCIE Read Request Number for each
35379                                                         PCIe port
35380                                                         When DMA_CNT=x, for each PCIe port, the total
35381                                                         number of outstanding PCIe memory space reads
35382                                                         by the PCIe DMA engines and packet input/output
35383                                                         will not exceed x.
35384                                                         Valid Number is between 1 and 16 */
35385#else
35386        uint64_t dma_cnt                 : 5;
35387        uint64_t reserved_5_7            : 3;
35388        uint64_t dma0_cnt                : 5;
35389        uint64_t reserved_13_15          : 3;
35390        uint64_t dma1_cnt                : 5;
35391        uint64_t reserved_21_23          : 3;
35392        uint64_t dma2_cnt                : 5;
35393        uint64_t reserved_29_31          : 3;
35394        uint64_t dma3_cnt                : 5;
35395        uint64_t reserved_37_39          : 3;
35396        uint64_t dma4_cnt                : 5;
35397        uint64_t reserved_45_47          : 3;
35398        uint64_t pkt_cnt                 : 5;
35399        uint64_t reserved_53_62          : 10;
35400        uint64_t dma_arb                 : 1;
35401#endif
35402    } s;
35403    struct cvmx_npei_dma_pcie_req_num_s  cn52xx;
35404    struct cvmx_npei_dma_pcie_req_num_s  cn56xx;
35405} cvmx_npei_dma_pcie_req_num_t;
35406
35407
35408/**
35409 * cvmx_npei_dma_state1
35410 *
35411 * NPEI_DMA_STATE1 = NPI's DMA State 1
35412 *
35413 * Results from DMA state register 1
35414 */
35415typedef union
35416{
35417    uint64_t u64;
35418    struct cvmx_npei_dma_state1_s
35419    {
35420#if __BYTE_ORDER == __BIG_ENDIAN
35421        uint64_t reserved_40_63          : 24;
35422        uint64_t d4_dwe                  : 8;       /**< DMA4 PICe Write State */
35423        uint64_t d3_dwe                  : 8;       /**< DMA3 PICe Write State */
35424        uint64_t d2_dwe                  : 8;       /**< DMA2 PICe Write State */
35425        uint64_t d1_dwe                  : 8;       /**< DMA1 PICe Write State */
35426        uint64_t d0_dwe                  : 8;       /**< DMA0 PICe Write State */
35427#else
35428        uint64_t d0_dwe                  : 8;
35429        uint64_t d1_dwe                  : 8;
35430        uint64_t d2_dwe                  : 8;
35431        uint64_t d3_dwe                  : 8;
35432        uint64_t d4_dwe                  : 8;
35433        uint64_t reserved_40_63          : 24;
35434#endif
35435    } s;
35436    struct cvmx_npei_dma_state1_s        cn52xx;
35437} cvmx_npei_dma_state1_t;
35438
35439
35440/**
35441 * cvmx_npei_dma_state1_p1
35442 *
35443 * NPEI_DMA_STATE1_P1 = NPEI DMA Request and Instruction State
35444 *
35445 * DMA engine Debug information.
35446 */
35447typedef union
35448{
35449    uint64_t u64;
35450    struct cvmx_npei_dma_state1_p1_s
35451    {
35452#if __BYTE_ORDER == __BIG_ENDIAN
35453        uint64_t reserved_60_63          : 4;
35454        uint64_t d0_difst                : 7;       /**< DMA engine 0 dif instruction read state */
35455        uint64_t d1_difst                : 7;       /**< DMA engine 1 dif instruction read state */
35456        uint64_t d2_difst                : 7;       /**< DMA engine 2 dif instruction read state */
35457        uint64_t d3_difst                : 7;       /**< DMA engine 3 dif instruction read state */
35458        uint64_t d4_difst                : 7;       /**< DMA engine 4 dif instruction read state */
35459        uint64_t d0_reqst                : 5;       /**< DMA engine 0 request data state */
35460        uint64_t d1_reqst                : 5;       /**< DMA engine 1 request data state */
35461        uint64_t d2_reqst                : 5;       /**< DMA engine 2 request data state */
35462        uint64_t d3_reqst                : 5;       /**< DMA engine 3 request data state */
35463        uint64_t d4_reqst                : 5;       /**< DMA engine 4 request data state */
35464#else
35465        uint64_t d4_reqst                : 5;
35466        uint64_t d3_reqst                : 5;
35467        uint64_t d2_reqst                : 5;
35468        uint64_t d1_reqst                : 5;
35469        uint64_t d0_reqst                : 5;
35470        uint64_t d4_difst                : 7;
35471        uint64_t d3_difst                : 7;
35472        uint64_t d2_difst                : 7;
35473        uint64_t d1_difst                : 7;
35474        uint64_t d0_difst                : 7;
35475        uint64_t reserved_60_63          : 4;
35476#endif
35477    } s;
35478    struct cvmx_npei_dma_state1_p1_cn52xxp1
35479    {
35480#if __BYTE_ORDER == __BIG_ENDIAN
35481        uint64_t reserved_60_63          : 4;
35482        uint64_t d0_difst                : 7;       /**< DMA engine 0 dif instruction read state */
35483        uint64_t d1_difst                : 7;       /**< DMA engine 1 dif instruction read state */
35484        uint64_t d2_difst                : 7;       /**< DMA engine 2 dif instruction read state */
35485        uint64_t d3_difst                : 7;       /**< DMA engine 3 dif instruction read state */
35486        uint64_t reserved_25_31          : 7;
35487        uint64_t d0_reqst                : 5;       /**< DMA engine 0 request data state */
35488        uint64_t d1_reqst                : 5;       /**< DMA engine 1 request data state */
35489        uint64_t d2_reqst                : 5;       /**< DMA engine 2 request data state */
35490        uint64_t d3_reqst                : 5;       /**< DMA engine 3 request data state */
35491        uint64_t reserved_0_4            : 5;
35492#else
35493        uint64_t reserved_0_4            : 5;
35494        uint64_t d3_reqst                : 5;
35495        uint64_t d2_reqst                : 5;
35496        uint64_t d1_reqst                : 5;
35497        uint64_t d0_reqst                : 5;
35498        uint64_t reserved_25_31          : 7;
35499        uint64_t d3_difst                : 7;
35500        uint64_t d2_difst                : 7;
35501        uint64_t d1_difst                : 7;
35502        uint64_t d0_difst                : 7;
35503        uint64_t reserved_60_63          : 4;
35504#endif
35505    } cn52xxp1;
35506    struct cvmx_npei_dma_state1_p1_s     cn56xxp1;
35507} cvmx_npei_dma_state1_p1_t;
35508
35509
35510/**
35511 * cvmx_npei_dma_state2
35512 *
35513 * NPEI_DMA_STATE2 = NPI's DMA State 2
35514 *
35515 * Results from DMA state register 2
35516 */
35517typedef union
35518{
35519    uint64_t u64;
35520    struct cvmx_npei_dma_state2_s
35521    {
35522#if __BYTE_ORDER == __BIG_ENDIAN
35523        uint64_t reserved_28_63          : 36;
35524        uint64_t ndwe                    : 4;       /**< DMA L2C Write State */
35525        uint64_t reserved_21_23          : 3;
35526        uint64_t ndre                    : 5;       /**< DMA L2C Read State */
35527        uint64_t reserved_10_15          : 6;
35528        uint64_t prd                     : 10;      /**< DMA PICe Read State */
35529#else
35530        uint64_t prd                     : 10;
35531        uint64_t reserved_10_15          : 6;
35532        uint64_t ndre                    : 5;
35533        uint64_t reserved_21_23          : 3;
35534        uint64_t ndwe                    : 4;
35535        uint64_t reserved_28_63          : 36;
35536#endif
35537    } s;
35538    struct cvmx_npei_dma_state2_s        cn52xx;
35539} cvmx_npei_dma_state2_t;
35540
35541
35542/**
35543 * cvmx_npei_dma_state2_p1
35544 *
35545 * NPEI_DMA_STATE2_P1 = NPEI DMA Instruction Fetch State
35546 *
35547 * DMA engine Debug information.
35548 */
35549typedef union
35550{
35551    uint64_t u64;
35552    struct cvmx_npei_dma_state2_p1_s
35553    {
35554#if __BYTE_ORDER == __BIG_ENDIAN
35555        uint64_t reserved_45_63          : 19;
35556        uint64_t d0_dffst                : 9;       /**< DMA engine 0 dif instruction fetch state */
35557        uint64_t d1_dffst                : 9;       /**< DMA engine 1 dif instruction fetch state */
35558        uint64_t d2_dffst                : 9;       /**< DMA engine 2 dif instruction fetch state */
35559        uint64_t d3_dffst                : 9;       /**< DMA engine 3 dif instruction fetch state */
35560        uint64_t d4_dffst                : 9;       /**< DMA engine 4 dif instruction fetch state */
35561#else
35562        uint64_t d4_dffst                : 9;
35563        uint64_t d3_dffst                : 9;
35564        uint64_t d2_dffst                : 9;
35565        uint64_t d1_dffst                : 9;
35566        uint64_t d0_dffst                : 9;
35567        uint64_t reserved_45_63          : 19;
35568#endif
35569    } s;
35570    struct cvmx_npei_dma_state2_p1_cn52xxp1
35571    {
35572#if __BYTE_ORDER == __BIG_ENDIAN
35573        uint64_t reserved_45_63          : 19;
35574        uint64_t d0_dffst                : 9;       /**< DMA engine 0 dif instruction fetch state */
35575        uint64_t d1_dffst                : 9;       /**< DMA engine 1 dif instruction fetch state */
35576        uint64_t d2_dffst                : 9;       /**< DMA engine 2 dif instruction fetch state */
35577        uint64_t d3_dffst                : 9;       /**< DMA engine 3 dif instruction fetch state */
35578        uint64_t reserved_0_8            : 9;
35579#else
35580        uint64_t reserved_0_8            : 9;
35581        uint64_t d3_dffst                : 9;
35582        uint64_t d2_dffst                : 9;
35583        uint64_t d1_dffst                : 9;
35584        uint64_t d0_dffst                : 9;
35585        uint64_t reserved_45_63          : 19;
35586#endif
35587    } cn52xxp1;
35588    struct cvmx_npei_dma_state2_p1_s     cn56xxp1;
35589} cvmx_npei_dma_state2_p1_t;
35590
35591
35592/**
35593 * cvmx_npei_dma_state3_p1
35594 *
35595 * NPEI_DMA_STATE3_P1 = NPEI DMA DRE State
35596 *
35597 * DMA engine Debug information.
35598 */
35599typedef union
35600{
35601    uint64_t u64;
35602    struct cvmx_npei_dma_state3_p1_s
35603    {
35604#if __BYTE_ORDER == __BIG_ENDIAN
35605        uint64_t reserved_60_63          : 4;
35606        uint64_t d0_drest                : 15;      /**< DMA engine 0 dre state */
35607        uint64_t d1_drest                : 15;      /**< DMA engine 1 dre state */
35608        uint64_t d2_drest                : 15;      /**< DMA engine 2 dre state */
35609        uint64_t d3_drest                : 15;      /**< DMA engine 3 dre state */
35610#else
35611        uint64_t d3_drest                : 15;
35612        uint64_t d2_drest                : 15;
35613        uint64_t d1_drest                : 15;
35614        uint64_t d0_drest                : 15;
35615        uint64_t reserved_60_63          : 4;
35616#endif
35617    } s;
35618    struct cvmx_npei_dma_state3_p1_s     cn52xxp1;
35619    struct cvmx_npei_dma_state3_p1_s     cn56xxp1;
35620} cvmx_npei_dma_state3_p1_t;
35621
35622
35623/**
35624 * cvmx_npei_dma_state4_p1
35625 *
35626 * NPEI_DMA_STATE4_P1 = NPEI DMA DWE State
35627 *
35628 * DMA engine Debug information.
35629 */
35630typedef union
35631{
35632    uint64_t u64;
35633    struct cvmx_npei_dma_state4_p1_s
35634    {
35635#if __BYTE_ORDER == __BIG_ENDIAN
35636        uint64_t reserved_52_63          : 12;
35637        uint64_t d0_dwest                : 13;      /**< DMA engine 0 dwe state */
35638        uint64_t d1_dwest                : 13;      /**< DMA engine 1 dwe state */
35639        uint64_t d2_dwest                : 13;      /**< DMA engine 2 dwe state */
35640        uint64_t d3_dwest                : 13;      /**< DMA engine 3 dwe state */
35641#else
35642        uint64_t d3_dwest                : 13;
35643        uint64_t d2_dwest                : 13;
35644        uint64_t d1_dwest                : 13;
35645        uint64_t d0_dwest                : 13;
35646        uint64_t reserved_52_63          : 12;
35647#endif
35648    } s;
35649    struct cvmx_npei_dma_state4_p1_s     cn52xxp1;
35650    struct cvmx_npei_dma_state4_p1_s     cn56xxp1;
35651} cvmx_npei_dma_state4_p1_t;
35652
35653
35654/**
35655 * cvmx_npei_dma_state5_p1
35656 *
35657 * NPEI_DMA_STATE5_P1 = NPEI DMA DWE and DRE State
35658 *
35659 * DMA engine Debug information.
35660 */
35661typedef union
35662{
35663    uint64_t u64;
35664    struct cvmx_npei_dma_state5_p1_s
35665    {
35666#if __BYTE_ORDER == __BIG_ENDIAN
35667        uint64_t reserved_28_63          : 36;
35668        uint64_t d4_drest                : 15;      /**< DMA engine 4 dre state */
35669        uint64_t d4_dwest                : 13;      /**< DMA engine 4 dwe state */
35670#else
35671        uint64_t d4_dwest                : 13;
35672        uint64_t d4_drest                : 15;
35673        uint64_t reserved_28_63          : 36;
35674#endif
35675    } s;
35676    struct cvmx_npei_dma_state5_p1_s     cn56xxp1;
35677} cvmx_npei_dma_state5_p1_t;
35678
35679
35680/**
35681 * cvmx_npei_int_a_enb
35682 *
35683 * NPEI_INTERRUPT_A_ENB = NPI's Interrupt A Enable Register
35684 *
35685 * Used to allow the generation of interrupts (MSI/INTA) to the PCIe CoresUsed to enable the various interrupting conditions of NPEI
35686 */
35687typedef union
35688{
35689    uint64_t u64;
35690    struct cvmx_npei_int_a_enb_s
35691    {
35692#if __BYTE_ORDER == __BIG_ENDIAN
35693        uint64_t reserved_10_63          : 54;
35694        uint64_t pout_err                : 1;       /**< Enables NPEI_INT_A_SUM[9] to generate an
35695                                                         interrupt to the PCIE core for MSI/inta. */
35696        uint64_t pin_bp                  : 1;       /**< Enables NPEI_INT_A_SUM[8] to generate an
35697                                                         interrupt to the PCIE core for MSI/inta. */
35698        uint64_t p1_rdlk                 : 1;       /**< Enables NPEI_INT_A_SUM[7] to generate an
35699                                                         interrupt to the PCIE core for MSI/inta. */
35700        uint64_t p0_rdlk                 : 1;       /**< Enables NPEI_INT_A_SUM[6] to generate an
35701                                                         interrupt to the PCIE core for MSI/inta. */
35702        uint64_t pgl_err                 : 1;       /**< Enables NPEI_INT_A_SUM[5] to generate an
35703                                                         interrupt to the PCIE core for MSI/inta. */
35704        uint64_t pdi_err                 : 1;       /**< Enables NPEI_INT_A_SUM[4] to generate an
35705                                                         interrupt to the PCIE core for MSI/inta. */
35706        uint64_t pop_err                 : 1;       /**< Enables NPEI_INT_A_SUM[3] to generate an
35707                                                         interrupt to the PCIE core for MSI/inta. */
35708        uint64_t pins_err                : 1;       /**< Enables NPEI_INT_A_SUM[2] to generate an
35709                                                         interrupt to the PCIE core for MSI/inta. */
35710        uint64_t dma1_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[1] to generate an
35711                                                         interrupt to the PCIE core for MSI/inta. */
35712        uint64_t dma0_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[0] to generate an
35713                                                         interrupt to the PCIE core for MSI/inta. */
35714#else
35715        uint64_t dma0_cpl                : 1;
35716        uint64_t dma1_cpl                : 1;
35717        uint64_t pins_err                : 1;
35718        uint64_t pop_err                 : 1;
35719        uint64_t pdi_err                 : 1;
35720        uint64_t pgl_err                 : 1;
35721        uint64_t p0_rdlk                 : 1;
35722        uint64_t p1_rdlk                 : 1;
35723        uint64_t pin_bp                  : 1;
35724        uint64_t pout_err                : 1;
35725        uint64_t reserved_10_63          : 54;
35726#endif
35727    } s;
35728    struct cvmx_npei_int_a_enb_s         cn52xx;
35729    struct cvmx_npei_int_a_enb_cn52xxp1
35730    {
35731#if __BYTE_ORDER == __BIG_ENDIAN
35732        uint64_t reserved_2_63           : 62;
35733        uint64_t dma1_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[1] to generate an
35734                                                         interrupt to the PCIE core for MSI/inta. */
35735        uint64_t dma0_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[0] to generate an
35736                                                         interrupt to the PCIE core for MSI/inta. */
35737#else
35738        uint64_t dma0_cpl                : 1;
35739        uint64_t dma1_cpl                : 1;
35740        uint64_t reserved_2_63           : 62;
35741#endif
35742    } cn52xxp1;
35743    struct cvmx_npei_int_a_enb_s         cn56xx;
35744} cvmx_npei_int_a_enb_t;
35745
35746
35747/**
35748 * cvmx_npei_int_a_enb2
35749 *
35750 * NPEI_INTERRUPT_A_ENB2 = NPEI's Interrupt A Enable2 Register
35751 *
35752 * Used to enable the various interrupting conditions of NPEI
35753 */
35754typedef union
35755{
35756    uint64_t u64;
35757    struct cvmx_npei_int_a_enb2_s
35758    {
35759#if __BYTE_ORDER == __BIG_ENDIAN
35760        uint64_t reserved_10_63          : 54;
35761        uint64_t pout_err                : 1;       /**< Enables NPEI_INT_A_SUM[9] to generate an
35762                                                         interrupt on the RSL. */
35763        uint64_t pin_bp                  : 1;       /**< Enables NPEI_INT_A_SUM[8] to generate an
35764                                                         interrupt on the RSL. */
35765        uint64_t p1_rdlk                 : 1;       /**< Enables NPEI_INT_A_SUM[7] to generate an
35766                                                         interrupt on the RSL. */
35767        uint64_t p0_rdlk                 : 1;       /**< Enables NPEI_INT_A_SUM[6] to generate an
35768                                                         interrupt on the RSL. */
35769        uint64_t pgl_err                 : 1;       /**< Enables NPEI_INT_A_SUM[5] to generate an
35770                                                         interrupt on the RSL. */
35771        uint64_t pdi_err                 : 1;       /**< Enables NPEI_INT_A_SUM[4] to generate an
35772                                                         interrupt on the RSL. */
35773        uint64_t pop_err                 : 1;       /**< Enables NPEI_INT_A_SUM[3] to generate an
35774                                                         interrupt on the RSL. */
35775        uint64_t pins_err                : 1;       /**< Enables NPEI_INT_A_SUM[2] to generate an
35776                                                         interrupt on the RSL. */
35777        uint64_t dma1_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[1] to generate an
35778                                                         interrupt to the PCIE core for MSI/inta. */
35779        uint64_t dma0_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[0] to generate an
35780                                                         interrupt to the PCIE core for MSI/inta. */
35781#else
35782        uint64_t dma0_cpl                : 1;
35783        uint64_t dma1_cpl                : 1;
35784        uint64_t pins_err                : 1;
35785        uint64_t pop_err                 : 1;
35786        uint64_t pdi_err                 : 1;
35787        uint64_t pgl_err                 : 1;
35788        uint64_t p0_rdlk                 : 1;
35789        uint64_t p1_rdlk                 : 1;
35790        uint64_t pin_bp                  : 1;
35791        uint64_t pout_err                : 1;
35792        uint64_t reserved_10_63          : 54;
35793#endif
35794    } s;
35795    struct cvmx_npei_int_a_enb2_s        cn52xx;
35796    struct cvmx_npei_int_a_enb2_cn52xxp1
35797    {
35798#if __BYTE_ORDER == __BIG_ENDIAN
35799        uint64_t reserved_2_63           : 62;
35800        uint64_t dma1_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[1] to generate an
35801                                                         interrupt to the PCIE core for MSI/inta. */
35802        uint64_t dma0_cpl                : 1;       /**< Enables NPEI_INT_A_SUM[0] to generate an
35803                                                         interrupt to the PCIE core for MSI/inta. */
35804#else
35805        uint64_t dma0_cpl                : 1;
35806        uint64_t dma1_cpl                : 1;
35807        uint64_t reserved_2_63           : 62;
35808#endif
35809    } cn52xxp1;
35810    struct cvmx_npei_int_a_enb2_s        cn56xx;
35811} cvmx_npei_int_a_enb2_t;
35812
35813
35814/**
35815 * cvmx_npei_int_a_sum
35816 *
35817 * NPEI_INTERRUPT_A_SUM = NPI Interrupt A Summary Register
35818 *
35819 * Set when an interrupt condition occurs, write '1' to clear. When an interrupt bitin this register is set and
35820 * the cooresponding bit in the NPEI_INT_A_ENB register is set, then NPEI_INT_SUM[61] will be set.
35821 */
35822typedef union
35823{
35824    uint64_t u64;
35825    struct cvmx_npei_int_a_sum_s
35826    {
35827#if __BYTE_ORDER == __BIG_ENDIAN
35828        uint64_t reserved_10_63          : 54;
35829        uint64_t pout_err                : 1;       /**< Set when PKO sends packet data with the error bit
35830                                                         set. */
35831        uint64_t pin_bp                  : 1;       /**< Packet input count has exceeded the WMARK.
35832                                                         See NPEI_PKT_IN_BP */
35833        uint64_t p1_rdlk                 : 1;       /**< PCIe port 1 received a read lock. */
35834        uint64_t p0_rdlk                 : 1;       /**< PCIe port 0 received a read lock. */
35835        uint64_t pgl_err                 : 1;       /**< When a read error occurs on a packet gather list
35836                                                         read this bit is set. */
35837        uint64_t pdi_err                 : 1;       /**< When a read error occurs on a packet data read
35838                                                         this bit is set. */
35839        uint64_t pop_err                 : 1;       /**< When a read error occurs on a packet scatter
35840                                                         pointer pair this bit is set. */
35841        uint64_t pins_err                : 1;       /**< When a read error occurs on a packet instruction
35842                                                         this bit is set. */
35843        uint64_t dma1_cpl                : 1;       /**< Set each time any PCIe DMA engine recieves a UR/CA
35844                                                         response from PCIe Port 1 */
35845        uint64_t dma0_cpl                : 1;       /**< Set each time any PCIe DMA engine recieves a UR/CA
35846                                                         response from PCIe Port 0 */
35847#else
35848        uint64_t dma0_cpl                : 1;
35849        uint64_t dma1_cpl                : 1;
35850        uint64_t pins_err                : 1;
35851        uint64_t pop_err                 : 1;
35852        uint64_t pdi_err                 : 1;
35853        uint64_t pgl_err                 : 1;
35854        uint64_t p0_rdlk                 : 1;
35855        uint64_t p1_rdlk                 : 1;
35856        uint64_t pin_bp                  : 1;
35857        uint64_t pout_err                : 1;
35858        uint64_t reserved_10_63          : 54;
35859#endif
35860    } s;
35861    struct cvmx_npei_int_a_sum_s         cn52xx;
35862    struct cvmx_npei_int_a_sum_cn52xxp1
35863    {
35864#if __BYTE_ORDER == __BIG_ENDIAN
35865        uint64_t reserved_2_63           : 62;
35866        uint64_t dma1_cpl                : 1;       /**< Set each time any PCIe DMA engine recieves a UR/CA
35867                                                         response from PCIe Port 1 */
35868        uint64_t dma0_cpl                : 1;       /**< Set each time any PCIe DMA engine recieves a UR/CA
35869                                                         response from PCIe Port 0 */
35870#else
35871        uint64_t dma0_cpl                : 1;
35872        uint64_t dma1_cpl                : 1;
35873        uint64_t reserved_2_63           : 62;
35874#endif
35875    } cn52xxp1;
35876    struct cvmx_npei_int_a_sum_s         cn56xx;
35877} cvmx_npei_int_a_sum_t;
35878
35879
35880/**
35881 * cvmx_npei_int_enb
35882 *
35883 * NPEI_INTERRUPT_ENB = NPI's Interrupt Enable Register
35884 *
35885 * Used to allow the generation of interrupts (MSI/INTA) to the PCIe CoresUsed to enable the various interrupting conditions of NPI
35886 */
35887typedef union
35888{
35889    uint64_t u64;
35890    struct cvmx_npei_int_enb_s
35891    {
35892#if __BYTE_ORDER == __BIG_ENDIAN
35893        uint64_t mio_inta                : 1;       /**< Enables NPEI_INT_SUM[63] to generate an
35894                                                         interrupt to the PCIE core for MSI/inta. */
35895        uint64_t reserved_62_62          : 1;
35896        uint64_t int_a                   : 1;       /**< Enables NPEI_INT_SUM[61] to generate an
35897                                                         interrupt to the PCIE core for MSI/inta. */
35898        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[60] to generate an
35899                                                         interrupt to the PCIE core for MSI/inta. */
35900        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[59] to generate an
35901                                                         interrupt to the PCIE core for MSI/inta. */
35902        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM[58] to generate an
35903                                                         interrupt to the PCIE core for MSI/inta. */
35904        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM[57] to generate an
35905                                                         interrupt to the PCIE core for MSI/inta. */
35906        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM[56] to generate an
35907                                                         interrupt to the PCIE core for MSI/inta. */
35908        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM[55] to generate an
35909                                                         interrupt to the PCIE core for MSI/inta. */
35910        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM[54] to generate an
35911                                                         interrupt to the PCIE core for MSI/inta. */
35912        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM[53] to generate an
35913                                                         interrupt to the PCIE core for MSI/inta. */
35914        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM[52] to generate an
35915                                                         interrupt to the PCIE core for MSI/inta. */
35916        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM[51] to generate an
35917                                                         interrupt to the PCIE core for MSI/inta. */
35918        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM[50] to generate an
35919                                                         interrupt to the PCIE core for MSI/inta. */
35920        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM[49] to generate an
35921                                                         interrupt to the PCIE core for MSI/inta. */
35922        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM[48] to generate an
35923                                                         interrupt to the PCIE core for MSI/inta. */
35924        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM[47] to generate an
35925                                                         interrupt to the PCIE core for MSI/inta. */
35926        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM[46] to generate an
35927                                                         interrupt to the PCIE core for MSI/inta. */
35928        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM[45] to generate an
35929                                                         interrupt to the PCIE core for MSI/inta. */
35930        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM[44] to generate an
35931                                                         interrupt to the PCIE core for MSI/inta. */
35932        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM[43] to generate an
35933                                                         interrupt to the PCIE core for MSI/inta. */
35934        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM[42] to generate an
35935                                                         interrupt to the PCIE core for MSI/inta. */
35936        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM[41] to generate an
35937                                                         interrupt to the PCIE core for MSI/inta. */
35938        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM[40] to generate an
35939                                                         interrupt to the PCIE core for MSI/inta. */
35940        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM[39] to generate an
35941                                                         interrupt to the PCIE core for MSI/inta. */
35942        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM[38] to generate an
35943                                                         interrupt to the PCIE core for MSI/inta. */
35944        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM[37] to generate an
35945                                                         interrupt to the PCIE core for MSI/inta. */
35946        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM[36] to generate an
35947                                                         interrupt to the PCIE core for MSI/inta. */
35948        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM[35] to generate an
35949                                                         interrupt to the PCIE core for MSI/inta. */
35950        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM[34] to generate an
35951                                                         interrupt to the PCIE core for MSI/inta. */
35952        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM[33] to generate an
35953                                                         interrupt to the PCIE core for MSI/inta. */
35954        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM[32] to generate an
35955                                                         interrupt to the PCIE core for MSI/inta. */
35956        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM[31] to generate an
35957                                                         interrupt to the PCIE core for MSI/inta. */
35958        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM[30] to generate an
35959                                                         interrupt to the PCIE core for MSI/inta. */
35960        uint64_t crs1_dr                 : 1;       /**< Enables NPEI_INT_SUM[29] to generate an
35961                                                         interrupt to the PCIE core for MSI/inta. */
35962        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM[28] to generate an
35963                                                         interrupt to the PCIE core for MSI/inta. */
35964        uint64_t crs1_er                 : 1;       /**< Enables NPEI_INT_SUM[27] to generate an
35965                                                         interrupt to the PCIE core for MSI/inta. */
35966        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM[26] to generate an
35967                                                         interrupt to the PCIE core for MSI/inta. */
35968        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM[25] to generate an
35969                                                         interrupt to the PCIE core for MSI/inta. */
35970        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM[24] to generate an
35971                                                         interrupt to the PCIE core for MSI/inta. */
35972        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM[23] to generate an
35973                                                         interrupt to the PCIE core for MSI/inta. */
35974        uint64_t crs0_dr                 : 1;       /**< Enables NPEI_INT_SUM[22] to generate an
35975                                                         interrupt to the PCIE core for MSI/inta. */
35976        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM[21] to generate an
35977                                                         interrupt to the PCIE core for MSI/inta. */
35978        uint64_t crs0_er                 : 1;       /**< Enables NPEI_INT_SUM[20] to generate an
35979                                                         interrupt to the PCIE core for MSI/inta. */
35980        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM[19] to generate an
35981                                                         interrupt to the PCIE core for MSI/inta. */
35982        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM[18] to generate an
35983                                                         interrupt to the PCIE core for MSI/inta. */
35984        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM[17] to generate an
35985                                                         interrupt to the PCIE core for MSI/inta. */
35986        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM[16] to generate an
35987                                                         interrupt to the PCIE core for MSI/inta. */
35988        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM[15] to generate an
35989                                                         interrupt to the PCIE core for MSI/inta. */
35990        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM[14] to generate an
35991                                                         interrupt to the PCIE core for MSI/inta. */
35992        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM[13] to generate an
35993                                                         interrupt to the PCIE core for MSI/inta. */
35994        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM[12] to generate an
35995                                                         interrupt to the PCIE core for MSI/inta. */
35996        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM[11] to generate an
35997                                                         interrupt to the PCIE core for MSI/inta. */
35998        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM[10] to generate an
35999                                                         interrupt to the PCIE core for MSI/inta. */
36000        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM[9] to generate an
36001                                                         interrupt to the PCIE core for MSI/inta. */
36002        uint64_t dma4dbo                 : 1;       /**< Enables NPEI_INT_SUM[8] to generate an
36003                                                         interrupt to the PCIE core for MSI/inta. */
36004        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM[7] to generate an
36005                                                         interrupt to the PCIE core for MSI/inta. */
36006        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM[6] to generate an
36007                                                         interrupt to the PCIE core for MSI/inta. */
36008        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM[5] to generate an
36009                                                         interrupt to the PCIE core for MSI/inta. */
36010        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM[4] to generate an
36011                                                         interrupt to the PCIE core for MSI/inta. */
36012        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM[3] to generate an
36013                                                         interrupt to the PCIE core for MSI/inta. */
36014        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM[2] to generate an
36015                                                         interrupt to the PCIE core for MSI/inta. */
36016        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM[1] to generate an
36017                                                         interrupt to the PCIE core for MSI/inta. */
36018        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_SUM[0] to generate an
36019                                                         interrupt to the PCIE core for MSI/inta. */
36020#else
36021        uint64_t rml_rto                 : 1;
36022        uint64_t rml_wto                 : 1;
36023        uint64_t bar0_to                 : 1;
36024        uint64_t iob2big                 : 1;
36025        uint64_t dma0dbo                 : 1;
36026        uint64_t dma1dbo                 : 1;
36027        uint64_t dma2dbo                 : 1;
36028        uint64_t dma3dbo                 : 1;
36029        uint64_t dma4dbo                 : 1;
36030        uint64_t dma0fi                  : 1;
36031        uint64_t dma1fi                  : 1;
36032        uint64_t dcnt0                   : 1;
36033        uint64_t dcnt1                   : 1;
36034        uint64_t dtime0                  : 1;
36035        uint64_t dtime1                  : 1;
36036        uint64_t psldbof                 : 1;
36037        uint64_t pidbof                  : 1;
36038        uint64_t pcnt                    : 1;
36039        uint64_t ptime                   : 1;
36040        uint64_t c0_aeri                 : 1;
36041        uint64_t crs0_er                 : 1;
36042        uint64_t c0_se                   : 1;
36043        uint64_t crs0_dr                 : 1;
36044        uint64_t c0_wake                 : 1;
36045        uint64_t c0_pmei                 : 1;
36046        uint64_t c0_hpint                : 1;
36047        uint64_t c1_aeri                 : 1;
36048        uint64_t crs1_er                 : 1;
36049        uint64_t c1_se                   : 1;
36050        uint64_t crs1_dr                 : 1;
36051        uint64_t c1_wake                 : 1;
36052        uint64_t c1_pmei                 : 1;
36053        uint64_t c1_hpint                : 1;
36054        uint64_t c0_up_b0                : 1;
36055        uint64_t c0_up_b1                : 1;
36056        uint64_t c0_up_b2                : 1;
36057        uint64_t c0_up_wi                : 1;
36058        uint64_t c0_up_bx                : 1;
36059        uint64_t c0_un_b0                : 1;
36060        uint64_t c0_un_b1                : 1;
36061        uint64_t c0_un_b2                : 1;
36062        uint64_t c0_un_wi                : 1;
36063        uint64_t c0_un_bx                : 1;
36064        uint64_t c1_up_b0                : 1;
36065        uint64_t c1_up_b1                : 1;
36066        uint64_t c1_up_b2                : 1;
36067        uint64_t c1_up_wi                : 1;
36068        uint64_t c1_up_bx                : 1;
36069        uint64_t c1_un_b0                : 1;
36070        uint64_t c1_un_b1                : 1;
36071        uint64_t c1_un_b2                : 1;
36072        uint64_t c1_un_wi                : 1;
36073        uint64_t c1_un_bx                : 1;
36074        uint64_t c0_un_wf                : 1;
36075        uint64_t c1_un_wf                : 1;
36076        uint64_t c0_up_wf                : 1;
36077        uint64_t c1_up_wf                : 1;
36078        uint64_t c0_exc                  : 1;
36079        uint64_t c1_exc                  : 1;
36080        uint64_t c0_ldwn                 : 1;
36081        uint64_t c1_ldwn                 : 1;
36082        uint64_t int_a                   : 1;
36083        uint64_t reserved_62_62          : 1;
36084        uint64_t mio_inta                : 1;
36085#endif
36086    } s;
36087    struct cvmx_npei_int_enb_s           cn52xx;
36088    struct cvmx_npei_int_enb_cn52xxp1
36089    {
36090#if __BYTE_ORDER == __BIG_ENDIAN
36091        uint64_t mio_inta                : 1;       /**< Enables NPEI_INT_SUM[63] to generate an
36092                                                         interrupt to the PCIE core for MSI/inta. */
36093        uint64_t reserved_62_62          : 1;
36094        uint64_t int_a                   : 1;       /**< Enables NPEI_INT_SUM[61] to generate an
36095                                                         interrupt to the PCIE core for MSI/inta. */
36096        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[60] to generate an
36097                                                         interrupt to the PCIE core for MSI/inta. */
36098        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[59] to generate an
36099                                                         interrupt to the PCIE core for MSI/inta. */
36100        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM[58] to generate an
36101                                                         interrupt to the PCIE core for MSI/inta. */
36102        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM[57] to generate an
36103                                                         interrupt to the PCIE core for MSI/inta. */
36104        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM[56] to generate an
36105                                                         interrupt to the PCIE core for MSI/inta. */
36106        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM[55] to generate an
36107                                                         interrupt to the PCIE core for MSI/inta. */
36108        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM[54] to generate an
36109                                                         interrupt to the PCIE core for MSI/inta. */
36110        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM[53] to generate an
36111                                                         interrupt to the PCIE core for MSI/inta. */
36112        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM[52] to generate an
36113                                                         interrupt to the PCIE core for MSI/inta. */
36114        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM[51] to generate an
36115                                                         interrupt to the PCIE core for MSI/inta. */
36116        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM[50] to generate an
36117                                                         interrupt to the PCIE core for MSI/inta. */
36118        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM[49] to generate an
36119                                                         interrupt to the PCIE core for MSI/inta. */
36120        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM[48] to generate an
36121                                                         interrupt to the PCIE core for MSI/inta. */
36122        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM[47] to generate an
36123                                                         interrupt to the PCIE core for MSI/inta. */
36124        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM[46] to generate an
36125                                                         interrupt to the PCIE core for MSI/inta. */
36126        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM[45] to generate an
36127                                                         interrupt to the PCIE core for MSI/inta. */
36128        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM[44] to generate an
36129                                                         interrupt to the PCIE core for MSI/inta. */
36130        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM[43] to generate an
36131                                                         interrupt to the PCIE core for MSI/inta. */
36132        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM[42] to generate an
36133                                                         interrupt to the PCIE core for MSI/inta. */
36134        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM[41] to generate an
36135                                                         interrupt to the PCIE core for MSI/inta. */
36136        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM[40] to generate an
36137                                                         interrupt to the PCIE core for MSI/inta. */
36138        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM[39] to generate an
36139                                                         interrupt to the PCIE core for MSI/inta. */
36140        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM[38] to generate an
36141                                                         interrupt to the PCIE core for MSI/inta. */
36142        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM[37] to generate an
36143                                                         interrupt to the PCIE core for MSI/inta. */
36144        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM[36] to generate an
36145                                                         interrupt to the PCIE core for MSI/inta. */
36146        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM[35] to generate an
36147                                                         interrupt to the PCIE core for MSI/inta. */
36148        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM[34] to generate an
36149                                                         interrupt to the PCIE core for MSI/inta. */
36150        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM[33] to generate an
36151                                                         interrupt to the PCIE core for MSI/inta. */
36152        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM[32] to generate an
36153                                                         interrupt to the PCIE core for MSI/inta. */
36154        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM[31] to generate an
36155                                                         interrupt to the PCIE core for MSI/inta. */
36156        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM[30] to generate an
36157                                                         interrupt to the PCIE core for MSI/inta. */
36158        uint64_t crs1_dr                 : 1;       /**< Enables NPEI_INT_SUM[29] to generate an
36159                                                         interrupt to the PCIE core for MSI/inta. */
36160        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM[28] to generate an
36161                                                         interrupt to the PCIE core for MSI/inta. */
36162        uint64_t crs1_er                 : 1;       /**< Enables NPEI_INT_SUM[27] to generate an
36163                                                         interrupt to the PCIE core for MSI/inta. */
36164        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM[26] to generate an
36165                                                         interrupt to the PCIE core for MSI/inta. */
36166        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM[25] to generate an
36167                                                         interrupt to the PCIE core for MSI/inta. */
36168        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM[24] to generate an
36169                                                         interrupt to the PCIE core for MSI/inta. */
36170        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM[23] to generate an
36171                                                         interrupt to the PCIE core for MSI/inta. */
36172        uint64_t crs0_dr                 : 1;       /**< Enables NPEI_INT_SUM[22] to generate an
36173                                                         interrupt to the PCIE core for MSI/inta. */
36174        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM[21] to generate an
36175                                                         interrupt to the PCIE core for MSI/inta. */
36176        uint64_t crs0_er                 : 1;       /**< Enables NPEI_INT_SUM[20] to generate an
36177                                                         interrupt to the PCIE core for MSI/inta. */
36178        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM[19] to generate an
36179                                                         interrupt to the PCIE core for MSI/inta. */
36180        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM[18] to generate an
36181                                                         interrupt to the PCIE core for MSI/inta. */
36182        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM[17] to generate an
36183                                                         interrupt to the PCIE core for MSI/inta. */
36184        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM[16] to generate an
36185                                                         interrupt to the PCIE core for MSI/inta. */
36186        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM[15] to generate an
36187                                                         interrupt to the PCIE core for MSI/inta. */
36188        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM[14] to generate an
36189                                                         interrupt to the PCIE core for MSI/inta. */
36190        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM[13] to generate an
36191                                                         interrupt to the PCIE core for MSI/inta. */
36192        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM[12] to generate an
36193                                                         interrupt to the PCIE core for MSI/inta. */
36194        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM[11] to generate an
36195                                                         interrupt to the PCIE core for MSI/inta. */
36196        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM[10] to generate an
36197                                                         interrupt to the PCIE core for MSI/inta. */
36198        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM[9] to generate an
36199                                                         interrupt to the PCIE core for MSI/inta. */
36200        uint64_t reserved_8_8            : 1;
36201        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM[7] to generate an
36202                                                         interrupt to the PCIE core for MSI/inta. */
36203        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM[6] to generate an
36204                                                         interrupt to the PCIE core for MSI/inta. */
36205        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM[5] to generate an
36206                                                         interrupt to the PCIE core for MSI/inta. */
36207        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM[4] to generate an
36208                                                         interrupt to the PCIE core for MSI/inta. */
36209        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM[3] to generate an
36210                                                         interrupt to the PCIE core for MSI/inta. */
36211        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM[2] to generate an
36212                                                         interrupt to the PCIE core for MSI/inta. */
36213        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM[1] to generate an
36214                                                         interrupt to the PCIE core for MSI/inta. */
36215        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_SUM[0] to generate an
36216                                                         interrupt to the PCIE core for MSI/inta. */
36217#else
36218        uint64_t rml_rto                 : 1;
36219        uint64_t rml_wto                 : 1;
36220        uint64_t bar0_to                 : 1;
36221        uint64_t iob2big                 : 1;
36222        uint64_t dma0dbo                 : 1;
36223        uint64_t dma1dbo                 : 1;
36224        uint64_t dma2dbo                 : 1;
36225        uint64_t dma3dbo                 : 1;
36226        uint64_t reserved_8_8            : 1;
36227        uint64_t dma0fi                  : 1;
36228        uint64_t dma1fi                  : 1;
36229        uint64_t dcnt0                   : 1;
36230        uint64_t dcnt1                   : 1;
36231        uint64_t dtime0                  : 1;
36232        uint64_t dtime1                  : 1;
36233        uint64_t psldbof                 : 1;
36234        uint64_t pidbof                  : 1;
36235        uint64_t pcnt                    : 1;
36236        uint64_t ptime                   : 1;
36237        uint64_t c0_aeri                 : 1;
36238        uint64_t crs0_er                 : 1;
36239        uint64_t c0_se                   : 1;
36240        uint64_t crs0_dr                 : 1;
36241        uint64_t c0_wake                 : 1;
36242        uint64_t c0_pmei                 : 1;
36243        uint64_t c0_hpint                : 1;
36244        uint64_t c1_aeri                 : 1;
36245        uint64_t crs1_er                 : 1;
36246        uint64_t c1_se                   : 1;
36247        uint64_t crs1_dr                 : 1;
36248        uint64_t c1_wake                 : 1;
36249        uint64_t c1_pmei                 : 1;
36250        uint64_t c1_hpint                : 1;
36251        uint64_t c0_up_b0                : 1;
36252        uint64_t c0_up_b1                : 1;
36253        uint64_t c0_up_b2                : 1;
36254        uint64_t c0_up_wi                : 1;
36255        uint64_t c0_up_bx                : 1;
36256        uint64_t c0_un_b0                : 1;
36257        uint64_t c0_un_b1                : 1;
36258        uint64_t c0_un_b2                : 1;
36259        uint64_t c0_un_wi                : 1;
36260        uint64_t c0_un_bx                : 1;
36261        uint64_t c1_up_b0                : 1;
36262        uint64_t c1_up_b1                : 1;
36263        uint64_t c1_up_b2                : 1;
36264        uint64_t c1_up_wi                : 1;
36265        uint64_t c1_up_bx                : 1;
36266        uint64_t c1_un_b0                : 1;
36267        uint64_t c1_un_b1                : 1;
36268        uint64_t c1_un_b2                : 1;
36269        uint64_t c1_un_wi                : 1;
36270        uint64_t c1_un_bx                : 1;
36271        uint64_t c0_un_wf                : 1;
36272        uint64_t c1_un_wf                : 1;
36273        uint64_t c0_up_wf                : 1;
36274        uint64_t c1_up_wf                : 1;
36275        uint64_t c0_exc                  : 1;
36276        uint64_t c1_exc                  : 1;
36277        uint64_t c0_ldwn                 : 1;
36278        uint64_t c1_ldwn                 : 1;
36279        uint64_t int_a                   : 1;
36280        uint64_t reserved_62_62          : 1;
36281        uint64_t mio_inta                : 1;
36282#endif
36283    } cn52xxp1;
36284    struct cvmx_npei_int_enb_s           cn56xx;
36285    struct cvmx_npei_int_enb_cn56xxp1
36286    {
36287#if __BYTE_ORDER == __BIG_ENDIAN
36288        uint64_t mio_inta                : 1;       /**< Enables NPEI_INT_SUM[63] to generate an
36289                                                         interrupt to the PCIE core for MSI/inta. */
36290        uint64_t reserved_61_62          : 2;
36291        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[60] to generate an
36292                                                         interrupt to the PCIE core for MSI/inta. */
36293        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[59] to generate an
36294                                                         interrupt to the PCIE core for MSI/inta. */
36295        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM[58] to generate an
36296                                                         interrupt to the PCIE core for MSI/inta. */
36297        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM[57] to generate an
36298                                                         interrupt to the PCIE core for MSI/inta. */
36299        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM[56] to generate an
36300                                                         interrupt to the PCIE core for MSI/inta. */
36301        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM[55] to generate an
36302                                                         interrupt to the PCIE core for MSI/inta. */
36303        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM[54] to generate an
36304                                                         interrupt to the PCIE core for MSI/inta. */
36305        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM[53] to generate an
36306                                                         interrupt to the PCIE core for MSI/inta. */
36307        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM[52] to generate an
36308                                                         interrupt to the PCIE core for MSI/inta. */
36309        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM[51] to generate an
36310                                                         interrupt to the PCIE core for MSI/inta. */
36311        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM[50] to generate an
36312                                                         interrupt to the PCIE core for MSI/inta. */
36313        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM[49] to generate an
36314                                                         interrupt to the PCIE core for MSI/inta. */
36315        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM[48] to generate an
36316                                                         interrupt to the PCIE core for MSI/inta. */
36317        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM[47] to generate an
36318                                                         interrupt to the PCIE core for MSI/inta. */
36319        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM[46] to generate an
36320                                                         interrupt to the PCIE core for MSI/inta. */
36321        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM[45] to generate an
36322                                                         interrupt to the PCIE core for MSI/inta. */
36323        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM[44] to generate an
36324                                                         interrupt to the PCIE core for MSI/inta. */
36325        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM[43] to generate an
36326                                                         interrupt to the PCIE core for MSI/inta. */
36327        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM[42] to generate an
36328                                                         interrupt to the PCIE core for MSI/inta. */
36329        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM[41] to generate an
36330                                                         interrupt to the PCIE core for MSI/inta. */
36331        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM[40] to generate an
36332                                                         interrupt to the PCIE core for MSI/inta. */
36333        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM[39] to generate an
36334                                                         interrupt to the PCIE core for MSI/inta. */
36335        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM[38] to generate an
36336                                                         interrupt to the PCIE core for MSI/inta. */
36337        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM[37] to generate an
36338                                                         interrupt to the PCIE core for MSI/inta. */
36339        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM[36] to generate an
36340                                                         interrupt to the PCIE core for MSI/inta. */
36341        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM[35] to generate an
36342                                                         interrupt to the PCIE core for MSI/inta. */
36343        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM[34] to generate an
36344                                                         interrupt to the PCIE core for MSI/inta. */
36345        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM[33] to generate an
36346                                                         interrupt to the PCIE core for MSI/inta. */
36347        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM[32] to generate an
36348                                                         interrupt to the PCIE core for MSI/inta. */
36349        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM[31] to generate an
36350                                                         interrupt to the PCIE core for MSI/inta. */
36351        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM[30] to generate an
36352                                                         interrupt to the PCIE core for MSI/inta. */
36353        uint64_t reserved_29_29          : 1;
36354        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM[28] to generate an
36355                                                         interrupt to the PCIE core for MSI/inta. */
36356        uint64_t reserved_27_27          : 1;
36357        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM[26] to generate an
36358                                                         interrupt to the PCIE core for MSI/inta. */
36359        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM[25] to generate an
36360                                                         interrupt to the PCIE core for MSI/inta. */
36361        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM[24] to generate an
36362                                                         interrupt to the PCIE core for MSI/inta. */
36363        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM[23] to generate an
36364                                                         interrupt to the PCIE core for MSI/inta. */
36365        uint64_t reserved_22_22          : 1;
36366        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM[21] to generate an
36367                                                         interrupt to the PCIE core for MSI/inta. */
36368        uint64_t reserved_20_20          : 1;
36369        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM[19] to generate an
36370                                                         interrupt to the PCIE core for MSI/inta. */
36371        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM[18] to generate an
36372                                                         interrupt to the PCIE core for MSI/inta. */
36373        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM[17] to generate an
36374                                                         interrupt to the PCIE core for MSI/inta. */
36375        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM[16] to generate an
36376                                                         interrupt to the PCIE core for MSI/inta. */
36377        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM[15] to generate an
36378                                                         interrupt to the PCIE core for MSI/inta. */
36379        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM[14] to generate an
36380                                                         interrupt to the PCIE core for MSI/inta. */
36381        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM[13] to generate an
36382                                                         interrupt to the PCIE core for MSI/inta. */
36383        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM[12] to generate an
36384                                                         interrupt to the PCIE core for MSI/inta. */
36385        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM[11] to generate an
36386                                                         interrupt to the PCIE core for MSI/inta. */
36387        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM[10] to generate an
36388                                                         interrupt to the PCIE core for MSI/inta. */
36389        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM[9] to generate an
36390                                                         interrupt to the PCIE core for MSI/inta. */
36391        uint64_t dma4dbo                 : 1;       /**< Enables NPEI_INT_SUM[8] to generate an
36392                                                         interrupt to the PCIE core for MSI/inta. */
36393        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM[7] to generate an
36394                                                         interrupt to the PCIE core for MSI/inta. */
36395        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM[6] to generate an
36396                                                         interrupt to the PCIE core for MSI/inta. */
36397        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM[5] to generate an
36398                                                         interrupt to the PCIE core for MSI/inta. */
36399        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM[4] to generate an
36400                                                         interrupt to the PCIE core for MSI/inta. */
36401        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM[3] to generate an
36402                                                         interrupt to the PCIE core for MSI/inta. */
36403        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM[2] to generate an
36404                                                         interrupt to the PCIE core for MSI/inta. */
36405        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM[1] to generate an
36406                                                         interrupt to the PCIE core for MSI/inta. */
36407        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_SUM[0] to generate an
36408                                                         interrupt to the PCIE core for MSI/inta. */
36409#else
36410        uint64_t rml_rto                 : 1;
36411        uint64_t rml_wto                 : 1;
36412        uint64_t bar0_to                 : 1;
36413        uint64_t iob2big                 : 1;
36414        uint64_t dma0dbo                 : 1;
36415        uint64_t dma1dbo                 : 1;
36416        uint64_t dma2dbo                 : 1;
36417        uint64_t dma3dbo                 : 1;
36418        uint64_t dma4dbo                 : 1;
36419        uint64_t dma0fi                  : 1;
36420        uint64_t dma1fi                  : 1;
36421        uint64_t dcnt0                   : 1;
36422        uint64_t dcnt1                   : 1;
36423        uint64_t dtime0                  : 1;
36424        uint64_t dtime1                  : 1;
36425        uint64_t psldbof                 : 1;
36426        uint64_t pidbof                  : 1;
36427        uint64_t pcnt                    : 1;
36428        uint64_t ptime                   : 1;
36429        uint64_t c0_aeri                 : 1;
36430        uint64_t reserved_20_20          : 1;
36431        uint64_t c0_se                   : 1;
36432        uint64_t reserved_22_22          : 1;
36433        uint64_t c0_wake                 : 1;
36434        uint64_t c0_pmei                 : 1;
36435        uint64_t c0_hpint                : 1;
36436        uint64_t c1_aeri                 : 1;
36437        uint64_t reserved_27_27          : 1;
36438        uint64_t c1_se                   : 1;
36439        uint64_t reserved_29_29          : 1;
36440        uint64_t c1_wake                 : 1;
36441        uint64_t c1_pmei                 : 1;
36442        uint64_t c1_hpint                : 1;
36443        uint64_t c0_up_b0                : 1;
36444        uint64_t c0_up_b1                : 1;
36445        uint64_t c0_up_b2                : 1;
36446        uint64_t c0_up_wi                : 1;
36447        uint64_t c0_up_bx                : 1;
36448        uint64_t c0_un_b0                : 1;
36449        uint64_t c0_un_b1                : 1;
36450        uint64_t c0_un_b2                : 1;
36451        uint64_t c0_un_wi                : 1;
36452        uint64_t c0_un_bx                : 1;
36453        uint64_t c1_up_b0                : 1;
36454        uint64_t c1_up_b1                : 1;
36455        uint64_t c1_up_b2                : 1;
36456        uint64_t c1_up_wi                : 1;
36457        uint64_t c1_up_bx                : 1;
36458        uint64_t c1_un_b0                : 1;
36459        uint64_t c1_un_b1                : 1;
36460        uint64_t c1_un_b2                : 1;
36461        uint64_t c1_un_wi                : 1;
36462        uint64_t c1_un_bx                : 1;
36463        uint64_t c0_un_wf                : 1;
36464        uint64_t c1_un_wf                : 1;
36465        uint64_t c0_up_wf                : 1;
36466        uint64_t c1_up_wf                : 1;
36467        uint64_t c0_exc                  : 1;
36468        uint64_t c1_exc                  : 1;
36469        uint64_t c0_ldwn                 : 1;
36470        uint64_t c1_ldwn                 : 1;
36471        uint64_t reserved_61_62          : 2;
36472        uint64_t mio_inta                : 1;
36473#endif
36474    } cn56xxp1;
36475} cvmx_npei_int_enb_t;
36476
36477
36478/**
36479 * cvmx_npei_int_enb2
36480 *
36481 * NPEI_INTERRUPT_ENB2 = NPI's Interrupt Enable2 Register
36482 *
36483 * Used to enable the various interrupting conditions of NPI
36484 */
36485typedef union
36486{
36487    uint64_t u64;
36488    struct cvmx_npei_int_enb2_s
36489    {
36490#if __BYTE_ORDER == __BIG_ENDIAN
36491        uint64_t reserved_62_63          : 2;
36492        uint64_t int_a                   : 1;       /**< Enables NPEI_INT_SUM2[61] to generate an
36493                                                         interrupt on the RSL. */
36494        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[60] to generate an
36495                                                         interrupt on the RSL. */
36496        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[59] to generate an
36497                                                         interrupt on the RSL. */
36498        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM[58] to generate an
36499                                                         interrupt on the RSL. */
36500        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM[57] to generate an
36501                                                         interrupt on the RSL. */
36502        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM[56] to generate an
36503                                                         interrupt on the RSL. */
36504        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM[55] to generate an
36505                                                         interrupt on the RSL. */
36506        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM[54] to generate an
36507                                                         interrupt on the RSL. */
36508        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM[53] to generate an
36509                                                         interrupt on the RSL. */
36510        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM[52] to generate an
36511                                                         interrupt on the RSL. */
36512        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM[51] to generate an
36513                                                         interrupt on the RSL. */
36514        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM[50] to generate an
36515                                                         interrupt on the RSL. */
36516        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM[49] to generate an
36517                                                         interrupt on the RSL. */
36518        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM[48] to generate an
36519                                                         interrupt on the RSL. */
36520        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM[47] to generate an
36521                                                         interrupt on the RSL. */
36522        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM[46] to generate an
36523                                                         interrupt on the RSL. */
36524        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM[45] to generate an
36525                                                         interrupt on the RSL. */
36526        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM[44] to generate an
36527                                                         interrupt on the RSL. */
36528        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM[43] to generate an
36529                                                         interrupt on the RSL. */
36530        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM[42] to generate an
36531                                                         interrupt on the RSL. */
36532        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM[41] to generate an
36533                                                         interrupt on the RSL. */
36534        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM[40] to generate an
36535                                                         interrupt on the RSL. */
36536        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM[39] to generate an
36537                                                         interrupt on the RSL. */
36538        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM[38] to generate an
36539                                                         interrupt on the RSL. */
36540        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM[37] to generate an
36541                                                         interrupt on the RSL. */
36542        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM[36] to generate an
36543                                                         interrupt on the RSL. */
36544        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM[35] to generate an
36545                                                         interrupt on the RSL. */
36546        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM[34] to generate an
36547                                                         interrupt on the RSL. */
36548        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM[33] to generate an
36549                                                         interrupt on the RSL. */
36550        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM[32] to generate an
36551                                                         interrupt on the RSL. */
36552        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM[31] to generate an
36553                                                         interrupt on the RSL. */
36554        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM[30] to generate an
36555                                                         interrupt on the RSL. */
36556        uint64_t crs1_dr                 : 1;       /**< Enables NPEI_INT_SUM2[29] to generate an
36557                                                         interrupt on the RSL. */
36558        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM[28] to generate an
36559                                                         interrupt on the RSL. */
36560        uint64_t crs1_er                 : 1;       /**< Enables NPEI_INT_SUM2[27] to generate an
36561                                                         interrupt on the RSL. */
36562        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM[26] to generate an
36563                                                         interrupt on the RSL. */
36564        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM[25] to generate an
36565                                                         interrupt on the RSL. */
36566        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM[24] to generate an
36567                                                         interrupt on the RSL. */
36568        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM[23] to generate an
36569                                                         interrupt on the RSL. */
36570        uint64_t crs0_dr                 : 1;       /**< Enables NPEI_INT_SUM2[22] to generate an
36571                                                         interrupt on the RSL. */
36572        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM[21] to generate an
36573                                                         interrupt on the RSL. */
36574        uint64_t crs0_er                 : 1;       /**< Enables NPEI_INT_SUM2[20] to generate an
36575                                                         interrupt on the RSL. */
36576        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM[19] to generate an
36577                                                         interrupt on the RSL. */
36578        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM[18] to generate an
36579                                                         interrupt on the RSL. */
36580        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM[17] to generate an
36581                                                         interrupt on the RSL. */
36582        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM[16] to generate an
36583                                                         interrupt on the RSL. */
36584        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM[15] to generate an
36585                                                         interrupt on the RSL. */
36586        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM[14] to generate an
36587                                                         interrupt on the RSL. */
36588        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM[13] to generate an
36589                                                         interrupt on the RSL. */
36590        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM[12] to generate an
36591                                                         interrupt on the RSL. */
36592        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM[11] to generate an
36593                                                         interrupt on the RSL. */
36594        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM[10] to generate an
36595                                                         interrupt on the RSL. */
36596        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM[9] to generate an
36597                                                         interrupt on the RSL. */
36598        uint64_t dma4dbo                 : 1;       /**< Enables NPEI_INT_SUM[8] to generate an
36599                                                         interrupt on the RSL. */
36600        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM[7] to generate an
36601                                                         interrupt on the RSL. */
36602        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM[6] to generate an
36603                                                         interrupt on the RSL. */
36604        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM[5] to generate an
36605                                                         interrupt on the RSL. */
36606        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM[4] to generate an
36607                                                         interrupt on the RSL. */
36608        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM[3] to generate an
36609                                                         interrupt on the RSL. */
36610        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM[2] to generate an
36611                                                         interrupt on the RSL. */
36612        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM[1] to generate an
36613                                                         interrupt on the RSL. */
36614        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_UM[0] to generate an
36615                                                         interrupt on the RSL. */
36616#else
36617        uint64_t rml_rto                 : 1;
36618        uint64_t rml_wto                 : 1;
36619        uint64_t bar0_to                 : 1;
36620        uint64_t iob2big                 : 1;
36621        uint64_t dma0dbo                 : 1;
36622        uint64_t dma1dbo                 : 1;
36623        uint64_t dma2dbo                 : 1;
36624        uint64_t dma3dbo                 : 1;
36625        uint64_t dma4dbo                 : 1;
36626        uint64_t dma0fi                  : 1;
36627        uint64_t dma1fi                  : 1;
36628        uint64_t dcnt0                   : 1;
36629        uint64_t dcnt1                   : 1;
36630        uint64_t dtime0                  : 1;
36631        uint64_t dtime1                  : 1;
36632        uint64_t psldbof                 : 1;
36633        uint64_t pidbof                  : 1;
36634        uint64_t pcnt                    : 1;
36635        uint64_t ptime                   : 1;
36636        uint64_t c0_aeri                 : 1;
36637        uint64_t crs0_er                 : 1;
36638        uint64_t c0_se                   : 1;
36639        uint64_t crs0_dr                 : 1;
36640        uint64_t c0_wake                 : 1;
36641        uint64_t c0_pmei                 : 1;
36642        uint64_t c0_hpint                : 1;
36643        uint64_t c1_aeri                 : 1;
36644        uint64_t crs1_er                 : 1;
36645        uint64_t c1_se                   : 1;
36646        uint64_t crs1_dr                 : 1;
36647        uint64_t c1_wake                 : 1;
36648        uint64_t c1_pmei                 : 1;
36649        uint64_t c1_hpint                : 1;
36650        uint64_t c0_up_b0                : 1;
36651        uint64_t c0_up_b1                : 1;
36652        uint64_t c0_up_b2                : 1;
36653        uint64_t c0_up_wi                : 1;
36654        uint64_t c0_up_bx                : 1;
36655        uint64_t c0_un_b0                : 1;
36656        uint64_t c0_un_b1                : 1;
36657        uint64_t c0_un_b2                : 1;
36658        uint64_t c0_un_wi                : 1;
36659        uint64_t c0_un_bx                : 1;
36660        uint64_t c1_up_b0                : 1;
36661        uint64_t c1_up_b1                : 1;
36662        uint64_t c1_up_b2                : 1;
36663        uint64_t c1_up_wi                : 1;
36664        uint64_t c1_up_bx                : 1;
36665        uint64_t c1_un_b0                : 1;
36666        uint64_t c1_un_b1                : 1;
36667        uint64_t c1_un_b2                : 1;
36668        uint64_t c1_un_wi                : 1;
36669        uint64_t c1_un_bx                : 1;
36670        uint64_t c0_un_wf                : 1;
36671        uint64_t c1_un_wf                : 1;
36672        uint64_t c0_up_wf                : 1;
36673        uint64_t c1_up_wf                : 1;
36674        uint64_t c0_exc                  : 1;
36675        uint64_t c1_exc                  : 1;
36676        uint64_t c0_ldwn                 : 1;
36677        uint64_t c1_ldwn                 : 1;
36678        uint64_t int_a                   : 1;
36679        uint64_t reserved_62_63          : 2;
36680#endif
36681    } s;
36682    struct cvmx_npei_int_enb2_s          cn52xx;
36683    struct cvmx_npei_int_enb2_cn52xxp1
36684    {
36685#if __BYTE_ORDER == __BIG_ENDIAN
36686        uint64_t reserved_62_63          : 2;
36687        uint64_t int_a                   : 1;       /**< Enables NPEI_INT_SUM2[61] to generate an
36688                                                         interrupt on the RSL. */
36689        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM2[60] to generate an
36690                                                         interrupt on the RSL. */
36691        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM2[59] to generate an
36692                                                         interrupt on the RSL. */
36693        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM2[58] to generate an
36694                                                         interrupt on the RSL. */
36695        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM2[57] to generate an
36696                                                         interrupt on the RSL. */
36697        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM2[56] to generate an
36698                                                         interrupt on the RSL. */
36699        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM2[55] to generate an
36700                                                         interrupt on the RSL. */
36701        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM2[54] to generate an
36702                                                         interrupt on the RSL. */
36703        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM2[53] to generate an
36704                                                         interrupt on the RSL. */
36705        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM2[52] to generate an
36706                                                         interrupt on the RSL. */
36707        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM2[51] to generate an
36708                                                         interrupt on the RSL. */
36709        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM2[50] to generate an
36710                                                         interrupt on the RSL. */
36711        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM2[49] to generate an
36712                                                         interrupt on the RSL. */
36713        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM2[48] to generate an
36714                                                         interrupt on the RSL. */
36715        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM2[47] to generate an
36716                                                         interrupt on the RSL. */
36717        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM2[46] to generate an
36718                                                         interrupt on the RSL. */
36719        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM2[45] to generate an
36720                                                         interrupt on the RSL. */
36721        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM2[44] to generate an
36722                                                         interrupt on the RSL. */
36723        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM2[43] to generate an
36724                                                         interrupt on the RSL. */
36725        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM2[42] to generate an
36726                                                         interrupt on the RSL. */
36727        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM2[41] to generate an
36728                                                         interrupt on the RSL. */
36729        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM2[40] to generate an
36730                                                         interrupt on the RSL. */
36731        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM2[39] to generate an
36732                                                         interrupt on the RSL. */
36733        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM2[38] to generate an
36734                                                         interrupt on the RSL. */
36735        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM2[37] to generate an
36736                                                         interrupt on the RSL. */
36737        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM2[36] to generate an
36738                                                         interrupt on the RSL. */
36739        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM2[35] to generate an
36740                                                         interrupt on the RSL. */
36741        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM2[34] to generate an
36742                                                         interrupt on the RSL. */
36743        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM2[33] to generate an
36744                                                         interrupt on the RSL. */
36745        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM2[32] to generate an
36746                                                         interrupt on the RSL. */
36747        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM2[31] to generate an
36748                                                         interrupt on the RSL. */
36749        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM2[30] to generate an
36750                                                         interrupt on the RSL. */
36751        uint64_t crs1_dr                 : 1;       /**< Enables NPEI_INT_SUM2[29] to generate an
36752                                                         interrupt on the RSL. */
36753        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM2[28] to generate an
36754                                                         interrupt on the RSL. */
36755        uint64_t crs1_er                 : 1;       /**< Enables NPEI_INT_SUM2[27] to generate an
36756                                                         interrupt on the RSL. */
36757        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM2[26] to generate an
36758                                                         interrupt on the RSL. */
36759        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM2[25] to generate an
36760                                                         interrupt on the RSL. */
36761        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM2[24] to generate an
36762                                                         interrupt on the RSL. */
36763        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM2[23] to generate an
36764                                                         interrupt on the RSL. */
36765        uint64_t crs0_dr                 : 1;       /**< Enables NPEI_INT_SUM2[22] to generate an
36766                                                         interrupt on the RSL. */
36767        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM2[21] to generate an
36768                                                         interrupt on the RSL. */
36769        uint64_t crs0_er                 : 1;       /**< Enables NPEI_INT_SUM2[20] to generate an
36770                                                         interrupt on the RSL. */
36771        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM2[19] to generate an
36772                                                         interrupt on the RSL. */
36773        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM2[18] to generate an
36774                                                         interrupt on the RSL. */
36775        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM2[17] to generate an
36776                                                         interrupt on the RSL. */
36777        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM2[16] to generate an
36778                                                         interrupt on the RSL. */
36779        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM2[15] to generate an
36780                                                         interrupt on the RSL. */
36781        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM2[14] to generate an
36782                                                         interrupt on the RSL. */
36783        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM2[13] to generate an
36784                                                         interrupt on the RSL. */
36785        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM2[12] to generate an
36786                                                         interrupt on the RSL. */
36787        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM2[11] to generate an
36788                                                         interrupt on the RSL. */
36789        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM2[10] to generate an
36790                                                         interrupt on the RSL. */
36791        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM2[9] to generate an
36792                                                         interrupt on the RSL. */
36793        uint64_t reserved_8_8            : 1;
36794        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM2[7] to generate an
36795                                                         interrupt on the RSL. */
36796        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM2[6] to generate an
36797                                                         interrupt on the RSL. */
36798        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM2[5] to generate an
36799                                                         interrupt on the RSL. */
36800        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM2[4] to generate an
36801                                                         interrupt on the RSL. */
36802        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM2[3] to generate an
36803                                                         interrupt on the RSL. */
36804        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM2[2] to generate an
36805                                                         interrupt on the RSL. */
36806        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM2[1] to generate an
36807                                                         interrupt on the RSL. */
36808        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_SUM2[0] to generate an
36809                                                         interrupt on the RSL. */
36810#else
36811        uint64_t rml_rto                 : 1;
36812        uint64_t rml_wto                 : 1;
36813        uint64_t bar0_to                 : 1;
36814        uint64_t iob2big                 : 1;
36815        uint64_t dma0dbo                 : 1;
36816        uint64_t dma1dbo                 : 1;
36817        uint64_t dma2dbo                 : 1;
36818        uint64_t dma3dbo                 : 1;
36819        uint64_t reserved_8_8            : 1;
36820        uint64_t dma0fi                  : 1;
36821        uint64_t dma1fi                  : 1;
36822        uint64_t dcnt0                   : 1;
36823        uint64_t dcnt1                   : 1;
36824        uint64_t dtime0                  : 1;
36825        uint64_t dtime1                  : 1;
36826        uint64_t psldbof                 : 1;
36827        uint64_t pidbof                  : 1;
36828        uint64_t pcnt                    : 1;
36829        uint64_t ptime                   : 1;
36830        uint64_t c0_aeri                 : 1;
36831        uint64_t crs0_er                 : 1;
36832        uint64_t c0_se                   : 1;
36833        uint64_t crs0_dr                 : 1;
36834        uint64_t c0_wake                 : 1;
36835        uint64_t c0_pmei                 : 1;
36836        uint64_t c0_hpint                : 1;
36837        uint64_t c1_aeri                 : 1;
36838        uint64_t crs1_er                 : 1;
36839        uint64_t c1_se                   : 1;
36840        uint64_t crs1_dr                 : 1;
36841        uint64_t c1_wake                 : 1;
36842        uint64_t c1_pmei                 : 1;
36843        uint64_t c1_hpint                : 1;
36844        uint64_t c0_up_b0                : 1;
36845        uint64_t c0_up_b1                : 1;
36846        uint64_t c0_up_b2                : 1;
36847        uint64_t c0_up_wi                : 1;
36848        uint64_t c0_up_bx                : 1;
36849        uint64_t c0_un_b0                : 1;
36850        uint64_t c0_un_b1                : 1;
36851        uint64_t c0_un_b2                : 1;
36852        uint64_t c0_un_wi                : 1;
36853        uint64_t c0_un_bx                : 1;
36854        uint64_t c1_up_b0                : 1;
36855        uint64_t c1_up_b1                : 1;
36856        uint64_t c1_up_b2                : 1;
36857        uint64_t c1_up_wi                : 1;
36858        uint64_t c1_up_bx                : 1;
36859        uint64_t c1_un_b0                : 1;
36860        uint64_t c1_un_b1                : 1;
36861        uint64_t c1_un_b2                : 1;
36862        uint64_t c1_un_wi                : 1;
36863        uint64_t c1_un_bx                : 1;
36864        uint64_t c0_un_wf                : 1;
36865        uint64_t c1_un_wf                : 1;
36866        uint64_t c0_up_wf                : 1;
36867        uint64_t c1_up_wf                : 1;
36868        uint64_t c0_exc                  : 1;
36869        uint64_t c1_exc                  : 1;
36870        uint64_t c0_ldwn                 : 1;
36871        uint64_t c1_ldwn                 : 1;
36872        uint64_t int_a                   : 1;
36873        uint64_t reserved_62_63          : 2;
36874#endif
36875    } cn52xxp1;
36876    struct cvmx_npei_int_enb2_s          cn56xx;
36877    struct cvmx_npei_int_enb2_cn56xxp1
36878    {
36879#if __BYTE_ORDER == __BIG_ENDIAN
36880        uint64_t reserved_61_63          : 3;
36881        uint64_t c1_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[60] to generate an
36882                                                         interrupt on the RSL. */
36883        uint64_t c0_ldwn                 : 1;       /**< Enables NPEI_INT_SUM[59] to generate an
36884                                                         interrupt on the RSL. */
36885        uint64_t c1_exc                  : 1;       /**< Enables NPEI_INT_SUM[58] to generate an
36886                                                         interrupt on the RSL. */
36887        uint64_t c0_exc                  : 1;       /**< Enables NPEI_INT_SUM[57] to generate an
36888                                                         interrupt on the RSL. */
36889        uint64_t c1_up_wf                : 1;       /**< Enables NPEI_INT_SUM[56] to generate an
36890                                                         interrupt on the RSL. */
36891        uint64_t c0_up_wf                : 1;       /**< Enables NPEI_INT_SUM[55] to generate an
36892                                                         interrupt on the RSL. */
36893        uint64_t c1_un_wf                : 1;       /**< Enables NPEI_INT_SUM[54] to generate an
36894                                                         interrupt on the RSL. */
36895        uint64_t c0_un_wf                : 1;       /**< Enables NPEI_INT_SUM[53] to generate an
36896                                                         interrupt on the RSL. */
36897        uint64_t c1_un_bx                : 1;       /**< Enables NPEI_INT_SUM[52] to generate an
36898                                                         interrupt on the RSL. */
36899        uint64_t c1_un_wi                : 1;       /**< Enables NPEI_INT_SUM[51] to generate an
36900                                                         interrupt on the RSL. */
36901        uint64_t c1_un_b2                : 1;       /**< Enables NPEI_INT_SUM[50] to generate an
36902                                                         interrupt on the RSL. */
36903        uint64_t c1_un_b1                : 1;       /**< Enables NPEI_INT_SUM[49] to generate an
36904                                                         interrupt on the RSL. */
36905        uint64_t c1_un_b0                : 1;       /**< Enables NPEI_INT_SUM[48] to generate an
36906                                                         interrupt on the RSL. */
36907        uint64_t c1_up_bx                : 1;       /**< Enables NPEI_INT_SUM[47] to generate an
36908                                                         interrupt on the RSL. */
36909        uint64_t c1_up_wi                : 1;       /**< Enables NPEI_INT_SUM[46] to generate an
36910                                                         interrupt on the RSL. */
36911        uint64_t c1_up_b2                : 1;       /**< Enables NPEI_INT_SUM[45] to generate an
36912                                                         interrupt on the RSL. */
36913        uint64_t c1_up_b1                : 1;       /**< Enables NPEI_INT_SUM[44] to generate an
36914                                                         interrupt on the RSL. */
36915        uint64_t c1_up_b0                : 1;       /**< Enables NPEI_INT_SUM[43] to generate an
36916                                                         interrupt on the RSL. */
36917        uint64_t c0_un_bx                : 1;       /**< Enables NPEI_INT_SUM[42] to generate an
36918                                                         interrupt on the RSL. */
36919        uint64_t c0_un_wi                : 1;       /**< Enables NPEI_INT_SUM[41] to generate an
36920                                                         interrupt on the RSL. */
36921        uint64_t c0_un_b2                : 1;       /**< Enables NPEI_INT_SUM[40] to generate an
36922                                                         interrupt on the RSL. */
36923        uint64_t c0_un_b1                : 1;       /**< Enables NPEI_INT_SUM[39] to generate an
36924                                                         interrupt on the RSL. */
36925        uint64_t c0_un_b0                : 1;       /**< Enables NPEI_INT_SUM[38] to generate an
36926                                                         interrupt on the RSL. */
36927        uint64_t c0_up_bx                : 1;       /**< Enables NPEI_INT_SUM[37] to generate an
36928                                                         interrupt on the RSL. */
36929        uint64_t c0_up_wi                : 1;       /**< Enables NPEI_INT_SUM[36] to generate an
36930                                                         interrupt on the RSL. */
36931        uint64_t c0_up_b2                : 1;       /**< Enables NPEI_INT_SUM[35] to generate an
36932                                                         interrupt on the RSL. */
36933        uint64_t c0_up_b1                : 1;       /**< Enables NPEI_INT_SUM[34] to generate an
36934                                                         interrupt on the RSL. */
36935        uint64_t c0_up_b0                : 1;       /**< Enables NPEI_INT_SUM[33] to generate an
36936                                                         interrupt on the RSL. */
36937        uint64_t c1_hpint                : 1;       /**< Enables NPEI_INT_SUM[32] to generate an
36938                                                         interrupt on the RSL. */
36939        uint64_t c1_pmei                 : 1;       /**< Enables NPEI_INT_SUM[31] to generate an
36940                                                         interrupt on the RSL. */
36941        uint64_t c1_wake                 : 1;       /**< Enables NPEI_INT_SUM[30] to generate an
36942                                                         interrupt on the RSL. */
36943        uint64_t reserved_29_29          : 1;
36944        uint64_t c1_se                   : 1;       /**< Enables NPEI_INT_SUM[28] to generate an
36945                                                         interrupt on the RSL. */
36946        uint64_t reserved_27_27          : 1;
36947        uint64_t c1_aeri                 : 1;       /**< Enables NPEI_INT_SUM[26] to generate an
36948                                                         interrupt on the RSL. */
36949        uint64_t c0_hpint                : 1;       /**< Enables NPEI_INT_SUM[25] to generate an
36950                                                         interrupt on the RSL. */
36951        uint64_t c0_pmei                 : 1;       /**< Enables NPEI_INT_SUM[24] to generate an
36952                                                         interrupt on the RSL. */
36953        uint64_t c0_wake                 : 1;       /**< Enables NPEI_INT_SUM[23] to generate an
36954                                                         interrupt on the RSL. */
36955        uint64_t reserved_22_22          : 1;
36956        uint64_t c0_se                   : 1;       /**< Enables NPEI_INT_SUM[21] to generate an
36957                                                         interrupt on the RSL. */
36958        uint64_t reserved_20_20          : 1;
36959        uint64_t c0_aeri                 : 1;       /**< Enables NPEI_INT_SUM[19] to generate an
36960                                                         interrupt on the RSL. */
36961        uint64_t ptime                   : 1;       /**< Enables NPEI_INT_SUM[18] to generate an
36962                                                         interrupt on the RSL. */
36963        uint64_t pcnt                    : 1;       /**< Enables NPEI_INT_SUM[17] to generate an
36964                                                         interrupt on the RSL. */
36965        uint64_t pidbof                  : 1;       /**< Enables NPEI_INT_SUM[16] to generate an
36966                                                         interrupt on the RSL. */
36967        uint64_t psldbof                 : 1;       /**< Enables NPEI_INT_SUM[15] to generate an
36968                                                         interrupt on the RSL. */
36969        uint64_t dtime1                  : 1;       /**< Enables NPEI_INT_SUM[14] to generate an
36970                                                         interrupt on the RSL. */
36971        uint64_t dtime0                  : 1;       /**< Enables NPEI_INT_SUM[13] to generate an
36972                                                         interrupt on the RSL. */
36973        uint64_t dcnt1                   : 1;       /**< Enables NPEI_INT_SUM[12] to generate an
36974                                                         interrupt on the RSL. */
36975        uint64_t dcnt0                   : 1;       /**< Enables NPEI_INT_SUM[11] to generate an
36976                                                         interrupt on the RSL. */
36977        uint64_t dma1fi                  : 1;       /**< Enables NPEI_INT_SUM[10] to generate an
36978                                                         interrupt on the RSL. */
36979        uint64_t dma0fi                  : 1;       /**< Enables NPEI_INT_SUM[9] to generate an
36980                                                         interrupt on the RSL. */
36981        uint64_t dma4dbo                 : 1;       /**< Enables NPEI_INT_SUM[8] to generate an
36982                                                         interrupt on the RSL. */
36983        uint64_t dma3dbo                 : 1;       /**< Enables NPEI_INT_SUM[7] to generate an
36984                                                         interrupt on the RSL. */
36985        uint64_t dma2dbo                 : 1;       /**< Enables NPEI_INT_SUM[6] to generate an
36986                                                         interrupt on the RSL. */
36987        uint64_t dma1dbo                 : 1;       /**< Enables NPEI_INT_SUM[5] to generate an
36988                                                         interrupt on the RSL. */
36989        uint64_t dma0dbo                 : 1;       /**< Enables NPEI_INT_SUM[4] to generate an
36990                                                         interrupt on the RSL. */
36991        uint64_t iob2big                 : 1;       /**< Enables NPEI_INT_SUM[3] to generate an
36992                                                         interrupt on the RSL. */
36993        uint64_t bar0_to                 : 1;       /**< Enables NPEI_INT_SUM[2] to generate an
36994                                                         interrupt on the RSL. */
36995        uint64_t rml_wto                 : 1;       /**< Enables NPEI_INT_SUM[1] to generate an
36996                                                         interrupt on the RSL. */
36997        uint64_t rml_rto                 : 1;       /**< Enables NPEI_INT_UM[0] to generate an
36998                                                         interrupt on the RSL. */
36999#else
37000        uint64_t rml_rto                 : 1;
37001        uint64_t rml_wto                 : 1;
37002        uint64_t bar0_to                 : 1;
37003        uint64_t iob2big                 : 1;
37004        uint64_t dma0dbo                 : 1;
37005        uint64_t dma1dbo                 : 1;
37006        uint64_t dma2dbo                 : 1;
37007        uint64_t dma3dbo                 : 1;
37008        uint64_t dma4dbo                 : 1;
37009        uint64_t dma0fi                  : 1;
37010        uint64_t dma1fi                  : 1;
37011        uint64_t dcnt0                   : 1;
37012        uint64_t dcnt1                   : 1;
37013        uint64_t dtime0                  : 1;
37014        uint64_t dtime1                  : 1;
37015        uint64_t psldbof                 : 1;
37016        uint64_t pidbof                  : 1;
37017        uint64_t pcnt                    : 1;
37018        uint64_t ptime                   : 1;
37019        uint64_t c0_aeri                 : 1;
37020        uint64_t reserved_20_20          : 1;
37021        uint64_t c0_se                   : 1;
37022        uint64_t reserved_22_22          : 1;
37023        uint64_t c0_wake                 : 1;
37024        uint64_t c0_pmei                 : 1;
37025        uint64_t c0_hpint                : 1;
37026        uint64_t c1_aeri                 : 1;
37027        uint64_t reserved_27_27          : 1;
37028        uint64_t c1_se                   : 1;
37029        uint64_t reserved_29_29          : 1;
37030        uint64_t c1_wake                 : 1;
37031        uint64_t c1_pmei                 : 1;
37032        uint64_t c1_hpint                : 1;
37033        uint64_t c0_up_b0                : 1;
37034        uint64_t c0_up_b1                : 1;
37035        uint64_t c0_up_b2                : 1;
37036        uint64_t c0_up_wi                : 1;
37037        uint64_t c0_up_bx                : 1;
37038        uint64_t c0_un_b0                : 1;
37039        uint64_t c0_un_b1                : 1;
37040        uint64_t c0_un_b2                : 1;
37041        uint64_t c0_un_wi                : 1;
37042        uint64_t c0_un_bx                : 1;
37043        uint64_t c1_up_b0                : 1;
37044        uint64_t c1_up_b1                : 1;
37045        uint64_t c1_up_b2                : 1;
37046        uint64_t c1_up_wi                : 1;
37047        uint64_t c1_up_bx                : 1;
37048        uint64_t c1_un_b0                : 1;
37049        uint64_t c1_un_b1                : 1;
37050        uint64_t c1_un_b2                : 1;
37051        uint64_t c1_un_wi                : 1;
37052        uint64_t c1_un_bx                : 1;
37053        uint64_t c0_un_wf                : 1;
37054        uint64_t c1_un_wf                : 1;
37055        uint64_t c0_up_wf                : 1;
37056        uint64_t c1_up_wf                : 1;
37057        uint64_t c0_exc                  : 1;
37058        uint64_t c1_exc                  : 1;
37059        uint64_t c0_ldwn                 : 1;
37060        uint64_t c1_ldwn                 : 1;
37061        uint64_t reserved_61_63          : 3;
37062#endif
37063    } cn56xxp1;
37064} cvmx_npei_int_enb2_t;
37065
37066
37067/**
37068 * cvmx_npei_int_info
37069 *
37070 * NPEI_INT_INFO = NPI Interrupt Information
37071 *
37072 * Contains information about some of the interrupt condition that can occur in the NPEI_INTERRUPT_SUM register.
37073 */
37074typedef union
37075{
37076    uint64_t u64;
37077    struct cvmx_npei_int_info_s
37078    {
37079#if __BYTE_ORDER == __BIG_ENDIAN
37080        uint64_t reserved_12_63          : 52;
37081        uint64_t pidbof                  : 6;       /**< Field set when the NPEI_INTERRUPT_SUM[PIDBOF] bit
37082                                                         is set. This field when set will not change again
37083                                                         unitl NPEI_INTERRUPT_SUM[PIDBOF] is cleared. */
37084        uint64_t psldbof                 : 6;       /**< Field set when the NPEI_INTERRUPT_SUM[PSLDBOF] bit
37085                                                         is set. This field when set will not change again
37086                                                         unitl NPEI_INTERRUPT_SUM[PSLDBOF] is cleared. */
37087#else
37088        uint64_t psldbof                 : 6;
37089        uint64_t pidbof                  : 6;
37090        uint64_t reserved_12_63          : 52;
37091#endif
37092    } s;
37093    struct cvmx_npei_int_info_s          cn52xx;
37094    struct cvmx_npei_int_info_s          cn56xx;
37095    struct cvmx_npei_int_info_s          cn56xxp1;
37096} cvmx_npei_int_info_t;
37097
37098
37099/**
37100 * cvmx_npei_int_sum
37101 *
37102 * NPEI_INTERRUPT_SUM = NPI Interrupt Summary Register
37103 *
37104 * Set when an interrupt condition occurs, write '1' to clear.
37105 *
37106 * HACK: These used to exist, how are TO handled?
37107 *  <3>     PO0_2SML R/W1C    0x0         0         The packet being sent out on Port0 is smaller          $R     NS
37108 *                                                            than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field.
37109 * <7>     I0_RTOUT R/W1C    0x0         0         Port-0 had a read timeout while attempting to          $R     NS
37110 *                                                 read instructions.
37111 * <15>    P0_RTOUT R/W1C    0x0         0         Port-0 had a read timeout while attempting to          $R     NS
37112 *                                                 read packet data.
37113 * <23>    G0_RTOUT R/W1C    0x0         0         Port-0 had a read timeout while attempting to          $R     NS
37114 *                                                 read a gather list.
37115 * <31>    P0_PTOUT R/W1C    0x0         0         Port-0 output had a read timeout on a DATA/INFO         $R     NS
37116 *                                                 pair.
37117 */
37118typedef union
37119{
37120    uint64_t u64;
37121    struct cvmx_npei_int_sum_s
37122    {
37123#if __BYTE_ORDER == __BIG_ENDIAN
37124        uint64_t mio_inta                : 1;       /**< Interrupt from MIO. */
37125        uint64_t reserved_62_62          : 1;
37126        uint64_t int_a                   : 1;       /**< Set when a bit in the NPEI_INT_A_SUM register and
37127                                                         the cooresponding bit in the NPEI_INT_A_ENB
37128                                                         register is set. */
37129        uint64_t c1_ldwn                 : 1;       /**< Reset request due to link1 down status. */
37130        uint64_t c0_ldwn                 : 1;       /**< Reset request due to link0 down status. */
37131        uint64_t c1_exc                  : 1;       /**< Set when the PESC1_DBG_INFO register has a bit
37132                                                         set and its cooresponding PESC1_DBG_INFO_EN bit
37133                                                         is set. */
37134        uint64_t c0_exc                  : 1;       /**< Set when the PESC0_DBG_INFO register has a bit
37135                                                         set and its cooresponding PESC0_DBG_INFO_EN bit
37136                                                         is set. */
37137        uint64_t c1_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37138                                                         register. Core1. */
37139        uint64_t c0_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37140                                                         register. Core0. */
37141        uint64_t c1_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37142                                                         register. Core1. */
37143        uint64_t c0_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37144                                                         register. Core0. */
37145        uint64_t c1_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37146                                                         Core 1. */
37147        uint64_t c1_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37148                                                         Core 1. */
37149        uint64_t c1_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37150                                                         Core 1. */
37151        uint64_t c1_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37152                                                         Core 1. */
37153        uint64_t c1_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37154                                                         Core 1. */
37155        uint64_t c1_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37156                                                         Core 1. */
37157        uint64_t c1_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37158                                                         Core 1. */
37159        uint64_t c1_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37160                                                         Core 1. */
37161        uint64_t c1_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37162                                                         Core 1. */
37163        uint64_t c1_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37164                                                         Core 1. */
37165        uint64_t c0_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37166                                                         Core 0. */
37167        uint64_t c0_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37168                                                         Core 0. */
37169        uint64_t c0_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37170                                                         Core 0. */
37171        uint64_t c0_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37172                                                         Core 0. */
37173        uint64_t c0_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37174                                                         Core 0. */
37175        uint64_t c0_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37176                                                         Core 0. */
37177        uint64_t c0_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37178                                                         Core 0. */
37179        uint64_t c0_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37180                                                         Core 0. */
37181        uint64_t c0_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37182                                                         Core 0. */
37183        uint64_t c0_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37184                                                         Core 0. */
37185        uint64_t c1_hpint                : 1;       /**< Hot-Plug Interrupt.
37186                                                         Pcie Core 1 (hp_int).
37187                                                         This interrupt will only be generated when
37188                                                         PCIERC1_CFG034[DLLS_C] is generated. Hot plug is
37189                                                         not supported. */
37190        uint64_t c1_pmei                 : 1;       /**< PME Interrupt.
37191                                                         Pcie Core 1. (cfg_pme_int) */
37192        uint64_t c1_wake                 : 1;       /**< Wake up from Power Management Unit.
37193                                                         Pcie Core 1. (wake_n)
37194                                                         Octeon will never generate this interrupt. */
37195        uint64_t crs1_dr                 : 1;       /**< Had a CRS when Retries were disabled. */
37196        uint64_t c1_se                   : 1;       /**< System Error, RC Mode Only.
37197                                                         Pcie Core 1. (cfg_sys_err_rc) */
37198        uint64_t crs1_er                 : 1;       /**< Had a CRS Timeout when Retries were enabled. */
37199        uint64_t c1_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37200                                                         Pcie Core 1. */
37201        uint64_t c0_hpint                : 1;       /**< Hot-Plug Interrupt.
37202                                                         Pcie Core 0 (hp_int).
37203                                                         This interrupt will only be generated when
37204                                                         PCIERC0_CFG034[DLLS_C] is generated. Hot plug is
37205                                                         not supported. */
37206        uint64_t c0_pmei                 : 1;       /**< PME Interrupt.
37207                                                         Pcie Core 0. (cfg_pme_int) */
37208        uint64_t c0_wake                 : 1;       /**< Wake up from Power Management Unit.
37209                                                         Pcie Core 0. (wake_n)
37210                                                         Octeon will never generate this interrupt. */
37211        uint64_t crs0_dr                 : 1;       /**< Had a CRS when Retries were disabled. */
37212        uint64_t c0_se                   : 1;       /**< System Error, RC Mode Only.
37213                                                         Pcie Core 0. (cfg_sys_err_rc) */
37214        uint64_t crs0_er                 : 1;       /**< Had a CRS Timeout when Retries were enabled. */
37215        uint64_t c0_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37216                                                         Pcie Core 0 (cfg_aer_rc_err_int). */
37217        uint64_t ptime                   : 1;       /**< Packet Timer has an interrupt. Which rings can
37218                                                         be found in NPEI_PKT_TIME_INT. */
37219        uint64_t pcnt                    : 1;       /**< Packet Counter has an interrupt. Which rings can
37220                                                         be found in NPEI_PKT_CNT_INT. */
37221        uint64_t pidbof                  : 1;       /**< Packet Instruction Doorbell count overflowed. Which
37222                                                         doorbell can be found in NPEI_INT_INFO[PIDBOF] */
37223        uint64_t psldbof                 : 1;       /**< Packet Scatterlist Doorbell count overflowed. Which
37224                                                         doorbell can be found in NPEI_INT_INFO[PSLDBOF] */
37225        uint64_t dtime1                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the
37226                                                         DMA_CNT1 timer increments every core clock. When
37227                                                         DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME],
37228                                                         this bit is set. Writing a '1' to this bit also
37229                                                         clears the DMA_CNT1 timer. */
37230        uint64_t dtime0                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the
37231                                                         DMA_CNT0 timer increments every core clock. When
37232                                                         DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME],
37233                                                         this bit is set. Writing a '1' to this bit also
37234                                                         clears the DMA_CNT0 timer. */
37235        uint64_t dcnt1                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is
37236                                                         greater than NPEI_DMA1_INT_LEVEL[CNT]. */
37237        uint64_t dcnt0                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is
37238                                                         greater than NPEI_DMA0_INT_LEVEL[CNT]. */
37239        uint64_t dma1fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37240        uint64_t dma0fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37241        uint64_t dma4dbo                 : 1;       /**< DMA4 doorbell overflow.
37242                                                         Bit[32] of the doorbell count was set. */
37243        uint64_t dma3dbo                 : 1;       /**< DMA3 doorbell overflow.
37244                                                         Bit[32] of the doorbell count was set. */
37245        uint64_t dma2dbo                 : 1;       /**< DMA2 doorbell overflow.
37246                                                         Bit[32] of the doorbell count was set. */
37247        uint64_t dma1dbo                 : 1;       /**< DMA1 doorbell overflow.
37248                                                         Bit[32] of the doorbell count was set. */
37249        uint64_t dma0dbo                 : 1;       /**< DMA0 doorbell overflow.
37250                                                         Bit[32] of the doorbell count was set. */
37251        uint64_t iob2big                 : 1;       /**< A requested IOBDMA is to large. */
37252        uint64_t bar0_to                 : 1;       /**< BAR0 R/W to a NCB device did not receive
37253                                                         read-data/commit in 0xffff core clocks. */
37254        uint64_t rml_wto                 : 1;       /**< RML write did not get commit in 0xffff core clocks. */
37255        uint64_t rml_rto                 : 1;       /**< RML read did not return data in 0xffff core clocks. */
37256#else
37257        uint64_t rml_rto                 : 1;
37258        uint64_t rml_wto                 : 1;
37259        uint64_t bar0_to                 : 1;
37260        uint64_t iob2big                 : 1;
37261        uint64_t dma0dbo                 : 1;
37262        uint64_t dma1dbo                 : 1;
37263        uint64_t dma2dbo                 : 1;
37264        uint64_t dma3dbo                 : 1;
37265        uint64_t dma4dbo                 : 1;
37266        uint64_t dma0fi                  : 1;
37267        uint64_t dma1fi                  : 1;
37268        uint64_t dcnt0                   : 1;
37269        uint64_t dcnt1                   : 1;
37270        uint64_t dtime0                  : 1;
37271        uint64_t dtime1                  : 1;
37272        uint64_t psldbof                 : 1;
37273        uint64_t pidbof                  : 1;
37274        uint64_t pcnt                    : 1;
37275        uint64_t ptime                   : 1;
37276        uint64_t c0_aeri                 : 1;
37277        uint64_t crs0_er                 : 1;
37278        uint64_t c0_se                   : 1;
37279        uint64_t crs0_dr                 : 1;
37280        uint64_t c0_wake                 : 1;
37281        uint64_t c0_pmei                 : 1;
37282        uint64_t c0_hpint                : 1;
37283        uint64_t c1_aeri                 : 1;
37284        uint64_t crs1_er                 : 1;
37285        uint64_t c1_se                   : 1;
37286        uint64_t crs1_dr                 : 1;
37287        uint64_t c1_wake                 : 1;
37288        uint64_t c1_pmei                 : 1;
37289        uint64_t c1_hpint                : 1;
37290        uint64_t c0_up_b0                : 1;
37291        uint64_t c0_up_b1                : 1;
37292        uint64_t c0_up_b2                : 1;
37293        uint64_t c0_up_wi                : 1;
37294        uint64_t c0_up_bx                : 1;
37295        uint64_t c0_un_b0                : 1;
37296        uint64_t c0_un_b1                : 1;
37297        uint64_t c0_un_b2                : 1;
37298        uint64_t c0_un_wi                : 1;
37299        uint64_t c0_un_bx                : 1;
37300        uint64_t c1_up_b0                : 1;
37301        uint64_t c1_up_b1                : 1;
37302        uint64_t c1_up_b2                : 1;
37303        uint64_t c1_up_wi                : 1;
37304        uint64_t c1_up_bx                : 1;
37305        uint64_t c1_un_b0                : 1;
37306        uint64_t c1_un_b1                : 1;
37307        uint64_t c1_un_b2                : 1;
37308        uint64_t c1_un_wi                : 1;
37309        uint64_t c1_un_bx                : 1;
37310        uint64_t c0_un_wf                : 1;
37311        uint64_t c1_un_wf                : 1;
37312        uint64_t c0_up_wf                : 1;
37313        uint64_t c1_up_wf                : 1;
37314        uint64_t c0_exc                  : 1;
37315        uint64_t c1_exc                  : 1;
37316        uint64_t c0_ldwn                 : 1;
37317        uint64_t c1_ldwn                 : 1;
37318        uint64_t int_a                   : 1;
37319        uint64_t reserved_62_62          : 1;
37320        uint64_t mio_inta                : 1;
37321#endif
37322    } s;
37323    struct cvmx_npei_int_sum_s           cn52xx;
37324    struct cvmx_npei_int_sum_cn52xxp1
37325    {
37326#if __BYTE_ORDER == __BIG_ENDIAN
37327        uint64_t mio_inta                : 1;       /**< Interrupt from MIO. */
37328        uint64_t reserved_62_62          : 1;
37329        uint64_t int_a                   : 1;       /**< Set when a bit in the NPEI_INT_A_SUM register and
37330                                                         the cooresponding bit in the NPEI_INT_A_ENB
37331                                                         register is set. */
37332        uint64_t c1_ldwn                 : 1;       /**< Reset request due to link1 down status. */
37333        uint64_t c0_ldwn                 : 1;       /**< Reset request due to link0 down status. */
37334        uint64_t c1_exc                  : 1;       /**< Set when the PESC1_DBG_INFO register has a bit
37335                                                         set and its cooresponding PESC1_DBG_INFO_EN bit
37336                                                         is set. */
37337        uint64_t c0_exc                  : 1;       /**< Set when the PESC0_DBG_INFO register has a bit
37338                                                         set and its cooresponding PESC0_DBG_INFO_EN bit
37339                                                         is set. */
37340        uint64_t c1_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37341                                                         register. Core1. */
37342        uint64_t c0_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37343                                                         register. Core0. */
37344        uint64_t c1_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37345                                                         register. Core1. */
37346        uint64_t c0_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37347                                                         register. Core0. */
37348        uint64_t c1_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37349                                                         Core 1. */
37350        uint64_t c1_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37351                                                         Core 1. */
37352        uint64_t c1_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37353                                                         Core 1. */
37354        uint64_t c1_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37355                                                         Core 1. */
37356        uint64_t c1_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37357                                                         Core 1. */
37358        uint64_t c1_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37359                                                         Core 1. */
37360        uint64_t c1_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37361                                                         Core 1. */
37362        uint64_t c1_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37363                                                         Core 1. */
37364        uint64_t c1_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37365                                                         Core 1. */
37366        uint64_t c1_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37367                                                         Core 1. */
37368        uint64_t c0_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37369                                                         Core 0. */
37370        uint64_t c0_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37371                                                         Core 0. */
37372        uint64_t c0_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37373                                                         Core 0. */
37374        uint64_t c0_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37375                                                         Core 0. */
37376        uint64_t c0_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37377                                                         Core 0. */
37378        uint64_t c0_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37379                                                         Core 0. */
37380        uint64_t c0_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37381                                                         Core 0. */
37382        uint64_t c0_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37383                                                         Core 0. */
37384        uint64_t c0_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37385                                                         Core 0. */
37386        uint64_t c0_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37387                                                         Core 0. */
37388        uint64_t c1_hpint                : 1;       /**< Hot-Plug Interrupt.
37389                                                         Pcie Core 1 (hp_int).
37390                                                         This interrupt will only be generated when
37391                                                         PCIERC1_CFG034[DLLS_C] is generated. Hot plug is
37392                                                         not supported. */
37393        uint64_t c1_pmei                 : 1;       /**< PME Interrupt.
37394                                                         Pcie Core 1. (cfg_pme_int) */
37395        uint64_t c1_wake                 : 1;       /**< Wake up from Power Management Unit.
37396                                                         Pcie Core 1. (wake_n)
37397                                                         Octeon will never generate this interrupt. */
37398        uint64_t crs1_dr                 : 1;       /**< Had a CRS when Retries were disabled. */
37399        uint64_t c1_se                   : 1;       /**< System Error, RC Mode Only.
37400                                                         Pcie Core 1. (cfg_sys_err_rc) */
37401        uint64_t crs1_er                 : 1;       /**< Had a CRS Timeout when Retries were enabled. */
37402        uint64_t c1_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37403                                                         Pcie Core 1. */
37404        uint64_t c0_hpint                : 1;       /**< Hot-Plug Interrupt.
37405                                                         Pcie Core 0 (hp_int).
37406                                                         This interrupt will only be generated when
37407                                                         PCIERC0_CFG034[DLLS_C] is generated. Hot plug is
37408                                                         not supported. */
37409        uint64_t c0_pmei                 : 1;       /**< PME Interrupt.
37410                                                         Pcie Core 0. (cfg_pme_int) */
37411        uint64_t c0_wake                 : 1;       /**< Wake up from Power Management Unit.
37412                                                         Pcie Core 0. (wake_n)
37413                                                         Octeon will never generate this interrupt. */
37414        uint64_t crs0_dr                 : 1;       /**< Had a CRS when Retries were disabled. */
37415        uint64_t c0_se                   : 1;       /**< System Error, RC Mode Only.
37416                                                         Pcie Core 0. (cfg_sys_err_rc) */
37417        uint64_t crs0_er                 : 1;       /**< Had a CRS Timeout when Retries were enabled. */
37418        uint64_t c0_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37419                                                         Pcie Core 0 (cfg_aer_rc_err_int). */
37420        uint64_t reserved_15_18          : 4;
37421        uint64_t dtime1                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the
37422                                                         DMA_CNT1 timer increments every core clock. When
37423                                                         DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME],
37424                                                         this bit is set. Writing a '1' to this bit also
37425                                                         clears the DMA_CNT1 timer. */
37426        uint64_t dtime0                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the
37427                                                         DMA_CNT0 timer increments every core clock. When
37428                                                         DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME],
37429                                                         this bit is set. Writing a '1' to this bit also
37430                                                         clears the DMA_CNT0 timer. */
37431        uint64_t dcnt1                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is
37432                                                         greater than NPEI_DMA1_INT_LEVEL[CNT]. */
37433        uint64_t dcnt0                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is
37434                                                         greater than NPEI_DMA0_INT_LEVEL[CNT]. */
37435        uint64_t dma1fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37436        uint64_t dma0fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37437        uint64_t reserved_8_8            : 1;
37438        uint64_t dma3dbo                 : 1;       /**< DMA3 doorbell count overflow.
37439                                                         Bit[32] of the doorbell count was set. */
37440        uint64_t dma2dbo                 : 1;       /**< DMA2 doorbell count overflow.
37441                                                         Bit[32] of the doorbell count was set. */
37442        uint64_t dma1dbo                 : 1;       /**< DMA1 doorbell count overflow.
37443                                                         Bit[32] of the doorbell count was set. */
37444        uint64_t dma0dbo                 : 1;       /**< DMA0 doorbell count overflow.
37445                                                         Bit[32] of the doorbell count was set. */
37446        uint64_t iob2big                 : 1;       /**< A requested IOBDMA is to large. */
37447        uint64_t bar0_to                 : 1;       /**< BAR0 R/W to a NCB device did not receive
37448                                                         read-data/commit in 0xffff core clocks. */
37449        uint64_t rml_wto                 : 1;       /**< RML write did not get commit in 0xffff core clocks. */
37450        uint64_t rml_rto                 : 1;       /**< RML read did not return data in 0xffff core clocks. */
37451#else
37452        uint64_t rml_rto                 : 1;
37453        uint64_t rml_wto                 : 1;
37454        uint64_t bar0_to                 : 1;
37455        uint64_t iob2big                 : 1;
37456        uint64_t dma0dbo                 : 1;
37457        uint64_t dma1dbo                 : 1;
37458        uint64_t dma2dbo                 : 1;
37459        uint64_t dma3dbo                 : 1;
37460        uint64_t reserved_8_8            : 1;
37461        uint64_t dma0fi                  : 1;
37462        uint64_t dma1fi                  : 1;
37463        uint64_t dcnt0                   : 1;
37464        uint64_t dcnt1                   : 1;
37465        uint64_t dtime0                  : 1;
37466        uint64_t dtime1                  : 1;
37467        uint64_t reserved_15_18          : 4;
37468        uint64_t c0_aeri                 : 1;
37469        uint64_t crs0_er                 : 1;
37470        uint64_t c0_se                   : 1;
37471        uint64_t crs0_dr                 : 1;
37472        uint64_t c0_wake                 : 1;
37473        uint64_t c0_pmei                 : 1;
37474        uint64_t c0_hpint                : 1;
37475        uint64_t c1_aeri                 : 1;
37476        uint64_t crs1_er                 : 1;
37477        uint64_t c1_se                   : 1;
37478        uint64_t crs1_dr                 : 1;
37479        uint64_t c1_wake                 : 1;
37480        uint64_t c1_pmei                 : 1;
37481        uint64_t c1_hpint                : 1;
37482        uint64_t c0_up_b0                : 1;
37483        uint64_t c0_up_b1                : 1;
37484        uint64_t c0_up_b2                : 1;
37485        uint64_t c0_up_wi                : 1;
37486        uint64_t c0_up_bx                : 1;
37487        uint64_t c0_un_b0                : 1;
37488        uint64_t c0_un_b1                : 1;
37489        uint64_t c0_un_b2                : 1;
37490        uint64_t c0_un_wi                : 1;
37491        uint64_t c0_un_bx                : 1;
37492        uint64_t c1_up_b0                : 1;
37493        uint64_t c1_up_b1                : 1;
37494        uint64_t c1_up_b2                : 1;
37495        uint64_t c1_up_wi                : 1;
37496        uint64_t c1_up_bx                : 1;
37497        uint64_t c1_un_b0                : 1;
37498        uint64_t c1_un_b1                : 1;
37499        uint64_t c1_un_b2                : 1;
37500        uint64_t c1_un_wi                : 1;
37501        uint64_t c1_un_bx                : 1;
37502        uint64_t c0_un_wf                : 1;
37503        uint64_t c1_un_wf                : 1;
37504        uint64_t c0_up_wf                : 1;
37505        uint64_t c1_up_wf                : 1;
37506        uint64_t c0_exc                  : 1;
37507        uint64_t c1_exc                  : 1;
37508        uint64_t c0_ldwn                 : 1;
37509        uint64_t c1_ldwn                 : 1;
37510        uint64_t int_a                   : 1;
37511        uint64_t reserved_62_62          : 1;
37512        uint64_t mio_inta                : 1;
37513#endif
37514    } cn52xxp1;
37515    struct cvmx_npei_int_sum_s           cn56xx;
37516    struct cvmx_npei_int_sum_cn56xxp1
37517    {
37518#if __BYTE_ORDER == __BIG_ENDIAN
37519        uint64_t mio_inta                : 1;       /**< Interrupt from MIO. */
37520        uint64_t reserved_61_62          : 2;
37521        uint64_t c1_ldwn                 : 1;       /**< Reset request due to link1 down status. */
37522        uint64_t c0_ldwn                 : 1;       /**< Reset request due to link0 down status. */
37523        uint64_t c1_exc                  : 1;       /**< Set when the PESC1_DBG_INFO register has a bit
37524                                                         set and its cooresponding PESC1_DBG_INFO_EN bit
37525                                                         is set. */
37526        uint64_t c0_exc                  : 1;       /**< Set when the PESC0_DBG_INFO register has a bit
37527                                                         set and its cooresponding PESC0_DBG_INFO_EN bit
37528                                                         is set. */
37529        uint64_t c1_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37530                                                         register. Core1. */
37531        uint64_t c0_up_wf                : 1;       /**< Received Unsupported P-TLP for filtered window
37532                                                         register. Core0. */
37533        uint64_t c1_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37534                                                         register. Core1. */
37535        uint64_t c0_un_wf                : 1;       /**< Received Unsupported N-TLP for filtered window
37536                                                         register. Core0. */
37537        uint64_t c1_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37538                                                         Core 1. */
37539        uint64_t c1_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37540                                                         Core 1. */
37541        uint64_t c1_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37542                                                         Core 1. */
37543        uint64_t c1_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37544                                                         Core 1. */
37545        uint64_t c1_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37546                                                         Core 1. */
37547        uint64_t c1_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37548                                                         Core 1. */
37549        uint64_t c1_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37550                                                         Core 1. */
37551        uint64_t c1_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37552                                                         Core 1. */
37553        uint64_t c1_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37554                                                         Core 1. */
37555        uint64_t c1_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37556                                                         Core 1. */
37557        uint64_t c0_un_bx                : 1;       /**< Received Unsupported N-TLP for unknown Bar.
37558                                                         Core 0. */
37559        uint64_t c0_un_wi                : 1;       /**< Received Unsupported N-TLP for Window Register.
37560                                                         Core 0. */
37561        uint64_t c0_un_b2                : 1;       /**< Received Unsupported N-TLP for Bar2.
37562                                                         Core 0. */
37563        uint64_t c0_un_b1                : 1;       /**< Received Unsupported N-TLP for Bar1.
37564                                                         Core 0. */
37565        uint64_t c0_un_b0                : 1;       /**< Received Unsupported N-TLP for Bar0.
37566                                                         Core 0. */
37567        uint64_t c0_up_bx                : 1;       /**< Received Unsupported P-TLP for unknown Bar.
37568                                                         Core 0. */
37569        uint64_t c0_up_wi                : 1;       /**< Received Unsupported P-TLP for Window Register.
37570                                                         Core 0. */
37571        uint64_t c0_up_b2                : 1;       /**< Received Unsupported P-TLP for Bar2.
37572                                                         Core 0. */
37573        uint64_t c0_up_b1                : 1;       /**< Received Unsupported P-TLP for Bar1.
37574                                                         Core 0. */
37575        uint64_t c0_up_b0                : 1;       /**< Received Unsupported P-TLP for Bar0.
37576                                                         Core 0. */
37577        uint64_t c1_hpint                : 1;       /**< Hot-Plug Interrupt.
37578                                                         Pcie Core 1 (hp_int).
37579                                                         This interrupt will only be generated when
37580                                                         PCIERC1_CFG034[DLLS_C] is generated. Hot plug is
37581                                                         not supported. */
37582        uint64_t c1_pmei                 : 1;       /**< PME Interrupt.
37583                                                         Pcie Core 1. (cfg_pme_int) */
37584        uint64_t c1_wake                 : 1;       /**< Wake up from Power Management Unit.
37585                                                         Pcie Core 1. (wake_n)
37586                                                         Octeon will never generate this interrupt. */
37587        uint64_t reserved_29_29          : 1;
37588        uint64_t c1_se                   : 1;       /**< System Error, RC Mode Only.
37589                                                         Pcie Core 1. (cfg_sys_err_rc) */
37590        uint64_t reserved_27_27          : 1;
37591        uint64_t c1_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37592                                                         Pcie Core 1. */
37593        uint64_t c0_hpint                : 1;       /**< Hot-Plug Interrupt.
37594                                                         Pcie Core 0 (hp_int).
37595                                                         This interrupt will only be generated when
37596                                                         PCIERC0_CFG034[DLLS_C] is generated. Hot plug is
37597                                                         not supported. */
37598        uint64_t c0_pmei                 : 1;       /**< PME Interrupt.
37599                                                         Pcie Core 0. (cfg_pme_int) */
37600        uint64_t c0_wake                 : 1;       /**< Wake up from Power Management Unit.
37601                                                         Pcie Core 0. (wake_n)
37602                                                         Octeon will never generate this interrupt. */
37603        uint64_t reserved_22_22          : 1;
37604        uint64_t c0_se                   : 1;       /**< System Error, RC Mode Only.
37605                                                         Pcie Core 0. (cfg_sys_err_rc) */
37606        uint64_t reserved_20_20          : 1;
37607        uint64_t c0_aeri                 : 1;       /**< Advanced Error Reporting Interrupt, RC Mode Only.
37608                                                         Pcie Core 0 (cfg_aer_rc_err_int). */
37609        uint64_t reserved_15_18          : 4;
37610        uint64_t dtime1                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA1] is not 0, the
37611                                                         DMA_CNT1 timer increments every core clock. When
37612                                                         DMA_CNT1 timer exceeds NPEI_DMA1_INT_LEVEL[TIME],
37613                                                         this bit is set. Writing a '1' to this bit also
37614                                                         clears the DMA_CNT1 timer. */
37615        uint64_t dtime0                  : 1;       /**< Whenever NPEI_DMA_CNTS[DMA0] is not 0, the
37616                                                         DMA_CNT0 timer increments every core clock. When
37617                                                         DMA_CNT0 timer exceeds NPEI_DMA0_INT_LEVEL[TIME],
37618                                                         this bit is set. Writing a '1' to this bit also
37619                                                         clears the DMA_CNT0 timer. */
37620        uint64_t dcnt1                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA1] was/is
37621                                                         greater than NPEI_DMA1_INT_LEVEL[CNT]. */
37622        uint64_t dcnt0                   : 1;       /**< This bit indicates that NPEI_DMA_CNTS[DMA0] was/is
37623                                                         greater than NPEI_DMA0_INT_LEVEL[CNT]. */
37624        uint64_t dma1fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37625        uint64_t dma0fi                  : 1;       /**< DMA0 set Forced Interrupt. */
37626        uint64_t dma4dbo                 : 1;       /**< DMA4 doorbell overflow.
37627                                                         Bit[32] of the doorbell count was set. */
37628        uint64_t dma3dbo                 : 1;       /**< DMA3 doorbell overflow.
37629                                                         Bit[32] of the doorbell count was set. */
37630        uint64_t dma2dbo                 : 1;       /**< DMA2 doorbell overflow.
37631                                                         Bit[32] of the doorbell count was set. */
37632        uint64_t dma1dbo                 : 1;       /**< DMA1 doorbell overflow.
37633                                                         Bit[32] of the doorbell count was set. */
37634        uint64_t dma0dbo                 : 1;       /**< DMA0 doorbell overflow.
37635                                                         Bit[32] of the doorbell count was set. */
37636        uint64_t iob2big                 : 1;       /**< A requested IOBDMA is to large. */
37637        uint64_t bar0_to                 : 1;       /**< BAR0 R/W to a NCB device did not receive
37638                                                         read-data/commit in 0xffff core clocks. */
37639        uint64_t rml_wto                 : 1;       /**< RML write did not get commit in 0xffff core clocks. */
37640        uint64_t rml_rto                 : 1;       /**< RML read did not return data in 0xffff core clocks. */
37641#else
37642        uint64_t rml_rto                 : 1;
37643        uint64_t rml_wto                 : 1;
37644        uint64_t bar0_to                 : 1;
37645        uint64_t iob2big                 : 1;
37646        uint64_t dma0dbo                 : 1;
37647        uint64_t dma1dbo                 : 1;
37648        uint64_t dma2dbo                 : 1;
37649        uint64_t dma3dbo                 : 1;
37650        uint64_t dma4dbo                 : 1;
37651        uint64_t dma0fi                  : 1;
37652        uint64_t dma1fi                  : 1;
37653        uint64_t dcnt0                   : 1;
37654        uint64_t dcnt1                   : 1;
37655        uint64_t dtime0                  : 1;
37656        uint64_t dtime1                  : 1;
37657        uint64_t reserved_15_18          : 4;
37658        uint64_t c0_aeri                 : 1;
37659        uint64_t reserved_20_20          : 1;
37660        uint64_t c0_se                   : 1;
37661        uint64_t reserved_22_22          : 1;
37662        uint64_t c0_wake                 : 1;
37663        uint64_t c0_pmei                 : 1;
37664        uint64_t c0_hpint                : 1;
37665        uint64_t c1_aeri                 : 1;
37666        uint64_t reserved_27_27          : 1;
37667        uint64_t c1_se                   : 1;
37668        uint64_t reserved_29_29          : 1;
37669        uint64_t c1_wake                 : 1;
37670        uint64_t c1_pmei                 : 1;
37671        uint64_t c1_hpint                : 1;
37672        uint64_t c0_up_b0                : 1;
37673        uint64_t c0_up_b1                : 1;
37674        uint64_t c0_up_b2                : 1;
37675        uint64_t c0_up_wi                : 1;
37676        uint64_t c0_up_bx                : 1;
37677        uint64_t c0_un_b0                : 1;
37678        uint64_t c0_un_b1                : 1;
37679        uint64_t c0_un_b2                : 1;
37680        uint64_t c0_un_wi                : 1;
37681        uint64_t c0_un_bx                : 1;
37682        uint64_t c1_up_b0                : 1;
37683        uint64_t c1_up_b1                : 1;
37684        uint64_t c1_up_b2                : 1;
37685        uint64_t c1_up_wi                : 1;
37686        uint64_t c1_up_bx                : 1;
37687        uint64_t c1_un_b0                : 1;
37688        uint64_t c1_un_b1                : 1;
37689        uint64_t c1_un_b2                : 1;
37690        uint64_t c1_un_wi                : 1;
37691        uint64_t c1_un_bx                : 1;
37692        uint64_t c0_un_wf                : 1;
37693        uint64_t c1_un_wf                : 1;
37694        uint64_t c0_up_wf                : 1;
37695        uint64_t c1_up_wf                : 1;
37696        uint64_t c0_exc                  : 1;
37697        uint64_t c1_exc                  : 1;
37698        uint64_t c0_ldwn                 : 1;
37699        uint64_t c1_ldwn                 : 1;
37700        uint64_t reserved_61_62          : 2;
37701        uint64_t mio_inta                : 1;
37702#endif
37703    } cn56xxp1;
37704} cvmx_npei_int_sum_t;
37705
37706
37707/**
37708 * cvmx_npei_int_sum2
37709 *
37710 * NPEI_INTERRUPT_SUM2 = NPI Interrupt Summary2 Register
37711 *
37712 * This is a read only copy of the NPEI_INTERRUPT_SUM register with bit variances.
37713 */
37714typedef union
37715{
37716    uint64_t u64;
37717    struct cvmx_npei_int_sum2_s
37718    {
37719#if __BYTE_ORDER == __BIG_ENDIAN
37720        uint64_t mio_inta                : 1;       /**< Equal to the cooresponding bit if the
37721                                                         NPEI_INT_SUM register. */
37722        uint64_t reserved_62_62          : 1;
37723        uint64_t int_a                   : 1;       /**< Set when a bit in the NPEI_INT_A_SUM register and
37724                                                         the cooresponding bit in the NPEI_INT_A_ENB2
37725                                                         register is set. */
37726        uint64_t c1_ldwn                 : 1;       /**< Equal to the cooresponding bit if the
37727                                                         NPEI_INT_SUM register. */
37728        uint64_t c0_ldwn                 : 1;       /**< Equal to the cooresponding bit if the
37729                                                         NPEI_INT_SUM register. */
37730        uint64_t c1_exc                  : 1;       /**< Equal to the cooresponding bit if the
37731                                                         NPEI_INT_SUM register. */
37732        uint64_t c0_exc                  : 1;       /**< Equal to the cooresponding bit if the
37733                                                         NPEI_INT_SUM register. */
37734        uint64_t c1_up_wf                : 1;       /**< Equal to the cooresponding bit if the
37735                                                         NPEI_INT_SUM register. */
37736        uint64_t c0_up_wf                : 1;       /**< Equal to the cooresponding bit if the
37737                                                         NPEI_INT_SUM register. */
37738        uint64_t c1_un_wf                : 1;       /**< Equal to the cooresponding bit if the
37739                                                         NPEI_INT_SUM register. */
37740        uint64_t c0_un_wf                : 1;       /**< Equal to the cooresponding bit if the
37741                                                         NPEI_INT_SUM register. */
37742        uint64_t c1_un_bx                : 1;       /**< Equal to the cooresponding bit if the
37743                                                         NPEI_INT_SUM register. */
37744        uint64_t c1_un_wi                : 1;       /**< Equal to the cooresponding bit if the
37745                                                         NPEI_INT_SUM register. */
37746        uint64_t c1_un_b2                : 1;       /**< Equal to the cooresponding bit if the
37747                                                         NPEI_INT_SUM register. */
37748        uint64_t c1_un_b1                : 1;       /**< Equal to the cooresponding bit if the
37749                                                         NPEI_INT_SUM register. */
37750        uint64_t c1_un_b0                : 1;       /**< Equal to the cooresponding bit if the
37751                                                         NPEI_INT_SUM register. */
37752        uint64_t c1_up_bx                : 1;       /**< Equal to the cooresponding bit if the
37753                                                         NPEI_INT_SUM register. */
37754        uint64_t c1_up_wi                : 1;       /**< Equal to the cooresponding bit if the
37755                                                         NPEI_INT_SUM register. */
37756        uint64_t c1_up_b2                : 1;       /**< Equal to the cooresponding bit if the
37757                                                         NPEI_INT_SUM register. */
37758        uint64_t c1_up_b1                : 1;       /**< Equal to the cooresponding bit if the
37759                                                         NPEI_INT_SUM register. */
37760        uint64_t c1_up_b0                : 1;       /**< Equal to the cooresponding bit if the
37761                                                         NPEI_INT_SUM register. */
37762        uint64_t c0_un_bx                : 1;       /**< Equal to the cooresponding bit if the
37763                                                         NPEI_INT_SUM register. */
37764        uint64_t c0_un_wi                : 1;       /**< Equal to the cooresponding bit if the
37765                                                         NPEI_INT_SUM register. */
37766        uint64_t c0_un_b2                : 1;       /**< Equal to the cooresponding bit if the
37767                                                         NPEI_INT_SUM register. */
37768        uint64_t c0_un_b1                : 1;       /**< Equal to the cooresponding bit if the
37769                                                         NPEI_INT_SUM register. */
37770        uint64_t c0_un_b0                : 1;       /**< Equal to the cooresponding bit if the
37771                                                         NPEI_INT_SUM register. */
37772        uint64_t c0_up_bx                : 1;       /**< Equal to the cooresponding bit if the
37773                                                         NPEI_INT_SUM register. */
37774        uint64_t c0_up_wi                : 1;       /**< Equal to the cooresponding bit if the
37775                                                         NPEI_INT_SUM register. */
37776        uint64_t c0_up_b2                : 1;       /**< Equal to the cooresponding bit if the
37777                                                         NPEI_INT_SUM register. */
37778        uint64_t c0_up_b1                : 1;       /**< Equal to the cooresponding bit if the
37779                                                         NPEI_INT_SUM register. */
37780        uint64_t c0_up_b0                : 1;       /**< Equal to the cooresponding bit if the
37781                                                         NPEI_INT_SUM register. */
37782        uint64_t c1_hpint                : 1;       /**< Equal to the cooresponding bit if the
37783                                                         NPEI_INT_SUM register. */
37784        uint64_t c1_pmei                 : 1;       /**< Equal to the cooresponding bit if the
37785                                                         NPEI_INT_SUM register. */
37786        uint64_t c1_wake                 : 1;       /**< Equal to the cooresponding bit if the
37787                                                         NPEI_INT_SUM register. */
37788        uint64_t crs1_dr                 : 1;       /**< Equal to the cooresponding bit if the
37789                                                         NPEI_INT_SUM register. */
37790        uint64_t c1_se                   : 1;       /**< Equal to the cooresponding bit if the
37791                                                         NPEI_INT_SUM register. */
37792        uint64_t crs1_er                 : 1;       /**< Equal to the cooresponding bit if the
37793                                                         NPEI_INT_SUM register. */
37794        uint64_t c1_aeri                 : 1;       /**< Equal to the cooresponding bit if the
37795                                                         NPEI_INT_SUM register. */
37796        uint64_t c0_hpint                : 1;       /**< Equal to the cooresponding bit if the
37797                                                         NPEI_INT_SUM register. */
37798        uint64_t c0_pmei                 : 1;       /**< Equal to the cooresponding bit if the
37799                                                         NPEI_INT_SUM register. */
37800        uint64_t c0_wake                 : 1;       /**< Equal to the cooresponding bit if the
37801                                                         NPEI_INT_SUM register. */
37802        uint64_t crs0_dr                 : 1;       /**< Equal to the cooresponding bit if the
37803                                                         NPEI_INT_SUM register. */
37804        uint64_t c0_se                   : 1;       /**< Equal to the cooresponding bit if the
37805                                                         NPEI_INT_SUM register. */
37806        uint64_t crs0_er                 : 1;       /**< Equal to the cooresponding bit if the
37807                                                         NPEI_INT_SUM register. */
37808        uint64_t c0_aeri                 : 1;       /**< Equal to the cooresponding bit if the
37809                                                         NPEI_INT_SUM register. */
37810        uint64_t reserved_15_18          : 4;
37811        uint64_t dtime1                  : 1;       /**< Equal to the cooresponding bit if the
37812                                                         NPEI_INT_SUM register. */
37813        uint64_t dtime0                  : 1;       /**< Equal to the cooresponding bit if the
37814                                                         NPEI_INT_SUM register. */
37815        uint64_t dcnt1                   : 1;       /**< Equal to the cooresponding bit if the
37816                                                         NPEI_INT_SUM register. */
37817        uint64_t dcnt0                   : 1;       /**< Equal to the cooresponding bit if the
37818                                                         NPEI_INT_SUM register. */
37819        uint64_t dma1fi                  : 1;       /**< Equal to the cooresponding bit if the
37820                                                         NPEI_INT_SUM register. */
37821        uint64_t dma0fi                  : 1;       /**< Equal to the cooresponding bit if the
37822                                                         NPEI_INT_SUM register. */
37823        uint64_t reserved_8_8            : 1;
37824        uint64_t dma3dbo                 : 1;       /**< Equal to the cooresponding bit if the
37825                                                         NPEI_INT_SUM register. */
37826        uint64_t dma2dbo                 : 1;       /**< Equal to the cooresponding bit if the
37827                                                         NPEI_INT_SUM register. */
37828        uint64_t dma1dbo                 : 1;       /**< Equal to the cooresponding bit if the
37829                                                         NPEI_INT_SUM register. */
37830        uint64_t dma0dbo                 : 1;       /**< Equal to the cooresponding bit if the
37831                                                         NPEI_INT_SUM register. */
37832        uint64_t iob2big                 : 1;       /**< Equal to the cooresponding bit if the
37833                                                         NPEI_INT_SUM register. */
37834        uint64_t bar0_to                 : 1;       /**< Equal to the cooresponding bit if the
37835                                                         NPEI_INT_SUM register. */
37836        uint64_t rml_wto                 : 1;       /**< Equal to the cooresponding bit if the
37837                                                         NPEI_INT_SUM register. */
37838        uint64_t rml_rto                 : 1;       /**< Equal to the cooresponding bit if the
37839                                                         NPEI_INT_SUM register. */
37840#else
37841        uint64_t rml_rto                 : 1;
37842        uint64_t rml_wto                 : 1;
37843        uint64_t bar0_to                 : 1;
37844        uint64_t iob2big                 : 1;
37845        uint64_t dma0dbo                 : 1;
37846        uint64_t dma1dbo                 : 1;
37847        uint64_t dma2dbo                 : 1;
37848        uint64_t dma3dbo                 : 1;
37849        uint64_t reserved_8_8            : 1;
37850        uint64_t dma0fi                  : 1;
37851        uint64_t dma1fi                  : 1;
37852        uint64_t dcnt0                   : 1;
37853        uint64_t dcnt1                   : 1;
37854        uint64_t dtime0                  : 1;
37855        uint64_t dtime1                  : 1;
37856        uint64_t reserved_15_18          : 4;
37857        uint64_t c0_aeri                 : 1;
37858        uint64_t crs0_er                 : 1;
37859        uint64_t c0_se                   : 1;
37860        uint64_t crs0_dr                 : 1;
37861        uint64_t c0_wake                 : 1;
37862        uint64_t c0_pmei                 : 1;
37863        uint64_t c0_hpint                : 1;
37864        uint64_t c1_aeri                 : 1;
37865        uint64_t crs1_er                 : 1;
37866        uint64_t c1_se                   : 1;
37867        uint64_t crs1_dr                 : 1;
37868        uint64_t c1_wake                 : 1;
37869        uint64_t c1_pmei                 : 1;
37870        uint64_t c1_hpint                : 1;
37871        uint64_t c0_up_b0                : 1;
37872        uint64_t c0_up_b1                : 1;
37873        uint64_t c0_up_b2                : 1;
37874        uint64_t c0_up_wi                : 1;
37875        uint64_t c0_up_bx                : 1;
37876        uint64_t c0_un_b0                : 1;
37877        uint64_t c0_un_b1                : 1;
37878        uint64_t c0_un_b2                : 1;
37879        uint64_t c0_un_wi                : 1;
37880        uint64_t c0_un_bx                : 1;
37881        uint64_t c1_up_b0                : 1;
37882        uint64_t c1_up_b1                : 1;
37883        uint64_t c1_up_b2                : 1;
37884        uint64_t c1_up_wi                : 1;
37885        uint64_t c1_up_bx                : 1;
37886        uint64_t c1_un_b0                : 1;
37887        uint64_t c1_un_b1                : 1;
37888        uint64_t c1_un_b2                : 1;
37889        uint64_t c1_un_wi                : 1;
37890        uint64_t c1_un_bx                : 1;
37891        uint64_t c0_un_wf                : 1;
37892        uint64_t c1_un_wf                : 1;
37893        uint64_t c0_up_wf                : 1;
37894        uint64_t c1_up_wf                : 1;
37895        uint64_t c0_exc                  : 1;
37896        uint64_t c1_exc                  : 1;
37897        uint64_t c0_ldwn                 : 1;
37898        uint64_t c1_ldwn                 : 1;
37899        uint64_t int_a                   : 1;
37900        uint64_t reserved_62_62          : 1;
37901        uint64_t mio_inta                : 1;
37902#endif
37903    } s;
37904    struct cvmx_npei_int_sum2_s          cn52xx;
37905    struct cvmx_npei_int_sum2_s          cn52xxp1;
37906    struct cvmx_npei_int_sum2_s          cn56xx;
37907} cvmx_npei_int_sum2_t;
37908
37909
37910/**
37911 * cvmx_npei_last_win_rdata0
37912 *
37913 * NPEI_LAST_WIN_RDATA0 = NPEI Last Window Read Data Port0
37914 *
37915 * The data from the last initiated window read.
37916 */
37917typedef union
37918{
37919    uint64_t u64;
37920    struct cvmx_npei_last_win_rdata0_s
37921    {
37922#if __BYTE_ORDER == __BIG_ENDIAN
37923        uint64_t data                    : 64;      /**< Last window read data. */
37924#else
37925        uint64_t data                    : 64;
37926#endif
37927    } s;
37928    struct cvmx_npei_last_win_rdata0_s   cn52xx;
37929    struct cvmx_npei_last_win_rdata0_s   cn52xxp1;
37930    struct cvmx_npei_last_win_rdata0_s   cn56xx;
37931    struct cvmx_npei_last_win_rdata0_s   cn56xxp1;
37932} cvmx_npei_last_win_rdata0_t;
37933
37934
37935/**
37936 * cvmx_npei_last_win_rdata1
37937 *
37938 * NPEI_LAST_WIN_RDATA1 = NPEI Last Window Read Data Port1
37939 *
37940 * The data from the last initiated window read.
37941 */
37942typedef union
37943{
37944    uint64_t u64;
37945    struct cvmx_npei_last_win_rdata1_s
37946    {
37947#if __BYTE_ORDER == __BIG_ENDIAN
37948        uint64_t data                    : 64;      /**< Last window read data. */
37949#else
37950        uint64_t data                    : 64;
37951#endif
37952    } s;
37953    struct cvmx_npei_last_win_rdata1_s   cn52xx;
37954    struct cvmx_npei_last_win_rdata1_s   cn52xxp1;
37955    struct cvmx_npei_last_win_rdata1_s   cn56xx;
37956    struct cvmx_npei_last_win_rdata1_s   cn56xxp1;
37957} cvmx_npei_last_win_rdata1_t;
37958
37959
37960/**
37961 * cvmx_npei_mem_access_ctl
37962 *
37963 * NPEI_MEM_ACCESS_CTL = NPEI's Memory Access Control
37964 *
37965 * Contains control for access to the PCIe address space.
37966 */
37967typedef union
37968{
37969    uint64_t u64;
37970    struct cvmx_npei_mem_access_ctl_s
37971    {
37972#if __BYTE_ORDER == __BIG_ENDIAN
37973        uint64_t reserved_14_63          : 50;
37974        uint64_t max_word                : 4;       /**< The maximum number of words to merge into a single
37975                                                         write operation from the PPs to the PCIe. Legal
37976                                                         values are 1 to 16, where a '0' is treated as 16. */
37977        uint64_t timer                   : 10;      /**< When the NPEI starts a PP to PCIe write it waits
37978                                                         no longer than the value of TIMER in eclks to
37979                                                         merge additional writes from the PPs into 1
37980                                                         large write. The values for this field is 1 to
37981                                                         1024 where a value of '0' is treated as 1024. */
37982#else
37983        uint64_t timer                   : 10;
37984        uint64_t max_word                : 4;
37985        uint64_t reserved_14_63          : 50;
37986#endif
37987    } s;
37988    struct cvmx_npei_mem_access_ctl_s    cn52xx;
37989    struct cvmx_npei_mem_access_ctl_s    cn52xxp1;
37990    struct cvmx_npei_mem_access_ctl_s    cn56xx;
37991    struct cvmx_npei_mem_access_ctl_s    cn56xxp1;
37992} cvmx_npei_mem_access_ctl_t;
37993
37994
37995/**
37996 * cvmx_npei_mem_access_subid#
37997 *
37998 * NPEI_MEM_ACCESS_SUBIDX = NPEI Memory Access SubidX Register
37999 *
38000 * Contains address index and control bits for access to memory from Core PPs.
38001 */
38002typedef union
38003{
38004    uint64_t u64;
38005    struct cvmx_npei_mem_access_subidx_s
38006    {
38007#if __BYTE_ORDER == __BIG_ENDIAN
38008        uint64_t reserved_42_63          : 22;
38009        uint64_t zero                    : 1;       /**< Causes all byte reads to be zero length reads.
38010                                                         Returns to the EXEC a zero for all read data. */
38011        uint64_t port                    : 2;       /**< Port the request is sent to. */
38012        uint64_t nmerge                  : 1;       /**< No merging is allowed in this window. */
38013        uint64_t esr                     : 2;       /**< Endian-swap for Reads. */
38014        uint64_t esw                     : 2;       /**< Endian-swap for Writes. */
38015        uint64_t nsr                     : 1;       /**< No Snoop for Reads. */
38016        uint64_t nsw                     : 1;       /**< No Snoop for Writes. */
38017        uint64_t ror                     : 1;       /**< Relaxed Ordering for Reads. */
38018        uint64_t row                     : 1;       /**< Relaxed Ordering for Writes. */
38019        uint64_t ba                      : 30;      /**< PCIe Adddress Bits <63:34>. */
38020#else
38021        uint64_t ba                      : 30;
38022        uint64_t row                     : 1;
38023        uint64_t ror                     : 1;
38024        uint64_t nsw                     : 1;
38025        uint64_t nsr                     : 1;
38026        uint64_t esw                     : 2;
38027        uint64_t esr                     : 2;
38028        uint64_t nmerge                  : 1;
38029        uint64_t port                    : 2;
38030        uint64_t zero                    : 1;
38031        uint64_t reserved_42_63          : 22;
38032#endif
38033    } s;
38034    struct cvmx_npei_mem_access_subidx_s cn52xx;
38035    struct cvmx_npei_mem_access_subidx_s cn52xxp1;
38036    struct cvmx_npei_mem_access_subidx_s cn56xx;
38037    struct cvmx_npei_mem_access_subidx_s cn56xxp1;
38038} cvmx_npei_mem_access_subidx_t;
38039
38040
38041/**
38042 * cvmx_npei_msi_enb0
38043 *
38044 * NPEI_MSI_ENB0 = NPEI MSI Enable0
38045 *
38046 * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV0.
38047 */
38048typedef union
38049{
38050    uint64_t u64;
38051    struct cvmx_npei_msi_enb0_s
38052    {
38053#if __BYTE_ORDER == __BIG_ENDIAN
38054        uint64_t enb                     : 64;      /**< Enables bit [63:0] of NPEI_MSI_RCV0. */
38055#else
38056        uint64_t enb                     : 64;
38057#endif
38058    } s;
38059    struct cvmx_npei_msi_enb0_s          cn52xx;
38060    struct cvmx_npei_msi_enb0_s          cn52xxp1;
38061    struct cvmx_npei_msi_enb0_s          cn56xx;
38062    struct cvmx_npei_msi_enb0_s          cn56xxp1;
38063} cvmx_npei_msi_enb0_t;
38064
38065
38066/**
38067 * cvmx_npei_msi_enb1
38068 *
38069 * NPEI_MSI_ENB1 = NPEI MSI Enable1
38070 *
38071 * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV1.
38072 */
38073typedef union
38074{
38075    uint64_t u64;
38076    struct cvmx_npei_msi_enb1_s
38077    {
38078#if __BYTE_ORDER == __BIG_ENDIAN
38079        uint64_t enb                     : 64;      /**< Enables bit [63:0] of NPEI_MSI_RCV1. */
38080#else
38081        uint64_t enb                     : 64;
38082#endif
38083    } s;
38084    struct cvmx_npei_msi_enb1_s          cn52xx;
38085    struct cvmx_npei_msi_enb1_s          cn52xxp1;
38086    struct cvmx_npei_msi_enb1_s          cn56xx;
38087    struct cvmx_npei_msi_enb1_s          cn56xxp1;
38088} cvmx_npei_msi_enb1_t;
38089
38090
38091/**
38092 * cvmx_npei_msi_enb2
38093 *
38094 * NPEI_MSI_ENB2 = NPEI MSI Enable2
38095 *
38096 * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV2.
38097 */
38098typedef union
38099{
38100    uint64_t u64;
38101    struct cvmx_npei_msi_enb2_s
38102    {
38103#if __BYTE_ORDER == __BIG_ENDIAN
38104        uint64_t enb                     : 64;      /**< Enables bit [63:0] of NPEI_MSI_RCV2. */
38105#else
38106        uint64_t enb                     : 64;
38107#endif
38108    } s;
38109    struct cvmx_npei_msi_enb2_s          cn52xx;
38110    struct cvmx_npei_msi_enb2_s          cn52xxp1;
38111    struct cvmx_npei_msi_enb2_s          cn56xx;
38112    struct cvmx_npei_msi_enb2_s          cn56xxp1;
38113} cvmx_npei_msi_enb2_t;
38114
38115
38116/**
38117 * cvmx_npei_msi_enb3
38118 *
38119 * NPEI_MSI_ENB3 = NPEI MSI Enable3
38120 *
38121 * Used to enable the interrupt generation for the bits in the NPEI_MSI_RCV3.
38122 */
38123typedef union
38124{
38125    uint64_t u64;
38126    struct cvmx_npei_msi_enb3_s
38127    {
38128#if __BYTE_ORDER == __BIG_ENDIAN
38129        uint64_t enb                     : 64;      /**< Enables bit [63:0] of NPEI_MSI_RCV3. */
38130#else
38131        uint64_t enb                     : 64;
38132#endif
38133    } s;
38134    struct cvmx_npei_msi_enb3_s          cn52xx;
38135    struct cvmx_npei_msi_enb3_s          cn52xxp1;
38136    struct cvmx_npei_msi_enb3_s          cn56xx;
38137    struct cvmx_npei_msi_enb3_s          cn56xxp1;
38138} cvmx_npei_msi_enb3_t;
38139
38140
38141/**
38142 * cvmx_npei_msi_rcv0
38143 *
38144 * NPEI_MSI_RCV0 = NPEI MSI Receive0
38145 *
38146 * Contains bits [63:0] of the 256 bits oof MSI interrupts.
38147 */
38148typedef union
38149{
38150    uint64_t u64;
38151    struct cvmx_npei_msi_rcv0_s
38152    {
38153#if __BYTE_ORDER == __BIG_ENDIAN
38154        uint64_t intr                    : 64;      /**< Bits 63-0 of the 256 bits of MSI interrupt. */
38155#else
38156        uint64_t intr                    : 64;
38157#endif
38158    } s;
38159    struct cvmx_npei_msi_rcv0_s          cn52xx;
38160    struct cvmx_npei_msi_rcv0_s          cn52xxp1;
38161    struct cvmx_npei_msi_rcv0_s          cn56xx;
38162    struct cvmx_npei_msi_rcv0_s          cn56xxp1;
38163} cvmx_npei_msi_rcv0_t;
38164
38165
38166/**
38167 * cvmx_npei_msi_rcv1
38168 *
38169 * NPEI_MSI_RCV1 = NPEI MSI Receive1
38170 *
38171 * Contains bits [127:64] of the 256 bits oof MSI interrupts.
38172 */
38173typedef union
38174{
38175    uint64_t u64;
38176    struct cvmx_npei_msi_rcv1_s
38177    {
38178#if __BYTE_ORDER == __BIG_ENDIAN
38179        uint64_t intr                    : 64;      /**< Bits 127-64 of the 256 bits of MSI interrupt. */
38180#else
38181        uint64_t intr                    : 64;
38182#endif
38183    } s;
38184    struct cvmx_npei_msi_rcv1_s          cn52xx;
38185    struct cvmx_npei_msi_rcv1_s          cn52xxp1;
38186    struct cvmx_npei_msi_rcv1_s          cn56xx;
38187    struct cvmx_npei_msi_rcv1_s          cn56xxp1;
38188} cvmx_npei_msi_rcv1_t;
38189
38190
38191/**
38192 * cvmx_npei_msi_rcv2
38193 *
38194 * NPEI_MSI_RCV2 = NPEI MSI Receive2
38195 *
38196 * Contains bits [191:128] of the 256 bits oof MSI interrupts.
38197 */
38198typedef union
38199{
38200    uint64_t u64;
38201    struct cvmx_npei_msi_rcv2_s
38202    {
38203#if __BYTE_ORDER == __BIG_ENDIAN
38204        uint64_t intr                    : 64;      /**< Bits 191-128 of the 256 bits of MSI interrupt. */
38205#else
38206        uint64_t intr                    : 64;
38207#endif
38208    } s;
38209    struct cvmx_npei_msi_rcv2_s          cn52xx;
38210    struct cvmx_npei_msi_rcv2_s          cn52xxp1;
38211    struct cvmx_npei_msi_rcv2_s          cn56xx;
38212    struct cvmx_npei_msi_rcv2_s          cn56xxp1;
38213} cvmx_npei_msi_rcv2_t;
38214
38215
38216/**
38217 * cvmx_npei_msi_rcv3
38218 *
38219 * NPEI_MSI_RCV3 = NPEI MSI Receive3
38220 *
38221 * Contains bits [255:192] of the 256 bits oof MSI interrupts.
38222 */
38223typedef union
38224{
38225    uint64_t u64;
38226    struct cvmx_npei_msi_rcv3_s
38227    {
38228#if __BYTE_ORDER == __BIG_ENDIAN
38229        uint64_t intr                    : 64;      /**< Bits 255-192 of the 256 bits of MSI interrupt. */
38230#else
38231        uint64_t intr                    : 64;
38232#endif
38233    } s;
38234    struct cvmx_npei_msi_rcv3_s          cn52xx;
38235    struct cvmx_npei_msi_rcv3_s          cn52xxp1;
38236    struct cvmx_npei_msi_rcv3_s          cn56xx;
38237    struct cvmx_npei_msi_rcv3_s          cn56xxp1;
38238} cvmx_npei_msi_rcv3_t;
38239
38240
38241/**
38242 * cvmx_npei_msi_rd_map
38243 *
38244 * NPEI_MSI_RD_MAP = NPEI MSI Read MAP
38245 *
38246 * Used to read the mapping function of the NPEI_PCIE_MSI_RCV to NPEI_MSI_RCV registers.
38247 */
38248typedef union
38249{
38250    uint64_t u64;
38251    struct cvmx_npei_msi_rd_map_s
38252    {
38253#if __BYTE_ORDER == __BIG_ENDIAN
38254        uint64_t reserved_16_63          : 48;
38255        uint64_t rd_int                  : 8;       /**< The value of the map at the location PREVIOUSLY
38256                                                         written to the MSI_INT field of this register. */
38257        uint64_t msi_int                 : 8;       /**< Selects the value that would be received when the
38258                                                         NPEI_PCIE_MSI_RCV register is written. */
38259#else
38260        uint64_t msi_int                 : 8;
38261        uint64_t rd_int                  : 8;
38262        uint64_t reserved_16_63          : 48;
38263#endif
38264    } s;
38265    struct cvmx_npei_msi_rd_map_s        cn52xx;
38266    struct cvmx_npei_msi_rd_map_s        cn52xxp1;
38267    struct cvmx_npei_msi_rd_map_s        cn56xx;
38268    struct cvmx_npei_msi_rd_map_s        cn56xxp1;
38269} cvmx_npei_msi_rd_map_t;
38270
38271
38272/**
38273 * cvmx_npei_msi_w1c_enb0
38274 *
38275 * NPEI_MSI_W1C_ENB0 = NPEI MSI Write 1 To Clear Enable0
38276 *
38277 * Used to clear bits in NPEI_MSI_ENB0. This is a PASS2 register.
38278 */
38279typedef union
38280{
38281    uint64_t u64;
38282    struct cvmx_npei_msi_w1c_enb0_s
38283    {
38284#if __BYTE_ORDER == __BIG_ENDIAN
38285        uint64_t clr                     : 64;      /**< A write of '1' to a vector will clear the
38286                                                         cooresponding bit in NPEI_MSI_ENB0.
38287                                                         A read to this address will return 0. */
38288#else
38289        uint64_t clr                     : 64;
38290#endif
38291    } s;
38292    struct cvmx_npei_msi_w1c_enb0_s      cn52xx;
38293    struct cvmx_npei_msi_w1c_enb0_s      cn56xx;
38294} cvmx_npei_msi_w1c_enb0_t;
38295
38296
38297/**
38298 * cvmx_npei_msi_w1c_enb1
38299 *
38300 * NPEI_MSI_W1C_ENB1 = NPEI MSI Write 1 To Clear Enable1
38301 *
38302 * Used to clear bits in NPEI_MSI_ENB1. This is a PASS2 register.
38303 */
38304typedef union
38305{
38306    uint64_t u64;
38307    struct cvmx_npei_msi_w1c_enb1_s
38308    {
38309#if __BYTE_ORDER == __BIG_ENDIAN
38310        uint64_t clr                     : 64;      /**< A write of '1' to a vector will clear the
38311                                                         cooresponding bit in NPEI_MSI_ENB1.
38312                                                         A read to this address will return 0. */
38313#else
38314        uint64_t clr                     : 64;
38315#endif
38316    } s;
38317    struct cvmx_npei_msi_w1c_enb1_s      cn52xx;
38318    struct cvmx_npei_msi_w1c_enb1_s      cn56xx;
38319} cvmx_npei_msi_w1c_enb1_t;
38320
38321
38322/**
38323 * cvmx_npei_msi_w1c_enb2
38324 *
38325 * NPEI_MSI_W1C_ENB2 = NPEI MSI Write 1 To Clear Enable2
38326 *
38327 * Used to clear bits in NPEI_MSI_ENB2. This is a PASS2 register.
38328 */
38329typedef union
38330{
38331    uint64_t u64;
38332    struct cvmx_npei_msi_w1c_enb2_s
38333    {
38334#if __BYTE_ORDER == __BIG_ENDIAN
38335        uint64_t clr                     : 64;      /**< A write of '1' to a vector will clear the
38336                                                         cooresponding bit in NPEI_MSI_ENB2.
38337                                                         A read to this address will return 0. */
38338#else
38339        uint64_t clr                     : 64;
38340#endif
38341    } s;
38342    struct cvmx_npei_msi_w1c_enb2_s      cn52xx;
38343    struct cvmx_npei_msi_w1c_enb2_s      cn56xx;
38344} cvmx_npei_msi_w1c_enb2_t;
38345
38346
38347/**
38348 * cvmx_npei_msi_w1c_enb3
38349 *
38350 * NPEI_MSI_W1C_ENB3 = NPEI MSI Write 1 To Clear Enable3
38351 *
38352 * Used to clear bits in NPEI_MSI_ENB3. This is a PASS2 register.
38353 */
38354typedef union
38355{
38356    uint64_t u64;
38357    struct cvmx_npei_msi_w1c_enb3_s
38358    {
38359#if __BYTE_ORDER == __BIG_ENDIAN
38360        uint64_t clr                     : 64;      /**< A write of '1' to a vector will clear the
38361                                                         cooresponding bit in NPEI_MSI_ENB3.
38362                                                         A read to this address will return 0. */
38363#else
38364        uint64_t clr                     : 64;
38365#endif
38366    } s;
38367    struct cvmx_npei_msi_w1c_enb3_s      cn52xx;
38368    struct cvmx_npei_msi_w1c_enb3_s      cn56xx;
38369} cvmx_npei_msi_w1c_enb3_t;
38370
38371
38372/**
38373 * cvmx_npei_msi_w1s_enb0
38374 *
38375 * NPEI_MSI_W1S_ENB0 = NPEI MSI Write 1 To Set Enable0
38376 *
38377 * Used to set bits in NPEI_MSI_ENB0. This is a PASS2 register.
38378 */
38379typedef union
38380{
38381    uint64_t u64;
38382    struct cvmx_npei_msi_w1s_enb0_s
38383    {
38384#if __BYTE_ORDER == __BIG_ENDIAN
38385        uint64_t set                     : 64;      /**< A write of '1' to a vector will set the
38386                                                         cooresponding bit in NPEI_MSI_ENB0.
38387                                                         A read to this address will return 0. */
38388#else
38389        uint64_t set                     : 64;
38390#endif
38391    } s;
38392    struct cvmx_npei_msi_w1s_enb0_s      cn52xx;
38393    struct cvmx_npei_msi_w1s_enb0_s      cn56xx;
38394} cvmx_npei_msi_w1s_enb0_t;
38395
38396
38397/**
38398 * cvmx_npei_msi_w1s_enb1
38399 *
38400 * NPEI_MSI_W1S_ENB0 = NPEI MSI Write 1 To Set Enable1
38401 *
38402 * Used to set bits in NPEI_MSI_ENB1. This is a PASS2 register.
38403 */
38404typedef union
38405{
38406    uint64_t u64;
38407    struct cvmx_npei_msi_w1s_enb1_s
38408    {
38409#if __BYTE_ORDER == __BIG_ENDIAN
38410        uint64_t set                     : 64;      /**< A write of '1' to a vector will set the
38411                                                         cooresponding bit in NPEI_MSI_ENB1.
38412                                                         A read to this address will return 0. */
38413#else
38414        uint64_t set                     : 64;
38415#endif
38416    } s;
38417    struct cvmx_npei_msi_w1s_enb1_s      cn52xx;
38418    struct cvmx_npei_msi_w1s_enb1_s      cn56xx;
38419} cvmx_npei_msi_w1s_enb1_t;
38420
38421
38422/**
38423 * cvmx_npei_msi_w1s_enb2
38424 *
38425 * NPEI_MSI_W1S_ENB2 = NPEI MSI Write 1 To Set Enable2
38426 *
38427 * Used to set bits in NPEI_MSI_ENB2. This is a PASS2 register.
38428 */
38429typedef union
38430{
38431    uint64_t u64;
38432    struct cvmx_npei_msi_w1s_enb2_s
38433    {
38434#if __BYTE_ORDER == __BIG_ENDIAN
38435        uint64_t set                     : 64;      /**< A write of '1' to a vector will set the
38436                                                         cooresponding bit in NPEI_MSI_ENB2.
38437                                                         A read to this address will return 0. */
38438#else
38439        uint64_t set                     : 64;
38440#endif
38441    } s;
38442    struct cvmx_npei_msi_w1s_enb2_s      cn52xx;
38443    struct cvmx_npei_msi_w1s_enb2_s      cn56xx;
38444} cvmx_npei_msi_w1s_enb2_t;
38445
38446
38447/**
38448 * cvmx_npei_msi_w1s_enb3
38449 *
38450 * NPEI_MSI_W1S_ENB3 = NPEI MSI Write 1 To Set Enable3
38451 *
38452 * Used to set bits in NPEI_MSI_ENB3. This is a PASS2 register.
38453 */
38454typedef union
38455{
38456    uint64_t u64;
38457    struct cvmx_npei_msi_w1s_enb3_s
38458    {
38459#if __BYTE_ORDER == __BIG_ENDIAN
38460        uint64_t set                     : 64;      /**< A write of '1' to a vector will set the
38461                                                         cooresponding bit in NPEI_MSI_ENB3.
38462                                                         A read to this address will return 0. */
38463#else
38464        uint64_t set                     : 64;
38465#endif
38466    } s;
38467    struct cvmx_npei_msi_w1s_enb3_s      cn52xx;
38468    struct cvmx_npei_msi_w1s_enb3_s      cn56xx;
38469} cvmx_npei_msi_w1s_enb3_t;
38470
38471
38472/**
38473 * cvmx_npei_msi_wr_map
38474 *
38475 * NPEI_MSI_WR_MAP = NPEI MSI Write MAP
38476 *
38477 * Used to write the mapping function of the NPEI_PCIE_MSI_RCV to NPEI_MSI_RCV registers.
38478 */
38479typedef union
38480{
38481    uint64_t u64;
38482    struct cvmx_npei_msi_wr_map_s
38483    {
38484#if __BYTE_ORDER == __BIG_ENDIAN
38485        uint64_t reserved_16_63          : 48;
38486        uint64_t ciu_int                 : 8;       /**< Selects which bit in the NPEI_MSI_RCV# (0-255)
38487                                                         will be set when the value specified in the
38488                                                         MSI_INT of this register is recevied during a
38489                                                         write to the NPEI_PCIE_MSI_RCV register. */
38490        uint64_t msi_int                 : 8;       /**< Selects the value that would be received when the
38491                                                         NPEI_PCIE_MSI_RCV register is written. */
38492#else
38493        uint64_t msi_int                 : 8;
38494        uint64_t ciu_int                 : 8;
38495        uint64_t reserved_16_63          : 48;
38496#endif
38497    } s;
38498    struct cvmx_npei_msi_wr_map_s        cn52xx;
38499    struct cvmx_npei_msi_wr_map_s        cn52xxp1;
38500    struct cvmx_npei_msi_wr_map_s        cn56xx;
38501    struct cvmx_npei_msi_wr_map_s        cn56xxp1;
38502} cvmx_npei_msi_wr_map_t;
38503
38504
38505/**
38506 * cvmx_npei_pcie_credit_cnt
38507 *
38508 * NPEI_PCIE_CREDIT_CNT = NPEI PCIE Credit Count
38509 *
38510 * Contains the number of credits for the pcie port FIFOs used by the NPEI. This value needs to be set BEFORE PCIe traffic
38511 * flow from NPEI to PCIE Ports starts. A write to this register will cause the credit counts in the NPEI for the two
38512 * PCIE ports to be reset to the value in this register.
38513 */
38514typedef union
38515{
38516    uint64_t u64;
38517    struct cvmx_npei_pcie_credit_cnt_s
38518    {
38519#if __BYTE_ORDER == __BIG_ENDIAN
38520        uint64_t reserved_48_63          : 16;
38521        uint64_t p1_ccnt                 : 8;       /**< Port1 C-TLP FIFO Credits.
38522                                                         Legal values are 0x25 to 0x80. */
38523        uint64_t p1_ncnt                 : 8;       /**< Port1 N-TLP FIFO Credits.
38524                                                         Legal values are 0x5 to 0x10. */
38525        uint64_t p1_pcnt                 : 8;       /**< Port1 P-TLP FIFO Credits.
38526                                                         Legal values are 0x25 to 0x80. */
38527        uint64_t p0_ccnt                 : 8;       /**< Port0 C-TLP FIFO Credits.
38528                                                         Legal values are 0x25 to 0x80. */
38529        uint64_t p0_ncnt                 : 8;       /**< Port0 N-TLP FIFO Credits.
38530                                                         Legal values are 0x5 to 0x10. */
38531        uint64_t p0_pcnt                 : 8;       /**< Port0 P-TLP FIFO Credits.
38532                                                         Legal values are 0x25 to 0x80. */
38533#else
38534        uint64_t p0_pcnt                 : 8;
38535        uint64_t p0_ncnt                 : 8;
38536        uint64_t p0_ccnt                 : 8;
38537        uint64_t p1_pcnt                 : 8;
38538        uint64_t p1_ncnt                 : 8;
38539        uint64_t p1_ccnt                 : 8;
38540        uint64_t reserved_48_63          : 16;
38541#endif
38542    } s;
38543    struct cvmx_npei_pcie_credit_cnt_s   cn52xx;
38544    struct cvmx_npei_pcie_credit_cnt_s   cn56xx;
38545} cvmx_npei_pcie_credit_cnt_t;
38546
38547
38548/**
38549 * cvmx_npei_pcie_msi_rcv
38550 *
38551 * NPEI_PCIE_MSI_RCV = NPEI PCIe MSI Receive
38552 *
38553 * Register where MSI writes are directed from the PCIe.
38554 */
38555typedef union
38556{
38557    uint64_t u64;
38558    struct cvmx_npei_pcie_msi_rcv_s
38559    {
38560#if __BYTE_ORDER == __BIG_ENDIAN
38561        uint64_t reserved_8_63           : 56;
38562        uint64_t intr                    : 8;       /**< A write to this register will result in a bit in
38563                                                         one of the NPEI_MSI_RCV# registers being set.
38564                                                         Which bit is set is dependent on the previously
38565                                                         written using the NPEI_MSI_WR_MAP register or if
38566                                                         not previously written the reset value of the MAP. */
38567#else
38568        uint64_t intr                    : 8;
38569        uint64_t reserved_8_63           : 56;
38570#endif
38571    } s;
38572    struct cvmx_npei_pcie_msi_rcv_s      cn52xx;
38573    struct cvmx_npei_pcie_msi_rcv_s      cn52xxp1;
38574    struct cvmx_npei_pcie_msi_rcv_s      cn56xx;
38575    struct cvmx_npei_pcie_msi_rcv_s      cn56xxp1;
38576} cvmx_npei_pcie_msi_rcv_t;
38577
38578
38579/**
38580 * cvmx_npei_pcie_msi_rcv_b1
38581 *
38582 * NPEI_PCIE_MSI_RCV_B1 = NPEI PCIe MSI Receive Byte 1
38583 *
38584 * Register where MSI writes are directed from the PCIe.
38585 */
38586typedef union
38587{
38588    uint64_t u64;
38589    struct cvmx_npei_pcie_msi_rcv_b1_s
38590    {
38591#if __BYTE_ORDER == __BIG_ENDIAN
38592        uint64_t reserved_16_63          : 48;
38593        uint64_t intr                    : 8;       /**< A write to this register will result in a bit in
38594                                                         one of the NPEI_MSI_RCV# registers being set.
38595                                                         Which bit is set is dependent on the previously
38596                                                         written using the NPEI_MSI_WR_MAP register or if
38597                                                         not previously written the reset value of the MAP. */
38598        uint64_t reserved_0_7            : 8;
38599#else
38600        uint64_t reserved_0_7            : 8;
38601        uint64_t intr                    : 8;
38602        uint64_t reserved_16_63          : 48;
38603#endif
38604    } s;
38605    struct cvmx_npei_pcie_msi_rcv_b1_s   cn52xx;
38606    struct cvmx_npei_pcie_msi_rcv_b1_s   cn52xxp1;
38607    struct cvmx_npei_pcie_msi_rcv_b1_s   cn56xx;
38608    struct cvmx_npei_pcie_msi_rcv_b1_s   cn56xxp1;
38609} cvmx_npei_pcie_msi_rcv_b1_t;
38610
38611
38612/**
38613 * cvmx_npei_pcie_msi_rcv_b2
38614 *
38615 * NPEI_PCIE_MSI_RCV_B2 = NPEI PCIe MSI Receive Byte 2
38616 *
38617 * Register where MSI writes are directed from the PCIe.
38618 */
38619typedef union
38620{
38621    uint64_t u64;
38622    struct cvmx_npei_pcie_msi_rcv_b2_s
38623    {
38624#if __BYTE_ORDER == __BIG_ENDIAN
38625        uint64_t reserved_24_63          : 40;
38626        uint64_t intr                    : 8;       /**< A write to this register will result in a bit in
38627                                                         one of the NPEI_MSI_RCV# registers being set.
38628                                                         Which bit is set is dependent on the previously
38629                                                         written using the NPEI_MSI_WR_MAP register or if
38630                                                         not previously written the reset value of the MAP. */
38631        uint64_t reserved_0_15           : 16;
38632#else
38633        uint64_t reserved_0_15           : 16;
38634        uint64_t intr                    : 8;
38635        uint64_t reserved_24_63          : 40;
38636#endif
38637    } s;
38638    struct cvmx_npei_pcie_msi_rcv_b2_s   cn52xx;
38639    struct cvmx_npei_pcie_msi_rcv_b2_s   cn52xxp1;
38640    struct cvmx_npei_pcie_msi_rcv_b2_s   cn56xx;
38641    struct cvmx_npei_pcie_msi_rcv_b2_s   cn56xxp1;
38642} cvmx_npei_pcie_msi_rcv_b2_t;
38643
38644
38645/**
38646 * cvmx_npei_pcie_msi_rcv_b3
38647 *
38648 * NPEI_PCIE_MSI_RCV_B3 = NPEI PCIe MSI Receive Byte 3
38649 *
38650 * Register where MSI writes are directed from the PCIe.
38651 */
38652typedef union
38653{
38654    uint64_t u64;
38655    struct cvmx_npei_pcie_msi_rcv_b3_s
38656    {
38657#if __BYTE_ORDER == __BIG_ENDIAN
38658        uint64_t reserved_32_63          : 32;
38659        uint64_t intr                    : 8;       /**< A write to this register will result in a bit in
38660                                                         one of the NPEI_MSI_RCV# registers being set.
38661                                                         Which bit is set is dependent on the previously
38662                                                         written using the NPEI_MSI_WR_MAP register or if
38663                                                         not previously written the reset value of the MAP. */
38664        uint64_t reserved_0_23           : 24;
38665#else
38666        uint64_t reserved_0_23           : 24;
38667        uint64_t intr                    : 8;
38668        uint64_t reserved_32_63          : 32;
38669#endif
38670    } s;
38671    struct cvmx_npei_pcie_msi_rcv_b3_s   cn52xx;
38672    struct cvmx_npei_pcie_msi_rcv_b3_s   cn52xxp1;
38673    struct cvmx_npei_pcie_msi_rcv_b3_s   cn56xx;
38674    struct cvmx_npei_pcie_msi_rcv_b3_s   cn56xxp1;
38675} cvmx_npei_pcie_msi_rcv_b3_t;
38676
38677
38678/**
38679 * cvmx_npei_pkt#_cnts
38680 *
38681 * NPEI_PKT[0..31]_CNTS = NPEI Packet ring# Counts
38682 *
38683 * The counters for output rings.
38684 */
38685typedef union
38686{
38687    uint64_t u64;
38688    struct cvmx_npei_pktx_cnts_s
38689    {
38690#if __BYTE_ORDER == __BIG_ENDIAN
38691        uint64_t reserved_54_63          : 10;
38692        uint64_t timer                   : 22;      /**< Timer incremented every 1024 core clocks
38693                                                         when NPEI_PKTS#_CNTS[CNT] is non zero. Field
38694                                                         cleared when NPEI_PKTS#_CNTS[CNT] goes to 0.
38695                                                         Field is also cleared when NPEI_PKT_TIME_INT is
38696                                                         cleared.
38697                                                         The first increment of this count can occur
38698                                                         between 0 to 1023 core clocks. */
38699        uint64_t cnt                     : 32;      /**< ring counter. This field is incremented as
38700                                                         packets are sent out and decremented in response to
38701                                                         writes to this field.
38702                                                         When NPEI_PKT_OUT_BMODE is '0' a value of 1 is
38703                                                         added to the register for each packet, when '1'
38704                                                         and the info-pointer is NOT used the length of the
38705                                                         packet plus 8 is added, when '1' and info-pointer
38706                                                         mode IS used the packet length is added to this
38707                                                         field. */
38708#else
38709        uint64_t cnt                     : 32;
38710        uint64_t timer                   : 22;
38711        uint64_t reserved_54_63          : 10;
38712#endif
38713    } s;
38714    struct cvmx_npei_pktx_cnts_s         cn52xx;
38715    struct cvmx_npei_pktx_cnts_s         cn56xx;
38716} cvmx_npei_pktx_cnts_t;
38717
38718
38719/**
38720 * cvmx_npei_pkt#_in_bp
38721 *
38722 * NPEI_PKT[0..31]_IN_BP = NPEI Packet ring# Input Backpressure
38723 *
38724 * The counters and thresholds for input packets to apply backpressure to processing of the packets.
38725 */
38726typedef union
38727{
38728    uint64_t u64;
38729    struct cvmx_npei_pktx_in_bp_s
38730    {
38731#if __BYTE_ORDER == __BIG_ENDIAN
38732        uint64_t wmark                   : 32;      /**< When CNT is greater than this threshold no more
38733                                                         packets will be processed for this ring.
38734                                                         When writing this field of the NPEI_PKT#_IN_BP
38735                                                         register, use a 4-byte write so as to not write
38736                                                         any other field of this register. */
38737        uint64_t cnt                     : 32;      /**< ring counter. This field is incremented by one
38738                                                         whenever OCTEON receives, buffers, and creates a
38739                                                         work queue entry for a packet that arrives by the
38740                                                         cooresponding input ring. A write to this field
38741                                                         will be subtracted from the field value.
38742                                                         When writing this field of the NPEI_PKT#_IN_BP
38743                                                         register, use a 4-byte write so as to not write
38744                                                         any other field of this register. */
38745#else
38746        uint64_t cnt                     : 32;
38747        uint64_t wmark                   : 32;
38748#endif
38749    } s;
38750    struct cvmx_npei_pktx_in_bp_s        cn52xx;
38751    struct cvmx_npei_pktx_in_bp_s        cn56xx;
38752} cvmx_npei_pktx_in_bp_t;
38753
38754
38755/**
38756 * cvmx_npei_pkt#_instr_baddr
38757 *
38758 * NPEI_PKT[0..31]_INSTR_BADDR = NPEI Packet ring# Instruction Base Address
38759 *
38760 * Start of Instruction for input packets.
38761 */
38762typedef union
38763{
38764    uint64_t u64;
38765    struct cvmx_npei_pktx_instr_baddr_s
38766    {
38767#if __BYTE_ORDER == __BIG_ENDIAN
38768        uint64_t addr                    : 61;      /**< Base address for Instructions. */
38769        uint64_t reserved_0_2            : 3;
38770#else
38771        uint64_t reserved_0_2            : 3;
38772        uint64_t addr                    : 61;
38773#endif
38774    } s;
38775    struct cvmx_npei_pktx_instr_baddr_s  cn52xx;
38776    struct cvmx_npei_pktx_instr_baddr_s  cn56xx;
38777} cvmx_npei_pktx_instr_baddr_t;
38778
38779
38780/**
38781 * cvmx_npei_pkt#_instr_baoff_dbell
38782 *
38783 * NPEI_PKT[0..31]_INSTR_BAOFF_DBELL = NPEI Packet ring# Instruction Base Address Offset and Doorbell
38784 *
38785 * The doorbell and base address offset for next read.
38786 */
38787typedef union
38788{
38789    uint64_t u64;
38790    struct cvmx_npei_pktx_instr_baoff_dbell_s
38791    {
38792#if __BYTE_ORDER == __BIG_ENDIAN
38793        uint64_t aoff                    : 32;      /**< The offset from the NPEI_PKT[0..31]_INSTR_BADDR
38794                                                         where the next instruction will be read. */
38795        uint64_t dbell                   : 32;      /**< Instruction doorbell count. Writes to this field
38796                                                         will increment the value here. Reads will return
38797                                                         present value. A write of 0xffffffff will set the
38798                                                         DBELL and AOFF fields to '0'. */
38799#else
38800        uint64_t dbell                   : 32;
38801        uint64_t aoff                    : 32;
38802#endif
38803    } s;
38804    struct cvmx_npei_pktx_instr_baoff_dbell_s cn52xx;
38805    struct cvmx_npei_pktx_instr_baoff_dbell_s cn56xx;
38806} cvmx_npei_pktx_instr_baoff_dbell_t;
38807
38808
38809/**
38810 * cvmx_npei_pkt#_instr_fifo_rsize
38811 *
38812 * NPEI_PKT[0..31]_INSTR_FIFO_RSIZE = NPEI Packet ring# Instruction FIFO and Ring Size.
38813 *
38814 * Fifo field and ring size for Instructions.
38815 */
38816typedef union
38817{
38818    uint64_t u64;
38819    struct cvmx_npei_pktx_instr_fifo_rsize_s
38820    {
38821#if __BYTE_ORDER == __BIG_ENDIAN
38822        uint64_t max                     : 9;       /**< Max Fifo Size. */
38823        uint64_t rrp                     : 9;       /**< Fifo read pointer. */
38824        uint64_t wrp                     : 9;       /**< Fifo write pointer. */
38825        uint64_t fcnt                    : 5;       /**< Fifo count. */
38826        uint64_t rsize                   : 32;      /**< Instruction ring size. */
38827#else
38828        uint64_t rsize                   : 32;
38829        uint64_t fcnt                    : 5;
38830        uint64_t wrp                     : 9;
38831        uint64_t rrp                     : 9;
38832        uint64_t max                     : 9;
38833#endif
38834    } s;
38835    struct cvmx_npei_pktx_instr_fifo_rsize_s cn52xx;
38836    struct cvmx_npei_pktx_instr_fifo_rsize_s cn56xx;
38837} cvmx_npei_pktx_instr_fifo_rsize_t;
38838
38839
38840/**
38841 * cvmx_npei_pkt#_instr_header
38842 *
38843 * NPEI_PKT[0..31]_INSTR_HEADER = NPEI Packet ring# Instruction Header.
38844 *
38845 * VAlues used to build input packet header.
38846 */
38847typedef union
38848{
38849    uint64_t u64;
38850    struct cvmx_npei_pktx_instr_header_s
38851    {
38852#if __BYTE_ORDER == __BIG_ENDIAN
38853        uint64_t reserved_44_63          : 20;
38854        uint64_t pbp                     : 1;       /**< Enable Packet-by-packet mode. */
38855        uint64_t reserved_38_42          : 5;
38856        uint64_t rparmode                : 2;       /**< Parse Mode. Used when packet is raw and PBP==0. */
38857        uint64_t reserved_35_35          : 1;
38858        uint64_t rskp_len                : 7;       /**< Skip Length. Used when packet is raw and PBP==0. */
38859        uint64_t reserved_22_27          : 6;
38860        uint64_t use_ihdr                : 1;       /**< When set '1' the instruction header will be sent
38861                                                         as part of the packet data, regardless of the
38862                                                         value of bit [63] of the instruction header.
38863                                                         USE_IHDR must be set whenever PBP is set. */
38864        uint64_t reserved_16_20          : 5;
38865        uint64_t par_mode                : 2;       /**< Parse Mode. Used when USE_IHDR is set and packet
38866                                                         is not raw and PBP is not set. */
38867        uint64_t reserved_13_13          : 1;
38868        uint64_t skp_len                 : 7;       /**< Skip Length. Used when USE_IHDR is set and packet
38869                                                         is not raw and PBP is not set. */
38870        uint64_t reserved_0_5            : 6;
38871#else
38872        uint64_t reserved_0_5            : 6;
38873        uint64_t skp_len                 : 7;
38874        uint64_t reserved_13_13          : 1;
38875        uint64_t par_mode                : 2;
38876        uint64_t reserved_16_20          : 5;
38877        uint64_t use_ihdr                : 1;
38878        uint64_t reserved_22_27          : 6;
38879        uint64_t rskp_len                : 7;
38880        uint64_t reserved_35_35          : 1;
38881        uint64_t rparmode                : 2;
38882        uint64_t reserved_38_42          : 5;
38883        uint64_t pbp                     : 1;
38884        uint64_t reserved_44_63          : 20;
38885#endif
38886    } s;
38887    struct cvmx_npei_pktx_instr_header_s cn52xx;
38888    struct cvmx_npei_pktx_instr_header_s cn56xx;
38889} cvmx_npei_pktx_instr_header_t;
38890
38891
38892/**
38893 * cvmx_npei_pkt#_slist_baddr
38894 *
38895 * NPEI_PKT[0..31]_SLIST_BADDR = NPEI Packet ring# Scatter List Base Address
38896 *
38897 * Start of Scatter List for output packet pointers - MUST be 16 byte alligned
38898 */
38899typedef union
38900{
38901    uint64_t u64;
38902    struct cvmx_npei_pktx_slist_baddr_s
38903    {
38904#if __BYTE_ORDER == __BIG_ENDIAN
38905        uint64_t addr                    : 60;      /**< Base address for scatter list pointers. */
38906        uint64_t reserved_0_3            : 4;
38907#else
38908        uint64_t reserved_0_3            : 4;
38909        uint64_t addr                    : 60;
38910#endif
38911    } s;
38912    struct cvmx_npei_pktx_slist_baddr_s  cn52xx;
38913    struct cvmx_npei_pktx_slist_baddr_s  cn56xx;
38914} cvmx_npei_pktx_slist_baddr_t;
38915
38916
38917/**
38918 * cvmx_npei_pkt#_slist_baoff_dbell
38919 *
38920 * NPEI_PKT[0..31]_SLIST_BAOFF_DBELL = NPEI Packet ring# Scatter List Base Address Offset and Doorbell
38921 *
38922 * The doorbell and base address offset for next read.
38923 */
38924typedef union
38925{
38926    uint64_t u64;
38927    struct cvmx_npei_pktx_slist_baoff_dbell_s
38928    {
38929#if __BYTE_ORDER == __BIG_ENDIAN
38930        uint64_t aoff                    : 32;      /**< The offset from the NPEI_PKT[0..31]_SLIST_BADDR
38931                                                         where the next SList pointer will be read.
38932                                                         A write of 0xFFFFFFFF to the DBELL field will
38933                                                         clear DBELL and AOFF */
38934        uint64_t dbell                   : 32;      /**< Scatter list doorbell count. Writes to this field
38935                                                         will increment the value here. Reads will return
38936                                                         present value. The value of this field is
38937                                                         decremented as read operations are ISSUED for
38938                                                         scatter pointers.
38939                                                         A write of 0xFFFFFFFF will clear DBELL and AOFF */
38940#else
38941        uint64_t dbell                   : 32;
38942        uint64_t aoff                    : 32;
38943#endif
38944    } s;
38945    struct cvmx_npei_pktx_slist_baoff_dbell_s cn52xx;
38946    struct cvmx_npei_pktx_slist_baoff_dbell_s cn56xx;
38947} cvmx_npei_pktx_slist_baoff_dbell_t;
38948
38949
38950/**
38951 * cvmx_npei_pkt#_slist_fifo_rsize
38952 *
38953 * NPEI_PKT[0..31]_SLIST_FIFO_RSIZE = NPEI Packet ring# Scatter List FIFO and Ring Size.
38954 *
38955 * The number of scatter pointer pairs in the scatter list.
38956 */
38957typedef union
38958{
38959    uint64_t u64;
38960    struct cvmx_npei_pktx_slist_fifo_rsize_s
38961    {
38962#if __BYTE_ORDER == __BIG_ENDIAN
38963        uint64_t reserved_32_63          : 32;
38964        uint64_t rsize                   : 32;      /**< The number of scatter pointer pairs contained in
38965                                                         the scatter list ring. */
38966#else
38967        uint64_t rsize                   : 32;
38968        uint64_t reserved_32_63          : 32;
38969#endif
38970    } s;
38971    struct cvmx_npei_pktx_slist_fifo_rsize_s cn52xx;
38972    struct cvmx_npei_pktx_slist_fifo_rsize_s cn56xx;
38973} cvmx_npei_pktx_slist_fifo_rsize_t;
38974
38975
38976/**
38977 * cvmx_npei_pkt_cnt_int
38978 *
38979 * NPEI_PKT_CNT_INT = NPI Packet Counter Interrupt
38980 *
38981 * The packets rings that are interrupting because of Packet Counters.
38982 */
38983typedef union
38984{
38985    uint64_t u64;
38986    struct cvmx_npei_pkt_cnt_int_s
38987    {
38988#if __BYTE_ORDER == __BIG_ENDIAN
38989        uint64_t reserved_32_63          : 32;
38990        uint64_t port                    : 32;      /**< Bit vector cooresponding to ring number is set when
38991                                                         NPEI_PKT#_CNTS[CNT] is greater
38992                                                         than NPEI_PKT_INT_LEVELS[CNT]. */
38993#else
38994        uint64_t port                    : 32;
38995        uint64_t reserved_32_63          : 32;
38996#endif
38997    } s;
38998    struct cvmx_npei_pkt_cnt_int_s       cn52xx;
38999    struct cvmx_npei_pkt_cnt_int_s       cn56xx;
39000} cvmx_npei_pkt_cnt_int_t;
39001
39002
39003/**
39004 * cvmx_npei_pkt_cnt_int_enb
39005 *
39006 * NPEI_PKT_CNT_INT_ENB = NPI Packet Counter Interrupt Enable
39007 *
39008 * Enable for the packets rings that are interrupting because of Packet Counters.
39009 */
39010typedef union
39011{
39012    uint64_t u64;
39013    struct cvmx_npei_pkt_cnt_int_enb_s
39014    {
39015#if __BYTE_ORDER == __BIG_ENDIAN
39016        uint64_t reserved_32_63          : 32;
39017        uint64_t port                    : 32;      /**< Bit vector cooresponding to ring number when set
39018                                                         allows NPEI_PKT_CNT_INT to generate an interrupt. */
39019#else
39020        uint64_t port                    : 32;
39021        uint64_t reserved_32_63          : 32;
39022#endif
39023    } s;
39024    struct cvmx_npei_pkt_cnt_int_enb_s   cn52xx;
39025    struct cvmx_npei_pkt_cnt_int_enb_s   cn56xx;
39026} cvmx_npei_pkt_cnt_int_enb_t;
39027
39028
39029/**
39030 * cvmx_npei_pkt_data_out_es
39031 *
39032 * NPEI_PKT_DATA_OUT_ES = NPEI's Packet Data Out Endian Swap
39033 *
39034 * The Endian Swap for writing Data Out.
39035 */
39036typedef union
39037{
39038    uint64_t u64;
39039    struct cvmx_npei_pkt_data_out_es_s
39040    {
39041#if __BYTE_ORDER == __BIG_ENDIAN
39042        uint64_t es                      : 64;      /**< The endian swap mode for Packet rings 0 through 31.
39043                                                         Two bits are used per ring (i.e. ring 0 [1:0],
39044                                                         ring 1 [3:2], ....). */
39045#else
39046        uint64_t es                      : 64;
39047#endif
39048    } s;
39049    struct cvmx_npei_pkt_data_out_es_s   cn52xx;
39050    struct cvmx_npei_pkt_data_out_es_s   cn56xx;
39051} cvmx_npei_pkt_data_out_es_t;
39052
39053
39054/**
39055 * cvmx_npei_pkt_data_out_ns
39056 *
39057 * NPEI_PKT_DATA_OUT_NS = NPEI's Packet Data Out No Snoop
39058 *
39059 * The NS field for the TLP when writing packet data.
39060 */
39061typedef union
39062{
39063    uint64_t u64;
39064    struct cvmx_npei_pkt_data_out_ns_s
39065    {
39066#if __BYTE_ORDER == __BIG_ENDIAN
39067        uint64_t reserved_32_63          : 32;
39068        uint64_t nsr                     : 32;      /**< When asserted '1' the vector bit cooresponding
39069                                                         to the Packet-ring will enable NS in TLP header. */
39070#else
39071        uint64_t nsr                     : 32;
39072        uint64_t reserved_32_63          : 32;
39073#endif
39074    } s;
39075    struct cvmx_npei_pkt_data_out_ns_s   cn52xx;
39076    struct cvmx_npei_pkt_data_out_ns_s   cn56xx;
39077} cvmx_npei_pkt_data_out_ns_t;
39078
39079
39080/**
39081 * cvmx_npei_pkt_data_out_ror
39082 *
39083 * NPEI_PKT_DATA_OUT_ROR = NPEI's Packet Data Out Relaxed Ordering
39084 *
39085 * The ROR field for the TLP when writing Packet Data.
39086 */
39087typedef union
39088{
39089    uint64_t u64;
39090    struct cvmx_npei_pkt_data_out_ror_s
39091    {
39092#if __BYTE_ORDER == __BIG_ENDIAN
39093        uint64_t reserved_32_63          : 32;
39094        uint64_t ror                     : 32;      /**< When asserted '1' the vector bit cooresponding
39095                                                         to the Packet-ring will enable ROR in TLP header. */
39096#else
39097        uint64_t ror                     : 32;
39098        uint64_t reserved_32_63          : 32;
39099#endif
39100    } s;
39101    struct cvmx_npei_pkt_data_out_ror_s  cn52xx;
39102    struct cvmx_npei_pkt_data_out_ror_s  cn56xx;
39103} cvmx_npei_pkt_data_out_ror_t;
39104
39105
39106/**
39107 * cvmx_npei_pkt_dpaddr
39108 *
39109 * NPEI_PKT_DPADDR = NPEI's Packet Data Pointer Addr
39110 *
39111 * Used to detemine address and attributes for packet data writes.
39112 */
39113typedef union
39114{
39115    uint64_t u64;
39116    struct cvmx_npei_pkt_dpaddr_s
39117    {
39118#if __BYTE_ORDER == __BIG_ENDIAN
39119        uint64_t reserved_32_63          : 32;
39120        uint64_t dptr                    : 32;      /**< When asserted '1' the vector bit cooresponding
39121                                                         to the Packet-ring will use:
39122                                                         the address[63:60] to write packet data
39123                                                         comes from the DPTR[63:60] in the scatter-list
39124                                                         pair and the RO, NS, ES values come from the O0_ES,
39125                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
39126                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
39127                                                         packet will be written to is ADDR[63:60] ==
39128                                                         O0_ES[1:0], O0_NS, O0_RO. */
39129#else
39130        uint64_t dptr                    : 32;
39131        uint64_t reserved_32_63          : 32;
39132#endif
39133    } s;
39134    struct cvmx_npei_pkt_dpaddr_s        cn52xx;
39135    struct cvmx_npei_pkt_dpaddr_s        cn56xx;
39136} cvmx_npei_pkt_dpaddr_t;
39137
39138
39139/**
39140 * cvmx_npei_pkt_in_bp
39141 *
39142 * NPEI_PKT_IN_BP = NPEI Packet Input Backpressure
39143 *
39144 * Which input rings have backpressure applied.
39145 */
39146typedef union
39147{
39148    uint64_t u64;
39149    struct cvmx_npei_pkt_in_bp_s
39150    {
39151#if __BYTE_ORDER == __BIG_ENDIAN
39152        uint64_t reserved_32_63          : 32;
39153        uint64_t bp                      : 32;      /**< A packet input  ring that has its count greater
39154                                                         than its WMARK will have backpressure applied.
39155                                                         Each of the 32 bits coorespond to an input ring.
39156                                                         When '1' that ring has backpressure applied an
39157                                                         will fetch no more instructions, but will process
39158                                                         any previously fetched instructions. */
39159#else
39160        uint64_t bp                      : 32;
39161        uint64_t reserved_32_63          : 32;
39162#endif
39163    } s;
39164    struct cvmx_npei_pkt_in_bp_s         cn52xx;
39165    struct cvmx_npei_pkt_in_bp_s         cn56xx;
39166} cvmx_npei_pkt_in_bp_t;
39167
39168
39169/**
39170 * cvmx_npei_pkt_in_done#_cnts
39171 *
39172 * NPEI_PKT_IN_DONE[0..31]_CNTS = NPEI Instruction Done ring# Counts
39173 *
39174 * Counters for instructions completed on Input rings.
39175 */
39176typedef union
39177{
39178    uint64_t u64;
39179    struct cvmx_npei_pkt_in_donex_cnts_s
39180    {
39181#if __BYTE_ORDER == __BIG_ENDIAN
39182        uint64_t reserved_32_63          : 32;
39183        uint64_t cnt                     : 32;      /**< This field is incrmented by '1' when an instruction
39184                                                         is completed. This field is incremented as the
39185                                                         last of the data is read from the PCIe. */
39186#else
39187        uint64_t cnt                     : 32;
39188        uint64_t reserved_32_63          : 32;
39189#endif
39190    } s;
39191    struct cvmx_npei_pkt_in_donex_cnts_s cn52xx;
39192    struct cvmx_npei_pkt_in_donex_cnts_s cn56xx;
39193} cvmx_npei_pkt_in_donex_cnts_t;
39194
39195
39196/**
39197 * cvmx_npei_pkt_in_instr_counts
39198 *
39199 * NPEI_PKT_IN_INSTR_COUNTS = NPEI Packet Input Instrutction Counts
39200 *
39201 * Keeps track of the number of instructions read into the FIFO and Packets sent to IPD.
39202 */
39203typedef union
39204{
39205    uint64_t u64;
39206    struct cvmx_npei_pkt_in_instr_counts_s
39207    {
39208#if __BYTE_ORDER == __BIG_ENDIAN
39209        uint64_t wr_cnt                  : 32;      /**< Shows the number of packets sent to the IPD. */
39210        uint64_t rd_cnt                  : 32;      /**< Shows the value of instructions that have had reads
39211                                                         issued for them.
39212                                                         to the Packet-ring is in reset. */
39213#else
39214        uint64_t rd_cnt                  : 32;
39215        uint64_t wr_cnt                  : 32;
39216#endif
39217    } s;
39218    struct cvmx_npei_pkt_in_instr_counts_s cn52xx;
39219    struct cvmx_npei_pkt_in_instr_counts_s cn56xx;
39220} cvmx_npei_pkt_in_instr_counts_t;
39221
39222
39223/**
39224 * cvmx_npei_pkt_in_pcie_port
39225 *
39226 * NPEI_PKT_IN_PCIE_PORT = NPEI's Packet In To PCIe Port Assignment
39227 *
39228 * Assigns Packet Input rings to PCIe ports.
39229 */
39230typedef union
39231{
39232    uint64_t u64;
39233    struct cvmx_npei_pkt_in_pcie_port_s
39234    {
39235#if __BYTE_ORDER == __BIG_ENDIAN
39236        uint64_t pp                      : 64;      /**< The PCIe port that the Packet ring number is
39237                                                         assigned. Two bits are used per ring (i.e. ring 0
39238                                                         [1:0], ring 1 [3:2], ....). A value of '0 means
39239                                                         that the Packetring is assign to PCIe Port 0, a '1'
39240                                                         PCIe Port 1, '2' and '3' are reserved. */
39241#else
39242        uint64_t pp                      : 64;
39243#endif
39244    } s;
39245    struct cvmx_npei_pkt_in_pcie_port_s  cn52xx;
39246    struct cvmx_npei_pkt_in_pcie_port_s  cn56xx;
39247} cvmx_npei_pkt_in_pcie_port_t;
39248
39249
39250/**
39251 * cvmx_npei_pkt_input_control
39252 *
39253 * NPEI_PKT_INPUT_CONTROL = NPEI's Packet Input Control
39254 *
39255 * Control for reads for gather list and instructions.
39256 */
39257typedef union
39258{
39259    uint64_t u64;
39260    struct cvmx_npei_pkt_input_control_s
39261    {
39262#if __BYTE_ORDER == __BIG_ENDIAN
39263        uint64_t reserved_23_63          : 41;
39264        uint64_t pkt_rr                  : 1;       /**< When set '1' the input packet selection will be
39265                                                         made with a Round Robin arbitration. When '0'
39266                                                         the input packet ring is fixed in priority,
39267                                                         where the lower ring number has higher priority. */
39268        uint64_t pbp_dhi                 : 13;      /**< Field when in [PBP] is set to be used in
39269                                                         calculating a DPTR. */
39270        uint64_t d_nsr                   : 1;       /**< Enables '1' NoSnoop for reading of
39271                                                         gather data. */
39272        uint64_t d_esr                   : 2;       /**< The Endian-Swap-Mode for reading of
39273                                                         gather data. */
39274        uint64_t d_ror                   : 1;       /**< Enables '1' Relaxed Ordering for reading of
39275                                                         gather data. */
39276        uint64_t use_csr                 : 1;       /**< When set '1' the csr value will be used for
39277                                                         ROR, ESR, and NSR. When clear '0' the value in
39278                                                         DPTR will be used. In turn the bits not used for
39279                                                         ROR, ESR, and NSR, will be used for bits [63:60]
39280                                                         of the address used to fetch packet data. */
39281        uint64_t nsr                     : 1;       /**< Enables '1' NoSnoop for reading of
39282                                                         gather list and gather instruction. */
39283        uint64_t esr                     : 2;       /**< The Endian-Swap-Mode for reading of
39284                                                         gather list and gather instruction. */
39285        uint64_t ror                     : 1;       /**< Enables '1' Relaxed Ordering for reading of
39286                                                         gather list and gather instruction. */
39287#else
39288        uint64_t ror                     : 1;
39289        uint64_t esr                     : 2;
39290        uint64_t nsr                     : 1;
39291        uint64_t use_csr                 : 1;
39292        uint64_t d_ror                   : 1;
39293        uint64_t d_esr                   : 2;
39294        uint64_t d_nsr                   : 1;
39295        uint64_t pbp_dhi                 : 13;
39296        uint64_t pkt_rr                  : 1;
39297        uint64_t reserved_23_63          : 41;
39298#endif
39299    } s;
39300    struct cvmx_npei_pkt_input_control_s cn52xx;
39301    struct cvmx_npei_pkt_input_control_s cn56xx;
39302} cvmx_npei_pkt_input_control_t;
39303
39304
39305/**
39306 * cvmx_npei_pkt_instr_enb
39307 *
39308 * NPEI_PKT_INSTR_ENB = NPEI's Packet Instruction Enable
39309 *
39310 * Enables the instruction fetch for a Packet-ring.
39311 */
39312typedef union
39313{
39314    uint64_t u64;
39315    struct cvmx_npei_pkt_instr_enb_s
39316    {
39317#if __BYTE_ORDER == __BIG_ENDIAN
39318        uint64_t reserved_32_63          : 32;
39319        uint64_t enb                     : 32;      /**< When asserted '1' the vector bit cooresponding
39320                                                         to the Packet-ring is enabled. */
39321#else
39322        uint64_t enb                     : 32;
39323        uint64_t reserved_32_63          : 32;
39324#endif
39325    } s;
39326    struct cvmx_npei_pkt_instr_enb_s     cn52xx;
39327    struct cvmx_npei_pkt_instr_enb_s     cn56xx;
39328} cvmx_npei_pkt_instr_enb_t;
39329
39330
39331/**
39332 * cvmx_npei_pkt_instr_rd_size
39333 *
39334 * NPEI_PKT_INSTR_RD_SIZE = NPEI Instruction Read Size
39335 *
39336 * The number of instruction allowed to be read at one time.
39337 */
39338typedef union
39339{
39340    uint64_t u64;
39341    struct cvmx_npei_pkt_instr_rd_size_s
39342    {
39343#if __BYTE_ORDER == __BIG_ENDIAN
39344        uint64_t rdsize                  : 64;      /**< Number of instructions to be read in one PCIe read
39345                                                         request for the 4 PKOport - 8 rings. Every two bits
39346                                                         (i.e. 1:0, 3:2, 5:4..) are assign to the port/ring
39347                                                         combinations.
39348                                                         - 15:0  PKOPort0,Ring 7..0  31:16 PKOPort1,Ring 7..0
39349                                                         - 47:32 PKOPort2,Ring 7..0  63:48 PKOPort3,Ring 7..0
39350                                                         Two bit value are:
39351                                                         0 - 1 Instruction
39352                                                         1 - 2 Instructions
39353                                                         2 - 3 Instructions
39354                                                         3 - 4 Instructions */
39355#else
39356        uint64_t rdsize                  : 64;
39357#endif
39358    } s;
39359    struct cvmx_npei_pkt_instr_rd_size_s cn52xx;
39360    struct cvmx_npei_pkt_instr_rd_size_s cn56xx;
39361} cvmx_npei_pkt_instr_rd_size_t;
39362
39363
39364/**
39365 * cvmx_npei_pkt_instr_size
39366 *
39367 * NPEI_PKT_INSTR_SIZE = NPEI's Packet Instruction Size
39368 *
39369 * Determines if instructions are 64 or 32 byte in size for a Packet-ring.
39370 */
39371typedef union
39372{
39373    uint64_t u64;
39374    struct cvmx_npei_pkt_instr_size_s
39375    {
39376#if __BYTE_ORDER == __BIG_ENDIAN
39377        uint64_t reserved_32_63          : 32;
39378        uint64_t is_64b                  : 32;      /**< When asserted '1' the vector bit cooresponding
39379                                                         to the Packet-ring is a 64-byte instruction. */
39380#else
39381        uint64_t is_64b                  : 32;
39382        uint64_t reserved_32_63          : 32;
39383#endif
39384    } s;
39385    struct cvmx_npei_pkt_instr_size_s    cn52xx;
39386    struct cvmx_npei_pkt_instr_size_s    cn56xx;
39387} cvmx_npei_pkt_instr_size_t;
39388
39389
39390/**
39391 * cvmx_npei_pkt_int_levels
39392 *
39393 * 0x90F0 reserved NPEI_PKT_PCIE_PORT2
39394 *
39395 *
39396 *                  NPEI_PKT_INT_LEVELS = NPEI's Packet Interrupt Levels
39397 *
39398 * Output packet interrupt levels.
39399 */
39400typedef union
39401{
39402    uint64_t u64;
39403    struct cvmx_npei_pkt_int_levels_s
39404    {
39405#if __BYTE_ORDER == __BIG_ENDIAN
39406        uint64_t reserved_54_63          : 10;
39407        uint64_t time                    : 22;      /**< When NPEI_PKT#_CNTS[TIME] is equal to this value
39408                                                         an interrupt is generated. */
39409        uint64_t cnt                     : 32;      /**< When NPEI_PKT#_CNTS[CNT] becomes
39410                                                         greater than this value an interrupt is generated. */
39411#else
39412        uint64_t cnt                     : 32;
39413        uint64_t time                    : 22;
39414        uint64_t reserved_54_63          : 10;
39415#endif
39416    } s;
39417    struct cvmx_npei_pkt_int_levels_s    cn52xx;
39418    struct cvmx_npei_pkt_int_levels_s    cn56xx;
39419} cvmx_npei_pkt_int_levels_t;
39420
39421
39422/**
39423 * cvmx_npei_pkt_iptr
39424 *
39425 * NPEI_PKT_IPTR = NPEI's Packet Info Poitner
39426 *
39427 * Controls using the Info-Pointer to store length and data.
39428 */
39429typedef union
39430{
39431    uint64_t u64;
39432    struct cvmx_npei_pkt_iptr_s
39433    {
39434#if __BYTE_ORDER == __BIG_ENDIAN
39435        uint64_t reserved_32_63          : 32;
39436        uint64_t iptr                    : 32;      /**< When asserted '1' the vector bit cooresponding
39437                                                         to the Packet-ring will use the Info-Pointer to
39438                                                         store length and data. */
39439#else
39440        uint64_t iptr                    : 32;
39441        uint64_t reserved_32_63          : 32;
39442#endif
39443    } s;
39444    struct cvmx_npei_pkt_iptr_s          cn52xx;
39445    struct cvmx_npei_pkt_iptr_s          cn56xx;
39446} cvmx_npei_pkt_iptr_t;
39447
39448
39449/**
39450 * cvmx_npei_pkt_out_bmode
39451 *
39452 * NPEI_PKT_OUT_BMODE = NPEI's Packet Out Byte Mode
39453 *
39454 * Control the updating of the NPEI_PKT#_CNT register.
39455 */
39456typedef union
39457{
39458    uint64_t u64;
39459    struct cvmx_npei_pkt_out_bmode_s
39460    {
39461#if __BYTE_ORDER == __BIG_ENDIAN
39462        uint64_t reserved_32_63          : 32;
39463        uint64_t bmode                   : 32;      /**< When asserted '1' the vector bit cooresponding
39464                                                         to the Packet-ring will have its NPEI_PKT#_CNT
39465                                                         register updated with the number of bytes in the
39466                                                         packet sent, when '0' the register will have a
39467                                                         value of '1' added. */
39468#else
39469        uint64_t bmode                   : 32;
39470        uint64_t reserved_32_63          : 32;
39471#endif
39472    } s;
39473    struct cvmx_npei_pkt_out_bmode_s     cn52xx;
39474    struct cvmx_npei_pkt_out_bmode_s     cn56xx;
39475} cvmx_npei_pkt_out_bmode_t;
39476
39477
39478/**
39479 * cvmx_npei_pkt_out_enb
39480 *
39481 * NPEI_PKT_OUT_ENB = NPEI's Packet Output Enable
39482 *
39483 * Enables the output packet engines.
39484 */
39485typedef union
39486{
39487    uint64_t u64;
39488    struct cvmx_npei_pkt_out_enb_s
39489    {
39490#if __BYTE_ORDER == __BIG_ENDIAN
39491        uint64_t reserved_32_63          : 32;
39492        uint64_t enb                     : 32;      /**< When asserted '1' the vector bit cooresponding
39493                                                         to the Packet-ring is enabled.
39494                                                         If an error occurs on reading pointers for an
39495                                                         output ring, the ring will be disabled by clearing
39496                                                         the bit associated with the ring to '0'. */
39497#else
39498        uint64_t enb                     : 32;
39499        uint64_t reserved_32_63          : 32;
39500#endif
39501    } s;
39502    struct cvmx_npei_pkt_out_enb_s       cn52xx;
39503    struct cvmx_npei_pkt_out_enb_s       cn56xx;
39504} cvmx_npei_pkt_out_enb_t;
39505
39506
39507/**
39508 * cvmx_npei_pkt_output_wmark
39509 *
39510 * NPEI_PKT_OUTPUT_WMARK = NPEI's Packet Output Water Mark
39511 *
39512 * Value that when the NPEI_PKT#_SLIST_BAOFF_DBELL[DBELL] value is less then that backpressure for the rings will be applied.
39513 */
39514typedef union
39515{
39516    uint64_t u64;
39517    struct cvmx_npei_pkt_output_wmark_s
39518    {
39519#if __BYTE_ORDER == __BIG_ENDIAN
39520        uint64_t reserved_32_63          : 32;
39521        uint64_t wmark                   : 32;      /**< Value when DBELL count drops below backpressure
39522                                                         for the ring will be applied to the PKO. */
39523#else
39524        uint64_t wmark                   : 32;
39525        uint64_t reserved_32_63          : 32;
39526#endif
39527    } s;
39528    struct cvmx_npei_pkt_output_wmark_s  cn52xx;
39529    struct cvmx_npei_pkt_output_wmark_s  cn56xx;
39530} cvmx_npei_pkt_output_wmark_t;
39531
39532
39533/**
39534 * cvmx_npei_pkt_pcie_port
39535 *
39536 * NPEI_PKT_PCIE_PORT = NPEI's Packet To PCIe Port Assignment
39537 *
39538 * Assigns Packet Ports to PCIe ports.
39539 */
39540typedef union
39541{
39542    uint64_t u64;
39543    struct cvmx_npei_pkt_pcie_port_s
39544    {
39545#if __BYTE_ORDER == __BIG_ENDIAN
39546        uint64_t pp                      : 64;      /**< The PCIe port that the Packet ring number is
39547                                                         assigned. Two bits are used per ring (i.e. ring 0
39548                                                         [1:0], ring 1 [3:2], ....). A value of '0 means
39549                                                         that the Packetring is assign to PCIe Port 0, a '1'
39550                                                         PCIe Port 1, '2' and '3' are reserved. */
39551#else
39552        uint64_t pp                      : 64;
39553#endif
39554    } s;
39555    struct cvmx_npei_pkt_pcie_port_s     cn52xx;
39556    struct cvmx_npei_pkt_pcie_port_s     cn56xx;
39557} cvmx_npei_pkt_pcie_port_t;
39558
39559
39560/**
39561 * cvmx_npei_pkt_port_in_rst
39562 *
39563 * NPEI_PKT_PORT_IN_RST = NPEI Packet Port In Reset
39564 *
39565 * Vector bits related to ring-port for ones that are reset.
39566 */
39567typedef union
39568{
39569    uint64_t u64;
39570    struct cvmx_npei_pkt_port_in_rst_s
39571    {
39572#if __BYTE_ORDER == __BIG_ENDIAN
39573        uint64_t in_rst                  : 32;      /**< When asserted '1' the vector bit cooresponding
39574                                                         to the inbound Packet-ring is in reset. */
39575        uint64_t out_rst                 : 32;      /**< When asserted '1' the vector bit cooresponding
39576                                                         to the outbound Packet-ring is in reset. */
39577#else
39578        uint64_t out_rst                 : 32;
39579        uint64_t in_rst                  : 32;
39580#endif
39581    } s;
39582    struct cvmx_npei_pkt_port_in_rst_s   cn52xx;
39583    struct cvmx_npei_pkt_port_in_rst_s   cn56xx;
39584} cvmx_npei_pkt_port_in_rst_t;
39585
39586
39587/**
39588 * cvmx_npei_pkt_slist_es
39589 *
39590 * NPEI_PKT_SLIST_ES = NPEI's Packet Scatter List Endian Swap
39591 *
39592 * The Endian Swap for Scatter List Read.
39593 */
39594typedef union
39595{
39596    uint64_t u64;
39597    struct cvmx_npei_pkt_slist_es_s
39598    {
39599#if __BYTE_ORDER == __BIG_ENDIAN
39600        uint64_t es                      : 64;      /**< The endian swap mode for Packet rings 0 through 31.
39601                                                         Two bits are used per ring (i.e. ring 0 [1:0],
39602                                                         ring 1 [3:2], ....). */
39603#else
39604        uint64_t es                      : 64;
39605#endif
39606    } s;
39607    struct cvmx_npei_pkt_slist_es_s      cn52xx;
39608    struct cvmx_npei_pkt_slist_es_s      cn56xx;
39609} cvmx_npei_pkt_slist_es_t;
39610
39611
39612/**
39613 * cvmx_npei_pkt_slist_id_size
39614 *
39615 * NPEI_PKT_SLIST_ID_SIZE = NPEI Packet Scatter List Info and Data Size
39616 *
39617 * The Size of the information and data fields pointed to by Scatter List pointers.
39618 */
39619typedef union
39620{
39621    uint64_t u64;
39622    struct cvmx_npei_pkt_slist_id_size_s
39623    {
39624#if __BYTE_ORDER == __BIG_ENDIAN
39625        uint64_t reserved_23_63          : 41;
39626        uint64_t isize                   : 7;       /**< Information size. Legal sizes are 0 to 120. */
39627        uint64_t bsize                   : 16;      /**< Data size. */
39628#else
39629        uint64_t bsize                   : 16;
39630        uint64_t isize                   : 7;
39631        uint64_t reserved_23_63          : 41;
39632#endif
39633    } s;
39634    struct cvmx_npei_pkt_slist_id_size_s cn52xx;
39635    struct cvmx_npei_pkt_slist_id_size_s cn56xx;
39636} cvmx_npei_pkt_slist_id_size_t;
39637
39638
39639/**
39640 * cvmx_npei_pkt_slist_ns
39641 *
39642 * NPEI_PKT_SLIST_NS = NPEI's Packet Scatter List No Snoop
39643 *
39644 * The NS field for the TLP when fetching Scatter List.
39645 */
39646typedef union
39647{
39648    uint64_t u64;
39649    struct cvmx_npei_pkt_slist_ns_s
39650    {
39651#if __BYTE_ORDER == __BIG_ENDIAN
39652        uint64_t reserved_32_63          : 32;
39653        uint64_t nsr                     : 32;      /**< When asserted '1' the vector bit cooresponding
39654                                                         to the Packet-ring will enable NS in TLP header. */
39655#else
39656        uint64_t nsr                     : 32;
39657        uint64_t reserved_32_63          : 32;
39658#endif
39659    } s;
39660    struct cvmx_npei_pkt_slist_ns_s      cn52xx;
39661    struct cvmx_npei_pkt_slist_ns_s      cn56xx;
39662} cvmx_npei_pkt_slist_ns_t;
39663
39664
39665/**
39666 * cvmx_npei_pkt_slist_ror
39667 *
39668 * NPEI_PKT_SLIST_ROR = NPEI's Packet Scatter List Relaxed Ordering
39669 *
39670 * The ROR field for the TLP when fetching Scatter List.
39671 */
39672typedef union
39673{
39674    uint64_t u64;
39675    struct cvmx_npei_pkt_slist_ror_s
39676    {
39677#if __BYTE_ORDER == __BIG_ENDIAN
39678        uint64_t reserved_32_63          : 32;
39679        uint64_t ror                     : 32;      /**< When asserted '1' the vector bit cooresponding
39680                                                         to the Packet-ring will enable ROR in TLP header. */
39681#else
39682        uint64_t ror                     : 32;
39683        uint64_t reserved_32_63          : 32;
39684#endif
39685    } s;
39686    struct cvmx_npei_pkt_slist_ror_s     cn52xx;
39687    struct cvmx_npei_pkt_slist_ror_s     cn56xx;
39688} cvmx_npei_pkt_slist_ror_t;
39689
39690
39691/**
39692 * cvmx_npei_pkt_time_int
39693 *
39694 * NPEI_PKT_TIME_INT = NPEI Packet Timer Interrupt
39695 *
39696 * The packets rings that are interrupting because of Packet Timers.
39697 */
39698typedef union
39699{
39700    uint64_t u64;
39701    struct cvmx_npei_pkt_time_int_s
39702    {
39703#if __BYTE_ORDER == __BIG_ENDIAN
39704        uint64_t reserved_32_63          : 32;
39705        uint64_t port                    : 32;      /**< Bit vector cooresponding to ring number is set when
39706                                                         NPEI_PKT#_CNTS[TIMER] is greater than
39707                                                         NPEI_PKT_INT_LEVELS[TIME]. */
39708#else
39709        uint64_t port                    : 32;
39710        uint64_t reserved_32_63          : 32;
39711#endif
39712    } s;
39713    struct cvmx_npei_pkt_time_int_s      cn52xx;
39714    struct cvmx_npei_pkt_time_int_s      cn56xx;
39715} cvmx_npei_pkt_time_int_t;
39716
39717
39718/**
39719 * cvmx_npei_pkt_time_int_enb
39720 *
39721 * NPEI_PKT_TIME_INT_ENB = NPEI Packet Timer Interrupt Enable
39722 *
39723 * The packets rings that are interrupting because of Packet Timers.
39724 */
39725typedef union
39726{
39727    uint64_t u64;
39728    struct cvmx_npei_pkt_time_int_enb_s
39729    {
39730#if __BYTE_ORDER == __BIG_ENDIAN
39731        uint64_t reserved_32_63          : 32;
39732        uint64_t port                    : 32;      /**< Bit vector cooresponding to ring number when set
39733                                                         allows NPEI_PKT_TIME_INT to generate an interrupt. */
39734#else
39735        uint64_t port                    : 32;
39736        uint64_t reserved_32_63          : 32;
39737#endif
39738    } s;
39739    struct cvmx_npei_pkt_time_int_enb_s  cn52xx;
39740    struct cvmx_npei_pkt_time_int_enb_s  cn56xx;
39741} cvmx_npei_pkt_time_int_enb_t;
39742
39743
39744/**
39745 * cvmx_npei_rsl_int_blocks
39746 *
39747 * NPEI_RSL_INT_BLOCKS = NPEI RSL Interrupt Blocks Register
39748 *
39749 * Reading this register will return a vector with a bit set '1' for a corresponding RSL block
39750 * that presently has an interrupt pending. The Field Description below supplies the name of the
39751 * register that software should read to find out why that intterupt bit is set.
39752 */
39753typedef union
39754{
39755    uint64_t u64;
39756    struct cvmx_npei_rsl_int_blocks_s
39757    {
39758#if __BYTE_ORDER == __BIG_ENDIAN
39759        uint64_t reserved_31_63          : 33;
39760        uint64_t iob                     : 1;       /**< IOB_INT_SUM */
39761        uint64_t lmc1                    : 1;       /**< LMC1_MEM_CFG0 */
39762        uint64_t agl                     : 1;       /**< AGL_GMX_RX0_INT_REG & AGL_GMX_TX_INT_REG */
39763        uint64_t reserved_24_27          : 4;
39764        uint64_t asxpcs1                 : 1;       /**< PCS1_INT*_REG */
39765        uint64_t asxpcs0                 : 1;       /**< PCS0_INT*_REG */
39766        uint64_t reserved_21_21          : 1;
39767        uint64_t pip                     : 1;       /**< PIP_INT_REG. */
39768        uint64_t spx1                    : 1;       /**< Always reads as zero */
39769        uint64_t spx0                    : 1;       /**< Always reads as zero */
39770        uint64_t lmc0                    : 1;       /**< LMC0_MEM_CFG0 */
39771        uint64_t l2c                     : 1;       /**< L2C_INT_STAT */
39772        uint64_t usb1                    : 1;       /**< Always reads as zero */
39773        uint64_t rad                     : 1;       /**< RAD_REG_ERROR */
39774        uint64_t usb                     : 1;       /**< USBN0_INT_SUM */
39775        uint64_t pow                     : 1;       /**< POW_ECC_ERR */
39776        uint64_t tim                     : 1;       /**< TIM_REG_ERROR */
39777        uint64_t pko                     : 1;       /**< PKO_REG_ERROR */
39778        uint64_t ipd                     : 1;       /**< IPD_INT_SUM */
39779        uint64_t reserved_8_8            : 1;
39780        uint64_t zip                     : 1;       /**< ZIP_ERROR */
39781        uint64_t dfa                     : 1;       /**< Always reads as zero */
39782        uint64_t fpa                     : 1;       /**< FPA_INT_SUM */
39783        uint64_t key                     : 1;       /**< KEY_INT_SUM */
39784        uint64_t npei                    : 1;       /**< NPEI_INT_SUM */
39785        uint64_t gmx1                    : 1;       /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */
39786        uint64_t gmx0                    : 1;       /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */
39787        uint64_t mio                     : 1;       /**< MIO_BOOT_ERR */
39788#else
39789        uint64_t mio                     : 1;
39790        uint64_t gmx0                    : 1;
39791        uint64_t gmx1                    : 1;
39792        uint64_t npei                    : 1;
39793        uint64_t key                     : 1;
39794        uint64_t fpa                     : 1;
39795        uint64_t dfa                     : 1;
39796        uint64_t zip                     : 1;
39797        uint64_t reserved_8_8            : 1;
39798        uint64_t ipd                     : 1;
39799        uint64_t pko                     : 1;
39800        uint64_t tim                     : 1;
39801        uint64_t pow                     : 1;
39802        uint64_t usb                     : 1;
39803        uint64_t rad                     : 1;
39804        uint64_t usb1                    : 1;
39805        uint64_t l2c                     : 1;
39806        uint64_t lmc0                    : 1;
39807        uint64_t spx0                    : 1;
39808        uint64_t spx1                    : 1;
39809        uint64_t pip                     : 1;
39810        uint64_t reserved_21_21          : 1;
39811        uint64_t asxpcs0                 : 1;
39812        uint64_t asxpcs1                 : 1;
39813        uint64_t reserved_24_27          : 4;
39814        uint64_t agl                     : 1;
39815        uint64_t lmc1                    : 1;
39816        uint64_t iob                     : 1;
39817        uint64_t reserved_31_63          : 33;
39818#endif
39819    } s;
39820    struct cvmx_npei_rsl_int_blocks_s    cn52xx;
39821    struct cvmx_npei_rsl_int_blocks_s    cn52xxp1;
39822    struct cvmx_npei_rsl_int_blocks_s    cn56xx;
39823    struct cvmx_npei_rsl_int_blocks_s    cn56xxp1;
39824} cvmx_npei_rsl_int_blocks_t;
39825
39826
39827/**
39828 * cvmx_npei_scratch_1
39829 *
39830 * NPEI_SCRATCH_1 = NPEI's Scratch 1
39831 *
39832 * A general purpose 64 bit register for SW use.
39833 */
39834typedef union
39835{
39836    uint64_t u64;
39837    struct cvmx_npei_scratch_1_s
39838    {
39839#if __BYTE_ORDER == __BIG_ENDIAN
39840        uint64_t data                    : 64;      /**< The value in this register is totaly SW dependent. */
39841#else
39842        uint64_t data                    : 64;
39843#endif
39844    } s;
39845    struct cvmx_npei_scratch_1_s         cn52xx;
39846    struct cvmx_npei_scratch_1_s         cn52xxp1;
39847    struct cvmx_npei_scratch_1_s         cn56xx;
39848    struct cvmx_npei_scratch_1_s         cn56xxp1;
39849} cvmx_npei_scratch_1_t;
39850
39851
39852/**
39853 * cvmx_npei_state1
39854 *
39855 * NPEI_STATE1 = NPEI State 1
39856 *
39857 * State machines in NPEI. For debug.
39858 */
39859typedef union
39860{
39861    uint64_t u64;
39862    struct cvmx_npei_state1_s
39863    {
39864#if __BYTE_ORDER == __BIG_ENDIAN
39865        uint64_t cpl1                    : 12;      /**< CPL1 State */
39866        uint64_t cpl0                    : 12;      /**< CPL0 State */
39867        uint64_t arb                     : 1;       /**< ARB State */
39868        uint64_t csr                     : 39;      /**< CSR State */
39869#else
39870        uint64_t csr                     : 39;
39871        uint64_t arb                     : 1;
39872        uint64_t cpl0                    : 12;
39873        uint64_t cpl1                    : 12;
39874#endif
39875    } s;
39876    struct cvmx_npei_state1_s            cn52xx;
39877    struct cvmx_npei_state1_s            cn52xxp1;
39878    struct cvmx_npei_state1_s            cn56xx;
39879    struct cvmx_npei_state1_s            cn56xxp1;
39880} cvmx_npei_state1_t;
39881
39882
39883/**
39884 * cvmx_npei_state2
39885 *
39886 * NPEI_STATE2 = NPEI State 2
39887 *
39888 * State machines in NPEI. For debug.
39889 */
39890typedef union
39891{
39892    uint64_t u64;
39893    struct cvmx_npei_state2_s
39894    {
39895#if __BYTE_ORDER == __BIG_ENDIAN
39896        uint64_t reserved_48_63          : 16;
39897        uint64_t npei                    : 1;       /**< NPEI State */
39898        uint64_t rac                     : 1;       /**< RAC State */
39899        uint64_t csm1                    : 15;      /**< CSM1 State */
39900        uint64_t csm0                    : 15;      /**< CSM0 State */
39901        uint64_t nnp0                    : 8;       /**< NNP0 State */
39902        uint64_t nnd                     : 8;       /**< NND State */
39903#else
39904        uint64_t nnd                     : 8;
39905        uint64_t nnp0                    : 8;
39906        uint64_t csm0                    : 15;
39907        uint64_t csm1                    : 15;
39908        uint64_t rac                     : 1;
39909        uint64_t npei                    : 1;
39910        uint64_t reserved_48_63          : 16;
39911#endif
39912    } s;
39913    struct cvmx_npei_state2_s            cn52xx;
39914    struct cvmx_npei_state2_s            cn52xxp1;
39915    struct cvmx_npei_state2_s            cn56xx;
39916    struct cvmx_npei_state2_s            cn56xxp1;
39917} cvmx_npei_state2_t;
39918
39919
39920/**
39921 * cvmx_npei_state3
39922 *
39923 * NPEI_STATE3 = NPEI State 3
39924 *
39925 * State machines in NPEI. For debug.
39926 */
39927typedef union
39928{
39929    uint64_t u64;
39930    struct cvmx_npei_state3_s
39931    {
39932#if __BYTE_ORDER == __BIG_ENDIAN
39933        uint64_t reserved_56_63          : 8;
39934        uint64_t psm1                    : 15;      /**< PSM1 State */
39935        uint64_t psm0                    : 15;      /**< PSM0 State */
39936        uint64_t nsm1                    : 13;      /**< NSM1 State */
39937        uint64_t nsm0                    : 13;      /**< NSM0 State */
39938#else
39939        uint64_t nsm0                    : 13;
39940        uint64_t nsm1                    : 13;
39941        uint64_t psm0                    : 15;
39942        uint64_t psm1                    : 15;
39943        uint64_t reserved_56_63          : 8;
39944#endif
39945    } s;
39946    struct cvmx_npei_state3_s            cn52xx;
39947    struct cvmx_npei_state3_s            cn52xxp1;
39948    struct cvmx_npei_state3_s            cn56xx;
39949    struct cvmx_npei_state3_s            cn56xxp1;
39950} cvmx_npei_state3_t;
39951
39952
39953/**
39954 * cvmx_npei_win_rd_addr
39955 *
39956 * NPEI_WIN_RD_ADDR = NPEI Window Read Address Register
39957 *
39958 * The address to be read when the NPEI_WIN_RD_DATA register is read.
39959 */
39960typedef union
39961{
39962    uint64_t u64;
39963    struct cvmx_npei_win_rd_addr_s
39964    {
39965#if __BYTE_ORDER == __BIG_ENDIAN
39966        uint64_t reserved_51_63          : 13;
39967        uint64_t ld_cmd                  : 2;       /**< The load command sent wit hthe read.
39968                                                         0x0 == Load 8-bytes, 0x1 == Load 4-bytes,
39969                                                         0x2 == Load 2-bytes, 0x3 == Load 1-bytes, */
39970        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
39971                                                         read as '0'. */
39972        uint64_t rd_addr                 : 48;      /**< The address to be read from. Whenever the LSB of
39973                                                         this register is written, the Read Operation will
39974                                                         take place.
39975                                                         [47:40] = NCB_ID
39976                                                         [39:0]  = Address
39977                                                         When [47:43] == NPI & [42:0] == 0 bits [39:0] are:
39978                                                              [39:32] == x, Not Used
39979                                                              [31:27] == RSL_ID
39980                                                              [12:0]  == RSL Register Offset */
39981#else
39982        uint64_t rd_addr                 : 48;
39983        uint64_t iobit                   : 1;
39984        uint64_t ld_cmd                  : 2;
39985        uint64_t reserved_51_63          : 13;
39986#endif
39987    } s;
39988    struct cvmx_npei_win_rd_addr_s       cn52xx;
39989    struct cvmx_npei_win_rd_addr_s       cn52xxp1;
39990    struct cvmx_npei_win_rd_addr_s       cn56xx;
39991    struct cvmx_npei_win_rd_addr_s       cn56xxp1;
39992} cvmx_npei_win_rd_addr_t;
39993
39994
39995/**
39996 * cvmx_npei_win_rd_data
39997 *
39998 * NPEI_WIN_RD_DATA = NPEI Window Read Data Register
39999 *
40000 * Reading this register causes a window read operation to take place. Address read is taht contained in the NPEI_WIN_RD_ADDR
40001 * register.
40002 */
40003typedef union
40004{
40005    uint64_t u64;
40006    struct cvmx_npei_win_rd_data_s
40007    {
40008#if __BYTE_ORDER == __BIG_ENDIAN
40009        uint64_t rd_data                 : 64;      /**< The read data. */
40010#else
40011        uint64_t rd_data                 : 64;
40012#endif
40013    } s;
40014    struct cvmx_npei_win_rd_data_s       cn52xx;
40015    struct cvmx_npei_win_rd_data_s       cn52xxp1;
40016    struct cvmx_npei_win_rd_data_s       cn56xx;
40017    struct cvmx_npei_win_rd_data_s       cn56xxp1;
40018} cvmx_npei_win_rd_data_t;
40019
40020
40021/**
40022 * cvmx_npei_win_wr_addr
40023 *
40024 * NPEI_WIN_WR_ADDR = NPEI Window Write Address Register
40025 *
40026 * Contains the address to be writen to when a write operation is started by writing the
40027 * NPEI_WIN_WR_DATA register (see below).
40028 */
40029typedef union
40030{
40031    uint64_t u64;
40032    struct cvmx_npei_win_wr_addr_s
40033    {
40034#if __BYTE_ORDER == __BIG_ENDIAN
40035        uint64_t reserved_49_63          : 15;
40036        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
40037                                                         read as '0'. */
40038        uint64_t wr_addr                 : 46;      /**< The address that will be written to when the
40039                                                         NPEI_WIN_WR_DATA register is written.
40040                                                         [47:40] = NCB_ID
40041                                                         [39:3]  = Address
40042                                                         When [47:43] == NPI & [42:0] == 0 bits [39:0] are:
40043                                                              [39:32] == x, Not Used
40044                                                              [31:27] == RSL_ID
40045                                                              [12:2]  == RSL Register Offset
40046                                                              [1:0]   == x, Not Used */
40047        uint64_t reserved_0_1            : 2;
40048#else
40049        uint64_t reserved_0_1            : 2;
40050        uint64_t wr_addr                 : 46;
40051        uint64_t iobit                   : 1;
40052        uint64_t reserved_49_63          : 15;
40053#endif
40054    } s;
40055    struct cvmx_npei_win_wr_addr_s       cn52xx;
40056    struct cvmx_npei_win_wr_addr_s       cn52xxp1;
40057    struct cvmx_npei_win_wr_addr_s       cn56xx;
40058    struct cvmx_npei_win_wr_addr_s       cn56xxp1;
40059} cvmx_npei_win_wr_addr_t;
40060
40061
40062/**
40063 * cvmx_npei_win_wr_data
40064 *
40065 * NPEI_WIN_WR_DATA = NPEI Window Write Data Register
40066 *
40067 * Contains the data to write to the address located in the NPEI_WIN_WR_ADDR Register.
40068 * Writing the least-significant-byte of this register will cause a write operation to take place.
40069 */
40070typedef union
40071{
40072    uint64_t u64;
40073    struct cvmx_npei_win_wr_data_s
40074    {
40075#if __BYTE_ORDER == __BIG_ENDIAN
40076        uint64_t wr_data                 : 64;      /**< The data to be written. Whenever the LSB of this
40077                                                         register is written, the Window Write will take
40078                                                         place. */
40079#else
40080        uint64_t wr_data                 : 64;
40081#endif
40082    } s;
40083    struct cvmx_npei_win_wr_data_s       cn52xx;
40084    struct cvmx_npei_win_wr_data_s       cn52xxp1;
40085    struct cvmx_npei_win_wr_data_s       cn56xx;
40086    struct cvmx_npei_win_wr_data_s       cn56xxp1;
40087} cvmx_npei_win_wr_data_t;
40088
40089
40090/**
40091 * cvmx_npei_win_wr_mask
40092 *
40093 * NPEI_WIN_WR_MASK = NPEI Window Write Mask Register
40094 *
40095 * Contains the mask for the data in the NPEI_WIN_WR_DATA Register.
40096 */
40097typedef union
40098{
40099    uint64_t u64;
40100    struct cvmx_npei_win_wr_mask_s
40101    {
40102#if __BYTE_ORDER == __BIG_ENDIAN
40103        uint64_t reserved_8_63           : 56;
40104        uint64_t wr_mask                 : 8;       /**< The data to be written. When a bit is '0'
40105                                                         the corresponding byte will be written. */
40106#else
40107        uint64_t wr_mask                 : 8;
40108        uint64_t reserved_8_63           : 56;
40109#endif
40110    } s;
40111    struct cvmx_npei_win_wr_mask_s       cn52xx;
40112    struct cvmx_npei_win_wr_mask_s       cn52xxp1;
40113    struct cvmx_npei_win_wr_mask_s       cn56xx;
40114    struct cvmx_npei_win_wr_mask_s       cn56xxp1;
40115} cvmx_npei_win_wr_mask_t;
40116
40117
40118/**
40119 * cvmx_npei_window_ctl
40120 *
40121 * NPEI_WINDOW_CTL = NPEI's Window Control
40122 *
40123 * The name of this register is misleading. The timeout value is used for BAR0 access from PCIE0 and PCIE1.
40124 * Any access to the regigisters on the RML will timeout as 0xFFFF clock cycle. At time of timeout the next
40125 * RML access will start, and interrupt will be set, and in the case of reads no data will be returned.
40126 *
40127 * The value of this register should be set to a minimum of 0x200000 to ensure that a timeout to an RML register
40128 * occurs on the RML 0xFFFF timer before the timeout for a BAR0 access from the PCIE#.
40129 */
40130typedef union
40131{
40132    uint64_t u64;
40133    struct cvmx_npei_window_ctl_s
40134    {
40135#if __BYTE_ORDER == __BIG_ENDIAN
40136        uint64_t reserved_32_63          : 32;
40137        uint64_t time                    : 32;      /**< Time to wait in core clocks to wait for a
40138                                                         BAR0 access to completeon the NCB
40139                                                         before timing out. A value of 0 will cause no
40140                                                         timeouts. A minimum value of 0x200000 should be
40141                                                         used when this register is not set to 0x0. */
40142#else
40143        uint64_t time                    : 32;
40144        uint64_t reserved_32_63          : 32;
40145#endif
40146    } s;
40147    struct cvmx_npei_window_ctl_s        cn52xx;
40148    struct cvmx_npei_window_ctl_s        cn52xxp1;
40149    struct cvmx_npei_window_ctl_s        cn56xx;
40150    struct cvmx_npei_window_ctl_s        cn56xxp1;
40151} cvmx_npei_window_ctl_t;
40152
40153
40154/**
40155 * cvmx_npi_base_addr_input#
40156 *
40157 * NPI_BASE_ADDR_INPUT0 = NPI's Base Address Input 0 Register
40158 *
40159 * The address to start reading Instructions from for Input-0.
40160 */
40161typedef union
40162{
40163    uint64_t u64;
40164    struct cvmx_npi_base_addr_inputx_s
40165    {
40166#if __BYTE_ORDER == __BIG_ENDIAN
40167        uint64_t baddr                   : 61;      /**< The address to read Instruction from for output 0.
40168                                                         This address is 8-byte aligned, for this reason
40169                                                         address bits [2:0] will always be zero. */
40170        uint64_t reserved_0_2            : 3;
40171#else
40172        uint64_t reserved_0_2            : 3;
40173        uint64_t baddr                   : 61;
40174#endif
40175    } s;
40176    struct cvmx_npi_base_addr_inputx_s   cn30xx;
40177    struct cvmx_npi_base_addr_inputx_s   cn31xx;
40178    struct cvmx_npi_base_addr_inputx_s   cn38xx;
40179    struct cvmx_npi_base_addr_inputx_s   cn38xxp2;
40180    struct cvmx_npi_base_addr_inputx_s   cn50xx;
40181    struct cvmx_npi_base_addr_inputx_s   cn58xx;
40182    struct cvmx_npi_base_addr_inputx_s   cn58xxp1;
40183} cvmx_npi_base_addr_inputx_t;
40184
40185
40186/**
40187 * cvmx_npi_base_addr_output#
40188 *
40189 * NPI_BASE_ADDR_OUTPUT0 = NPI's Base Address Output 0 Register
40190 *
40191 * The address to start reading Instructions from for Output-0.
40192 */
40193typedef union
40194{
40195    uint64_t u64;
40196    struct cvmx_npi_base_addr_outputx_s
40197    {
40198#if __BYTE_ORDER == __BIG_ENDIAN
40199        uint64_t baddr                   : 61;      /**< The address to read Instruction from for output 0.
40200                                                         This address is 8-byte aligned, for this reason
40201                                                         address bits [2:0] will always be zero. */
40202        uint64_t reserved_0_2            : 3;
40203#else
40204        uint64_t reserved_0_2            : 3;
40205        uint64_t baddr                   : 61;
40206#endif
40207    } s;
40208    struct cvmx_npi_base_addr_outputx_s  cn30xx;
40209    struct cvmx_npi_base_addr_outputx_s  cn31xx;
40210    struct cvmx_npi_base_addr_outputx_s  cn38xx;
40211    struct cvmx_npi_base_addr_outputx_s  cn38xxp2;
40212    struct cvmx_npi_base_addr_outputx_s  cn50xx;
40213    struct cvmx_npi_base_addr_outputx_s  cn58xx;
40214    struct cvmx_npi_base_addr_outputx_s  cn58xxp1;
40215} cvmx_npi_base_addr_outputx_t;
40216
40217
40218/**
40219 * cvmx_npi_bist_status
40220 *
40221 * NPI_BIST_STATUS = NPI's BIST Status Register
40222 *
40223 * Results from BIST runs of NPI's memories.
40224 */
40225typedef union
40226{
40227    uint64_t u64;
40228    struct cvmx_npi_bist_status_s
40229    {
40230#if __BYTE_ORDER == __BIG_ENDIAN
40231        uint64_t reserved_20_63          : 44;
40232        uint64_t csr_bs                  : 1;       /**< BIST Status for the csr_fifo */
40233        uint64_t dif_bs                  : 1;       /**< BIST Status for the dif_fifo */
40234        uint64_t rdp_bs                  : 1;       /**< BIST Status for the rdp_fifo */
40235        uint64_t pcnc_bs                 : 1;       /**< BIST Status for the pcn_cnt_fifo */
40236        uint64_t pcn_bs                  : 1;       /**< BIST Status for the pcn_fifo */
40237        uint64_t rdn_bs                  : 1;       /**< BIST Status for the rdn_fifo */
40238        uint64_t pcac_bs                 : 1;       /**< BIST Status for the pca_cmd_fifo */
40239        uint64_t pcad_bs                 : 1;       /**< BIST Status for the pca_data_fifo */
40240        uint64_t rdnl_bs                 : 1;       /**< BIST Status for the rdn_length_fifo */
40241        uint64_t pgf_bs                  : 1;       /**< BIST Status for the pgf_fifo */
40242        uint64_t pig_bs                  : 1;       /**< BIST Status for the pig_fifo */
40243        uint64_t pof0_bs                 : 1;       /**< BIST Status for the pof0_fifo */
40244        uint64_t pof1_bs                 : 1;       /**< BIST Status for the pof1_fifo */
40245        uint64_t pof2_bs                 : 1;       /**< BIST Status for the pof2_fifo */
40246        uint64_t pof3_bs                 : 1;       /**< BIST Status for the pof3_fifo */
40247        uint64_t pos_bs                  : 1;       /**< BIST Status for the pos_fifo */
40248        uint64_t nus_bs                  : 1;       /**< BIST Status for the nus_fifo */
40249        uint64_t dob_bs                  : 1;       /**< BIST Status for the dob_fifo */
40250        uint64_t pdf_bs                  : 1;       /**< BIST Status for the pdf_fifo */
40251        uint64_t dpi_bs                  : 1;       /**< BIST Status for the dpi_fifo */
40252#else
40253        uint64_t dpi_bs                  : 1;
40254        uint64_t pdf_bs                  : 1;
40255        uint64_t dob_bs                  : 1;
40256        uint64_t nus_bs                  : 1;
40257        uint64_t pos_bs                  : 1;
40258        uint64_t pof3_bs                 : 1;
40259        uint64_t pof2_bs                 : 1;
40260        uint64_t pof1_bs                 : 1;
40261        uint64_t pof0_bs                 : 1;
40262        uint64_t pig_bs                  : 1;
40263        uint64_t pgf_bs                  : 1;
40264        uint64_t rdnl_bs                 : 1;
40265        uint64_t pcad_bs                 : 1;
40266        uint64_t pcac_bs                 : 1;
40267        uint64_t rdn_bs                  : 1;
40268        uint64_t pcn_bs                  : 1;
40269        uint64_t pcnc_bs                 : 1;
40270        uint64_t rdp_bs                  : 1;
40271        uint64_t dif_bs                  : 1;
40272        uint64_t csr_bs                  : 1;
40273        uint64_t reserved_20_63          : 44;
40274#endif
40275    } s;
40276    struct cvmx_npi_bist_status_cn30xx
40277    {
40278#if __BYTE_ORDER == __BIG_ENDIAN
40279        uint64_t reserved_20_63          : 44;
40280        uint64_t csr_bs                  : 1;       /**< BIST Status for the csr_fifo */
40281        uint64_t dif_bs                  : 1;       /**< BIST Status for the dif_fifo */
40282        uint64_t rdp_bs                  : 1;       /**< BIST Status for the rdp_fifo */
40283        uint64_t pcnc_bs                 : 1;       /**< BIST Status for the pcn_cnt_fifo */
40284        uint64_t pcn_bs                  : 1;       /**< BIST Status for the pcn_fifo */
40285        uint64_t rdn_bs                  : 1;       /**< BIST Status for the rdn_fifo */
40286        uint64_t pcac_bs                 : 1;       /**< BIST Status for the pca_cmd_fifo */
40287        uint64_t pcad_bs                 : 1;       /**< BIST Status for the pca_data_fifo */
40288        uint64_t rdnl_bs                 : 1;       /**< BIST Status for the rdn_length_fifo */
40289        uint64_t pgf_bs                  : 1;       /**< BIST Status for the pgf_fifo */
40290        uint64_t pig_bs                  : 1;       /**< BIST Status for the pig_fifo */
40291        uint64_t pof0_bs                 : 1;       /**< BIST Status for the pof0_fifo */
40292        uint64_t reserved_5_7            : 3;
40293        uint64_t pos_bs                  : 1;       /**< BIST Status for the pos_fifo */
40294        uint64_t nus_bs                  : 1;       /**< BIST Status for the nus_fifo */
40295        uint64_t dob_bs                  : 1;       /**< BIST Status for the dob_fifo */
40296        uint64_t pdf_bs                  : 1;       /**< BIST Status for the pdf_fifo */
40297        uint64_t dpi_bs                  : 1;       /**< BIST Status for the dpi_fifo */
40298#else
40299        uint64_t dpi_bs                  : 1;
40300        uint64_t pdf_bs                  : 1;
40301        uint64_t dob_bs                  : 1;
40302        uint64_t nus_bs                  : 1;
40303        uint64_t pos_bs                  : 1;
40304        uint64_t reserved_5_7            : 3;
40305        uint64_t pof0_bs                 : 1;
40306        uint64_t pig_bs                  : 1;
40307        uint64_t pgf_bs                  : 1;
40308        uint64_t rdnl_bs                 : 1;
40309        uint64_t pcad_bs                 : 1;
40310        uint64_t pcac_bs                 : 1;
40311        uint64_t rdn_bs                  : 1;
40312        uint64_t pcn_bs                  : 1;
40313        uint64_t pcnc_bs                 : 1;
40314        uint64_t rdp_bs                  : 1;
40315        uint64_t dif_bs                  : 1;
40316        uint64_t csr_bs                  : 1;
40317        uint64_t reserved_20_63          : 44;
40318#endif
40319    } cn30xx;
40320    struct cvmx_npi_bist_status_s        cn31xx;
40321    struct cvmx_npi_bist_status_s        cn38xx;
40322    struct cvmx_npi_bist_status_s        cn38xxp2;
40323    struct cvmx_npi_bist_status_cn50xx
40324    {
40325#if __BYTE_ORDER == __BIG_ENDIAN
40326        uint64_t reserved_20_63          : 44;
40327        uint64_t csr_bs                  : 1;       /**< BIST Status for the csr_fifo */
40328        uint64_t dif_bs                  : 1;       /**< BIST Status for the dif_fifo */
40329        uint64_t rdp_bs                  : 1;       /**< BIST Status for the rdp_fifo */
40330        uint64_t pcnc_bs                 : 1;       /**< BIST Status for the pcn_cnt_fifo */
40331        uint64_t pcn_bs                  : 1;       /**< BIST Status for the pcn_fifo */
40332        uint64_t rdn_bs                  : 1;       /**< BIST Status for the rdn_fifo */
40333        uint64_t pcac_bs                 : 1;       /**< BIST Status for the pca_cmd_fifo */
40334        uint64_t pcad_bs                 : 1;       /**< BIST Status for the pca_data_fifo */
40335        uint64_t rdnl_bs                 : 1;       /**< BIST Status for the rdn_length_fifo */
40336        uint64_t pgf_bs                  : 1;       /**< BIST Status for the pgf_fifo */
40337        uint64_t pig_bs                  : 1;       /**< BIST Status for the pig_fifo */
40338        uint64_t pof0_bs                 : 1;       /**< BIST Status for the pof0_fifo */
40339        uint64_t pof1_bs                 : 1;       /**< BIST Status for the pof1_fifo */
40340        uint64_t reserved_5_6            : 2;
40341        uint64_t pos_bs                  : 1;       /**< BIST Status for the pos_fifo */
40342        uint64_t nus_bs                  : 1;       /**< BIST Status for the nus_fifo */
40343        uint64_t dob_bs                  : 1;       /**< BIST Status for the dob_fifo */
40344        uint64_t pdf_bs                  : 1;       /**< BIST Status for the pdf_fifo */
40345        uint64_t dpi_bs                  : 1;       /**< BIST Status for the dpi_fifo */
40346#else
40347        uint64_t dpi_bs                  : 1;
40348        uint64_t pdf_bs                  : 1;
40349        uint64_t dob_bs                  : 1;
40350        uint64_t nus_bs                  : 1;
40351        uint64_t pos_bs                  : 1;
40352        uint64_t reserved_5_6            : 2;
40353        uint64_t pof1_bs                 : 1;
40354        uint64_t pof0_bs                 : 1;
40355        uint64_t pig_bs                  : 1;
40356        uint64_t pgf_bs                  : 1;
40357        uint64_t rdnl_bs                 : 1;
40358        uint64_t pcad_bs                 : 1;
40359        uint64_t pcac_bs                 : 1;
40360        uint64_t rdn_bs                  : 1;
40361        uint64_t pcn_bs                  : 1;
40362        uint64_t pcnc_bs                 : 1;
40363        uint64_t rdp_bs                  : 1;
40364        uint64_t dif_bs                  : 1;
40365        uint64_t csr_bs                  : 1;
40366        uint64_t reserved_20_63          : 44;
40367#endif
40368    } cn50xx;
40369    struct cvmx_npi_bist_status_s        cn58xx;
40370    struct cvmx_npi_bist_status_s        cn58xxp1;
40371} cvmx_npi_bist_status_t;
40372
40373
40374/**
40375 * cvmx_npi_buff_size_output#
40376 *
40377 * NPI_BUFF_SIZE_OUTPUT0 = NPI's D/I Buffer Sizes For Output 0
40378 *
40379 * The size in bytes of the Data Bufffer and Information Buffer for output 0.
40380 */
40381typedef union
40382{
40383    uint64_t u64;
40384    struct cvmx_npi_buff_size_outputx_s
40385    {
40386#if __BYTE_ORDER == __BIG_ENDIAN
40387        uint64_t reserved_23_63          : 41;
40388        uint64_t isize                   : 7;       /**< The number of bytes to move to the Info-Pointer
40389                                                         from the front of the packet.
40390                                                         Legal values are 0-120. */
40391        uint64_t bsize                   : 16;      /**< The size in bytes of the area pointed to by
40392                                                         buffer pointer for output packet data. */
40393#else
40394        uint64_t bsize                   : 16;
40395        uint64_t isize                   : 7;
40396        uint64_t reserved_23_63          : 41;
40397#endif
40398    } s;
40399    struct cvmx_npi_buff_size_outputx_s  cn30xx;
40400    struct cvmx_npi_buff_size_outputx_s  cn31xx;
40401    struct cvmx_npi_buff_size_outputx_s  cn38xx;
40402    struct cvmx_npi_buff_size_outputx_s  cn38xxp2;
40403    struct cvmx_npi_buff_size_outputx_s  cn50xx;
40404    struct cvmx_npi_buff_size_outputx_s  cn58xx;
40405    struct cvmx_npi_buff_size_outputx_s  cn58xxp1;
40406} cvmx_npi_buff_size_outputx_t;
40407
40408
40409/**
40410 * cvmx_npi_comp_ctl
40411 *
40412 * NPI_COMP_CTL = PCI Compensation Control
40413 *
40414 * PCI Compensation Control
40415 */
40416typedef union
40417{
40418    uint64_t u64;
40419    struct cvmx_npi_comp_ctl_s
40420    {
40421#if __BYTE_ORDER == __BIG_ENDIAN
40422        uint64_t reserved_10_63          : 54;
40423        uint64_t pctl                    : 5;       /**< Bypass value for PCTL */
40424        uint64_t nctl                    : 5;       /**< Bypass value for NCTL */
40425#else
40426        uint64_t nctl                    : 5;
40427        uint64_t pctl                    : 5;
40428        uint64_t reserved_10_63          : 54;
40429#endif
40430    } s;
40431    struct cvmx_npi_comp_ctl_s           cn50xx;
40432    struct cvmx_npi_comp_ctl_s           cn58xx;
40433    struct cvmx_npi_comp_ctl_s           cn58xxp1;
40434} cvmx_npi_comp_ctl_t;
40435
40436
40437/**
40438 * cvmx_npi_ctl_status
40439 *
40440 * NPI_CTL_STATUS = NPI's Control Status Register
40441 *
40442 * Contains control ans status for NPI.
40443 * Writes to this register are not ordered with writes/reads to the PCI Memory space.
40444 * To ensure that a write has completed the user must read the register before
40445 * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
40446 */
40447typedef union
40448{
40449    uint64_t u64;
40450    struct cvmx_npi_ctl_status_s
40451    {
40452#if __BYTE_ORDER == __BIG_ENDIAN
40453        uint64_t reserved_63_63          : 1;
40454        uint64_t chip_rev                : 8;       /**< The revision of the N3. */
40455        uint64_t dis_pniw                : 1;       /**< When asserted '1' access from the PNI Window
40456                                                         Registers are disabled. */
40457        uint64_t out3_enb                : 1;       /**< When asserted '1' the output3 engine is enabled.
40458                                                         After enabling the values of the associated
40459                                                         Address and Size Register should not be changed. */
40460        uint64_t out2_enb                : 1;       /**< When asserted '1' the output2 engine is enabled.
40461                                                         After enabling the values of the associated
40462                                                         Address and Size Register should not be changed. */
40463        uint64_t out1_enb                : 1;       /**< When asserted '1' the output1 engine is enabled.
40464                                                         After enabling the values of the associated
40465                                                         Address and Size Register should not be changed. */
40466        uint64_t out0_enb                : 1;       /**< When asserted '1' the output0 engine is enabled.
40467                                                         After enabling the values of the associated
40468                                                         Address and Size Register should not be changed. */
40469        uint64_t ins3_enb                : 1;       /**< When asserted '1' the gather3 engine is enabled.
40470                                                         After enabling the values of the associated
40471                                                         Address and Size Register should not be changed. */
40472        uint64_t ins2_enb                : 1;       /**< When asserted '1' the gather2 engine is enabled.
40473                                                         After enabling the values of the associated
40474                                                         Address and Size Register should not be changed. */
40475        uint64_t ins1_enb                : 1;       /**< When asserted '1' the gather1 engine is enabled.
40476                                                         After enabling the values of the associated
40477                                                         Address and Size Register should not be changed. */
40478        uint64_t ins0_enb                : 1;       /**< When asserted '1' the gather0 engine is enabled.
40479                                                         After enabling the values of the associated
40480                                                         Address and Size Register should not be changed. */
40481        uint64_t ins3_64b                : 1;       /**< When asserted '1' the instructions read by the
40482                                                         gather3 engine are 64-Byte instructions, when
40483                                                         de-asserted '0' instructions are 32-byte. */
40484        uint64_t ins2_64b                : 1;       /**< When asserted '1' the instructions read by the
40485                                                         gather2 engine are 64-Byte instructions, when
40486                                                         de-asserted '0' instructions are 32-byte. */
40487        uint64_t ins1_64b                : 1;       /**< When asserted '1' the instructions read by the
40488                                                         gather1 engine are 64-Byte instructions, when
40489                                                         de-asserted '0' instructions are 32-byte. */
40490        uint64_t ins0_64b                : 1;       /**< When asserted '1' the instructions read by the
40491                                                         gather0 engine are 64-Byte instructions, when
40492                                                         de-asserted '0' instructions are 32-byte. */
40493        uint64_t pci_wdis                : 1;       /**< When set '1' disables access to registers in
40494                                                         PNI address range 0x1000 - 0x17FF from the PCI. */
40495        uint64_t wait_com                : 1;       /**< When set '1' casues the NPI to wait for a commit
40496                                                         from the L2C before sending additional access to
40497                                                         the L2C from the PCI. */
40498        uint64_t reserved_37_39          : 3;
40499        uint64_t max_word                : 5;       /**< The maximum number of words to merge into a single
40500                                                         write operation from the PPs to the PCI. Legal
40501                                                         values are 1 to 32, where a '0' is treated as 32. */
40502        uint64_t reserved_10_31          : 22;
40503        uint64_t timer                   : 10;      /**< When the NPI starts a PP to PCI write it will wait
40504                                                         no longer than the value of TIMER in eclks to
40505                                                         merge additional writes from the PPs into 1
40506                                                         large write. The values for this field is 1 to
40507                                                         1024 where a value of '0' is treated as 1024. */
40508#else
40509        uint64_t timer                   : 10;
40510        uint64_t reserved_10_31          : 22;
40511        uint64_t max_word                : 5;
40512        uint64_t reserved_37_39          : 3;
40513        uint64_t wait_com                : 1;
40514        uint64_t pci_wdis                : 1;
40515        uint64_t ins0_64b                : 1;
40516        uint64_t ins1_64b                : 1;
40517        uint64_t ins2_64b                : 1;
40518        uint64_t ins3_64b                : 1;
40519        uint64_t ins0_enb                : 1;
40520        uint64_t ins1_enb                : 1;
40521        uint64_t ins2_enb                : 1;
40522        uint64_t ins3_enb                : 1;
40523        uint64_t out0_enb                : 1;
40524        uint64_t out1_enb                : 1;
40525        uint64_t out2_enb                : 1;
40526        uint64_t out3_enb                : 1;
40527        uint64_t dis_pniw                : 1;
40528        uint64_t chip_rev                : 8;
40529        uint64_t reserved_63_63          : 1;
40530#endif
40531    } s;
40532    struct cvmx_npi_ctl_status_cn30xx
40533    {
40534#if __BYTE_ORDER == __BIG_ENDIAN
40535        uint64_t reserved_63_63          : 1;
40536        uint64_t chip_rev                : 8;       /**< The revision of the N3. */
40537        uint64_t dis_pniw                : 1;       /**< When asserted '1' access from the PNI Window
40538                                                         Registers are disabled. */
40539        uint64_t reserved_51_53          : 3;
40540        uint64_t out0_enb                : 1;       /**< When asserted '1' the output0 engine is enabled.
40541                                                         After enabling the values of the associated
40542                                                         Address and Size Register should not be changed. */
40543        uint64_t reserved_47_49          : 3;
40544        uint64_t ins0_enb                : 1;       /**< When asserted '1' the gather0 engine is enabled.
40545                                                         After enabling the values of the associated
40546                                                         Address and Size Register should not be changed. */
40547        uint64_t reserved_43_45          : 3;
40548        uint64_t ins0_64b                : 1;       /**< When asserted '1' the instructions read by the
40549                                                         gather0 engine are 64-Byte instructions, when
40550                                                         de-asserted '0' instructions are 32-byte. */
40551        uint64_t pci_wdis                : 1;       /**< When set '1' disables access to registers in
40552                                                         PNI address range 0x1000 - 0x17FF from the PCI. */
40553        uint64_t wait_com                : 1;       /**< When set '1' casues the NPI to wait for a commit
40554                                                         from the L2C before sending additional access to
40555                                                         the L2C from the PCI. */
40556        uint64_t reserved_37_39          : 3;
40557        uint64_t max_word                : 5;       /**< The maximum number of words to merge into a single
40558                                                         write operation from the PPs to the PCI. Legal
40559                                                         values are 1 to 32, where a '0' is treated as 32. */
40560        uint64_t reserved_10_31          : 22;
40561        uint64_t timer                   : 10;      /**< When the NPI starts a PP to PCI write it will wait
40562                                                         no longer than the value of TIMER in eclks to
40563                                                         merge additional writes from the PPs into 1
40564                                                         large write. The values for this field is 1 to
40565                                                         1024 where a value of '0' is treated as 1024. */
40566#else
40567        uint64_t timer                   : 10;
40568        uint64_t reserved_10_31          : 22;
40569        uint64_t max_word                : 5;
40570        uint64_t reserved_37_39          : 3;
40571        uint64_t wait_com                : 1;
40572        uint64_t pci_wdis                : 1;
40573        uint64_t ins0_64b                : 1;
40574        uint64_t reserved_43_45          : 3;
40575        uint64_t ins0_enb                : 1;
40576        uint64_t reserved_47_49          : 3;
40577        uint64_t out0_enb                : 1;
40578        uint64_t reserved_51_53          : 3;
40579        uint64_t dis_pniw                : 1;
40580        uint64_t chip_rev                : 8;
40581        uint64_t reserved_63_63          : 1;
40582#endif
40583    } cn30xx;
40584    struct cvmx_npi_ctl_status_cn31xx
40585    {
40586#if __BYTE_ORDER == __BIG_ENDIAN
40587        uint64_t reserved_63_63          : 1;
40588        uint64_t chip_rev                : 8;       /**< The revision of the N3.
40589                                                         0 => pass1.x, 1 => 2.0 */
40590        uint64_t dis_pniw                : 1;       /**< When asserted '1' access from the PNI Window
40591                                                         Registers are disabled. */
40592        uint64_t reserved_52_53          : 2;
40593        uint64_t out1_enb                : 1;       /**< When asserted '1' the output1 engine is enabled.
40594                                                         After enabling the values of the associated
40595                                                         Address and Size Register should not be changed. */
40596        uint64_t out0_enb                : 1;       /**< When asserted '1' the output0 engine is enabled.
40597                                                         After enabling the values of the associated
40598                                                         Address and Size Register should not be changed. */
40599        uint64_t reserved_48_49          : 2;
40600        uint64_t ins1_enb                : 1;       /**< When asserted '1' the gather1 engine is enabled.
40601                                                         After enabling the values of the associated
40602                                                         Address and Size Register should not be changed. */
40603        uint64_t ins0_enb                : 1;       /**< When asserted '1' the gather0 engine is enabled.
40604                                                         After enabling the values of the associated
40605                                                         Address and Size Register should not be changed. */
40606        uint64_t reserved_44_45          : 2;
40607        uint64_t ins1_64b                : 1;       /**< When asserted '1' the instructions read by the
40608                                                         gather1 engine are 64-Byte instructions, when
40609                                                         de-asserted '0' instructions are 32-byte. */
40610        uint64_t ins0_64b                : 1;       /**< When asserted '1' the instructions read by the
40611                                                         gather0 engine are 64-Byte instructions, when
40612                                                         de-asserted '0' instructions are 32-byte. */
40613        uint64_t pci_wdis                : 1;       /**< When set '1' disables access to registers in
40614                                                         PNI address range 0x1000 - 0x17FF from the PCI. */
40615        uint64_t wait_com                : 1;       /**< When set '1' casues the NPI to wait for a commit
40616                                                         from the L2C before sending additional access to
40617                                                         the L2C from the PCI. */
40618        uint64_t reserved_37_39          : 3;
40619        uint64_t max_word                : 5;       /**< The maximum number of words to merge into a single
40620                                                         write operation from the PPs to the PCI. Legal
40621                                                         values are 1 to 32, where a '0' is treated as 32. */
40622        uint64_t reserved_10_31          : 22;
40623        uint64_t timer                   : 10;      /**< When the NPI starts a PP to PCI write it will wait
40624                                                         no longer than the value of TIMER in eclks to
40625                                                         merge additional writes from the PPs into 1
40626                                                         large write. The values for this field is 1 to
40627                                                         1024 where a value of '0' is treated as 1024. */
40628#else
40629        uint64_t timer                   : 10;
40630        uint64_t reserved_10_31          : 22;
40631        uint64_t max_word                : 5;
40632        uint64_t reserved_37_39          : 3;
40633        uint64_t wait_com                : 1;
40634        uint64_t pci_wdis                : 1;
40635        uint64_t ins0_64b                : 1;
40636        uint64_t ins1_64b                : 1;
40637        uint64_t reserved_44_45          : 2;
40638        uint64_t ins0_enb                : 1;
40639        uint64_t ins1_enb                : 1;
40640        uint64_t reserved_48_49          : 2;
40641        uint64_t out0_enb                : 1;
40642        uint64_t out1_enb                : 1;
40643        uint64_t reserved_52_53          : 2;
40644        uint64_t dis_pniw                : 1;
40645        uint64_t chip_rev                : 8;
40646        uint64_t reserved_63_63          : 1;
40647#endif
40648    } cn31xx;
40649    struct cvmx_npi_ctl_status_s         cn38xx;
40650    struct cvmx_npi_ctl_status_s         cn38xxp2;
40651    struct cvmx_npi_ctl_status_cn31xx    cn50xx;
40652    struct cvmx_npi_ctl_status_s         cn58xx;
40653    struct cvmx_npi_ctl_status_s         cn58xxp1;
40654} cvmx_npi_ctl_status_t;
40655
40656
40657/**
40658 * cvmx_npi_dbg_select
40659 *
40660 * NPI_DBG_SELECT = Debug Select Register
40661 *
40662 * Contains the debug select value in last written to the RSLs.
40663 */
40664typedef union
40665{
40666    uint64_t u64;
40667    struct cvmx_npi_dbg_select_s
40668    {
40669#if __BYTE_ORDER == __BIG_ENDIAN
40670        uint64_t reserved_16_63          : 48;
40671        uint64_t dbg_sel                 : 16;      /**< When this register is written its value is sent to
40672                                                         all RSLs. */
40673#else
40674        uint64_t dbg_sel                 : 16;
40675        uint64_t reserved_16_63          : 48;
40676#endif
40677    } s;
40678    struct cvmx_npi_dbg_select_s         cn30xx;
40679    struct cvmx_npi_dbg_select_s         cn31xx;
40680    struct cvmx_npi_dbg_select_s         cn38xx;
40681    struct cvmx_npi_dbg_select_s         cn38xxp2;
40682    struct cvmx_npi_dbg_select_s         cn50xx;
40683    struct cvmx_npi_dbg_select_s         cn58xx;
40684    struct cvmx_npi_dbg_select_s         cn58xxp1;
40685} cvmx_npi_dbg_select_t;
40686
40687
40688/**
40689 * cvmx_npi_dma_control
40690 *
40691 * NPI_DMA_CONTROL = DMA Control Register
40692 *
40693 * Controls operation of the DMA IN/OUT of the NPI.
40694 */
40695typedef union
40696{
40697    uint64_t u64;
40698    struct cvmx_npi_dma_control_s
40699    {
40700#if __BYTE_ORDER == __BIG_ENDIAN
40701        uint64_t reserved_36_63          : 28;
40702        uint64_t b0_lend                 : 1;       /**< When set '1' and the NPI is in the mode to write
40703                                                         0 to L2C memory when a DMA is done, the address
40704                                                         to be written to will be treated as a Little
40705                                                         Endian address. This field is new to PASS-2. */
40706        uint64_t dwb_denb                : 1;       /**< When set '1' the NPI will send a value in the DWB
40707                                                         field for a free page operation for the memory
40708                                                         that contained the data in N3. */
40709        uint64_t dwb_ichk                : 9;       /**< When Instruction Chunks for DMA operations are freed
40710                                                         this value is used for the DWB field of the
40711                                                         operation. */
40712        uint64_t fpa_que                 : 3;       /**< The FPA queue that the instruction-chunk page will
40713                                                         be returned to when used. */
40714        uint64_t o_add1                  : 1;       /**< When set '1' 1 will be added to the DMA counters,
40715                                                         if '0' then the number of bytes in the dma transfer
40716                                                         will be added to the count register. */
40717        uint64_t o_ro                    : 1;       /**< Relaxed Ordering Mode for DMA. */
40718        uint64_t o_ns                    : 1;       /**< Nosnoop For DMA. */
40719        uint64_t o_es                    : 2;       /**< Endian Swap Mode for DMA. */
40720        uint64_t o_mode                  : 1;       /**< Select PCI_POINTER MODE to be used.
40721                                                         '1' use pointer values for address and register
40722                                                         values for RO, ES, and NS, '0' use register
40723                                                         values for address and pointer values for
40724                                                         RO, ES, and NS. */
40725        uint64_t hp_enb                  : 1;       /**< Enables the High Priority DMA.
40726                                                         While this bit is disabled '0' then the value
40727                                                         in the NPI_HIGHP_IBUFF_SADDR is re-loaded to the
40728                                                         starting address of the High Priority DMA engine.
40729                                                         CSIZE field will be reloaded, for the High Priority
40730                                                         DMA Engine. */
40731        uint64_t lp_enb                  : 1;       /**< Enables the Low Priority DMA.
40732                                                         While this bit is disabled '0' then the value
40733                                                         in the NPI_LOWP_IBUFF_SADDR is re-loaded to the
40734                                                         starting address of the Low Priority DMA engine.
40735                                                         PASS-2: When this bit is '0' the value in the
40736                                                         CSIZE field will be reloaded, for the Low Priority
40737                                                         DMA Engine. */
40738        uint64_t csize                   : 14;      /**< The size in words of the DMA Instruction Chunk.
40739                                                         This value should only be written once. After
40740                                                         writing this value a new value will not be
40741                                                         recognized until the end of the DMA I-Chunk is
40742                                                         reached. */
40743#else
40744        uint64_t csize                   : 14;
40745        uint64_t lp_enb                  : 1;
40746        uint64_t hp_enb                  : 1;
40747        uint64_t o_mode                  : 1;
40748        uint64_t o_es                    : 2;
40749        uint64_t o_ns                    : 1;
40750        uint64_t o_ro                    : 1;
40751        uint64_t o_add1                  : 1;
40752        uint64_t fpa_que                 : 3;
40753        uint64_t dwb_ichk                : 9;
40754        uint64_t dwb_denb                : 1;
40755        uint64_t b0_lend                 : 1;
40756        uint64_t reserved_36_63          : 28;
40757#endif
40758    } s;
40759    struct cvmx_npi_dma_control_s        cn30xx;
40760    struct cvmx_npi_dma_control_s        cn31xx;
40761    struct cvmx_npi_dma_control_s        cn38xx;
40762    struct cvmx_npi_dma_control_s        cn38xxp2;
40763    struct cvmx_npi_dma_control_s        cn50xx;
40764    struct cvmx_npi_dma_control_s        cn58xx;
40765    struct cvmx_npi_dma_control_s        cn58xxp1;
40766} cvmx_npi_dma_control_t;
40767
40768
40769/**
40770 * cvmx_npi_dma_highp_counts
40771 *
40772 * NPI_DMA_HIGHP_COUNTS = NPI's High Priority DMA Counts
40773 *
40774 * Values for determing the number of instructions for High Priority DMA in the NPI.
40775 */
40776typedef union
40777{
40778    uint64_t u64;
40779    struct cvmx_npi_dma_highp_counts_s
40780    {
40781#if __BYTE_ORDER == __BIG_ENDIAN
40782        uint64_t reserved_39_63          : 25;
40783        uint64_t fcnt                    : 7;       /**< Number of words in the Instruction FIFO. */
40784        uint64_t dbell                   : 32;      /**< Number of available words of Instructions to read. */
40785#else
40786        uint64_t dbell                   : 32;
40787        uint64_t fcnt                    : 7;
40788        uint64_t reserved_39_63          : 25;
40789#endif
40790    } s;
40791    struct cvmx_npi_dma_highp_counts_s   cn30xx;
40792    struct cvmx_npi_dma_highp_counts_s   cn31xx;
40793    struct cvmx_npi_dma_highp_counts_s   cn38xx;
40794    struct cvmx_npi_dma_highp_counts_s   cn38xxp2;
40795    struct cvmx_npi_dma_highp_counts_s   cn50xx;
40796    struct cvmx_npi_dma_highp_counts_s   cn58xx;
40797    struct cvmx_npi_dma_highp_counts_s   cn58xxp1;
40798} cvmx_npi_dma_highp_counts_t;
40799
40800
40801/**
40802 * cvmx_npi_dma_highp_naddr
40803 *
40804 * NPI_DMA_HIGHP_NADDR = NPI's High Priority DMA Next Ichunk Address
40805 *
40806 * Place NPI will read the next Ichunk data from. This is valid when state is 0
40807 */
40808typedef union
40809{
40810    uint64_t u64;
40811    struct cvmx_npi_dma_highp_naddr_s
40812    {
40813#if __BYTE_ORDER == __BIG_ENDIAN
40814        uint64_t reserved_40_63          : 24;
40815        uint64_t state                   : 4;       /**< The DMA instruction engine state vector.
40816                                                         Typical value is 0 (IDLE). */
40817        uint64_t addr                    : 36;      /**< The next L2C address to read DMA instructions
40818                                                         from for the High Priority DMA engine. */
40819#else
40820        uint64_t addr                    : 36;
40821        uint64_t state                   : 4;
40822        uint64_t reserved_40_63          : 24;
40823#endif
40824    } s;
40825    struct cvmx_npi_dma_highp_naddr_s    cn30xx;
40826    struct cvmx_npi_dma_highp_naddr_s    cn31xx;
40827    struct cvmx_npi_dma_highp_naddr_s    cn38xx;
40828    struct cvmx_npi_dma_highp_naddr_s    cn38xxp2;
40829    struct cvmx_npi_dma_highp_naddr_s    cn50xx;
40830    struct cvmx_npi_dma_highp_naddr_s    cn58xx;
40831    struct cvmx_npi_dma_highp_naddr_s    cn58xxp1;
40832} cvmx_npi_dma_highp_naddr_t;
40833
40834
40835/**
40836 * cvmx_npi_dma_lowp_counts
40837 *
40838 * NPI_DMA_LOWP_COUNTS = NPI's Low Priority DMA Counts
40839 *
40840 * Values for determing the number of instructions for Low Priority DMA in the NPI.
40841 */
40842typedef union
40843{
40844    uint64_t u64;
40845    struct cvmx_npi_dma_lowp_counts_s
40846    {
40847#if __BYTE_ORDER == __BIG_ENDIAN
40848        uint64_t reserved_39_63          : 25;
40849        uint64_t fcnt                    : 7;       /**< Number of words in the Instruction FIFO. */
40850        uint64_t dbell                   : 32;      /**< Number of available words of Instructions to read. */
40851#else
40852        uint64_t dbell                   : 32;
40853        uint64_t fcnt                    : 7;
40854        uint64_t reserved_39_63          : 25;
40855#endif
40856    } s;
40857    struct cvmx_npi_dma_lowp_counts_s    cn30xx;
40858    struct cvmx_npi_dma_lowp_counts_s    cn31xx;
40859    struct cvmx_npi_dma_lowp_counts_s    cn38xx;
40860    struct cvmx_npi_dma_lowp_counts_s    cn38xxp2;
40861    struct cvmx_npi_dma_lowp_counts_s    cn50xx;
40862    struct cvmx_npi_dma_lowp_counts_s    cn58xx;
40863    struct cvmx_npi_dma_lowp_counts_s    cn58xxp1;
40864} cvmx_npi_dma_lowp_counts_t;
40865
40866
40867/**
40868 * cvmx_npi_dma_lowp_naddr
40869 *
40870 * NPI_DMA_LOWP_NADDR = NPI's Low Priority DMA Next Ichunk Address
40871 *
40872 * Place NPI will read the next Ichunk data from. This is valid when state is 0
40873 */
40874typedef union
40875{
40876    uint64_t u64;
40877    struct cvmx_npi_dma_lowp_naddr_s
40878    {
40879#if __BYTE_ORDER == __BIG_ENDIAN
40880        uint64_t reserved_40_63          : 24;
40881        uint64_t state                   : 4;       /**< The DMA instruction engine state vector.
40882                                                         Typical value is 0 (IDLE). */
40883        uint64_t addr                    : 36;      /**< The next L2C address to read DMA instructions
40884                                                         from for the Low Priority DMA engine. */
40885#else
40886        uint64_t addr                    : 36;
40887        uint64_t state                   : 4;
40888        uint64_t reserved_40_63          : 24;
40889#endif
40890    } s;
40891    struct cvmx_npi_dma_lowp_naddr_s     cn30xx;
40892    struct cvmx_npi_dma_lowp_naddr_s     cn31xx;
40893    struct cvmx_npi_dma_lowp_naddr_s     cn38xx;
40894    struct cvmx_npi_dma_lowp_naddr_s     cn38xxp2;
40895    struct cvmx_npi_dma_lowp_naddr_s     cn50xx;
40896    struct cvmx_npi_dma_lowp_naddr_s     cn58xx;
40897    struct cvmx_npi_dma_lowp_naddr_s     cn58xxp1;
40898} cvmx_npi_dma_lowp_naddr_t;
40899
40900
40901/**
40902 * cvmx_npi_highp_dbell
40903 *
40904 * NPI_HIGHP_DBELL = High Priority Door Bell
40905 *
40906 * The door bell register for the high priority DMA queue.
40907 */
40908typedef union
40909{
40910    uint64_t u64;
40911    struct cvmx_npi_highp_dbell_s
40912    {
40913#if __BYTE_ORDER == __BIG_ENDIAN
40914        uint64_t reserved_16_63          : 48;
40915        uint64_t dbell                   : 16;      /**< The value written to this register is added to the
40916                                                         number of 8byte words to be read and processes for
40917                                                         the high priority dma queue. */
40918#else
40919        uint64_t dbell                   : 16;
40920        uint64_t reserved_16_63          : 48;
40921#endif
40922    } s;
40923    struct cvmx_npi_highp_dbell_s        cn30xx;
40924    struct cvmx_npi_highp_dbell_s        cn31xx;
40925    struct cvmx_npi_highp_dbell_s        cn38xx;
40926    struct cvmx_npi_highp_dbell_s        cn38xxp2;
40927    struct cvmx_npi_highp_dbell_s        cn50xx;
40928    struct cvmx_npi_highp_dbell_s        cn58xx;
40929    struct cvmx_npi_highp_dbell_s        cn58xxp1;
40930} cvmx_npi_highp_dbell_t;
40931
40932
40933/**
40934 * cvmx_npi_highp_ibuff_saddr
40935 *
40936 * NPI_HIGHP_IBUFF_SADDR = DMA High Priority Instruction Buffer Starting Address
40937 *
40938 * The address to start reading Instructions from for HIGHP.
40939 */
40940typedef union
40941{
40942    uint64_t u64;
40943    struct cvmx_npi_highp_ibuff_saddr_s
40944    {
40945#if __BYTE_ORDER == __BIG_ENDIAN
40946        uint64_t reserved_36_63          : 28;
40947        uint64_t saddr                   : 36;      /**< The starting address to read the first instruction. */
40948#else
40949        uint64_t saddr                   : 36;
40950        uint64_t reserved_36_63          : 28;
40951#endif
40952    } s;
40953    struct cvmx_npi_highp_ibuff_saddr_s  cn30xx;
40954    struct cvmx_npi_highp_ibuff_saddr_s  cn31xx;
40955    struct cvmx_npi_highp_ibuff_saddr_s  cn38xx;
40956    struct cvmx_npi_highp_ibuff_saddr_s  cn38xxp2;
40957    struct cvmx_npi_highp_ibuff_saddr_s  cn50xx;
40958    struct cvmx_npi_highp_ibuff_saddr_s  cn58xx;
40959    struct cvmx_npi_highp_ibuff_saddr_s  cn58xxp1;
40960} cvmx_npi_highp_ibuff_saddr_t;
40961
40962
40963/**
40964 * cvmx_npi_input_control
40965 *
40966 * NPI_INPUT_CONTROL = NPI's Input Control Register
40967 *
40968 * Control for reads for gather list and instructions.
40969 */
40970typedef union
40971{
40972    uint64_t u64;
40973    struct cvmx_npi_input_control_s
40974    {
40975#if __BYTE_ORDER == __BIG_ENDIAN
40976        uint64_t reserved_23_63          : 41;
40977        uint64_t pkt_rr                  : 1;       /**< When set '1' the input packet selection will be
40978                                                         made with a Round Robin arbitration. When '0'
40979                                                         the input packet port is fixed in priority,
40980                                                         where the lower port number has higher priority.
40981                                                         PASS3 Field */
40982        uint64_t pbp_dhi                 : 13;      /**< Field when in [PBP] is set to be used in
40983                                                         calculating a DPTR. */
40984        uint64_t d_nsr                   : 1;       /**< Enables '1' NoSnoop for reading of
40985                                                         gather data. */
40986        uint64_t d_esr                   : 2;       /**< The Endian-Swap-Mode for reading of
40987                                                         gather data. */
40988        uint64_t d_ror                   : 1;       /**< Enables '1' Relaxed Ordering for reading of
40989                                                         gather data. */
40990        uint64_t use_csr                 : 1;       /**< When set '1' the csr value will be used for
40991                                                         ROR, ESR, and NSR. When clear '0' the value in
40992                                                         DPTR will be used. In turn the bits not used for
40993                                                         ROR, ESR, and NSR, will be used for bits [63:60]
40994                                                         of the address used to fetch packet data. */
40995        uint64_t nsr                     : 1;       /**< Enables '1' NoSnoop for reading of
40996                                                         gather list and gather instruction. */
40997        uint64_t esr                     : 2;       /**< The Endian-Swap-Mode for reading of
40998                                                         gather list and gather instruction. */
40999        uint64_t ror                     : 1;       /**< Enables '1' Relaxed Ordering for reading of
41000                                                         gather list and gather instruction. */
41001#else
41002        uint64_t ror                     : 1;
41003        uint64_t esr                     : 2;
41004        uint64_t nsr                     : 1;
41005        uint64_t use_csr                 : 1;
41006        uint64_t d_ror                   : 1;
41007        uint64_t d_esr                   : 2;
41008        uint64_t d_nsr                   : 1;
41009        uint64_t pbp_dhi                 : 13;
41010        uint64_t pkt_rr                  : 1;
41011        uint64_t reserved_23_63          : 41;
41012#endif
41013    } s;
41014    struct cvmx_npi_input_control_cn30xx
41015    {
41016#if __BYTE_ORDER == __BIG_ENDIAN
41017        uint64_t reserved_22_63          : 42;
41018        uint64_t pbp_dhi                 : 13;      /**< Field when in [PBP] is set to be used in
41019                                                         calculating a DPTR. */
41020        uint64_t d_nsr                   : 1;       /**< Enables '1' NoSnoop for reading of
41021                                                         gather data. */
41022        uint64_t d_esr                   : 2;       /**< The Endian-Swap-Mode for reading of
41023                                                         gather data. */
41024        uint64_t d_ror                   : 1;       /**< Enables '1' Relaxed Ordering for reading of
41025                                                         gather data. */
41026        uint64_t use_csr                 : 1;       /**< When set '1' the csr value will be used for
41027                                                         ROR, ESR, and NSR. When clear '0' the value in
41028                                                         DPTR will be used. In turn the bits not used for
41029                                                         ROR, ESR, and NSR, will be used for bits [63:60]
41030                                                         of the address used to fetch packet data. */
41031        uint64_t nsr                     : 1;       /**< Enables '1' NoSnoop for reading of
41032                                                         gather list and gather instruction. */
41033        uint64_t esr                     : 2;       /**< The Endian-Swap-Mode for reading of
41034                                                         gather list and gather instruction. */
41035        uint64_t ror                     : 1;       /**< Enables '1' Relaxed Ordering for reading of
41036                                                         gather list and gather instruction. */
41037#else
41038        uint64_t ror                     : 1;
41039        uint64_t esr                     : 2;
41040        uint64_t nsr                     : 1;
41041        uint64_t use_csr                 : 1;
41042        uint64_t d_ror                   : 1;
41043        uint64_t d_esr                   : 2;
41044        uint64_t d_nsr                   : 1;
41045        uint64_t pbp_dhi                 : 13;
41046        uint64_t reserved_22_63          : 42;
41047#endif
41048    } cn30xx;
41049    struct cvmx_npi_input_control_cn30xx cn31xx;
41050    struct cvmx_npi_input_control_s      cn38xx;
41051    struct cvmx_npi_input_control_cn30xx cn38xxp2;
41052    struct cvmx_npi_input_control_s      cn50xx;
41053    struct cvmx_npi_input_control_s      cn58xx;
41054    struct cvmx_npi_input_control_s      cn58xxp1;
41055} cvmx_npi_input_control_t;
41056
41057
41058/**
41059 * cvmx_npi_int_enb
41060 *
41061 * NPI_INTERRUPT_ENB = NPI's Interrupt Enable Register
41062 *
41063 * Used to enable the various interrupting conditions of NPI
41064 */
41065typedef union
41066{
41067    uint64_t u64;
41068    struct cvmx_npi_int_enb_s
41069    {
41070#if __BYTE_ORDER == __BIG_ENDIAN
41071        uint64_t reserved_62_63          : 2;
41072        uint64_t q1_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q1_A_F] to generate an
41073                                                         interrupt. */
41074        uint64_t q1_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q1_S_E] to generate an
41075                                                         interrupt. */
41076        uint64_t pdf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_F] to generate an
41077                                                         interrupt. */
41078        uint64_t pdf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_E] to generate an
41079                                                         interrupt. */
41080        uint64_t pcf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_F] to generate an
41081                                                         interrupt. */
41082        uint64_t pcf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_E] to generate an
41083                                                         interrupt. */
41084        uint64_t rdx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RDX_S_E] to generate an
41085                                                         interrupt. */
41086        uint64_t rwx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RWX_S_E] to generate an
41087                                                         interrupt. */
41088        uint64_t pnc_a_f                 : 1;       /**< Enables NPI_INT_SUM[PNC_A_F] to generate an
41089                                                         interrupt. */
41090        uint64_t pnc_s_e                 : 1;       /**< Enables NPI_INT_SUM[PNC_S_E] to generate an
41091                                                         interrupt. */
41092        uint64_t com_a_f                 : 1;       /**< Enables NPI_INT_SUM[COM_A_F] to generate an
41093                                                         interrupt. */
41094        uint64_t com_s_e                 : 1;       /**< Enables NPI_INT_SUM[COM_S_E] to generate an
41095                                                         interrupt. */
41096        uint64_t q3_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q3_A_F] to generate an
41097                                                         interrupt. */
41098        uint64_t q3_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q3_S_E] to generate an
41099                                                         interrupt. */
41100        uint64_t q2_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q2_A_F] to generate an
41101                                                         interrupt. */
41102        uint64_t q2_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q2_S_E] to generate an
41103                                                         interrupt. */
41104        uint64_t pcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[PCR_A_F] to generate an
41105                                                         interrupt. */
41106        uint64_t pcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[PCR_S_E] to generate an
41107                                                         interrupt. */
41108        uint64_t fcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[FCR_A_F] to generate an
41109                                                         interrupt. */
41110        uint64_t fcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[FCR_S_E] to generate an
41111                                                         interrupt. */
41112        uint64_t iobdma                  : 1;       /**< Enables NPI_INT_SUM[IOBDMA] to generate an
41113                                                         interrupt. */
41114        uint64_t p_dperr                 : 1;       /**< Enables NPI_INT_SUM[P_DPERR] to generate an
41115                                                         interrupt. */
41116        uint64_t win_rto                 : 1;       /**< Enables NPI_INT_SUM[WIN_RTO] to generate an
41117                                                         interrupt. */
41118        uint64_t i3_pperr                : 1;       /**< Enables NPI_INT_SUM[I3_PPERR] to generate an
41119                                                         interrupt. */
41120        uint64_t i2_pperr                : 1;       /**< Enables NPI_INT_SUM[I2_PPERR] to generate an
41121                                                         interrupt. */
41122        uint64_t i1_pperr                : 1;       /**< Enables NPI_INT_SUM[I1_PPERR] to generate an
41123                                                         interrupt. */
41124        uint64_t i0_pperr                : 1;       /**< Enables NPI_INT_SUM[I0_PPERR] to generate an
41125                                                         interrupt. */
41126        uint64_t p3_ptout                : 1;       /**< Enables NPI_INT_SUM[P3_PTOUT] to generate an
41127                                                         interrupt. */
41128        uint64_t p2_ptout                : 1;       /**< Enables NPI_INT_SUM[P2_PTOUT] to generate an
41129                                                         interrupt. */
41130        uint64_t p1_ptout                : 1;       /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an
41131                                                         interrupt. */
41132        uint64_t p0_ptout                : 1;       /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an
41133                                                         interrupt. */
41134        uint64_t p3_pperr                : 1;       /**< Enables NPI_INT_SUM[P3_PPERR] to generate an
41135                                                         interrupt. */
41136        uint64_t p2_pperr                : 1;       /**< Enables NPI_INT_SUM[P2_PPERR] to generate an
41137                                                         interrupt. */
41138        uint64_t p1_pperr                : 1;       /**< Enables NPI_INT_SUM[P1_PPERR] to generate an
41139                                                         interrupt. */
41140        uint64_t p0_pperr                : 1;       /**< Enables NPI_INT_SUM[P0_PPERR] to generate an
41141                                                         interrupt. */
41142        uint64_t g3_rtout                : 1;       /**< Enables NPI_INT_SUM[G3_RTOUT] to generate an
41143                                                         interrupt. */
41144        uint64_t g2_rtout                : 1;       /**< Enables NPI_INT_SUM[G2_RTOUT] to generate an
41145                                                         interrupt. */
41146        uint64_t g1_rtout                : 1;       /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an
41147                                                         interrupt. */
41148        uint64_t g0_rtout                : 1;       /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an
41149                                                         interrupt. */
41150        uint64_t p3_perr                 : 1;       /**< Enables NPI_INT_SUM[P3_PERR] to generate an
41151                                                         interrupt. */
41152        uint64_t p2_perr                 : 1;       /**< Enables NPI_INT_SUM[P2_PERR] to generate an
41153                                                         interrupt. */
41154        uint64_t p1_perr                 : 1;       /**< Enables NPI_INT_SUM[P1_PERR] to generate an
41155                                                         interrupt. */
41156        uint64_t p0_perr                 : 1;       /**< Enables NPI_INT_SUM[P0_PERR] to generate an
41157                                                         interrupt. */
41158        uint64_t p3_rtout                : 1;       /**< Enables NPI_INT_SUM[P3_RTOUT] to generate an
41159                                                         interrupt. */
41160        uint64_t p2_rtout                : 1;       /**< Enables NPI_INT_SUM[P2_RTOUT] to generate an
41161                                                         interrupt. */
41162        uint64_t p1_rtout                : 1;       /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an
41163                                                         interrupt. */
41164        uint64_t p0_rtout                : 1;       /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an
41165                                                         interrupt. */
41166        uint64_t i3_overf                : 1;       /**< Enables NPI_INT_SUM[I3_OVERF] to generate an
41167                                                         interrupt. */
41168        uint64_t i2_overf                : 1;       /**< Enables NPI_INT_SUM[I2_OVERF] to generate an
41169                                                         interrupt. */
41170        uint64_t i1_overf                : 1;       /**< Enables NPI_INT_SUM[I1_OVERF] to generate an
41171                                                         interrupt. */
41172        uint64_t i0_overf                : 1;       /**< Enables NPI_INT_SUM[I0_OVERF] to generate an
41173                                                         interrupt. */
41174        uint64_t i3_rtout                : 1;       /**< Enables NPI_INT_SUM[I3_RTOUT] to generate an
41175                                                         interrupt. */
41176        uint64_t i2_rtout                : 1;       /**< Enables NPI_INT_SUM[I2_RTOUT] to generate an
41177                                                         interrupt. */
41178        uint64_t i1_rtout                : 1;       /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an
41179                                                         interrupt. */
41180        uint64_t i0_rtout                : 1;       /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an
41181                                                         interrupt. */
41182        uint64_t po3_2sml                : 1;       /**< Enables NPI_INT_SUM[PO3_2SML] to generate an
41183                                                         interrupt. */
41184        uint64_t po2_2sml                : 1;       /**< Enables NPI_INT_SUM[PO2_2SML] to generate an
41185                                                         interrupt. */
41186        uint64_t po1_2sml                : 1;       /**< Enables NPI_INT_SUM[PO1_2SML] to generate an
41187                                                         interrupt. */
41188        uint64_t po0_2sml                : 1;       /**< Enables NPI_INT_SUM[PO0_2SML] to generate an
41189                                                         interrupt. */
41190        uint64_t pci_rsl                 : 1;       /**< Enables NPI_INT_SUM[PCI_RSL] to generate an
41191                                                         interrupt. */
41192        uint64_t rml_wto                 : 1;       /**< Enables NPI_INT_SUM[RML_WTO] to generate an
41193                                                         interrupt. */
41194        uint64_t rml_rto                 : 1;       /**< Enables NPI_INT_SUM[RML_RTO] to generate an
41195                                                         interrupt. */
41196#else
41197        uint64_t rml_rto                 : 1;
41198        uint64_t rml_wto                 : 1;
41199        uint64_t pci_rsl                 : 1;
41200        uint64_t po0_2sml                : 1;
41201        uint64_t po1_2sml                : 1;
41202        uint64_t po2_2sml                : 1;
41203        uint64_t po3_2sml                : 1;
41204        uint64_t i0_rtout                : 1;
41205        uint64_t i1_rtout                : 1;
41206        uint64_t i2_rtout                : 1;
41207        uint64_t i3_rtout                : 1;
41208        uint64_t i0_overf                : 1;
41209        uint64_t i1_overf                : 1;
41210        uint64_t i2_overf                : 1;
41211        uint64_t i3_overf                : 1;
41212        uint64_t p0_rtout                : 1;
41213        uint64_t p1_rtout                : 1;
41214        uint64_t p2_rtout                : 1;
41215        uint64_t p3_rtout                : 1;
41216        uint64_t p0_perr                 : 1;
41217        uint64_t p1_perr                 : 1;
41218        uint64_t p2_perr                 : 1;
41219        uint64_t p3_perr                 : 1;
41220        uint64_t g0_rtout                : 1;
41221        uint64_t g1_rtout                : 1;
41222        uint64_t g2_rtout                : 1;
41223        uint64_t g3_rtout                : 1;
41224        uint64_t p0_pperr                : 1;
41225        uint64_t p1_pperr                : 1;
41226        uint64_t p2_pperr                : 1;
41227        uint64_t p3_pperr                : 1;
41228        uint64_t p0_ptout                : 1;
41229        uint64_t p1_ptout                : 1;
41230        uint64_t p2_ptout                : 1;
41231        uint64_t p3_ptout                : 1;
41232        uint64_t i0_pperr                : 1;
41233        uint64_t i1_pperr                : 1;
41234        uint64_t i2_pperr                : 1;
41235        uint64_t i3_pperr                : 1;
41236        uint64_t win_rto                 : 1;
41237        uint64_t p_dperr                 : 1;
41238        uint64_t iobdma                  : 1;
41239        uint64_t fcr_s_e                 : 1;
41240        uint64_t fcr_a_f                 : 1;
41241        uint64_t pcr_s_e                 : 1;
41242        uint64_t pcr_a_f                 : 1;
41243        uint64_t q2_s_e                  : 1;
41244        uint64_t q2_a_f                  : 1;
41245        uint64_t q3_s_e                  : 1;
41246        uint64_t q3_a_f                  : 1;
41247        uint64_t com_s_e                 : 1;
41248        uint64_t com_a_f                 : 1;
41249        uint64_t pnc_s_e                 : 1;
41250        uint64_t pnc_a_f                 : 1;
41251        uint64_t rwx_s_e                 : 1;
41252        uint64_t rdx_s_e                 : 1;
41253        uint64_t pcf_p_e                 : 1;
41254        uint64_t pcf_p_f                 : 1;
41255        uint64_t pdf_p_e                 : 1;
41256        uint64_t pdf_p_f                 : 1;
41257        uint64_t q1_s_e                  : 1;
41258        uint64_t q1_a_f                  : 1;
41259        uint64_t reserved_62_63          : 2;
41260#endif
41261    } s;
41262    struct cvmx_npi_int_enb_cn30xx
41263    {
41264#if __BYTE_ORDER == __BIG_ENDIAN
41265        uint64_t reserved_62_63          : 2;
41266        uint64_t q1_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q1_A_F] to generate an
41267                                                         interrupt. */
41268        uint64_t q1_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q1_S_E] to generate an
41269                                                         interrupt. */
41270        uint64_t pdf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_F] to generate an
41271                                                         interrupt. */
41272        uint64_t pdf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_E] to generate an
41273                                                         interrupt. */
41274        uint64_t pcf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_F] to generate an
41275                                                         interrupt. */
41276        uint64_t pcf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_E] to generate an
41277                                                         interrupt. */
41278        uint64_t rdx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RDX_S_E] to generate an
41279                                                         interrupt. */
41280        uint64_t rwx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RWX_S_E] to generate an
41281                                                         interrupt. */
41282        uint64_t pnc_a_f                 : 1;       /**< Enables NPI_INT_SUM[PNC_A_F] to generate an
41283                                                         interrupt. */
41284        uint64_t pnc_s_e                 : 1;       /**< Enables NPI_INT_SUM[PNC_S_E] to generate an
41285                                                         interrupt. */
41286        uint64_t com_a_f                 : 1;       /**< Enables NPI_INT_SUM[COM_A_F] to generate an
41287                                                         interrupt. */
41288        uint64_t com_s_e                 : 1;       /**< Enables NPI_INT_SUM[COM_S_E] to generate an
41289                                                         interrupt. */
41290        uint64_t q3_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q3_A_F] to generate an
41291                                                         interrupt. */
41292        uint64_t q3_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q3_S_E] to generate an
41293                                                         interrupt. */
41294        uint64_t q2_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q2_A_F] to generate an
41295                                                         interrupt. */
41296        uint64_t q2_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q2_S_E] to generate an
41297                                                         interrupt. */
41298        uint64_t pcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[PCR_A_F] to generate an
41299                                                         interrupt. */
41300        uint64_t pcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[PCR_S_E] to generate an
41301                                                         interrupt. */
41302        uint64_t fcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[FCR_A_F] to generate an
41303                                                         interrupt. */
41304        uint64_t fcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[FCR_S_E] to generate an
41305                                                         interrupt. */
41306        uint64_t iobdma                  : 1;       /**< Enables NPI_INT_SUM[IOBDMA] to generate an
41307                                                         interrupt. */
41308        uint64_t p_dperr                 : 1;       /**< Enables NPI_INT_SUM[P_DPERR] to generate an
41309                                                         interrupt. */
41310        uint64_t win_rto                 : 1;       /**< Enables NPI_INT_SUM[WIN_RTO] to generate an
41311                                                         interrupt. */
41312        uint64_t reserved_36_38          : 3;
41313        uint64_t i0_pperr                : 1;       /**< Enables NPI_INT_SUM[I0_PPERR] to generate an
41314                                                         interrupt. */
41315        uint64_t reserved_32_34          : 3;
41316        uint64_t p0_ptout                : 1;       /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an
41317                                                         interrupt. */
41318        uint64_t reserved_28_30          : 3;
41319        uint64_t p0_pperr                : 1;       /**< Enables NPI_INT_SUM[P0_PPERR] to generate an
41320                                                         interrupt. */
41321        uint64_t reserved_24_26          : 3;
41322        uint64_t g0_rtout                : 1;       /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an
41323                                                         interrupt. */
41324        uint64_t reserved_20_22          : 3;
41325        uint64_t p0_perr                 : 1;       /**< Enables NPI_INT_SUM[P0_PERR] to generate an
41326                                                         interrupt. */
41327        uint64_t reserved_16_18          : 3;
41328        uint64_t p0_rtout                : 1;       /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an
41329                                                         interrupt. */
41330        uint64_t reserved_12_14          : 3;
41331        uint64_t i0_overf                : 1;       /**< Enables NPI_INT_SUM[I0_OVERF] to generate an
41332                                                         interrupt. */
41333        uint64_t reserved_8_10           : 3;
41334        uint64_t i0_rtout                : 1;       /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an
41335                                                         interrupt. */
41336        uint64_t reserved_4_6            : 3;
41337        uint64_t po0_2sml                : 1;       /**< Enables NPI_INT_SUM[PO0_2SML] to generate an
41338                                                         interrupt. */
41339        uint64_t pci_rsl                 : 1;       /**< Enables NPI_INT_SUM[PCI_RSL] to generate an
41340                                                         interrupt. */
41341        uint64_t rml_wto                 : 1;       /**< Enables NPI_INT_SUM[RML_WTO] to generate an
41342                                                         interrupt. */
41343        uint64_t rml_rto                 : 1;       /**< Enables NPI_INT_SUM[RML_RTO] to generate an
41344                                                         interrupt. */
41345#else
41346        uint64_t rml_rto                 : 1;
41347        uint64_t rml_wto                 : 1;
41348        uint64_t pci_rsl                 : 1;
41349        uint64_t po0_2sml                : 1;
41350        uint64_t reserved_4_6            : 3;
41351        uint64_t i0_rtout                : 1;
41352        uint64_t reserved_8_10           : 3;
41353        uint64_t i0_overf                : 1;
41354        uint64_t reserved_12_14          : 3;
41355        uint64_t p0_rtout                : 1;
41356        uint64_t reserved_16_18          : 3;
41357        uint64_t p0_perr                 : 1;
41358        uint64_t reserved_20_22          : 3;
41359        uint64_t g0_rtout                : 1;
41360        uint64_t reserved_24_26          : 3;
41361        uint64_t p0_pperr                : 1;
41362        uint64_t reserved_28_30          : 3;
41363        uint64_t p0_ptout                : 1;
41364        uint64_t reserved_32_34          : 3;
41365        uint64_t i0_pperr                : 1;
41366        uint64_t reserved_36_38          : 3;
41367        uint64_t win_rto                 : 1;
41368        uint64_t p_dperr                 : 1;
41369        uint64_t iobdma                  : 1;
41370        uint64_t fcr_s_e                 : 1;
41371        uint64_t fcr_a_f                 : 1;
41372        uint64_t pcr_s_e                 : 1;
41373        uint64_t pcr_a_f                 : 1;
41374        uint64_t q2_s_e                  : 1;
41375        uint64_t q2_a_f                  : 1;
41376        uint64_t q3_s_e                  : 1;
41377        uint64_t q3_a_f                  : 1;
41378        uint64_t com_s_e                 : 1;
41379        uint64_t com_a_f                 : 1;
41380        uint64_t pnc_s_e                 : 1;
41381        uint64_t pnc_a_f                 : 1;
41382        uint64_t rwx_s_e                 : 1;
41383        uint64_t rdx_s_e                 : 1;
41384        uint64_t pcf_p_e                 : 1;
41385        uint64_t pcf_p_f                 : 1;
41386        uint64_t pdf_p_e                 : 1;
41387        uint64_t pdf_p_f                 : 1;
41388        uint64_t q1_s_e                  : 1;
41389        uint64_t q1_a_f                  : 1;
41390        uint64_t reserved_62_63          : 2;
41391#endif
41392    } cn30xx;
41393    struct cvmx_npi_int_enb_cn31xx
41394    {
41395#if __BYTE_ORDER == __BIG_ENDIAN
41396        uint64_t reserved_62_63          : 2;
41397        uint64_t q1_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q1_A_F] to generate an
41398                                                         interrupt. */
41399        uint64_t q1_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q1_S_E] to generate an
41400                                                         interrupt. */
41401        uint64_t pdf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_F] to generate an
41402                                                         interrupt. */
41403        uint64_t pdf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PDF_P_E] to generate an
41404                                                         interrupt. */
41405        uint64_t pcf_p_f                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_F] to generate an
41406                                                         interrupt. */
41407        uint64_t pcf_p_e                 : 1;       /**< Enables NPI_INT_SUM[PCF_P_E] to generate an
41408                                                         interrupt. */
41409        uint64_t rdx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RDX_S_E] to generate an
41410                                                         interrupt. */
41411        uint64_t rwx_s_e                 : 1;       /**< Enables NPI_INT_SUM[RWX_S_E] to generate an
41412                                                         interrupt. */
41413        uint64_t pnc_a_f                 : 1;       /**< Enables NPI_INT_SUM[PNC_A_F] to generate an
41414                                                         interrupt. */
41415        uint64_t pnc_s_e                 : 1;       /**< Enables NPI_INT_SUM[PNC_S_E] to generate an
41416                                                         interrupt. */
41417        uint64_t com_a_f                 : 1;       /**< Enables NPI_INT_SUM[COM_A_F] to generate an
41418                                                         interrupt. */
41419        uint64_t com_s_e                 : 1;       /**< Enables NPI_INT_SUM[COM_S_E] to generate an
41420                                                         interrupt. */
41421        uint64_t q3_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q3_A_F] to generate an
41422                                                         interrupt. */
41423        uint64_t q3_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q3_S_E] to generate an
41424                                                         interrupt. */
41425        uint64_t q2_a_f                  : 1;       /**< Enables NPI_INT_SUM[Q2_A_F] to generate an
41426                                                         interrupt. */
41427        uint64_t q2_s_e                  : 1;       /**< Enables NPI_INT_SUM[Q2_S_E] to generate an
41428                                                         interrupt. */
41429        uint64_t pcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[PCR_A_F] to generate an
41430                                                         interrupt. */
41431        uint64_t pcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[PCR_S_E] to generate an
41432                                                         interrupt. */
41433        uint64_t fcr_a_f                 : 1;       /**< Enables NPI_INT_SUM[FCR_A_F] to generate an
41434                                                         interrupt. */
41435        uint64_t fcr_s_e                 : 1;       /**< Enables NPI_INT_SUM[FCR_S_E] to generate an
41436                                                         interrupt. */
41437        uint64_t iobdma                  : 1;       /**< Enables NPI_INT_SUM[IOBDMA] to generate an
41438                                                         interrupt. */
41439        uint64_t p_dperr                 : 1;       /**< Enables NPI_INT_SUM[P_DPERR] to generate an
41440                                                         interrupt. */
41441        uint64_t win_rto                 : 1;       /**< Enables NPI_INT_SUM[WIN_RTO] to generate an
41442                                                         interrupt. */
41443        uint64_t reserved_37_38          : 2;
41444        uint64_t i1_pperr                : 1;       /**< Enables NPI_INT_SUM[I1_PPERR] to generate an
41445                                                         interrupt. */
41446        uint64_t i0_pperr                : 1;       /**< Enables NPI_INT_SUM[I0_PPERR] to generate an
41447                                                         interrupt. */
41448        uint64_t reserved_33_34          : 2;
41449        uint64_t p1_ptout                : 1;       /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an
41450                                                         interrupt. */
41451        uint64_t p0_ptout                : 1;       /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an
41452                                                         interrupt. */
41453        uint64_t reserved_29_30          : 2;
41454        uint64_t p1_pperr                : 1;       /**< Enables NPI_INT_SUM[P1_PPERR] to generate an
41455                                                         interrupt. */
41456        uint64_t p0_pperr                : 1;       /**< Enables NPI_INT_SUM[P0_PPERR] to generate an
41457                                                         interrupt. */
41458        uint64_t reserved_25_26          : 2;
41459        uint64_t g1_rtout                : 1;       /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an
41460                                                         interrupt. */
41461        uint64_t g0_rtout                : 1;       /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an
41462                                                         interrupt. */
41463        uint64_t reserved_21_22          : 2;
41464        uint64_t p1_perr                 : 1;       /**< Enables NPI_INT_SUM[P1_PERR] to generate an
41465                                                         interrupt. */
41466        uint64_t p0_perr                 : 1;       /**< Enables NPI_INT_SUM[P0_PERR] to generate an
41467                                                         interrupt. */
41468        uint64_t reserved_17_18          : 2;
41469        uint64_t p1_rtout                : 1;       /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an
41470                                                         interrupt. */
41471        uint64_t p0_rtout                : 1;       /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an
41472                                                         interrupt. */
41473        uint64_t reserved_13_14          : 2;
41474        uint64_t i1_overf                : 1;       /**< Enables NPI_INT_SUM[I1_OVERF] to generate an
41475                                                         interrupt. */
41476        uint64_t i0_overf                : 1;       /**< Enables NPI_INT_SUM[I0_OVERF] to generate an
41477                                                         interrupt. */
41478        uint64_t reserved_9_10           : 2;
41479        uint64_t i1_rtout                : 1;       /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an
41480                                                         interrupt. */
41481        uint64_t i0_rtout                : 1;       /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an
41482                                                         interrupt. */
41483        uint64_t reserved_5_6            : 2;
41484        uint64_t po1_2sml                : 1;       /**< Enables NPI_INT_SUM[PO1_2SML] to generate an
41485                                                         interrupt. */
41486        uint64_t po0_2sml                : 1;       /**< Enables NPI_INT_SUM[PO0_2SML] to generate an
41487                                                         interrupt. */
41488        uint64_t pci_rsl                 : 1;       /**< Enables NPI_INT_SUM[PCI_RSL] to generate an
41489                                                         interrupt. */
41490        uint64_t rml_wto                 : 1;       /**< Enables NPI_INT_SUM[RML_WTO] to generate an
41491                                                         interrupt. */
41492        uint64_t rml_rto                 : 1;       /**< Enables NPI_INT_SUM[RML_RTO] to generate an
41493                                                         interrupt. */
41494#else
41495        uint64_t rml_rto                 : 1;
41496        uint64_t rml_wto                 : 1;
41497        uint64_t pci_rsl                 : 1;
41498        uint64_t po0_2sml                : 1;
41499        uint64_t po1_2sml                : 1;
41500        uint64_t reserved_5_6            : 2;
41501        uint64_t i0_rtout                : 1;
41502        uint64_t i1_rtout                : 1;
41503        uint64_t reserved_9_10           : 2;
41504        uint64_t i0_overf                : 1;
41505        uint64_t i1_overf                : 1;
41506        uint64_t reserved_13_14          : 2;
41507        uint64_t p0_rtout                : 1;
41508        uint64_t p1_rtout                : 1;
41509        uint64_t reserved_17_18          : 2;
41510        uint64_t p0_perr                 : 1;
41511        uint64_t p1_perr                 : 1;
41512        uint64_t reserved_21_22          : 2;
41513        uint64_t g0_rtout                : 1;
41514        uint64_t g1_rtout                : 1;
41515        uint64_t reserved_25_26          : 2;
41516        uint64_t p0_pperr                : 1;
41517        uint64_t p1_pperr                : 1;
41518        uint64_t reserved_29_30          : 2;
41519        uint64_t p0_ptout                : 1;
41520        uint64_t p1_ptout                : 1;
41521        uint64_t reserved_33_34          : 2;
41522        uint64_t i0_pperr                : 1;
41523        uint64_t i1_pperr                : 1;
41524        uint64_t reserved_37_38          : 2;
41525        uint64_t win_rto                 : 1;
41526        uint64_t p_dperr                 : 1;
41527        uint64_t iobdma                  : 1;
41528        uint64_t fcr_s_e                 : 1;
41529        uint64_t fcr_a_f                 : 1;
41530        uint64_t pcr_s_e                 : 1;
41531        uint64_t pcr_a_f                 : 1;
41532        uint64_t q2_s_e                  : 1;
41533        uint64_t q2_a_f                  : 1;
41534        uint64_t q3_s_e                  : 1;
41535        uint64_t q3_a_f                  : 1;
41536        uint64_t com_s_e                 : 1;
41537        uint64_t com_a_f                 : 1;
41538        uint64_t pnc_s_e                 : 1;
41539        uint64_t pnc_a_f                 : 1;
41540        uint64_t rwx_s_e                 : 1;
41541        uint64_t rdx_s_e                 : 1;
41542        uint64_t pcf_p_e                 : 1;
41543        uint64_t pcf_p_f                 : 1;
41544        uint64_t pdf_p_e                 : 1;
41545        uint64_t pdf_p_f                 : 1;
41546        uint64_t q1_s_e                  : 1;
41547        uint64_t q1_a_f                  : 1;
41548        uint64_t reserved_62_63          : 2;
41549#endif
41550    } cn31xx;
41551    struct cvmx_npi_int_enb_s            cn38xx;
41552    struct cvmx_npi_int_enb_cn38xxp2
41553    {
41554#if __BYTE_ORDER == __BIG_ENDIAN
41555        uint64_t reserved_42_63          : 22;
41556        uint64_t iobdma                  : 1;       /**< Enables NPI_INT_SUM[IOBDMA] to generate an
41557                                                         interrupt. */
41558        uint64_t p_dperr                 : 1;       /**< Enables NPI_INT_SUM[P_DPERR] to generate an
41559                                                         interrupt. */
41560        uint64_t win_rto                 : 1;       /**< Enables NPI_INT_SUM[WIN_RTO] to generate an
41561                                                         interrupt. */
41562        uint64_t i3_pperr                : 1;       /**< Enables NPI_INT_SUM[I3_PPERR] to generate an
41563                                                         interrupt. */
41564        uint64_t i2_pperr                : 1;       /**< Enables NPI_INT_SUM[I2_PPERR] to generate an
41565                                                         interrupt. */
41566        uint64_t i1_pperr                : 1;       /**< Enables NPI_INT_SUM[I1_PPERR] to generate an
41567                                                         interrupt. */
41568        uint64_t i0_pperr                : 1;       /**< Enables NPI_INT_SUM[I0_PPERR] to generate an
41569                                                         interrupt. */
41570        uint64_t p3_ptout                : 1;       /**< Enables NPI_INT_SUM[P3_PTOUT] to generate an
41571                                                         interrupt. */
41572        uint64_t p2_ptout                : 1;       /**< Enables NPI_INT_SUM[P2_PTOUT] to generate an
41573                                                         interrupt. */
41574        uint64_t p1_ptout                : 1;       /**< Enables NPI_INT_SUM[P1_PTOUT] to generate an
41575                                                         interrupt. */
41576        uint64_t p0_ptout                : 1;       /**< Enables NPI_INT_SUM[P0_PTOUT] to generate an
41577                                                         interrupt. */
41578        uint64_t p3_pperr                : 1;       /**< Enables NPI_INT_SUM[P3_PPERR] to generate an
41579                                                         interrupt. */
41580        uint64_t p2_pperr                : 1;       /**< Enables NPI_INT_SUM[P2_PPERR] to generate an
41581                                                         interrupt. */
41582        uint64_t p1_pperr                : 1;       /**< Enables NPI_INT_SUM[P1_PPERR] to generate an
41583                                                         interrupt. */
41584        uint64_t p0_pperr                : 1;       /**< Enables NPI_INT_SUM[P0_PPERR] to generate an
41585                                                         interrupt. */
41586        uint64_t g3_rtout                : 1;       /**< Enables NPI_INT_SUM[G3_RTOUT] to generate an
41587                                                         interrupt. */
41588        uint64_t g2_rtout                : 1;       /**< Enables NPI_INT_SUM[G2_RTOUT] to generate an
41589                                                         interrupt. */
41590        uint64_t g1_rtout                : 1;       /**< Enables NPI_INT_SUM[G1_RTOUT] to generate an
41591                                                         interrupt. */
41592        uint64_t g0_rtout                : 1;       /**< Enables NPI_INT_SUM[G0_RTOUT] to generate an
41593                                                         interrupt. */
41594        uint64_t p3_perr                 : 1;       /**< Enables NPI_INT_SUM[P3_PERR] to generate an
41595                                                         interrupt. */
41596        uint64_t p2_perr                 : 1;       /**< Enables NPI_INT_SUM[P2_PERR] to generate an
41597                                                         interrupt. */
41598        uint64_t p1_perr                 : 1;       /**< Enables NPI_INT_SUM[P1_PERR] to generate an
41599                                                         interrupt. */
41600        uint64_t p0_perr                 : 1;       /**< Enables NPI_INT_SUM[P0_PERR] to generate an
41601                                                         interrupt. */
41602        uint64_t p3_rtout                : 1;       /**< Enables NPI_INT_SUM[P3_RTOUT] to generate an
41603                                                         interrupt. */
41604        uint64_t p2_rtout                : 1;       /**< Enables NPI_INT_SUM[P2_RTOUT] to generate an
41605                                                         interrupt. */
41606        uint64_t p1_rtout                : 1;       /**< Enables NPI_INT_SUM[P1_RTOUT] to generate an
41607                                                         interrupt. */
41608        uint64_t p0_rtout                : 1;       /**< Enables NPI_INT_SUM[P0_RTOUT] to generate an
41609                                                         interrupt. */
41610        uint64_t i3_overf                : 1;       /**< Enables NPI_INT_SUM[I3_OVERF] to generate an
41611                                                         interrupt. */
41612        uint64_t i2_overf                : 1;       /**< Enables NPI_INT_SUM[I2_OVERF] to generate an
41613                                                         interrupt. */
41614        uint64_t i1_overf                : 1;       /**< Enables NPI_INT_SUM[I1_OVERF] to generate an
41615                                                         interrupt. */
41616        uint64_t i0_overf                : 1;       /**< Enables NPI_INT_SUM[I0_OVERF] to generate an
41617                                                         interrupt. */
41618        uint64_t i3_rtout                : 1;       /**< Enables NPI_INT_SUM[I3_RTOUT] to generate an
41619                                                         interrupt. */
41620        uint64_t i2_rtout                : 1;       /**< Enables NPI_INT_SUM[I2_RTOUT] to generate an
41621                                                         interrupt. */
41622        uint64_t i1_rtout                : 1;       /**< Enables NPI_INT_SUM[I1_RTOUT] to generate an
41623                                                         interrupt. */
41624        uint64_t i0_rtout                : 1;       /**< Enables NPI_INT_SUM[I0_RTOUT] to generate an
41625                                                         interrupt. */
41626        uint64_t po3_2sml                : 1;       /**< Enables NPI_INT_SUM[PO3_2SML] to generate an
41627                                                         interrupt. */
41628        uint64_t po2_2sml                : 1;       /**< Enables NPI_INT_SUM[PO2_2SML] to generate an
41629                                                         interrupt. */
41630        uint64_t po1_2sml                : 1;       /**< Enables NPI_INT_SUM[PO1_2SML] to generate an
41631                                                         interrupt. */
41632        uint64_t po0_2sml                : 1;       /**< Enables NPI_INT_SUM[PO0_2SML] to generate an
41633                                                         interrupt. */
41634        uint64_t pci_rsl                 : 1;       /**< Enables NPI_INT_SUM[PCI_RSL] to generate an
41635                                                         interrupt. */
41636        uint64_t rml_wto                 : 1;       /**< Enables NPI_INT_SUM[RML_WTO] to generate an
41637                                                         interrupt. */
41638        uint64_t rml_rto                 : 1;       /**< Enables NPI_INT_SUM[RML_RTO] to generate an
41639                                                         interrupt. */
41640#else
41641        uint64_t rml_rto                 : 1;
41642        uint64_t rml_wto                 : 1;
41643        uint64_t pci_rsl                 : 1;
41644        uint64_t po0_2sml                : 1;
41645        uint64_t po1_2sml                : 1;
41646        uint64_t po2_2sml                : 1;
41647        uint64_t po3_2sml                : 1;
41648        uint64_t i0_rtout                : 1;
41649        uint64_t i1_rtout                : 1;
41650        uint64_t i2_rtout                : 1;
41651        uint64_t i3_rtout                : 1;
41652        uint64_t i0_overf                : 1;
41653        uint64_t i1_overf                : 1;
41654        uint64_t i2_overf                : 1;
41655        uint64_t i3_overf                : 1;
41656        uint64_t p0_rtout                : 1;
41657        uint64_t p1_rtout                : 1;
41658        uint64_t p2_rtout                : 1;
41659        uint64_t p3_rtout                : 1;
41660        uint64_t p0_perr                 : 1;
41661        uint64_t p1_perr                 : 1;
41662        uint64_t p2_perr                 : 1;
41663        uint64_t p3_perr                 : 1;
41664        uint64_t g0_rtout                : 1;
41665        uint64_t g1_rtout                : 1;
41666        uint64_t g2_rtout                : 1;
41667        uint64_t g3_rtout                : 1;
41668        uint64_t p0_pperr                : 1;
41669        uint64_t p1_pperr                : 1;
41670        uint64_t p2_pperr                : 1;
41671        uint64_t p3_pperr                : 1;
41672        uint64_t p0_ptout                : 1;
41673        uint64_t p1_ptout                : 1;
41674        uint64_t p2_ptout                : 1;
41675        uint64_t p3_ptout                : 1;
41676        uint64_t i0_pperr                : 1;
41677        uint64_t i1_pperr                : 1;
41678        uint64_t i2_pperr                : 1;
41679        uint64_t i3_pperr                : 1;
41680        uint64_t win_rto                 : 1;
41681        uint64_t p_dperr                 : 1;
41682        uint64_t iobdma                  : 1;
41683        uint64_t reserved_42_63          : 22;
41684#endif
41685    } cn38xxp2;
41686    struct cvmx_npi_int_enb_cn31xx       cn50xx;
41687    struct cvmx_npi_int_enb_s            cn58xx;
41688    struct cvmx_npi_int_enb_s            cn58xxp1;
41689} cvmx_npi_int_enb_t;
41690
41691
41692/**
41693 * cvmx_npi_int_sum
41694 *
41695 * NPI_INTERRUPT_SUM = NPI Interrupt Summary Register
41696 *
41697 * Set when an interrupt condition occurs, write '1' to clear.
41698 */
41699typedef union
41700{
41701    uint64_t u64;
41702    struct cvmx_npi_int_sum_s
41703    {
41704#if __BYTE_ORDER == __BIG_ENDIAN
41705        uint64_t reserved_62_63          : 2;
41706        uint64_t q1_a_f                  : 1;       /**< Attempted to add when Queue-1 FIFO is full.
41707                                                         PASS3 Field. */
41708        uint64_t q1_s_e                  : 1;       /**< Attempted to subtract when Queue-1 FIFO is empty.
41709                                                         PASS3 Field. */
41710        uint64_t pdf_p_f                 : 1;       /**< Attempted to push a full PCN-DATA-FIFO.
41711                                                         PASS3 Field. */
41712        uint64_t pdf_p_e                 : 1;       /**< Attempted to pop an empty PCN-DATA-FIFO.
41713                                                         PASS3 Field. */
41714        uint64_t pcf_p_f                 : 1;       /**< Attempted to push a full PCN-CNT-FIFO.
41715                                                         PASS3 Field. */
41716        uint64_t pcf_p_e                 : 1;       /**< Attempted to pop an empty PCN-CNT-FIFO.
41717                                                         PASS3 Field. */
41718        uint64_t rdx_s_e                 : 1;       /**< Attempted to subtract when DPI-XFR-Wait count is 0.
41719                                                         PASS3 Field. */
41720        uint64_t rwx_s_e                 : 1;       /**< Attempted to subtract when RDN-XFR-Wait count is 0.
41721                                                         PASS3 Field. */
41722        uint64_t pnc_a_f                 : 1;       /**< Attempted to add when PNI-NPI Credits are max.
41723                                                         PASS3 Field. */
41724        uint64_t pnc_s_e                 : 1;       /**< Attempted to subtract when PNI-NPI Credits are 0.
41725                                                         PASS3 Field. */
41726        uint64_t com_a_f                 : 1;       /**< Attempted to add when PCN-Commit Counter is max.
41727                                                         PASS3 Field. */
41728        uint64_t com_s_e                 : 1;       /**< Attempted to subtract when PCN-Commit Counter is 0.
41729                                                         PASS3 Field. */
41730        uint64_t q3_a_f                  : 1;       /**< Attempted to add when Queue-3 FIFO is full.
41731                                                         PASS3 Field. */
41732        uint64_t q3_s_e                  : 1;       /**< Attempted to subtract when Queue-3 FIFO is empty.
41733                                                         PASS3 Field. */
41734        uint64_t q2_a_f                  : 1;       /**< Attempted to add when Queue-2 FIFO is full.
41735                                                         PASS3 Field. */
41736        uint64_t q2_s_e                  : 1;       /**< Attempted to subtract when Queue-2 FIFO is empty.
41737                                                         PASS3 Field. */
41738        uint64_t pcr_a_f                 : 1;       /**< Attempted to add when POW Credits is full.
41739                                                         PASS3 Field. */
41740        uint64_t pcr_s_e                 : 1;       /**< Attempted to subtract when POW Credits is empty.
41741                                                         PASS3 Field. */
41742        uint64_t fcr_a_f                 : 1;       /**< Attempted to add when FPA Credits is full.
41743                                                         PASS3 Field. */
41744        uint64_t fcr_s_e                 : 1;       /**< Attempted to subtract when FPA Credits is empty.
41745                                                         PASS3 Field. */
41746        uint64_t iobdma                  : 1;       /**< Requested IOBDMA read size exceeded 128 words. */
41747        uint64_t p_dperr                 : 1;       /**< If a parity error occured on data written to L2C
41748                                                         from the PCI this bit may be set. */
41749        uint64_t win_rto                 : 1;       /**< Windowed Load Timed Out. */
41750        uint64_t i3_pperr                : 1;       /**< If a parity error occured on the port's instruction
41751                                                         this bit may be set. */
41752        uint64_t i2_pperr                : 1;       /**< If a parity error occured on the port's instruction
41753                                                         this bit may be set. */
41754        uint64_t i1_pperr                : 1;       /**< If a parity error occured on the port's instruction
41755                                                         this bit may be set. */
41756        uint64_t i0_pperr                : 1;       /**< If a parity error occured on the port's instruction
41757                                                         this bit may be set. */
41758        uint64_t p3_ptout                : 1;       /**< Port-3 output had a read timeout on a DATA/INFO
41759                                                         pair. */
41760        uint64_t p2_ptout                : 1;       /**< Port-2 output had a read timeout on a DATA/INFO
41761                                                         pair. */
41762        uint64_t p1_ptout                : 1;       /**< Port-1 output had a read timeout on a DATA/INFO
41763                                                         pair. */
41764        uint64_t p0_ptout                : 1;       /**< Port-0 output had a read timeout on a DATA/INFO
41765                                                         pair. */
41766        uint64_t p3_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
41767                                                         pointer-pair, this bit may be set. */
41768        uint64_t p2_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
41769                                                         pointer-pair, this bit may be set. */
41770        uint64_t p1_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
41771                                                         pointer-pair, this bit may be set. */
41772        uint64_t p0_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
41773                                                         pointer-pair, this bit may be set. */
41774        uint64_t g3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
41775                                                         read a gather list. */
41776        uint64_t g2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
41777                                                         read a gather list. */
41778        uint64_t g1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
41779                                                         read a gather list. */
41780        uint64_t g0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41781                                                         read a gather list. */
41782        uint64_t p3_perr                 : 1;       /**< If a parity error occured on the port's packet
41783                                                         data this bit may be set. */
41784        uint64_t p2_perr                 : 1;       /**< If a parity error occured on the port's packet
41785                                                         data this bit may be set. */
41786        uint64_t p1_perr                 : 1;       /**< If a parity error occured on the port's packet
41787                                                         data this bit may be set. */
41788        uint64_t p0_perr                 : 1;       /**< If a parity error occured on the port's packet
41789                                                         data this bit may be set. */
41790        uint64_t p3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
41791                                                         read packet data. */
41792        uint64_t p2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
41793                                                         read packet data. */
41794        uint64_t p1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
41795                                                         read packet data. */
41796        uint64_t p0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41797                                                         read packet data. */
41798        uint64_t i3_overf                : 1;       /**< Port-3 had a doorbell overflow. Bit[31] of the
41799                                                         doorbell count was set. */
41800        uint64_t i2_overf                : 1;       /**< Port-2 had a doorbell overflow. Bit[31] of the
41801                                                         doorbell count was set. */
41802        uint64_t i1_overf                : 1;       /**< Port-1 had a doorbell overflow. Bit[31] of the
41803                                                         doorbell count was set. */
41804        uint64_t i0_overf                : 1;       /**< Port-0 had a doorbell overflow. Bit[31] of the
41805                                                         doorbell count was set. */
41806        uint64_t i3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
41807                                                         read instructions. */
41808        uint64_t i2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
41809                                                         read instructions. */
41810        uint64_t i1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
41811                                                         read instructions. */
41812        uint64_t i0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41813                                                         read instructions. */
41814        uint64_t po3_2sml                : 1;       /**< The packet being sent out on Port3 is smaller
41815                                                         than the NPI_BUFF_SIZE_OUTPUT3[ISIZE] field. */
41816        uint64_t po2_2sml                : 1;       /**< The packet being sent out on Port2 is smaller
41817                                                         than the NPI_BUFF_SIZE_OUTPUT2[ISIZE] field. */
41818        uint64_t po1_2sml                : 1;       /**< The packet being sent out on Port1 is smaller
41819                                                         than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */
41820        uint64_t po0_2sml                : 1;       /**< The packet being sent out on Port0 is smaller
41821                                                         than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */
41822        uint64_t pci_rsl                 : 1;       /**< This '1' when a bit in PCI_INT_SUM2 is SET and the
41823                                                         corresponding bit in the PCI_INT_ENB2 is SET. */
41824        uint64_t rml_wto                 : 1;       /**< Set '1' when the RML does not receive a commit
41825                                                         back from a RSL after sending a write command to
41826                                                         a RSL. */
41827        uint64_t rml_rto                 : 1;       /**< Set '1' when the RML does not receive read data
41828                                                         back from a RSL after sending a read command to
41829                                                         a RSL. */
41830#else
41831        uint64_t rml_rto                 : 1;
41832        uint64_t rml_wto                 : 1;
41833        uint64_t pci_rsl                 : 1;
41834        uint64_t po0_2sml                : 1;
41835        uint64_t po1_2sml                : 1;
41836        uint64_t po2_2sml                : 1;
41837        uint64_t po3_2sml                : 1;
41838        uint64_t i0_rtout                : 1;
41839        uint64_t i1_rtout                : 1;
41840        uint64_t i2_rtout                : 1;
41841        uint64_t i3_rtout                : 1;
41842        uint64_t i0_overf                : 1;
41843        uint64_t i1_overf                : 1;
41844        uint64_t i2_overf                : 1;
41845        uint64_t i3_overf                : 1;
41846        uint64_t p0_rtout                : 1;
41847        uint64_t p1_rtout                : 1;
41848        uint64_t p2_rtout                : 1;
41849        uint64_t p3_rtout                : 1;
41850        uint64_t p0_perr                 : 1;
41851        uint64_t p1_perr                 : 1;
41852        uint64_t p2_perr                 : 1;
41853        uint64_t p3_perr                 : 1;
41854        uint64_t g0_rtout                : 1;
41855        uint64_t g1_rtout                : 1;
41856        uint64_t g2_rtout                : 1;
41857        uint64_t g3_rtout                : 1;
41858        uint64_t p0_pperr                : 1;
41859        uint64_t p1_pperr                : 1;
41860        uint64_t p2_pperr                : 1;
41861        uint64_t p3_pperr                : 1;
41862        uint64_t p0_ptout                : 1;
41863        uint64_t p1_ptout                : 1;
41864        uint64_t p2_ptout                : 1;
41865        uint64_t p3_ptout                : 1;
41866        uint64_t i0_pperr                : 1;
41867        uint64_t i1_pperr                : 1;
41868        uint64_t i2_pperr                : 1;
41869        uint64_t i3_pperr                : 1;
41870        uint64_t win_rto                 : 1;
41871        uint64_t p_dperr                 : 1;
41872        uint64_t iobdma                  : 1;
41873        uint64_t fcr_s_e                 : 1;
41874        uint64_t fcr_a_f                 : 1;
41875        uint64_t pcr_s_e                 : 1;
41876        uint64_t pcr_a_f                 : 1;
41877        uint64_t q2_s_e                  : 1;
41878        uint64_t q2_a_f                  : 1;
41879        uint64_t q3_s_e                  : 1;
41880        uint64_t q3_a_f                  : 1;
41881        uint64_t com_s_e                 : 1;
41882        uint64_t com_a_f                 : 1;
41883        uint64_t pnc_s_e                 : 1;
41884        uint64_t pnc_a_f                 : 1;
41885        uint64_t rwx_s_e                 : 1;
41886        uint64_t rdx_s_e                 : 1;
41887        uint64_t pcf_p_e                 : 1;
41888        uint64_t pcf_p_f                 : 1;
41889        uint64_t pdf_p_e                 : 1;
41890        uint64_t pdf_p_f                 : 1;
41891        uint64_t q1_s_e                  : 1;
41892        uint64_t q1_a_f                  : 1;
41893        uint64_t reserved_62_63          : 2;
41894#endif
41895    } s;
41896    struct cvmx_npi_int_sum_cn30xx
41897    {
41898#if __BYTE_ORDER == __BIG_ENDIAN
41899        uint64_t reserved_62_63          : 2;
41900        uint64_t q1_a_f                  : 1;       /**< Attempted to add when Queue-1 FIFO is full. */
41901        uint64_t q1_s_e                  : 1;       /**< Attempted to subtract when Queue-1 FIFO is empty. */
41902        uint64_t pdf_p_f                 : 1;       /**< Attempted to push a full PCN-DATA-FIFO. */
41903        uint64_t pdf_p_e                 : 1;       /**< Attempted to pop an empty PCN-DATA-FIFO. */
41904        uint64_t pcf_p_f                 : 1;       /**< Attempted to push a full PCN-CNT-FIFO. */
41905        uint64_t pcf_p_e                 : 1;       /**< Attempted to pop an empty PCN-CNT-FIFO. */
41906        uint64_t rdx_s_e                 : 1;       /**< Attempted to subtract when DPI-XFR-Wait count is 0. */
41907        uint64_t rwx_s_e                 : 1;       /**< Attempted to subtract when RDN-XFR-Wait count is 0. */
41908        uint64_t pnc_a_f                 : 1;       /**< Attempted to add when PNI-NPI Credits are max. */
41909        uint64_t pnc_s_e                 : 1;       /**< Attempted to subtract when PNI-NPI Credits are 0. */
41910        uint64_t com_a_f                 : 1;       /**< Attempted to add when PCN-Commit Counter is max. */
41911        uint64_t com_s_e                 : 1;       /**< Attempted to subtract when PCN-Commit Counter is 0. */
41912        uint64_t q3_a_f                  : 1;       /**< Attempted to add when Queue-3 FIFO is full. */
41913        uint64_t q3_s_e                  : 1;       /**< Attempted to subtract when Queue-3 FIFO is empty. */
41914        uint64_t q2_a_f                  : 1;       /**< Attempted to add when Queue-2 FIFO is full. */
41915        uint64_t q2_s_e                  : 1;       /**< Attempted to subtract when Queue-2 FIFO is empty. */
41916        uint64_t pcr_a_f                 : 1;       /**< Attempted to add when POW Credits is full. */
41917        uint64_t pcr_s_e                 : 1;       /**< Attempted to subtract when POW Credits is empty. */
41918        uint64_t fcr_a_f                 : 1;       /**< Attempted to add when FPA Credits is full. */
41919        uint64_t fcr_s_e                 : 1;       /**< Attempted to subtract when FPA Credits is empty. */
41920        uint64_t iobdma                  : 1;       /**< Requested IOBDMA read size exceeded 128 words. */
41921        uint64_t p_dperr                 : 1;       /**< If a parity error occured on data written to L2C
41922                                                         from the PCI this bit may be set. */
41923        uint64_t win_rto                 : 1;       /**< Windowed Load Timed Out. */
41924        uint64_t reserved_36_38          : 3;
41925        uint64_t i0_pperr                : 1;       /**< If a parity error occured on the port's instruction
41926                                                         this bit may be set. */
41927        uint64_t reserved_32_34          : 3;
41928        uint64_t p0_ptout                : 1;       /**< Port-0 output had a read timeout on a DATA/INFO
41929                                                         pair. */
41930        uint64_t reserved_28_30          : 3;
41931        uint64_t p0_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
41932                                                         pointer-pair, this bit may be set. */
41933        uint64_t reserved_24_26          : 3;
41934        uint64_t g0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41935                                                         read a gather list. */
41936        uint64_t reserved_20_22          : 3;
41937        uint64_t p0_perr                 : 1;       /**< If a parity error occured on the port's packet
41938                                                         data this bit may be set. */
41939        uint64_t reserved_16_18          : 3;
41940        uint64_t p0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41941                                                         read packet data. */
41942        uint64_t reserved_12_14          : 3;
41943        uint64_t i0_overf                : 1;       /**< Port-0 had a doorbell overflow. Bit[31] of the
41944                                                         doorbell count was set. */
41945        uint64_t reserved_8_10           : 3;
41946        uint64_t i0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
41947                                                         read instructions. */
41948        uint64_t reserved_4_6            : 3;
41949        uint64_t po0_2sml                : 1;       /**< The packet being sent out on Port0 is smaller
41950                                                         than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */
41951        uint64_t pci_rsl                 : 1;       /**< This '1' when a bit in PCI_INT_SUM2 is SET and the
41952                                                         corresponding bit in the PCI_INT_ENB2 is SET. */
41953        uint64_t rml_wto                 : 1;       /**< Set '1' when the RML does not receive a commit
41954                                                         back from a RSL after sending a write command to
41955                                                         a RSL. */
41956        uint64_t rml_rto                 : 1;       /**< Set '1' when the RML does not receive read data
41957                                                         back from a RSL after sending a read command to
41958                                                         a RSL. */
41959#else
41960        uint64_t rml_rto                 : 1;
41961        uint64_t rml_wto                 : 1;
41962        uint64_t pci_rsl                 : 1;
41963        uint64_t po0_2sml                : 1;
41964        uint64_t reserved_4_6            : 3;
41965        uint64_t i0_rtout                : 1;
41966        uint64_t reserved_8_10           : 3;
41967        uint64_t i0_overf                : 1;
41968        uint64_t reserved_12_14          : 3;
41969        uint64_t p0_rtout                : 1;
41970        uint64_t reserved_16_18          : 3;
41971        uint64_t p0_perr                 : 1;
41972        uint64_t reserved_20_22          : 3;
41973        uint64_t g0_rtout                : 1;
41974        uint64_t reserved_24_26          : 3;
41975        uint64_t p0_pperr                : 1;
41976        uint64_t reserved_28_30          : 3;
41977        uint64_t p0_ptout                : 1;
41978        uint64_t reserved_32_34          : 3;
41979        uint64_t i0_pperr                : 1;
41980        uint64_t reserved_36_38          : 3;
41981        uint64_t win_rto                 : 1;
41982        uint64_t p_dperr                 : 1;
41983        uint64_t iobdma                  : 1;
41984        uint64_t fcr_s_e                 : 1;
41985        uint64_t fcr_a_f                 : 1;
41986        uint64_t pcr_s_e                 : 1;
41987        uint64_t pcr_a_f                 : 1;
41988        uint64_t q2_s_e                  : 1;
41989        uint64_t q2_a_f                  : 1;
41990        uint64_t q3_s_e                  : 1;
41991        uint64_t q3_a_f                  : 1;
41992        uint64_t com_s_e                 : 1;
41993        uint64_t com_a_f                 : 1;
41994        uint64_t pnc_s_e                 : 1;
41995        uint64_t pnc_a_f                 : 1;
41996        uint64_t rwx_s_e                 : 1;
41997        uint64_t rdx_s_e                 : 1;
41998        uint64_t pcf_p_e                 : 1;
41999        uint64_t pcf_p_f                 : 1;
42000        uint64_t pdf_p_e                 : 1;
42001        uint64_t pdf_p_f                 : 1;
42002        uint64_t q1_s_e                  : 1;
42003        uint64_t q1_a_f                  : 1;
42004        uint64_t reserved_62_63          : 2;
42005#endif
42006    } cn30xx;
42007    struct cvmx_npi_int_sum_cn31xx
42008    {
42009#if __BYTE_ORDER == __BIG_ENDIAN
42010        uint64_t reserved_62_63          : 2;
42011        uint64_t q1_a_f                  : 1;       /**< Attempted to add when Queue-1 FIFO is full. */
42012        uint64_t q1_s_e                  : 1;       /**< Attempted to subtract when Queue-1 FIFO is empty. */
42013        uint64_t pdf_p_f                 : 1;       /**< Attempted to push a full PCN-DATA-FIFO. */
42014        uint64_t pdf_p_e                 : 1;       /**< Attempted to pop an empty PCN-DATA-FIFO. */
42015        uint64_t pcf_p_f                 : 1;       /**< Attempted to push a full PCN-CNT-FIFO. */
42016        uint64_t pcf_p_e                 : 1;       /**< Attempted to pop an empty PCN-CNT-FIFO. */
42017        uint64_t rdx_s_e                 : 1;       /**< Attempted to subtract when DPI-XFR-Wait count is 0. */
42018        uint64_t rwx_s_e                 : 1;       /**< Attempted to subtract when RDN-XFR-Wait count is 0. */
42019        uint64_t pnc_a_f                 : 1;       /**< Attempted to add when PNI-NPI Credits are max. */
42020        uint64_t pnc_s_e                 : 1;       /**< Attempted to subtract when PNI-NPI Credits are 0. */
42021        uint64_t com_a_f                 : 1;       /**< Attempted to add when PCN-Commit Counter is max. */
42022        uint64_t com_s_e                 : 1;       /**< Attempted to subtract when PCN-Commit Counter is 0. */
42023        uint64_t q3_a_f                  : 1;       /**< Attempted to add when Queue-3 FIFO is full. */
42024        uint64_t q3_s_e                  : 1;       /**< Attempted to subtract when Queue-3 FIFO is empty. */
42025        uint64_t q2_a_f                  : 1;       /**< Attempted to add when Queue-2 FIFO is full. */
42026        uint64_t q2_s_e                  : 1;       /**< Attempted to subtract when Queue-2 FIFO is empty. */
42027        uint64_t pcr_a_f                 : 1;       /**< Attempted to add when POW Credits is full. */
42028        uint64_t pcr_s_e                 : 1;       /**< Attempted to subtract when POW Credits is empty. */
42029        uint64_t fcr_a_f                 : 1;       /**< Attempted to add when FPA Credits is full. */
42030        uint64_t fcr_s_e                 : 1;       /**< Attempted to subtract when FPA Credits is empty. */
42031        uint64_t iobdma                  : 1;       /**< Requested IOBDMA read size exceeded 128 words. */
42032        uint64_t p_dperr                 : 1;       /**< If a parity error occured on data written to L2C
42033                                                         from the PCI this bit may be set. */
42034        uint64_t win_rto                 : 1;       /**< Windowed Load Timed Out. */
42035        uint64_t reserved_37_38          : 2;
42036        uint64_t i1_pperr                : 1;       /**< If a parity error occured on the port's instruction
42037                                                         this bit may be set. */
42038        uint64_t i0_pperr                : 1;       /**< If a parity error occured on the port's instruction
42039                                                         this bit may be set. */
42040        uint64_t reserved_33_34          : 2;
42041        uint64_t p1_ptout                : 1;       /**< Port-1 output had a read timeout on a DATA/INFO
42042                                                         pair. */
42043        uint64_t p0_ptout                : 1;       /**< Port-0 output had a read timeout on a DATA/INFO
42044                                                         pair. */
42045        uint64_t reserved_29_30          : 2;
42046        uint64_t p1_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42047                                                         pointer-pair, this bit may be set. */
42048        uint64_t p0_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42049                                                         pointer-pair, this bit may be set. */
42050        uint64_t reserved_25_26          : 2;
42051        uint64_t g1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42052                                                         read a gather list. */
42053        uint64_t g0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42054                                                         read a gather list. */
42055        uint64_t reserved_21_22          : 2;
42056        uint64_t p1_perr                 : 1;       /**< If a parity error occured on the port's packet
42057                                                         data this bit may be set. */
42058        uint64_t p0_perr                 : 1;       /**< If a parity error occured on the port's packet
42059                                                         data this bit may be set. */
42060        uint64_t reserved_17_18          : 2;
42061        uint64_t p1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42062                                                         read packet data. */
42063        uint64_t p0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42064                                                         read packet data. */
42065        uint64_t reserved_13_14          : 2;
42066        uint64_t i1_overf                : 1;       /**< Port-1 had a doorbell overflow. Bit[31] of the
42067                                                         doorbell count was set. */
42068        uint64_t i0_overf                : 1;       /**< Port-0 had a doorbell overflow. Bit[31] of the
42069                                                         doorbell count was set. */
42070        uint64_t reserved_9_10           : 2;
42071        uint64_t i1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42072                                                         read instructions. */
42073        uint64_t i0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42074                                                         read instructions. */
42075        uint64_t reserved_5_6            : 2;
42076        uint64_t po1_2sml                : 1;       /**< The packet being sent out on Port1 is smaller
42077                                                         than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */
42078        uint64_t po0_2sml                : 1;       /**< The packet being sent out on Port0 is smaller
42079                                                         than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */
42080        uint64_t pci_rsl                 : 1;       /**< This '1' when a bit in PCI_INT_SUM2 is SET and the
42081                                                         corresponding bit in the PCI_INT_ENB2 is SET. */
42082        uint64_t rml_wto                 : 1;       /**< Set '1' when the RML does not receive a commit
42083                                                         back from a RSL after sending a write command to
42084                                                         a RSL. */
42085        uint64_t rml_rto                 : 1;       /**< Set '1' when the RML does not receive read data
42086                                                         back from a RSL after sending a read command to
42087                                                         a RSL. */
42088#else
42089        uint64_t rml_rto                 : 1;
42090        uint64_t rml_wto                 : 1;
42091        uint64_t pci_rsl                 : 1;
42092        uint64_t po0_2sml                : 1;
42093        uint64_t po1_2sml                : 1;
42094        uint64_t reserved_5_6            : 2;
42095        uint64_t i0_rtout                : 1;
42096        uint64_t i1_rtout                : 1;
42097        uint64_t reserved_9_10           : 2;
42098        uint64_t i0_overf                : 1;
42099        uint64_t i1_overf                : 1;
42100        uint64_t reserved_13_14          : 2;
42101        uint64_t p0_rtout                : 1;
42102        uint64_t p1_rtout                : 1;
42103        uint64_t reserved_17_18          : 2;
42104        uint64_t p0_perr                 : 1;
42105        uint64_t p1_perr                 : 1;
42106        uint64_t reserved_21_22          : 2;
42107        uint64_t g0_rtout                : 1;
42108        uint64_t g1_rtout                : 1;
42109        uint64_t reserved_25_26          : 2;
42110        uint64_t p0_pperr                : 1;
42111        uint64_t p1_pperr                : 1;
42112        uint64_t reserved_29_30          : 2;
42113        uint64_t p0_ptout                : 1;
42114        uint64_t p1_ptout                : 1;
42115        uint64_t reserved_33_34          : 2;
42116        uint64_t i0_pperr                : 1;
42117        uint64_t i1_pperr                : 1;
42118        uint64_t reserved_37_38          : 2;
42119        uint64_t win_rto                 : 1;
42120        uint64_t p_dperr                 : 1;
42121        uint64_t iobdma                  : 1;
42122        uint64_t fcr_s_e                 : 1;
42123        uint64_t fcr_a_f                 : 1;
42124        uint64_t pcr_s_e                 : 1;
42125        uint64_t pcr_a_f                 : 1;
42126        uint64_t q2_s_e                  : 1;
42127        uint64_t q2_a_f                  : 1;
42128        uint64_t q3_s_e                  : 1;
42129        uint64_t q3_a_f                  : 1;
42130        uint64_t com_s_e                 : 1;
42131        uint64_t com_a_f                 : 1;
42132        uint64_t pnc_s_e                 : 1;
42133        uint64_t pnc_a_f                 : 1;
42134        uint64_t rwx_s_e                 : 1;
42135        uint64_t rdx_s_e                 : 1;
42136        uint64_t pcf_p_e                 : 1;
42137        uint64_t pcf_p_f                 : 1;
42138        uint64_t pdf_p_e                 : 1;
42139        uint64_t pdf_p_f                 : 1;
42140        uint64_t q1_s_e                  : 1;
42141        uint64_t q1_a_f                  : 1;
42142        uint64_t reserved_62_63          : 2;
42143#endif
42144    } cn31xx;
42145    struct cvmx_npi_int_sum_s            cn38xx;
42146    struct cvmx_npi_int_sum_cn38xxp2
42147    {
42148#if __BYTE_ORDER == __BIG_ENDIAN
42149        uint64_t reserved_42_63          : 22;
42150        uint64_t iobdma                  : 1;       /**< Requested IOBDMA read size exceeded 128 words. */
42151        uint64_t p_dperr                 : 1;       /**< If a parity error occured on data written to L2C
42152                                                         from the PCI this bit may be set. */
42153        uint64_t win_rto                 : 1;       /**< Windowed Load Timed Out. */
42154        uint64_t i3_pperr                : 1;       /**< If a parity error occured on the port's instruction
42155                                                         this bit may be set. */
42156        uint64_t i2_pperr                : 1;       /**< If a parity error occured on the port's instruction
42157                                                         this bit may be set. */
42158        uint64_t i1_pperr                : 1;       /**< If a parity error occured on the port's instruction
42159                                                         this bit may be set. */
42160        uint64_t i0_pperr                : 1;       /**< If a parity error occured on the port's instruction
42161                                                         this bit may be set. */
42162        uint64_t p3_ptout                : 1;       /**< Port-3 output had a read timeout on a DATA/INFO
42163                                                         pair. */
42164        uint64_t p2_ptout                : 1;       /**< Port-2 output had a read timeout on a DATA/INFO
42165                                                         pair. */
42166        uint64_t p1_ptout                : 1;       /**< Port-1 output had a read timeout on a DATA/INFO
42167                                                         pair. */
42168        uint64_t p0_ptout                : 1;       /**< Port-0 output had a read timeout on a DATA/INFO
42169                                                         pair. */
42170        uint64_t p3_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42171                                                         pointer-pair, this bit may be set. */
42172        uint64_t p2_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42173                                                         pointer-pair, this bit may be set. */
42174        uint64_t p1_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42175                                                         pointer-pair, this bit may be set. */
42176        uint64_t p0_pperr                : 1;       /**< If a parity error occured on the port DATA/INFO
42177                                                         pointer-pair, this bit may be set. */
42178        uint64_t g3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
42179                                                         read a gather list. */
42180        uint64_t g2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
42181                                                         read a gather list. */
42182        uint64_t g1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42183                                                         read a gather list. */
42184        uint64_t g0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42185                                                         read a gather list. */
42186        uint64_t p3_perr                 : 1;       /**< If a parity error occured on the port's packet
42187                                                         data this bit may be set. */
42188        uint64_t p2_perr                 : 1;       /**< If a parity error occured on the port's packet
42189                                                         data this bit may be set. */
42190        uint64_t p1_perr                 : 1;       /**< If a parity error occured on the port's packet
42191                                                         data this bit may be set. */
42192        uint64_t p0_perr                 : 1;       /**< If a parity error occured on the port's packet
42193                                                         data this bit may be set. */
42194        uint64_t p3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
42195                                                         read packet data. */
42196        uint64_t p2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
42197                                                         read packet data. */
42198        uint64_t p1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42199                                                         read packet data. */
42200        uint64_t p0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42201                                                         read packet data. */
42202        uint64_t i3_overf                : 1;       /**< Port-3 had a doorbell overflow. Bit[31] of the
42203                                                         doorbell count was set. */
42204        uint64_t i2_overf                : 1;       /**< Port-2 had a doorbell overflow. Bit[31] of the
42205                                                         doorbell count was set. */
42206        uint64_t i1_overf                : 1;       /**< Port-1 had a doorbell overflow. Bit[31] of the
42207                                                         doorbell count was set. */
42208        uint64_t i0_overf                : 1;       /**< Port-0 had a doorbell overflow. Bit[31] of the
42209                                                         doorbell count was set. */
42210        uint64_t i3_rtout                : 1;       /**< Port-3 had a read timeout while attempting to
42211                                                         read instructions. */
42212        uint64_t i2_rtout                : 1;       /**< Port-2 had a read timeout while attempting to
42213                                                         read instructions. */
42214        uint64_t i1_rtout                : 1;       /**< Port-1 had a read timeout while attempting to
42215                                                         read instructions. */
42216        uint64_t i0_rtout                : 1;       /**< Port-0 had a read timeout while attempting to
42217                                                         read instructions. */
42218        uint64_t po3_2sml                : 1;       /**< The packet being sent out on Port3 is smaller
42219                                                         than the NPI_BUFF_SIZE_OUTPUT3[ISIZE] field. */
42220        uint64_t po2_2sml                : 1;       /**< The packet being sent out on Port2 is smaller
42221                                                         than the NPI_BUFF_SIZE_OUTPUT2[ISIZE] field. */
42222        uint64_t po1_2sml                : 1;       /**< The packet being sent out on Port1 is smaller
42223                                                         than the NPI_BUFF_SIZE_OUTPUT1[ISIZE] field. */
42224        uint64_t po0_2sml                : 1;       /**< The packet being sent out on Port0 is smaller
42225                                                         than the NPI_BUFF_SIZE_OUTPUT0[ISIZE] field. */
42226        uint64_t pci_rsl                 : 1;       /**< This '1' when a bit in PCI_INT_SUM2 is SET and the
42227                                                         corresponding bit in the PCI_INT_ENB2 is SET. */
42228        uint64_t rml_wto                 : 1;       /**< Set '1' when the RML does not receive a commit
42229                                                         back from a RSL after sending a write command to
42230                                                         a RSL. */
42231        uint64_t rml_rto                 : 1;       /**< Set '1' when the RML does not receive read data
42232                                                         back from a RSL after sending a read command to
42233                                                         a RSL. */
42234#else
42235        uint64_t rml_rto                 : 1;
42236        uint64_t rml_wto                 : 1;
42237        uint64_t pci_rsl                 : 1;
42238        uint64_t po0_2sml                : 1;
42239        uint64_t po1_2sml                : 1;
42240        uint64_t po2_2sml                : 1;
42241        uint64_t po3_2sml                : 1;
42242        uint64_t i0_rtout                : 1;
42243        uint64_t i1_rtout                : 1;
42244        uint64_t i2_rtout                : 1;
42245        uint64_t i3_rtout                : 1;
42246        uint64_t i0_overf                : 1;
42247        uint64_t i1_overf                : 1;
42248        uint64_t i2_overf                : 1;
42249        uint64_t i3_overf                : 1;
42250        uint64_t p0_rtout                : 1;
42251        uint64_t p1_rtout                : 1;
42252        uint64_t p2_rtout                : 1;
42253        uint64_t p3_rtout                : 1;
42254        uint64_t p0_perr                 : 1;
42255        uint64_t p1_perr                 : 1;
42256        uint64_t p2_perr                 : 1;
42257        uint64_t p3_perr                 : 1;
42258        uint64_t g0_rtout                : 1;
42259        uint64_t g1_rtout                : 1;
42260        uint64_t g2_rtout                : 1;
42261        uint64_t g3_rtout                : 1;
42262        uint64_t p0_pperr                : 1;
42263        uint64_t p1_pperr                : 1;
42264        uint64_t p2_pperr                : 1;
42265        uint64_t p3_pperr                : 1;
42266        uint64_t p0_ptout                : 1;
42267        uint64_t p1_ptout                : 1;
42268        uint64_t p2_ptout                : 1;
42269        uint64_t p3_ptout                : 1;
42270        uint64_t i0_pperr                : 1;
42271        uint64_t i1_pperr                : 1;
42272        uint64_t i2_pperr                : 1;
42273        uint64_t i3_pperr                : 1;
42274        uint64_t win_rto                 : 1;
42275        uint64_t p_dperr                 : 1;
42276        uint64_t iobdma                  : 1;
42277        uint64_t reserved_42_63          : 22;
42278#endif
42279    } cn38xxp2;
42280    struct cvmx_npi_int_sum_cn31xx       cn50xx;
42281    struct cvmx_npi_int_sum_s            cn58xx;
42282    struct cvmx_npi_int_sum_s            cn58xxp1;
42283} cvmx_npi_int_sum_t;
42284
42285
42286/**
42287 * cvmx_npi_lowp_dbell
42288 *
42289 * NPI_LOWP_DBELL = Low Priority Door Bell
42290 *
42291 * The door bell register for the low priority DMA queue.
42292 */
42293typedef union
42294{
42295    uint64_t u64;
42296    struct cvmx_npi_lowp_dbell_s
42297    {
42298#if __BYTE_ORDER == __BIG_ENDIAN
42299        uint64_t reserved_16_63          : 48;
42300        uint64_t dbell                   : 16;      /**< The value written to this register is added to the
42301                                                         number of 8byte words to be read and processes for
42302                                                         the low priority dma queue. */
42303#else
42304        uint64_t dbell                   : 16;
42305        uint64_t reserved_16_63          : 48;
42306#endif
42307    } s;
42308    struct cvmx_npi_lowp_dbell_s         cn30xx;
42309    struct cvmx_npi_lowp_dbell_s         cn31xx;
42310    struct cvmx_npi_lowp_dbell_s         cn38xx;
42311    struct cvmx_npi_lowp_dbell_s         cn38xxp2;
42312    struct cvmx_npi_lowp_dbell_s         cn50xx;
42313    struct cvmx_npi_lowp_dbell_s         cn58xx;
42314    struct cvmx_npi_lowp_dbell_s         cn58xxp1;
42315} cvmx_npi_lowp_dbell_t;
42316
42317
42318/**
42319 * cvmx_npi_lowp_ibuff_saddr
42320 *
42321 * NPI_LOWP_IBUFF_SADDR = DMA Low Priority's Instruction Buffer Starting Address
42322 *
42323 * The address to start reading Instructions from for LOWP.
42324 */
42325typedef union
42326{
42327    uint64_t u64;
42328    struct cvmx_npi_lowp_ibuff_saddr_s
42329    {
42330#if __BYTE_ORDER == __BIG_ENDIAN
42331        uint64_t reserved_36_63          : 28;
42332        uint64_t saddr                   : 36;      /**< The starting address to read the first instruction. */
42333#else
42334        uint64_t saddr                   : 36;
42335        uint64_t reserved_36_63          : 28;
42336#endif
42337    } s;
42338    struct cvmx_npi_lowp_ibuff_saddr_s   cn30xx;
42339    struct cvmx_npi_lowp_ibuff_saddr_s   cn31xx;
42340    struct cvmx_npi_lowp_ibuff_saddr_s   cn38xx;
42341    struct cvmx_npi_lowp_ibuff_saddr_s   cn38xxp2;
42342    struct cvmx_npi_lowp_ibuff_saddr_s   cn50xx;
42343    struct cvmx_npi_lowp_ibuff_saddr_s   cn58xx;
42344    struct cvmx_npi_lowp_ibuff_saddr_s   cn58xxp1;
42345} cvmx_npi_lowp_ibuff_saddr_t;
42346
42347
42348/**
42349 * cvmx_npi_mem_access_subid#
42350 *
42351 * NPI_MEM_ACCESS_SUBID3 = Memory Access SubId 3Register
42352 *
42353 * Carries Read/Write parameters for PP access to PCI memory that use NPI SubId3.
42354 * Writes to this register are not ordered with writes/reads to the PCI Memory space.
42355 * To ensure that a write has completed the user must read the register before
42356 * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
42357 */
42358typedef union
42359{
42360    uint64_t u64;
42361    struct cvmx_npi_mem_access_subidx_s
42362    {
42363#if __BYTE_ORDER == __BIG_ENDIAN
42364        uint64_t reserved_38_63          : 26;
42365        uint64_t shortl                  : 1;       /**< Generate CMD-6 on PCI(x) when '1'.
42366                                                         Loads from the cores to the corresponding subid
42367                                                         that are 32-bits or smaller:
42368                                                         - Will generate the PCI-X "Memory Read DWORD"
42369                                                           command in PCI-X mode. (Note that "Memory
42370                                                           Read DWORD" appears much like an IO read on
42371                                                           the PCI-X bus.)
42372                                                         - Will generate the PCI "Memory Read" command
42373                                                           in PCI-X mode, irrespective of the
42374                                                           NPI_PCI_READ_CMD[CMD_SIZE] value.
42375                                                         NOT IN PASS 1 NOR PASS 2 */
42376        uint64_t nmerge                  : 1;       /**< No Merge. (NOT IN PASS 1 NOR PASS 2) */
42377        uint64_t esr                     : 2;       /**< Endian-Swap on read. */
42378        uint64_t esw                     : 2;       /**< Endian-Swap on write. */
42379        uint64_t nsr                     : 1;       /**< No-Snoop on read. */
42380        uint64_t nsw                     : 1;       /**< No-Snoop on write. */
42381        uint64_t ror                     : 1;       /**< Relax Read on read. */
42382        uint64_t row                     : 1;       /**< Relax Order on write. */
42383        uint64_t ba                      : 28;      /**< PCI Address bits [63:36]. */
42384#else
42385        uint64_t ba                      : 28;
42386        uint64_t row                     : 1;
42387        uint64_t ror                     : 1;
42388        uint64_t nsw                     : 1;
42389        uint64_t nsr                     : 1;
42390        uint64_t esw                     : 2;
42391        uint64_t esr                     : 2;
42392        uint64_t nmerge                  : 1;
42393        uint64_t shortl                  : 1;
42394        uint64_t reserved_38_63          : 26;
42395#endif
42396    } s;
42397    struct cvmx_npi_mem_access_subidx_s  cn30xx;
42398    struct cvmx_npi_mem_access_subidx_cn31xx
42399    {
42400#if __BYTE_ORDER == __BIG_ENDIAN
42401        uint64_t reserved_36_63          : 28;
42402        uint64_t esr                     : 2;       /**< Endian-Swap on read. */
42403        uint64_t esw                     : 2;       /**< Endian-Swap on write. */
42404        uint64_t nsr                     : 1;       /**< No-Snoop on read. */
42405        uint64_t nsw                     : 1;       /**< No-Snoop on write. */
42406        uint64_t ror                     : 1;       /**< Relax Read on read. */
42407        uint64_t row                     : 1;       /**< Relax Order on write. */
42408        uint64_t ba                      : 28;      /**< PCI Address bits [63:36]. */
42409#else
42410        uint64_t ba                      : 28;
42411        uint64_t row                     : 1;
42412        uint64_t ror                     : 1;
42413        uint64_t nsw                     : 1;
42414        uint64_t nsr                     : 1;
42415        uint64_t esw                     : 2;
42416        uint64_t esr                     : 2;
42417        uint64_t reserved_36_63          : 28;
42418#endif
42419    } cn31xx;
42420    struct cvmx_npi_mem_access_subidx_s  cn38xx;
42421    struct cvmx_npi_mem_access_subidx_cn31xx cn38xxp2;
42422    struct cvmx_npi_mem_access_subidx_s  cn50xx;
42423    struct cvmx_npi_mem_access_subidx_s  cn58xx;
42424    struct cvmx_npi_mem_access_subidx_s  cn58xxp1;
42425} cvmx_npi_mem_access_subidx_t;
42426
42427
42428/**
42429 * cvmx_npi_msi_rcv
42430 *
42431 * NPI_MSI_RCV = NPI MSI Receive Vector Register
42432 *
42433 * A bit is set in this register relative to the vector received during a MSI. And cleared by a W1 to the register.
42434 */
42435typedef union
42436{
42437    uint64_t u64;
42438    struct cvmx_npi_msi_rcv_s
42439    {
42440#if __BYTE_ORDER == __BIG_ENDIAN
42441        uint64_t int_vec                 : 64;      /**< Refer to PCI_MSI_RCV */
42442#else
42443        uint64_t int_vec                 : 64;
42444#endif
42445    } s;
42446    struct cvmx_npi_msi_rcv_s            cn30xx;
42447    struct cvmx_npi_msi_rcv_s            cn31xx;
42448    struct cvmx_npi_msi_rcv_s            cn38xx;
42449    struct cvmx_npi_msi_rcv_s            cn38xxp2;
42450    struct cvmx_npi_msi_rcv_s            cn50xx;
42451    struct cvmx_npi_msi_rcv_s            cn58xx;
42452    struct cvmx_npi_msi_rcv_s            cn58xxp1;
42453} cvmx_npi_msi_rcv_t;
42454
42455
42456/**
42457 * cvmx_npi_num_desc_output#
42458 *
42459 * NUM_DESC_OUTPUT0 = Number Of Descriptors Available For Output 0
42460 *
42461 * The size of the Buffer/Info Pointer Pair ring for Output-0.
42462 */
42463typedef union
42464{
42465    uint64_t u64;
42466    struct cvmx_npi_num_desc_outputx_s
42467    {
42468#if __BYTE_ORDER == __BIG_ENDIAN
42469        uint64_t reserved_32_63          : 32;
42470        uint64_t size                    : 32;      /**< The size of the Buffer/Info Pointer Pair ring. */
42471#else
42472        uint64_t size                    : 32;
42473        uint64_t reserved_32_63          : 32;
42474#endif
42475    } s;
42476    struct cvmx_npi_num_desc_outputx_s   cn30xx;
42477    struct cvmx_npi_num_desc_outputx_s   cn31xx;
42478    struct cvmx_npi_num_desc_outputx_s   cn38xx;
42479    struct cvmx_npi_num_desc_outputx_s   cn38xxp2;
42480    struct cvmx_npi_num_desc_outputx_s   cn50xx;
42481    struct cvmx_npi_num_desc_outputx_s   cn58xx;
42482    struct cvmx_npi_num_desc_outputx_s   cn58xxp1;
42483} cvmx_npi_num_desc_outputx_t;
42484
42485
42486/**
42487 * cvmx_npi_output_control
42488 *
42489 * NPI_OUTPUT_CONTROL = NPI's Output Control Register
42490 *
42491 * The address to start reading Instructions from for Output-3.
42492 */
42493typedef union
42494{
42495    uint64_t u64;
42496    struct cvmx_npi_output_control_s
42497    {
42498#if __BYTE_ORDER == __BIG_ENDIAN
42499        uint64_t reserved_49_63          : 15;
42500        uint64_t pkt_rr                  : 1;       /**< When set '1' the output packet selection will be
42501                                                         made with a Round Robin arbitration. When '0'
42502                                                         the output packet port is fixed in priority,
42503                                                         where the lower port number has higher priority.
42504                                                         PASS3 Field */
42505        uint64_t p3_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT3 register will be
42506                                                         updated with the number of bytes in the packet
42507                                                         sent, when '0' the register will have a value
42508                                                         of '1' added. */
42509        uint64_t p2_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT2 register will be
42510                                                         updated with the number of bytes in the packet
42511                                                         sent, when '0' the register will have a value
42512                                                         of '1' added. */
42513        uint64_t p1_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT1 register will be
42514                                                         updated with the number of bytes in the packet
42515                                                         sent, when '0' the register will have a value
42516                                                         of '1' added. */
42517        uint64_t p0_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT0 register will be
42518                                                         updated with the number of bytes in the packet
42519                                                         sent, when '0' the register will have a value
42520                                                         of '1' added. */
42521        uint64_t o3_es                   : 2;       /**< Endian Swap for Output3 Data. */
42522        uint64_t o3_ns                   : 1;       /**< NoSnoop Enable for Output3 Data. */
42523        uint64_t o3_ro                   : 1;       /**< Relaxed Ordering Enable for Output3 Data. */
42524        uint64_t o2_es                   : 2;       /**< Endian Swap for Output2 Data. */
42525        uint64_t o2_ns                   : 1;       /**< NoSnoop Enable for Output2 Data. */
42526        uint64_t o2_ro                   : 1;       /**< Relaxed Ordering Enable for Output2 Data. */
42527        uint64_t o1_es                   : 2;       /**< Endian Swap for Output1 Data. */
42528        uint64_t o1_ns                   : 1;       /**< NoSnoop Enable for Output1 Data. */
42529        uint64_t o1_ro                   : 1;       /**< Relaxed Ordering Enable for Output1 Data. */
42530        uint64_t o0_es                   : 2;       /**< Endian Swap for Output0 Data. */
42531        uint64_t o0_ns                   : 1;       /**< NoSnoop Enable for Output0 Data. */
42532        uint64_t o0_ro                   : 1;       /**< Relaxed Ordering Enable for Output0 Data. */
42533        uint64_t o3_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42534                                                         comes from the DPTR[63:60] in the scatter-list pair,
42535                                                         and the RO, NS, ES values come from the O3_ES,
42536                                                         O3_NS, O3_RO. When '0' the RO == DPTR[60],
42537                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42538                                                         packet will be written to is ADDR[63:60] ==
42539                                                         O3_ES[1:0], O3_NS, O3_RO. For Output Port-3. */
42540        uint64_t o2_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42541                                                         comes from the DPTR[63:60] in the scatter-list pair,
42542                                                         and the RO, NS, ES values come from the O2_ES,
42543                                                         O2_NS, O2_RO. When '0' the RO == DPTR[60],
42544                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42545                                                         packet will be written to is ADDR[63:60] ==
42546                                                         O2_ES[1:0], O2_NS, O2_RO. For Output Port-2. */
42547        uint64_t o1_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42548                                                         comes from the DPTR[63:60] in the scatter-list pair,
42549                                                         and the RO, NS, ES values come from the O1_ES,
42550                                                         O1_NS, O1_RO. When '0' the RO == DPTR[60],
42551                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42552                                                         packet will be written to is ADDR[63:60] ==
42553                                                         O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */
42554        uint64_t o0_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42555                                                         comes from the DPTR[63:60] in the scatter-list pair,
42556                                                         and the RO, NS, ES values come from the O0_ES,
42557                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
42558                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42559                                                         packet will be written to is ADDR[63:60] ==
42560                                                         O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */
42561        uint64_t reserved_20_23          : 4;
42562        uint64_t iptr_o3                 : 1;       /**< Uses the Info-Pointer to store length and data
42563                                                         for output-3. */
42564        uint64_t iptr_o2                 : 1;       /**< Uses the Info-Pointer to store length and data
42565                                                         for output-2. */
42566        uint64_t iptr_o1                 : 1;       /**< Uses the Info-Pointer to store length and data
42567                                                         for output-1. */
42568        uint64_t iptr_o0                 : 1;       /**< Uses the Info-Pointer to store length and data
42569                                                         for output-0. */
42570        uint64_t esr_sl3                 : 2;       /**< The Endian-Swap-Mode for Slist3 reads. */
42571        uint64_t nsr_sl3                 : 1;       /**< Enables '1' NoSnoop for Slist3 reads. */
42572        uint64_t ror_sl3                 : 1;       /**< Enables '1' Relaxed Ordering for Slist3 reads. */
42573        uint64_t esr_sl2                 : 2;       /**< The Endian-Swap-Mode for Slist2 reads. */
42574        uint64_t nsr_sl2                 : 1;       /**< Enables '1' NoSnoop for Slist2 reads. */
42575        uint64_t ror_sl2                 : 1;       /**< Enables '1' Relaxed Ordering for Slist2 reads. */
42576        uint64_t esr_sl1                 : 2;       /**< The Endian-Swap-Mode for Slist1 reads. */
42577        uint64_t nsr_sl1                 : 1;       /**< Enables '1' NoSnoop for Slist1 reads. */
42578        uint64_t ror_sl1                 : 1;       /**< Enables '1' Relaxed Ordering for Slist1 reads. */
42579        uint64_t esr_sl0                 : 2;       /**< The Endian-Swap-Mode for Slist0 reads. */
42580        uint64_t nsr_sl0                 : 1;       /**< Enables '1' NoSnoop for Slist0 reads. */
42581        uint64_t ror_sl0                 : 1;       /**< Enables '1' Relaxed Ordering for Slist0 reads. */
42582#else
42583        uint64_t ror_sl0                 : 1;
42584        uint64_t nsr_sl0                 : 1;
42585        uint64_t esr_sl0                 : 2;
42586        uint64_t ror_sl1                 : 1;
42587        uint64_t nsr_sl1                 : 1;
42588        uint64_t esr_sl1                 : 2;
42589        uint64_t ror_sl2                 : 1;
42590        uint64_t nsr_sl2                 : 1;
42591        uint64_t esr_sl2                 : 2;
42592        uint64_t ror_sl3                 : 1;
42593        uint64_t nsr_sl3                 : 1;
42594        uint64_t esr_sl3                 : 2;
42595        uint64_t iptr_o0                 : 1;
42596        uint64_t iptr_o1                 : 1;
42597        uint64_t iptr_o2                 : 1;
42598        uint64_t iptr_o3                 : 1;
42599        uint64_t reserved_20_23          : 4;
42600        uint64_t o0_csrm                 : 1;
42601        uint64_t o1_csrm                 : 1;
42602        uint64_t o2_csrm                 : 1;
42603        uint64_t o3_csrm                 : 1;
42604        uint64_t o0_ro                   : 1;
42605        uint64_t o0_ns                   : 1;
42606        uint64_t o0_es                   : 2;
42607        uint64_t o1_ro                   : 1;
42608        uint64_t o1_ns                   : 1;
42609        uint64_t o1_es                   : 2;
42610        uint64_t o2_ro                   : 1;
42611        uint64_t o2_ns                   : 1;
42612        uint64_t o2_es                   : 2;
42613        uint64_t o3_ro                   : 1;
42614        uint64_t o3_ns                   : 1;
42615        uint64_t o3_es                   : 2;
42616        uint64_t p0_bmode                : 1;
42617        uint64_t p1_bmode                : 1;
42618        uint64_t p2_bmode                : 1;
42619        uint64_t p3_bmode                : 1;
42620        uint64_t pkt_rr                  : 1;
42621        uint64_t reserved_49_63          : 15;
42622#endif
42623    } s;
42624    struct cvmx_npi_output_control_cn30xx
42625    {
42626#if __BYTE_ORDER == __BIG_ENDIAN
42627        uint64_t reserved_45_63          : 19;
42628        uint64_t p0_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT0 register will be
42629                                                         updated with the number of bytes in the packet
42630                                                         sent, when '0' the register will have a value
42631                                                         of '1' added. */
42632        uint64_t reserved_32_43          : 12;
42633        uint64_t o0_es                   : 2;       /**< Endian Swap for Output0 Data. */
42634        uint64_t o0_ns                   : 1;       /**< NoSnoop Enable for Output0 Data. */
42635        uint64_t o0_ro                   : 1;       /**< Relaxed Ordering Enable for Output0 Data. */
42636        uint64_t reserved_25_27          : 3;
42637        uint64_t o0_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42638                                                         comes from the DPTR[63:60] in the scatter-list pair,
42639                                                         and the RO, NS, ES values come from the O0_ES,
42640                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
42641                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42642                                                         packet will be written to is ADDR[63:60] ==
42643                                                         O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */
42644        uint64_t reserved_17_23          : 7;
42645        uint64_t iptr_o0                 : 1;       /**< Uses the Info-Pointer to store length and data
42646                                                         for output-0. */
42647        uint64_t reserved_4_15           : 12;
42648        uint64_t esr_sl0                 : 2;       /**< The Endian-Swap-Mode for Slist0 reads. */
42649        uint64_t nsr_sl0                 : 1;       /**< Enables '1' NoSnoop for Slist0 reads. */
42650        uint64_t ror_sl0                 : 1;       /**< Enables '1' Relaxed Ordering for Slist0 reads. */
42651#else
42652        uint64_t ror_sl0                 : 1;
42653        uint64_t nsr_sl0                 : 1;
42654        uint64_t esr_sl0                 : 2;
42655        uint64_t reserved_4_15           : 12;
42656        uint64_t iptr_o0                 : 1;
42657        uint64_t reserved_17_23          : 7;
42658        uint64_t o0_csrm                 : 1;
42659        uint64_t reserved_25_27          : 3;
42660        uint64_t o0_ro                   : 1;
42661        uint64_t o0_ns                   : 1;
42662        uint64_t o0_es                   : 2;
42663        uint64_t reserved_32_43          : 12;
42664        uint64_t p0_bmode                : 1;
42665        uint64_t reserved_45_63          : 19;
42666#endif
42667    } cn30xx;
42668    struct cvmx_npi_output_control_cn31xx
42669    {
42670#if __BYTE_ORDER == __BIG_ENDIAN
42671        uint64_t reserved_46_63          : 18;
42672        uint64_t p1_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT1 register will be
42673                                                         updated with the number of bytes in the packet
42674                                                         sent, when '0' the register will have a value
42675                                                         of '1' added. */
42676        uint64_t p0_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT0 register will be
42677                                                         updated with the number of bytes in the packet
42678                                                         sent, when '0' the register will have a value
42679                                                         of '1' added. */
42680        uint64_t reserved_36_43          : 8;
42681        uint64_t o1_es                   : 2;       /**< Endian Swap for Output1 Data. */
42682        uint64_t o1_ns                   : 1;       /**< NoSnoop Enable for Output1 Data. */
42683        uint64_t o1_ro                   : 1;       /**< Relaxed Ordering Enable for Output1 Data. */
42684        uint64_t o0_es                   : 2;       /**< Endian Swap for Output0 Data. */
42685        uint64_t o0_ns                   : 1;       /**< NoSnoop Enable for Output0 Data. */
42686        uint64_t o0_ro                   : 1;       /**< Relaxed Ordering Enable for Output0 Data. */
42687        uint64_t reserved_26_27          : 2;
42688        uint64_t o1_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42689                                                         comes from the DPTR[63:60] in the scatter-list pair,
42690                                                         and the RO, NS, ES values come from the O1_ES,
42691                                                         O1_NS, O1_RO. When '0' the RO == DPTR[60],
42692                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42693                                                         packet will be written to is ADDR[63:60] ==
42694                                                         O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */
42695        uint64_t o0_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42696                                                         comes from the DPTR[63:60] in the scatter-list pair,
42697                                                         and the RO, NS, ES values come from the O0_ES,
42698                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
42699                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42700                                                         packet will be written to is ADDR[63:60] ==
42701                                                         O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */
42702        uint64_t reserved_18_23          : 6;
42703        uint64_t iptr_o1                 : 1;       /**< Uses the Info-Pointer to store length and data
42704                                                         for output-1. */
42705        uint64_t iptr_o0                 : 1;       /**< Uses the Info-Pointer to store length and data
42706                                                         for output-0. */
42707        uint64_t reserved_8_15           : 8;
42708        uint64_t esr_sl1                 : 2;       /**< The Endian-Swap-Mode for Slist1 reads. */
42709        uint64_t nsr_sl1                 : 1;       /**< Enables '1' NoSnoop for Slist1 reads. */
42710        uint64_t ror_sl1                 : 1;       /**< Enables '1' Relaxed Ordering for Slist1 reads. */
42711        uint64_t esr_sl0                 : 2;       /**< The Endian-Swap-Mode for Slist0 reads. */
42712        uint64_t nsr_sl0                 : 1;       /**< Enables '1' NoSnoop for Slist0 reads. */
42713        uint64_t ror_sl0                 : 1;       /**< Enables '1' Relaxed Ordering for Slist0 reads. */
42714#else
42715        uint64_t ror_sl0                 : 1;
42716        uint64_t nsr_sl0                 : 1;
42717        uint64_t esr_sl0                 : 2;
42718        uint64_t ror_sl1                 : 1;
42719        uint64_t nsr_sl1                 : 1;
42720        uint64_t esr_sl1                 : 2;
42721        uint64_t reserved_8_15           : 8;
42722        uint64_t iptr_o0                 : 1;
42723        uint64_t iptr_o1                 : 1;
42724        uint64_t reserved_18_23          : 6;
42725        uint64_t o0_csrm                 : 1;
42726        uint64_t o1_csrm                 : 1;
42727        uint64_t reserved_26_27          : 2;
42728        uint64_t o0_ro                   : 1;
42729        uint64_t o0_ns                   : 1;
42730        uint64_t o0_es                   : 2;
42731        uint64_t o1_ro                   : 1;
42732        uint64_t o1_ns                   : 1;
42733        uint64_t o1_es                   : 2;
42734        uint64_t reserved_36_43          : 8;
42735        uint64_t p0_bmode                : 1;
42736        uint64_t p1_bmode                : 1;
42737        uint64_t reserved_46_63          : 18;
42738#endif
42739    } cn31xx;
42740    struct cvmx_npi_output_control_s     cn38xx;
42741    struct cvmx_npi_output_control_cn38xxp2
42742    {
42743#if __BYTE_ORDER == __BIG_ENDIAN
42744        uint64_t reserved_48_63          : 16;
42745        uint64_t p3_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT3 register will be
42746                                                         updated with the number of bytes in the packet
42747                                                         sent, when '0' the register will have a value
42748                                                         of '1' added. */
42749        uint64_t p2_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT2 register will be
42750                                                         updated with the number of bytes in the packet
42751                                                         sent, when '0' the register will have a value
42752                                                         of '1' added. */
42753        uint64_t p1_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT1 register will be
42754                                                         updated with the number of bytes in the packet
42755                                                         sent, when '0' the register will have a value
42756                                                         of '1' added. */
42757        uint64_t p0_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT0 register will be
42758                                                         updated with the number of bytes in the packet
42759                                                         sent, when '0' the register will have a value
42760                                                         of '1' added. */
42761        uint64_t o3_es                   : 2;       /**< Endian Swap for Output3 Data. */
42762        uint64_t o3_ns                   : 1;       /**< NoSnoop Enable for Output3 Data. */
42763        uint64_t o3_ro                   : 1;       /**< Relaxed Ordering Enable for Output3 Data. */
42764        uint64_t o2_es                   : 2;       /**< Endian Swap for Output2 Data. */
42765        uint64_t o2_ns                   : 1;       /**< NoSnoop Enable for Output2 Data. */
42766        uint64_t o2_ro                   : 1;       /**< Relaxed Ordering Enable for Output2 Data. */
42767        uint64_t o1_es                   : 2;       /**< Endian Swap for Output1 Data. */
42768        uint64_t o1_ns                   : 1;       /**< NoSnoop Enable for Output1 Data. */
42769        uint64_t o1_ro                   : 1;       /**< Relaxed Ordering Enable for Output1 Data. */
42770        uint64_t o0_es                   : 2;       /**< Endian Swap for Output0 Data. */
42771        uint64_t o0_ns                   : 1;       /**< NoSnoop Enable for Output0 Data. */
42772        uint64_t o0_ro                   : 1;       /**< Relaxed Ordering Enable for Output0 Data. */
42773        uint64_t o3_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42774                                                         comes from the DPTR[63:60] in the scatter-list pair,
42775                                                         and the RO, NS, ES values come from the O3_ES,
42776                                                         O3_NS, O3_RO. When '0' the RO == DPTR[60],
42777                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42778                                                         packet will be written to is ADDR[63:60] ==
42779                                                         O3_ES[1:0], O3_NS, O3_RO. For Output Port-3. */
42780        uint64_t o2_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42781                                                         comes from the DPTR[63:60] in the scatter-list pair,
42782                                                         and the RO, NS, ES values come from the O2_ES,
42783                                                         O2_NS, O2_RO. When '0' the RO == DPTR[60],
42784                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42785                                                         packet will be written to is ADDR[63:60] ==
42786                                                         O2_ES[1:0], O2_NS, O2_RO. For Output Port-2. */
42787        uint64_t o1_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42788                                                         comes from the DPTR[63:60] in the scatter-list pair,
42789                                                         and the RO, NS, ES values come from the O1_ES,
42790                                                         O1_NS, O1_RO. When '0' the RO == DPTR[60],
42791                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42792                                                         packet will be written to is ADDR[63:60] ==
42793                                                         O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */
42794        uint64_t o0_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42795                                                         comes from the DPTR[63:60] in the scatter-list pair,
42796                                                         and the RO, NS, ES values come from the O0_ES,
42797                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
42798                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42799                                                         packet will be written to is ADDR[63:60] ==
42800                                                         O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */
42801        uint64_t reserved_20_23          : 4;
42802        uint64_t iptr_o3                 : 1;       /**< Uses the Info-Pointer to store length and data
42803                                                         for output-3. */
42804        uint64_t iptr_o2                 : 1;       /**< Uses the Info-Pointer to store length and data
42805                                                         for output-2. */
42806        uint64_t iptr_o1                 : 1;       /**< Uses the Info-Pointer to store length and data
42807                                                         for output-1. */
42808        uint64_t iptr_o0                 : 1;       /**< Uses the Info-Pointer to store length and data
42809                                                         for output-0. */
42810        uint64_t esr_sl3                 : 2;       /**< The Endian-Swap-Mode for Slist3 reads. */
42811        uint64_t nsr_sl3                 : 1;       /**< Enables '1' NoSnoop for Slist3 reads. */
42812        uint64_t ror_sl3                 : 1;       /**< Enables '1' Relaxed Ordering for Slist3 reads. */
42813        uint64_t esr_sl2                 : 2;       /**< The Endian-Swap-Mode for Slist2 reads. */
42814        uint64_t nsr_sl2                 : 1;       /**< Enables '1' NoSnoop for Slist2 reads. */
42815        uint64_t ror_sl2                 : 1;       /**< Enables '1' Relaxed Ordering for Slist2 reads. */
42816        uint64_t esr_sl1                 : 2;       /**< The Endian-Swap-Mode for Slist1 reads. */
42817        uint64_t nsr_sl1                 : 1;       /**< Enables '1' NoSnoop for Slist1 reads. */
42818        uint64_t ror_sl1                 : 1;       /**< Enables '1' Relaxed Ordering for Slist1 reads. */
42819        uint64_t esr_sl0                 : 2;       /**< The Endian-Swap-Mode for Slist0 reads. */
42820        uint64_t nsr_sl0                 : 1;       /**< Enables '1' NoSnoop for Slist0 reads. */
42821        uint64_t ror_sl0                 : 1;       /**< Enables '1' Relaxed Ordering for Slist0 reads. */
42822#else
42823        uint64_t ror_sl0                 : 1;
42824        uint64_t nsr_sl0                 : 1;
42825        uint64_t esr_sl0                 : 2;
42826        uint64_t ror_sl1                 : 1;
42827        uint64_t nsr_sl1                 : 1;
42828        uint64_t esr_sl1                 : 2;
42829        uint64_t ror_sl2                 : 1;
42830        uint64_t nsr_sl2                 : 1;
42831        uint64_t esr_sl2                 : 2;
42832        uint64_t ror_sl3                 : 1;
42833        uint64_t nsr_sl3                 : 1;
42834        uint64_t esr_sl3                 : 2;
42835        uint64_t iptr_o0                 : 1;
42836        uint64_t iptr_o1                 : 1;
42837        uint64_t iptr_o2                 : 1;
42838        uint64_t iptr_o3                 : 1;
42839        uint64_t reserved_20_23          : 4;
42840        uint64_t o0_csrm                 : 1;
42841        uint64_t o1_csrm                 : 1;
42842        uint64_t o2_csrm                 : 1;
42843        uint64_t o3_csrm                 : 1;
42844        uint64_t o0_ro                   : 1;
42845        uint64_t o0_ns                   : 1;
42846        uint64_t o0_es                   : 2;
42847        uint64_t o1_ro                   : 1;
42848        uint64_t o1_ns                   : 1;
42849        uint64_t o1_es                   : 2;
42850        uint64_t o2_ro                   : 1;
42851        uint64_t o2_ns                   : 1;
42852        uint64_t o2_es                   : 2;
42853        uint64_t o3_ro                   : 1;
42854        uint64_t o3_ns                   : 1;
42855        uint64_t o3_es                   : 2;
42856        uint64_t p0_bmode                : 1;
42857        uint64_t p1_bmode                : 1;
42858        uint64_t p2_bmode                : 1;
42859        uint64_t p3_bmode                : 1;
42860        uint64_t reserved_48_63          : 16;
42861#endif
42862    } cn38xxp2;
42863    struct cvmx_npi_output_control_cn50xx
42864    {
42865#if __BYTE_ORDER == __BIG_ENDIAN
42866        uint64_t reserved_49_63          : 15;
42867        uint64_t pkt_rr                  : 1;       /**< When set '1' the output packet selection will be
42868                                                         made with a Round Robin arbitration. When '0'
42869                                                         the output packet port is fixed in priority,
42870                                                         where the lower port number has higher priority.
42871                                                         PASS2 Field */
42872        uint64_t reserved_46_47          : 2;
42873        uint64_t p1_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT1 register will be
42874                                                         updated with the number of bytes in the packet
42875                                                         sent, when '0' the register will have a value
42876                                                         of '1' added. */
42877        uint64_t p0_bmode                : 1;       /**< When set '1' PCI_PKTS_SENT0 register will be
42878                                                         updated with the number of bytes in the packet
42879                                                         sent, when '0' the register will have a value
42880                                                         of '1' added. */
42881        uint64_t reserved_36_43          : 8;
42882        uint64_t o1_es                   : 2;       /**< Endian Swap for Output1 Data. */
42883        uint64_t o1_ns                   : 1;       /**< NoSnoop Enable for Output1 Data. */
42884        uint64_t o1_ro                   : 1;       /**< Relaxed Ordering Enable for Output1 Data. */
42885        uint64_t o0_es                   : 2;       /**< Endian Swap for Output0 Data. */
42886        uint64_t o0_ns                   : 1;       /**< NoSnoop Enable for Output0 Data. */
42887        uint64_t o0_ro                   : 1;       /**< Relaxed Ordering Enable for Output0 Data. */
42888        uint64_t reserved_26_27          : 2;
42889        uint64_t o1_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42890                                                         comes from the DPTR[63:60] in the scatter-list pair,
42891                                                         and the RO, NS, ES values come from the O1_ES,
42892                                                         O1_NS, O1_RO. When '0' the RO == DPTR[60],
42893                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42894                                                         packet will be written to is ADDR[63:60] ==
42895                                                         O1_ES[1:0], O1_NS, O1_RO. For Output Port-1. */
42896        uint64_t o0_csrm                 : 1;       /**< When '1' the address[63:60] to write packet data,
42897                                                         comes from the DPTR[63:60] in the scatter-list pair,
42898                                                         and the RO, NS, ES values come from the O0_ES,
42899                                                         O0_NS, O0_RO. When '0' the RO == DPTR[60],
42900                                                         NS == DPTR[61], ES == DPTR[63:62], the address the
42901                                                         packet will be written to is ADDR[63:60] ==
42902                                                         O0_ES[1:0], O0_NS, O0_RO. For Output Port-0. */
42903        uint64_t reserved_18_23          : 6;
42904        uint64_t iptr_o1                 : 1;       /**< Uses the Info-Pointer to store length and data
42905                                                         for output-1. */
42906        uint64_t iptr_o0                 : 1;       /**< Uses the Info-Pointer to store length and data
42907                                                         for output-0. */
42908        uint64_t reserved_8_15           : 8;
42909        uint64_t esr_sl1                 : 2;       /**< The Endian-Swap-Mode for Slist1 reads. */
42910        uint64_t nsr_sl1                 : 1;       /**< Enables '1' NoSnoop for Slist1 reads. */
42911        uint64_t ror_sl1                 : 1;       /**< Enables '1' Relaxed Ordering for Slist1 reads. */
42912        uint64_t esr_sl0                 : 2;       /**< The Endian-Swap-Mode for Slist0 reads. */
42913        uint64_t nsr_sl0                 : 1;       /**< Enables '1' NoSnoop for Slist0 reads. */
42914        uint64_t ror_sl0                 : 1;       /**< Enables '1' Relaxed Ordering for Slist0 reads. */
42915#else
42916        uint64_t ror_sl0                 : 1;
42917        uint64_t nsr_sl0                 : 1;
42918        uint64_t esr_sl0                 : 2;
42919        uint64_t ror_sl1                 : 1;
42920        uint64_t nsr_sl1                 : 1;
42921        uint64_t esr_sl1                 : 2;
42922        uint64_t reserved_8_15           : 8;
42923        uint64_t iptr_o0                 : 1;
42924        uint64_t iptr_o1                 : 1;
42925        uint64_t reserved_18_23          : 6;
42926        uint64_t o0_csrm                 : 1;
42927        uint64_t o1_csrm                 : 1;
42928        uint64_t reserved_26_27          : 2;
42929        uint64_t o0_ro                   : 1;
42930        uint64_t o0_ns                   : 1;
42931        uint64_t o0_es                   : 2;
42932        uint64_t o1_ro                   : 1;
42933        uint64_t o1_ns                   : 1;
42934        uint64_t o1_es                   : 2;
42935        uint64_t reserved_36_43          : 8;
42936        uint64_t p0_bmode                : 1;
42937        uint64_t p1_bmode                : 1;
42938        uint64_t reserved_46_47          : 2;
42939        uint64_t pkt_rr                  : 1;
42940        uint64_t reserved_49_63          : 15;
42941#endif
42942    } cn50xx;
42943    struct cvmx_npi_output_control_s     cn58xx;
42944    struct cvmx_npi_output_control_s     cn58xxp1;
42945} cvmx_npi_output_control_t;
42946
42947
42948/**
42949 * cvmx_npi_p#_dbpair_addr
42950 *
42951 * NPI_P0_DBPAIR_ADDR = NPI's Port-0 DATA-BUFFER Pair Next Read Address.
42952 *
42953 * Contains the next address to read for Port's-0 Data/Buffer Pair.
42954 */
42955typedef union
42956{
42957    uint64_t u64;
42958    struct cvmx_npi_px_dbpair_addr_s
42959    {
42960#if __BYTE_ORDER == __BIG_ENDIAN
42961        uint64_t reserved_63_63          : 1;
42962        uint64_t state                   : 2;       /**< POS state machine vector. Used to tell when NADDR
42963                                                         is valid (when STATE == 0). */
42964        uint64_t naddr                   : 61;      /**< Bits [63:3] of the next Data-Info Pair to read.
42965                                                         Value is only valid when STATE == 0. */
42966#else
42967        uint64_t naddr                   : 61;
42968        uint64_t state                   : 2;
42969        uint64_t reserved_63_63          : 1;
42970#endif
42971    } s;
42972    struct cvmx_npi_px_dbpair_addr_s     cn30xx;
42973    struct cvmx_npi_px_dbpair_addr_s     cn31xx;
42974    struct cvmx_npi_px_dbpair_addr_s     cn38xx;
42975    struct cvmx_npi_px_dbpair_addr_s     cn38xxp2;
42976    struct cvmx_npi_px_dbpair_addr_s     cn50xx;
42977    struct cvmx_npi_px_dbpair_addr_s     cn58xx;
42978    struct cvmx_npi_px_dbpair_addr_s     cn58xxp1;
42979} cvmx_npi_px_dbpair_addr_t;
42980
42981
42982/**
42983 * cvmx_npi_p#_instr_addr
42984 *
42985 * NPI_P0_INSTR_ADDR = NPI's Port-0 Instruction Next Read Address.
42986 *
42987 * Contains the next address to read for Port's-0 Instructions.
42988 */
42989typedef union
42990{
42991    uint64_t u64;
42992    struct cvmx_npi_px_instr_addr_s
42993    {
42994#if __BYTE_ORDER == __BIG_ENDIAN
42995        uint64_t state                   : 3;       /**< Gather engine state vector. Used to tell when
42996                                                         NADDR is valid (when STATE == 0). */
42997        uint64_t naddr                   : 61;      /**< Bits [63:3] of the next Instruction to read.
42998                                                         Value is only valid when STATE == 0. */
42999#else
43000        uint64_t naddr                   : 61;
43001        uint64_t state                   : 3;
43002#endif
43003    } s;
43004    struct cvmx_npi_px_instr_addr_s      cn30xx;
43005    struct cvmx_npi_px_instr_addr_s      cn31xx;
43006    struct cvmx_npi_px_instr_addr_s      cn38xx;
43007    struct cvmx_npi_px_instr_addr_s      cn38xxp2;
43008    struct cvmx_npi_px_instr_addr_s      cn50xx;
43009    struct cvmx_npi_px_instr_addr_s      cn58xx;
43010    struct cvmx_npi_px_instr_addr_s      cn58xxp1;
43011} cvmx_npi_px_instr_addr_t;
43012
43013
43014/**
43015 * cvmx_npi_p#_instr_cnts
43016 *
43017 * NPI_P0_INSTR_CNTS = NPI's Port-0 Instruction Counts For Packets In.
43018 *
43019 * Used to determine the number of instruction in the NPI and to be fetched for Input-Packets.
43020 */
43021typedef union
43022{
43023    uint64_t u64;
43024    struct cvmx_npi_px_instr_cnts_s
43025    {
43026#if __BYTE_ORDER == __BIG_ENDIAN
43027        uint64_t reserved_38_63          : 26;
43028        uint64_t fcnt                    : 6;       /**< Number entries in the Instruction FIFO. */
43029        uint64_t avail                   : 32;      /**< Doorbell count to be read. */
43030#else
43031        uint64_t avail                   : 32;
43032        uint64_t fcnt                    : 6;
43033        uint64_t reserved_38_63          : 26;
43034#endif
43035    } s;
43036    struct cvmx_npi_px_instr_cnts_s      cn30xx;
43037    struct cvmx_npi_px_instr_cnts_s      cn31xx;
43038    struct cvmx_npi_px_instr_cnts_s      cn38xx;
43039    struct cvmx_npi_px_instr_cnts_s      cn38xxp2;
43040    struct cvmx_npi_px_instr_cnts_s      cn50xx;
43041    struct cvmx_npi_px_instr_cnts_s      cn58xx;
43042    struct cvmx_npi_px_instr_cnts_s      cn58xxp1;
43043} cvmx_npi_px_instr_cnts_t;
43044
43045
43046/**
43047 * cvmx_npi_p#_pair_cnts
43048 *
43049 * NPI_P0_PAIR_CNTS = NPI's Port-0 Instruction Counts For Packets Out.
43050 *
43051 * Used to determine the number of instruction in the NPI and to be fetched for Output-Packets.
43052 */
43053typedef union
43054{
43055    uint64_t u64;
43056    struct cvmx_npi_px_pair_cnts_s
43057    {
43058#if __BYTE_ORDER == __BIG_ENDIAN
43059        uint64_t reserved_37_63          : 27;
43060        uint64_t fcnt                    : 5;       /**< 16 - number entries in the D/I Pair FIFO. */
43061        uint64_t avail                   : 32;      /**< Doorbell count to be read. */
43062#else
43063        uint64_t avail                   : 32;
43064        uint64_t fcnt                    : 5;
43065        uint64_t reserved_37_63          : 27;
43066#endif
43067    } s;
43068    struct cvmx_npi_px_pair_cnts_s       cn30xx;
43069    struct cvmx_npi_px_pair_cnts_s       cn31xx;
43070    struct cvmx_npi_px_pair_cnts_s       cn38xx;
43071    struct cvmx_npi_px_pair_cnts_s       cn38xxp2;
43072    struct cvmx_npi_px_pair_cnts_s       cn50xx;
43073    struct cvmx_npi_px_pair_cnts_s       cn58xx;
43074    struct cvmx_npi_px_pair_cnts_s       cn58xxp1;
43075} cvmx_npi_px_pair_cnts_t;
43076
43077
43078/**
43079 * cvmx_npi_pci_burst_size
43080 *
43081 * NPI_PCI_BURST_SIZE = NPI PCI Burst Size Register
43082 *
43083 * Control the number of words the NPI will attempt to read / write to/from the PCI.
43084 */
43085typedef union
43086{
43087    uint64_t u64;
43088    struct cvmx_npi_pci_burst_size_s
43089    {
43090#if __BYTE_ORDER == __BIG_ENDIAN
43091        uint64_t reserved_14_63          : 50;
43092        uint64_t wr_brst                 : 7;       /**< The number of 8B words to write to PCI in any one
43093                                                         write operation. A zero is equal to 128. This
43094                                                         value is used the packet reads and is clamped at
43095                                                         a max of 112 for dma writes. */
43096        uint64_t rd_brst                 : 7;       /**< Number of 8B words to read from PCI in any one
43097                                                         read operation. Legal values are 1 to 127, where
43098                                                         a 0 will be treated as a 1.
43099                                                         "For reading of packet data value is limited to 64
43100                                                         in PASS-2."
43101                                                         This value does not control the size of a read
43102                                                         caused by an IOBDMA from a PP. */
43103#else
43104        uint64_t rd_brst                 : 7;
43105        uint64_t wr_brst                 : 7;
43106        uint64_t reserved_14_63          : 50;
43107#endif
43108    } s;
43109    struct cvmx_npi_pci_burst_size_s     cn30xx;
43110    struct cvmx_npi_pci_burst_size_s     cn31xx;
43111    struct cvmx_npi_pci_burst_size_s     cn38xx;
43112    struct cvmx_npi_pci_burst_size_s     cn38xxp2;
43113    struct cvmx_npi_pci_burst_size_s     cn50xx;
43114    struct cvmx_npi_pci_burst_size_s     cn58xx;
43115    struct cvmx_npi_pci_burst_size_s     cn58xxp1;
43116} cvmx_npi_pci_burst_size_t;
43117
43118
43119/**
43120 * cvmx_npi_pci_int_arb_cfg
43121 *
43122 * NPI_PCI_INT_ARB_CFG = Configuration For PCI Arbiter
43123 *
43124 * Controls operation of the Internal PCI Arbiter.  This register should
43125 * only be written when PRST# is asserted.  NPI_PCI_INT_ARB_CFG[EN] should
43126 * only be set when Octane is a host.
43127 */
43128typedef union
43129{
43130    uint64_t u64;
43131    struct cvmx_npi_pci_int_arb_cfg_s
43132    {
43133#if __BYTE_ORDER == __BIG_ENDIAN
43134        uint64_t reserved_13_63          : 51;
43135        uint64_t hostmode                : 1;       /**< PCI Host Mode Pin (sampled for use by software).
43136                                                         This bit reflects the sampled PCI_HOSTMODE pin.
43137                                                         In HOST Mode, OCTEON drives the PCI_CLK_OUT and
43138                                                         PCI initialization pattern during PCI_RST_N deassertion).
43139                                                         *** NOTE: O9N PASS1 Addition */
43140        uint64_t pci_ovr                 : 4;       /**< PCI Host Mode Bus Speed/Type Override
43141                                                          When in Host Mode(PCI_HOSTMODE pin =1), OCTEON acting
43142                                                          as the PCI Central Agent, samples the PCI_PCI100,
43143                                                          PCI_M66EN and PCI_PCIXCAP pins to determine the
43144                                                          'sampled' PCI Bus speed and Bus Type (PCI or PCIX).
43145                                                          (see: PCI_CNT_REG[HM_SPEED,HM_PCIX])
43146                                                          However, in some cases, SW may want to override the
43147                                                          the 'sampled' PCI Bus Type/Speed, and use some
43148                                                          SLOWER Bus frequency.
43149                                                          The PCI_OVR field encoding represents the 'override'
43150                                                          PCI Bus Type/Speed which will be used to generate the
43151                                                          PCI_CLK_OUT and determines the PCI initialization pattern
43152                                                          driven during PCI_RST_N deassertion.
43153                                                              PCI_OVR[3]: OVERRIDE (0:DISABLE/1:ENABLE)
43154                                                              PCI_OVR[2]: BUS TYPE(0:PCI/1:PCIX)
43155                                                              PCI_OVR[1:0]: BUS SPEED(0:33/1:66/2:100/3:133)
43156                                                         OVERRIDE TYPE SPEED |  Override Configuration
43157                                                            [3]   [2]  [1:0] | TYPE       SPEED
43158                                                           ------------------+-------------------------------
43159                                                             0     x      xx | No override(uses 'sampled'
43160                                                                             | Bus Speed(HM_SPEED) and Bus Type(HM_PCIX)
43161                                                             1     0      00 | PCI Mode    33MHz
43162                                                             1     0      01 | PCI Mode    66MHz
43163                                                             1     0      10 | RESERVED (DO NOT USE)
43164                                                             1     0      11 | RESERVED (DO NOT USE)
43165                                                             1     1      00 | RESERVED (DO NOT USE)
43166                                                             1     1      01 | PCIX Mode   66MHz
43167                                                             1     1      10 | PCIX Mode  100MHz
43168                                                             1     1      11 | PCIX Mode  133MHz
43169                                                          NOTES:
43170                                                          - NPI_PCI_INT_ARB_CFG[PCI_OVR] has NO EFFECT on
43171                                                            PCI_CNT_REG[HM_SPEED,HM_PCIX] (ie: the sampled PCI Bus
43172                                                            Type/Speed), but WILL EFFECT PCI_CTL_STATUS_2[AP_PCIX]
43173                                                            which reflects the actual PCI Bus Type(0:PCI/1:PCIX).
43174                                                          - Software should never 'up' configure the recommended values.
43175                                                            In other words, if the 'sampled' Bus Type=PCI(HM_PCIX=0),
43176                                                            then SW should NOT attempt to set TYPE[2]=1 for PCIX Mode.
43177                                                            Likewise, if the sampled Bus Speed=66MHz(HM_SPEED=01),
43178                                                            then SW should NOT attempt to 'speed up' the bus [ie:
43179                                                            SPEED[1:0]=10(100MHz)].
43180                                                          - If PCI_OVR<3> is set prior to PCI reset de-assertion
43181                                                            in host mode, NPI_PCI_INT_ARB_CFG[PCI_OVR]
43182                                                            indicates the Bus Type/Speed that OCTEON drove on the
43183                                                            DEVSEL/STOP/TRDY pins during reset de-assertion. (user
43184                                                            should then ignore the 'sampled' Bus Type/Speed
43185                                                            contained in the PCI_CNT_REG[HM_PCIX, HM_SPEED]) fields.
43186                                                          - If PCI_OVR<3> is clear prior to PCI reset de-assertion
43187                                                            in host mode, PCI_CNT_REG[HM_PCIX,HM_SPEED])
43188                                                            indicates the Bus Type/Speed that OCTEON drove on the
43189                                                            DEVSEL/STOP/TRDY pins during reset de-assertion.
43190                                                          *** NOTE: O9N PASS1 Addition */
43191        uint64_t reserved_5_7            : 3;
43192        uint64_t en                      : 1;       /**< Internal arbiter enable. */
43193        uint64_t park_mod                : 1;       /**< Bus park mode. 0=park on last, 1=park on device. */
43194        uint64_t park_dev                : 3;       /**< Bus park device. 0-3 External device, 4 = Octane. */
43195#else
43196        uint64_t park_dev                : 3;
43197        uint64_t park_mod                : 1;
43198        uint64_t en                      : 1;
43199        uint64_t reserved_5_7            : 3;
43200        uint64_t pci_ovr                 : 4;
43201        uint64_t hostmode                : 1;
43202        uint64_t reserved_13_63          : 51;
43203#endif
43204    } s;
43205    struct cvmx_npi_pci_int_arb_cfg_cn30xx
43206    {
43207#if __BYTE_ORDER == __BIG_ENDIAN
43208        uint64_t reserved_5_63           : 59;
43209        uint64_t en                      : 1;       /**< Internal arbiter enable. */
43210        uint64_t park_mod                : 1;       /**< Bus park mode. 0=park on last, 1=park on device. */
43211        uint64_t park_dev                : 3;       /**< Bus park device. 0-3 External device, 4 = Octane. */
43212#else
43213        uint64_t park_dev                : 3;
43214        uint64_t park_mod                : 1;
43215        uint64_t en                      : 1;
43216        uint64_t reserved_5_63           : 59;
43217#endif
43218    } cn30xx;
43219    struct cvmx_npi_pci_int_arb_cfg_cn30xx cn31xx;
43220    struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xx;
43221    struct cvmx_npi_pci_int_arb_cfg_cn30xx cn38xxp2;
43222    struct cvmx_npi_pci_int_arb_cfg_s    cn50xx;
43223    struct cvmx_npi_pci_int_arb_cfg_s    cn58xx;
43224    struct cvmx_npi_pci_int_arb_cfg_s    cn58xxp1;
43225} cvmx_npi_pci_int_arb_cfg_t;
43226
43227
43228/**
43229 * cvmx_npi_pci_read_cmd
43230 *
43231 * NPI_PCI_READ_CMD = NPI PCI Read Command Register
43232 *
43233 * Controls the type of read command sent.
43234 * Writes to this register are not ordered with writes/reads to the PCI Memory space.
43235 * To ensure that a write has completed the user must read the register before
43236 * making an access(i.e. PCI memory space) that requires the value of this register to be updated.
43237 * Also any previously issued reads/writes to PCI memory space, still stored in the outbound
43238 * FIFO will use the value of this register after it has been updated.
43239 */
43240typedef union
43241{
43242    uint64_t u64;
43243    struct cvmx_npi_pci_read_cmd_s
43244    {
43245#if __BYTE_ORDER == __BIG_ENDIAN
43246        uint64_t reserved_11_63          : 53;
43247        uint64_t cmd_size                : 11;      /**< Number bytes to be read is equal to or exceeds this
43248                                                         size will cause the PCI in PCI mode to use a
43249                                                         Memory-Read-Multiple. This register has a value
43250                                                         from 8 to 2048. A value of 0-7 will be treated as
43251                                                         a value of 2048. */
43252#else
43253        uint64_t cmd_size                : 11;
43254        uint64_t reserved_11_63          : 53;
43255#endif
43256    } s;
43257    struct cvmx_npi_pci_read_cmd_s       cn30xx;
43258    struct cvmx_npi_pci_read_cmd_s       cn31xx;
43259    struct cvmx_npi_pci_read_cmd_s       cn38xx;
43260    struct cvmx_npi_pci_read_cmd_s       cn38xxp2;
43261    struct cvmx_npi_pci_read_cmd_s       cn50xx;
43262    struct cvmx_npi_pci_read_cmd_s       cn58xx;
43263    struct cvmx_npi_pci_read_cmd_s       cn58xxp1;
43264} cvmx_npi_pci_read_cmd_t;
43265
43266
43267/**
43268 * cvmx_npi_port32_instr_hdr
43269 *
43270 * NPI_PORT32_INSTR_HDR = NPI Port 32 Instruction Header
43271 *
43272 * Contains bits [62:42] of the Instruction Header for port 32.
43273 */
43274typedef union
43275{
43276    uint64_t u64;
43277    struct cvmx_npi_port32_instr_hdr_s
43278    {
43279#if __BYTE_ORDER == __BIG_ENDIAN
43280        uint64_t reserved_44_63          : 20;
43281        uint64_t pbp                     : 1;       /**< Enable Packet-by-packet mode. */
43282        uint64_t rsv_f                   : 5;       /**< Reserved */
43283        uint64_t rparmode                : 2;       /**< Parse Mode. Used when packet is raw and PBP==0. */
43284        uint64_t rsv_e                   : 1;       /**< Reserved */
43285        uint64_t rskp_len                : 7;       /**< Skip Length. Used when packet is raw and PBP==0. */
43286        uint64_t rsv_d                   : 6;       /**< Reserved */
43287        uint64_t use_ihdr                : 1;       /**< When set '1' the instruction header will be sent
43288                                                         as part of the packet data, regardless of the
43289                                                         value of bit [63] of the instruction header.
43290                                                         USE_IHDR must be set whenever PBP is set. */
43291        uint64_t rsv_c                   : 5;       /**< Reserved */
43292        uint64_t par_mode                : 2;       /**< Parse Mode. Used when USE_IHDR is set and packet
43293                                                         is not raw and PBP is not set. */
43294        uint64_t rsv_b                   : 1;       /**< Reserved
43295                                                         instruction header sent to IPD. */
43296        uint64_t skp_len                 : 7;       /**< Skip Length. Used when USE_IHDR is set and packet
43297                                                         is not raw and PBP is not set. */
43298        uint64_t rsv_a                   : 6;       /**< Reserved */
43299#else
43300        uint64_t rsv_a                   : 6;
43301        uint64_t skp_len                 : 7;
43302        uint64_t rsv_b                   : 1;
43303        uint64_t par_mode                : 2;
43304        uint64_t rsv_c                   : 5;
43305        uint64_t use_ihdr                : 1;
43306        uint64_t rsv_d                   : 6;
43307        uint64_t rskp_len                : 7;
43308        uint64_t rsv_e                   : 1;
43309        uint64_t rparmode                : 2;
43310        uint64_t rsv_f                   : 5;
43311        uint64_t pbp                     : 1;
43312        uint64_t reserved_44_63          : 20;
43313#endif
43314    } s;
43315    struct cvmx_npi_port32_instr_hdr_s   cn30xx;
43316    struct cvmx_npi_port32_instr_hdr_s   cn31xx;
43317    struct cvmx_npi_port32_instr_hdr_s   cn38xx;
43318    struct cvmx_npi_port32_instr_hdr_s   cn38xxp2;
43319    struct cvmx_npi_port32_instr_hdr_s   cn50xx;
43320    struct cvmx_npi_port32_instr_hdr_s   cn58xx;
43321    struct cvmx_npi_port32_instr_hdr_s   cn58xxp1;
43322} cvmx_npi_port32_instr_hdr_t;
43323
43324
43325/**
43326 * cvmx_npi_port33_instr_hdr
43327 *
43328 * NPI_PORT33_INSTR_HDR = NPI Port 33 Instruction Header
43329 *
43330 * Contains bits [62:42] of the Instruction Header for port 33.
43331 */
43332typedef union
43333{
43334    uint64_t u64;
43335    struct cvmx_npi_port33_instr_hdr_s
43336    {
43337#if __BYTE_ORDER == __BIG_ENDIAN
43338        uint64_t reserved_44_63          : 20;
43339        uint64_t pbp                     : 1;       /**< Enable Packet-by-packet mode. */
43340        uint64_t rsv_f                   : 5;       /**< Reserved */
43341        uint64_t rparmode                : 2;       /**< Parse Mode. Used when packet is raw and PBP==0. */
43342        uint64_t rsv_e                   : 1;       /**< Reserved */
43343        uint64_t rskp_len                : 7;       /**< Skip Length. Used when packet is raw and PBP==0. */
43344        uint64_t rsv_d                   : 6;       /**< Reserved */
43345        uint64_t use_ihdr                : 1;       /**< When set '1' the instruction header will be sent
43346                                                         as part of the packet data, regardless of the
43347                                                         value of bit [63] of the instruction header.
43348                                                         USE_IHDR must be set whenever PBP is set. */
43349        uint64_t rsv_c                   : 5;       /**< Reserved */
43350        uint64_t par_mode                : 2;       /**< Parse Mode. Used when USE_IHDR is set and packet
43351                                                         is not raw and PBP is not set. */
43352        uint64_t rsv_b                   : 1;       /**< Reserved
43353                                                         instruction header sent to IPD. */
43354        uint64_t skp_len                 : 7;       /**< Skip Length. Used when USE_IHDR is set and packet
43355                                                         is not raw and PBP is not set. */
43356        uint64_t rsv_a                   : 6;       /**< Reserved */
43357#else
43358        uint64_t rsv_a                   : 6;
43359        uint64_t skp_len                 : 7;
43360        uint64_t rsv_b                   : 1;
43361        uint64_t par_mode                : 2;
43362        uint64_t rsv_c                   : 5;
43363        uint64_t use_ihdr                : 1;
43364        uint64_t rsv_d                   : 6;
43365        uint64_t rskp_len                : 7;
43366        uint64_t rsv_e                   : 1;
43367        uint64_t rparmode                : 2;
43368        uint64_t rsv_f                   : 5;
43369        uint64_t pbp                     : 1;
43370        uint64_t reserved_44_63          : 20;
43371#endif
43372    } s;
43373    struct cvmx_npi_port33_instr_hdr_s   cn31xx;
43374    struct cvmx_npi_port33_instr_hdr_s   cn38xx;
43375    struct cvmx_npi_port33_instr_hdr_s   cn38xxp2;
43376    struct cvmx_npi_port33_instr_hdr_s   cn50xx;
43377    struct cvmx_npi_port33_instr_hdr_s   cn58xx;
43378    struct cvmx_npi_port33_instr_hdr_s   cn58xxp1;
43379} cvmx_npi_port33_instr_hdr_t;
43380
43381
43382/**
43383 * cvmx_npi_port34_instr_hdr
43384 *
43385 * NPI_PORT34_INSTR_HDR = NPI Port 34 Instruction Header
43386 *
43387 * Contains bits [62:42] of the Instruction Header for port 34. Added for PASS-2.
43388 */
43389typedef union
43390{
43391    uint64_t u64;
43392    struct cvmx_npi_port34_instr_hdr_s
43393    {
43394#if __BYTE_ORDER == __BIG_ENDIAN
43395        uint64_t reserved_44_63          : 20;
43396        uint64_t pbp                     : 1;       /**< Enable Packet-by-packet mode. */
43397        uint64_t rsv_f                   : 5;       /**< Reserved */
43398        uint64_t rparmode                : 2;       /**< Parse Mode. Used when packet is raw and PBP==0. */
43399        uint64_t rsv_e                   : 1;       /**< Reserved */
43400        uint64_t rskp_len                : 7;       /**< Skip Length. Used when packet is raw and PBP==0. */
43401        uint64_t rsv_d                   : 6;       /**< Reserved */
43402        uint64_t use_ihdr                : 1;       /**< When set '1' the instruction header will be sent
43403                                                         as part of the packet data, regardless of the
43404                                                         value of bit [63] of the instruction header.
43405                                                         USE_IHDR must be set whenever PBP is set. */
43406        uint64_t rsv_c                   : 5;       /**< Reserved */
43407        uint64_t par_mode                : 2;       /**< Parse Mode. Used when USE_IHDR is set and packet
43408                                                         is not raw and PBP is not set. */
43409        uint64_t rsv_b                   : 1;       /**< Reserved
43410                                                         instruction header sent to IPD. */
43411        uint64_t skp_len                 : 7;       /**< Skip Length. Used when USE_IHDR is set and packet
43412                                                         is not raw and PBP is not set. */
43413        uint64_t rsv_a                   : 6;       /**< Reserved */
43414#else
43415        uint64_t rsv_a                   : 6;
43416        uint64_t skp_len                 : 7;
43417        uint64_t rsv_b                   : 1;
43418        uint64_t par_mode                : 2;
43419        uint64_t rsv_c                   : 5;
43420        uint64_t use_ihdr                : 1;
43421        uint64_t rsv_d                   : 6;
43422        uint64_t rskp_len                : 7;
43423        uint64_t rsv_e                   : 1;
43424        uint64_t rparmode                : 2;
43425        uint64_t rsv_f                   : 5;
43426        uint64_t pbp                     : 1;
43427        uint64_t reserved_44_63          : 20;
43428#endif
43429    } s;
43430    struct cvmx_npi_port34_instr_hdr_s   cn38xx;
43431    struct cvmx_npi_port34_instr_hdr_s   cn38xxp2;
43432    struct cvmx_npi_port34_instr_hdr_s   cn58xx;
43433    struct cvmx_npi_port34_instr_hdr_s   cn58xxp1;
43434} cvmx_npi_port34_instr_hdr_t;
43435
43436
43437/**
43438 * cvmx_npi_port35_instr_hdr
43439 *
43440 * NPI_PORT35_INSTR_HDR = NPI Port 35 Instruction Header
43441 *
43442 * Contains bits [62:42] of the Instruction Header for port 35. Added for PASS-2.
43443 */
43444typedef union
43445{
43446    uint64_t u64;
43447    struct cvmx_npi_port35_instr_hdr_s
43448    {
43449#if __BYTE_ORDER == __BIG_ENDIAN
43450        uint64_t reserved_44_63          : 20;
43451        uint64_t pbp                     : 1;       /**< Enable Packet-by-packet mode. */
43452        uint64_t rsv_f                   : 5;       /**< Reserved */
43453        uint64_t rparmode                : 2;       /**< Parse Mode. Used when packet is raw and PBP==0. */
43454        uint64_t rsv_e                   : 1;       /**< Reserved */
43455        uint64_t rskp_len                : 7;       /**< Skip Length. Used when packet is raw and PBP==0. */
43456        uint64_t rsv_d                   : 6;       /**< Reserved */
43457        uint64_t use_ihdr                : 1;       /**< When set '1' the instruction header will be sent
43458                                                         as part of the packet data, regardless of the
43459                                                         value of bit [63] of the instruction header.
43460                                                         USE_IHDR must be set whenever PBP is set. */
43461        uint64_t rsv_c                   : 5;       /**< Reserved */
43462        uint64_t par_mode                : 2;       /**< Parse Mode. Used when USE_IHDR is set and packet
43463                                                         is not raw and PBP is not set. */
43464        uint64_t rsv_b                   : 1;       /**< Reserved
43465                                                         instruction header sent to IPD. */
43466        uint64_t skp_len                 : 7;       /**< Skip Length. Used when USE_IHDR is set and packet
43467                                                         is not raw and PBP is not set. */
43468        uint64_t rsv_a                   : 6;       /**< Reserved */
43469#else
43470        uint64_t rsv_a                   : 6;
43471        uint64_t skp_len                 : 7;
43472        uint64_t rsv_b                   : 1;
43473        uint64_t par_mode                : 2;
43474        uint64_t rsv_c                   : 5;
43475        uint64_t use_ihdr                : 1;
43476        uint64_t rsv_d                   : 6;
43477        uint64_t rskp_len                : 7;
43478        uint64_t rsv_e                   : 1;
43479        uint64_t rparmode                : 2;
43480        uint64_t rsv_f                   : 5;
43481        uint64_t pbp                     : 1;
43482        uint64_t reserved_44_63          : 20;
43483#endif
43484    } s;
43485    struct cvmx_npi_port35_instr_hdr_s   cn38xx;
43486    struct cvmx_npi_port35_instr_hdr_s   cn38xxp2;
43487    struct cvmx_npi_port35_instr_hdr_s   cn58xx;
43488    struct cvmx_npi_port35_instr_hdr_s   cn58xxp1;
43489} cvmx_npi_port35_instr_hdr_t;
43490
43491
43492/**
43493 * cvmx_npi_port_bp_control
43494 *
43495 * NPI_PORT_BP_CONTROL = Port Backpressure Control
43496 *
43497 * Enables Port Level Backpressure
43498 */
43499typedef union
43500{
43501    uint64_t u64;
43502    struct cvmx_npi_port_bp_control_s
43503    {
43504#if __BYTE_ORDER == __BIG_ENDIAN
43505        uint64_t reserved_8_63           : 56;
43506        uint64_t bp_on                   : 4;       /**< Port 35-32 port level backpressure applied. */
43507        uint64_t enb                     : 4;       /**< Enables port level backpressure from the IPD. */
43508#else
43509        uint64_t enb                     : 4;
43510        uint64_t bp_on                   : 4;
43511        uint64_t reserved_8_63           : 56;
43512#endif
43513    } s;
43514    struct cvmx_npi_port_bp_control_s    cn30xx;
43515    struct cvmx_npi_port_bp_control_s    cn31xx;
43516    struct cvmx_npi_port_bp_control_s    cn38xx;
43517    struct cvmx_npi_port_bp_control_s    cn38xxp2;
43518    struct cvmx_npi_port_bp_control_s    cn50xx;
43519    struct cvmx_npi_port_bp_control_s    cn58xx;
43520    struct cvmx_npi_port_bp_control_s    cn58xxp1;
43521} cvmx_npi_port_bp_control_t;
43522
43523
43524/**
43525 * cvmx_npi_rsl_int_blocks
43526 *
43527 * RSL_INT_BLOCKS = RSL Interrupt Blocks Register
43528 *
43529 * Reading this register will return a vector with a bit set '1' for a corresponding RSL block
43530 * that presently has an interrupt pending. The Field Description below supplies the name of the
43531 * register that software should read to find out why that intterupt bit is set.
43532 */
43533typedef union
43534{
43535    uint64_t u64;
43536    struct cvmx_npi_rsl_int_blocks_s
43537    {
43538#if __BYTE_ORDER == __BIG_ENDIAN
43539        uint64_t reserved_32_63          : 32;
43540        uint64_t rint_31                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43541        uint64_t iob                     : 1;       /**< IOB_INT_SUM */
43542        uint64_t reserved_28_29          : 2;
43543        uint64_t rint_27                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43544        uint64_t rint_26                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43545        uint64_t rint_25                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43546        uint64_t rint_24                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43547        uint64_t asx1                    : 1;       /**< ASX1_INT_REG */
43548        uint64_t asx0                    : 1;       /**< ASX0_INT_REG */
43549        uint64_t rint_21                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43550        uint64_t pip                     : 1;       /**< PIP_INT_REG. */
43551        uint64_t spx1                    : 1;       /**< SPX1_INT_REG & STX1_INT_REG */
43552        uint64_t spx0                    : 1;       /**< SPX0_INT_REG & STX0_INT_REG */
43553        uint64_t lmc                     : 1;       /**< LMC_MEM_CFG0 */
43554        uint64_t l2c                     : 1;       /**< L2T_ERR & L2D_ERR */
43555        uint64_t rint_15                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43556        uint64_t reserved_13_14          : 2;
43557        uint64_t pow                     : 1;       /**< POW_ECC_ERR */
43558        uint64_t tim                     : 1;       /**< TIM_REG_ERROR */
43559        uint64_t pko                     : 1;       /**< PKO_REG_ERROR */
43560        uint64_t ipd                     : 1;       /**< IPD_INT_SUM */
43561        uint64_t rint_8                  : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43562        uint64_t zip                     : 1;       /**< ZIP_ERROR */
43563        uint64_t dfa                     : 1;       /**< DFA_ERR */
43564        uint64_t fpa                     : 1;       /**< FPA_INT_SUM */
43565        uint64_t key                     : 1;       /**< KEY_INT_SUM */
43566        uint64_t npi                     : 1;       /**< NPI_INT_SUM */
43567        uint64_t gmx1                    : 1;       /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */
43568        uint64_t gmx0                    : 1;       /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */
43569        uint64_t mio                     : 1;       /**< MIO_BOOT_ERR */
43570#else
43571        uint64_t mio                     : 1;
43572        uint64_t gmx0                    : 1;
43573        uint64_t gmx1                    : 1;
43574        uint64_t npi                     : 1;
43575        uint64_t key                     : 1;
43576        uint64_t fpa                     : 1;
43577        uint64_t dfa                     : 1;
43578        uint64_t zip                     : 1;
43579        uint64_t rint_8                  : 1;
43580        uint64_t ipd                     : 1;
43581        uint64_t pko                     : 1;
43582        uint64_t tim                     : 1;
43583        uint64_t pow                     : 1;
43584        uint64_t reserved_13_14          : 2;
43585        uint64_t rint_15                 : 1;
43586        uint64_t l2c                     : 1;
43587        uint64_t lmc                     : 1;
43588        uint64_t spx0                    : 1;
43589        uint64_t spx1                    : 1;
43590        uint64_t pip                     : 1;
43591        uint64_t rint_21                 : 1;
43592        uint64_t asx0                    : 1;
43593        uint64_t asx1                    : 1;
43594        uint64_t rint_24                 : 1;
43595        uint64_t rint_25                 : 1;
43596        uint64_t rint_26                 : 1;
43597        uint64_t rint_27                 : 1;
43598        uint64_t reserved_28_29          : 2;
43599        uint64_t iob                     : 1;
43600        uint64_t rint_31                 : 1;
43601        uint64_t reserved_32_63          : 32;
43602#endif
43603    } s;
43604    struct cvmx_npi_rsl_int_blocks_cn30xx
43605    {
43606#if __BYTE_ORDER == __BIG_ENDIAN
43607        uint64_t reserved_32_63          : 32;
43608        uint64_t rint_31                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43609        uint64_t iob                     : 1;       /**< IOB_INT_SUM */
43610        uint64_t rint_29                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43611        uint64_t rint_28                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43612        uint64_t rint_27                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43613        uint64_t rint_26                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43614        uint64_t rint_25                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43615        uint64_t rint_24                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43616        uint64_t asx1                    : 1;       /**< ASX1_INT_REG */
43617        uint64_t asx0                    : 1;       /**< ASX0_INT_REG */
43618        uint64_t rint_21                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43619        uint64_t pip                     : 1;       /**< PIP_INT_REG. */
43620        uint64_t spx1                    : 1;       /**< SPX1_INT_REG & STX1_INT_REG */
43621        uint64_t spx0                    : 1;       /**< SPX0_INT_REG & STX0_INT_REG */
43622        uint64_t lmc                     : 1;       /**< LMC_MEM_CFG0 */
43623        uint64_t l2c                     : 1;       /**< L2T_ERR & L2D_ERR */
43624        uint64_t rint_15                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43625        uint64_t rint_14                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43626        uint64_t usb                     : 1;       /**< USBN_INT_SUM */
43627        uint64_t pow                     : 1;       /**< POW_ECC_ERR */
43628        uint64_t tim                     : 1;       /**< TIM_REG_ERROR */
43629        uint64_t pko                     : 1;       /**< PKO_REG_ERROR */
43630        uint64_t ipd                     : 1;       /**< IPD_INT_SUM */
43631        uint64_t rint_8                  : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43632        uint64_t zip                     : 1;       /**< ZIP_ERROR */
43633        uint64_t dfa                     : 1;       /**< DFA_ERR */
43634        uint64_t fpa                     : 1;       /**< FPA_INT_SUM */
43635        uint64_t key                     : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43636        uint64_t npi                     : 1;       /**< NPI_INT_SUM */
43637        uint64_t gmx1                    : 1;       /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */
43638        uint64_t gmx0                    : 1;       /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */
43639        uint64_t mio                     : 1;       /**< MIO_BOOT_ERR */
43640#else
43641        uint64_t mio                     : 1;
43642        uint64_t gmx0                    : 1;
43643        uint64_t gmx1                    : 1;
43644        uint64_t npi                     : 1;
43645        uint64_t key                     : 1;
43646        uint64_t fpa                     : 1;
43647        uint64_t dfa                     : 1;
43648        uint64_t zip                     : 1;
43649        uint64_t rint_8                  : 1;
43650        uint64_t ipd                     : 1;
43651        uint64_t pko                     : 1;
43652        uint64_t tim                     : 1;
43653        uint64_t pow                     : 1;
43654        uint64_t usb                     : 1;
43655        uint64_t rint_14                 : 1;
43656        uint64_t rint_15                 : 1;
43657        uint64_t l2c                     : 1;
43658        uint64_t lmc                     : 1;
43659        uint64_t spx0                    : 1;
43660        uint64_t spx1                    : 1;
43661        uint64_t pip                     : 1;
43662        uint64_t rint_21                 : 1;
43663        uint64_t asx0                    : 1;
43664        uint64_t asx1                    : 1;
43665        uint64_t rint_24                 : 1;
43666        uint64_t rint_25                 : 1;
43667        uint64_t rint_26                 : 1;
43668        uint64_t rint_27                 : 1;
43669        uint64_t rint_28                 : 1;
43670        uint64_t rint_29                 : 1;
43671        uint64_t iob                     : 1;
43672        uint64_t rint_31                 : 1;
43673        uint64_t reserved_32_63          : 32;
43674#endif
43675    } cn30xx;
43676    struct cvmx_npi_rsl_int_blocks_cn30xx cn31xx;
43677    struct cvmx_npi_rsl_int_blocks_cn38xx
43678    {
43679#if __BYTE_ORDER == __BIG_ENDIAN
43680        uint64_t reserved_32_63          : 32;
43681        uint64_t rint_31                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43682        uint64_t iob                     : 1;       /**< IOB_INT_SUM */
43683        uint64_t rint_29                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43684        uint64_t rint_28                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43685        uint64_t rint_27                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43686        uint64_t rint_26                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43687        uint64_t rint_25                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43688        uint64_t rint_24                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43689        uint64_t asx1                    : 1;       /**< ASX1_INT_REG */
43690        uint64_t asx0                    : 1;       /**< ASX0_INT_REG */
43691        uint64_t rint_21                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43692        uint64_t pip                     : 1;       /**< PIP_INT_REG. */
43693        uint64_t spx1                    : 1;       /**< SPX1_INT_REG & STX1_INT_REG */
43694        uint64_t spx0                    : 1;       /**< SPX0_INT_REG & STX0_INT_REG */
43695        uint64_t lmc                     : 1;       /**< LMC_MEM_CFG0 */
43696        uint64_t l2c                     : 1;       /**< L2T_ERR & L2D_ERR */
43697        uint64_t rint_15                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43698        uint64_t rint_14                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43699        uint64_t rint_13                 : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43700        uint64_t pow                     : 1;       /**< POW_ECC_ERR */
43701        uint64_t tim                     : 1;       /**< TIM_REG_ERROR */
43702        uint64_t pko                     : 1;       /**< PKO_REG_ERROR */
43703        uint64_t ipd                     : 1;       /**< IPD_INT_SUM */
43704        uint64_t rint_8                  : 1;       /**< Set '1' when RSL bLock has an interrupt. */
43705        uint64_t zip                     : 1;       /**< ZIP_ERROR */
43706        uint64_t dfa                     : 1;       /**< DFA_ERR */
43707        uint64_t fpa                     : 1;       /**< FPA_INT_SUM */
43708        uint64_t key                     : 1;       /**< KEY_INT_SUM */
43709        uint64_t npi                     : 1;       /**< NPI_INT_SUM */
43710        uint64_t gmx1                    : 1;       /**< GMX1_RX*_INT_REG & GMX1_TX_INT_REG */
43711        uint64_t gmx0                    : 1;       /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */
43712        uint64_t mio                     : 1;       /**< MIO_BOOT_ERR */
43713#else
43714        uint64_t mio                     : 1;
43715        uint64_t gmx0                    : 1;
43716        uint64_t gmx1                    : 1;
43717        uint64_t npi                     : 1;
43718        uint64_t key                     : 1;
43719        uint64_t fpa                     : 1;
43720        uint64_t dfa                     : 1;
43721        uint64_t zip                     : 1;
43722        uint64_t rint_8                  : 1;
43723        uint64_t ipd                     : 1;
43724        uint64_t pko                     : 1;
43725        uint64_t tim                     : 1;
43726        uint64_t pow                     : 1;
43727        uint64_t rint_13                 : 1;
43728        uint64_t rint_14                 : 1;
43729        uint64_t rint_15                 : 1;
43730        uint64_t l2c                     : 1;
43731        uint64_t lmc                     : 1;
43732        uint64_t spx0                    : 1;
43733        uint64_t spx1                    : 1;
43734        uint64_t pip                     : 1;
43735        uint64_t rint_21                 : 1;
43736        uint64_t asx0                    : 1;
43737        uint64_t asx1                    : 1;
43738        uint64_t rint_24                 : 1;
43739        uint64_t rint_25                 : 1;
43740        uint64_t rint_26                 : 1;
43741        uint64_t rint_27                 : 1;
43742        uint64_t rint_28                 : 1;
43743        uint64_t rint_29                 : 1;
43744        uint64_t iob                     : 1;
43745        uint64_t rint_31                 : 1;
43746        uint64_t reserved_32_63          : 32;
43747#endif
43748    } cn38xx;
43749    struct cvmx_npi_rsl_int_blocks_cn38xx cn38xxp2;
43750    struct cvmx_npi_rsl_int_blocks_cn50xx
43751    {
43752#if __BYTE_ORDER == __BIG_ENDIAN
43753        uint64_t reserved_31_63          : 33;
43754        uint64_t iob                     : 1;       /**< IOB_INT_SUM */
43755        uint64_t lmc1                    : 1;       /**< Always reads as zero */
43756        uint64_t agl                     : 1;       /**< Always reads as zero */
43757        uint64_t reserved_24_27          : 4;
43758        uint64_t asx1                    : 1;       /**< Always reads as zero */
43759        uint64_t asx0                    : 1;       /**< ASX0_INT_REG */
43760        uint64_t reserved_21_21          : 1;
43761        uint64_t pip                     : 1;       /**< PIP_INT_REG. */
43762        uint64_t spx1                    : 1;       /**< Always reads as zero */
43763        uint64_t spx0                    : 1;       /**< Always reads as zero */
43764        uint64_t lmc                     : 1;       /**< LMC_MEM_CFG0 */
43765        uint64_t l2c                     : 1;       /**< L2T_ERR & L2D_ERR */
43766        uint64_t reserved_15_15          : 1;
43767        uint64_t rad                     : 1;       /**< Always reads as zero */
43768        uint64_t usb                     : 1;       /**< USBN_INT_SUM */
43769        uint64_t pow                     : 1;       /**< POW_ECC_ERR */
43770        uint64_t tim                     : 1;       /**< TIM_REG_ERROR */
43771        uint64_t pko                     : 1;       /**< PKO_REG_ERROR */
43772        uint64_t ipd                     : 1;       /**< IPD_INT_SUM */
43773        uint64_t reserved_8_8            : 1;
43774        uint64_t zip                     : 1;       /**< Always reads as zero */
43775        uint64_t dfa                     : 1;       /**< Always reads as zero */
43776        uint64_t fpa                     : 1;       /**< FPA_INT_SUM */
43777        uint64_t key                     : 1;       /**< Always reads as zero */
43778        uint64_t npi                     : 1;       /**< NPI_INT_SUM */
43779        uint64_t gmx1                    : 1;       /**< Always reads as zero */
43780        uint64_t gmx0                    : 1;       /**< GMX0_RX*_INT_REG & GMX0_TX_INT_REG */
43781        uint64_t mio                     : 1;       /**< MIO_BOOT_ERR */
43782#else
43783        uint64_t mio                     : 1;
43784        uint64_t gmx0                    : 1;
43785        uint64_t gmx1                    : 1;
43786        uint64_t npi                     : 1;
43787        uint64_t key                     : 1;
43788        uint64_t fpa                     : 1;
43789        uint64_t dfa                     : 1;
43790        uint64_t zip                     : 1;
43791        uint64_t reserved_8_8            : 1;
43792        uint64_t ipd                     : 1;
43793        uint64_t pko                     : 1;
43794        uint64_t tim                     : 1;
43795        uint64_t pow                     : 1;
43796        uint64_t usb                     : 1;
43797        uint64_t rad                     : 1;
43798        uint64_t reserved_15_15          : 1;
43799        uint64_t l2c                     : 1;
43800        uint64_t lmc                     : 1;
43801        uint64_t spx0                    : 1;
43802        uint64_t spx1                    : 1;
43803        uint64_t pip                     : 1;
43804        uint64_t reserved_21_21          : 1;
43805        uint64_t asx0                    : 1;
43806        uint64_t asx1                    : 1;
43807        uint64_t reserved_24_27          : 4;
43808        uint64_t agl                     : 1;
43809        uint64_t lmc1                    : 1;
43810        uint64_t iob                     : 1;
43811        uint64_t reserved_31_63          : 33;
43812#endif
43813    } cn50xx;
43814    struct cvmx_npi_rsl_int_blocks_cn38xx cn58xx;
43815    struct cvmx_npi_rsl_int_blocks_cn38xx cn58xxp1;
43816} cvmx_npi_rsl_int_blocks_t;
43817
43818
43819/**
43820 * cvmx_npi_size_input#
43821 *
43822 * NPI_SIZE_INPUT0 = NPI's Size for Input 0 Register
43823 *
43824 * The size (in instructions) of Instruction Queue-0.
43825 */
43826typedef union
43827{
43828    uint64_t u64;
43829    struct cvmx_npi_size_inputx_s
43830    {
43831#if __BYTE_ORDER == __BIG_ENDIAN
43832        uint64_t reserved_32_63          : 32;
43833        uint64_t size                    : 32;      /**< The size of the Instruction Queue used by Octane.
43834                                                         The value [SIZE] is in Instructions.
43835                                                         A value of 0 in this field is illegal. */
43836#else
43837        uint64_t size                    : 32;
43838        uint64_t reserved_32_63          : 32;
43839#endif
43840    } s;
43841    struct cvmx_npi_size_inputx_s        cn30xx;
43842    struct cvmx_npi_size_inputx_s        cn31xx;
43843    struct cvmx_npi_size_inputx_s        cn38xx;
43844    struct cvmx_npi_size_inputx_s        cn38xxp2;
43845    struct cvmx_npi_size_inputx_s        cn50xx;
43846    struct cvmx_npi_size_inputx_s        cn58xx;
43847    struct cvmx_npi_size_inputx_s        cn58xxp1;
43848} cvmx_npi_size_inputx_t;
43849
43850
43851/**
43852 * cvmx_npi_win_read_to
43853 *
43854 * NPI_WIN_READ_TO = NPI WINDOW READ Timeout Register
43855 *
43856 * Number of core clocks to wait before timing out on a WINDOW-READ to the NCB.
43857 */
43858typedef union
43859{
43860    uint64_t u64;
43861    struct cvmx_npi_win_read_to_s
43862    {
43863#if __BYTE_ORDER == __BIG_ENDIAN
43864        uint64_t reserved_32_63          : 32;
43865        uint64_t time                    : 32;      /**< Time to wait in core clocks. A value of 0 will
43866                                                         cause no timeouts. */
43867#else
43868        uint64_t time                    : 32;
43869        uint64_t reserved_32_63          : 32;
43870#endif
43871    } s;
43872    struct cvmx_npi_win_read_to_s        cn30xx;
43873    struct cvmx_npi_win_read_to_s        cn31xx;
43874    struct cvmx_npi_win_read_to_s        cn38xx;
43875    struct cvmx_npi_win_read_to_s        cn38xxp2;
43876    struct cvmx_npi_win_read_to_s        cn50xx;
43877    struct cvmx_npi_win_read_to_s        cn58xx;
43878    struct cvmx_npi_win_read_to_s        cn58xxp1;
43879} cvmx_npi_win_read_to_t;
43880
43881
43882/**
43883 * cvmx_pci_bar1_index#
43884 *
43885 * PCI_BAR1_INDEXX = PCI IndexX Register
43886 *
43887 * Contains address index and control bits for access to memory ranges of Bar-1,
43888 * when PCI supplied address-bits [26:22] == X.
43889 */
43890typedef union
43891{
43892    uint32_t u32;
43893    struct cvmx_pci_bar1_indexx_s
43894    {
43895#if __BYTE_ORDER == __BIG_ENDIAN
43896        uint32_t reserved_18_31          : 14;
43897        uint32_t addr_idx                : 14;      /**< Address bits [35:22] sent to L2C */
43898        uint32_t ca                      : 1;       /**< Set '1' when access is not to be cached in L2. */
43899        uint32_t end_swp                 : 2;       /**< Endian Swap Mode */
43900        uint32_t addr_v                  : 1;       /**< Set '1' when the selected address range is valid. */
43901#else
43902        uint32_t addr_v                  : 1;
43903        uint32_t end_swp                 : 2;
43904        uint32_t ca                      : 1;
43905        uint32_t addr_idx                : 14;
43906        uint32_t reserved_18_31          : 14;
43907#endif
43908    } s;
43909    struct cvmx_pci_bar1_indexx_s        cn30xx;
43910    struct cvmx_pci_bar1_indexx_s        cn31xx;
43911    struct cvmx_pci_bar1_indexx_s        cn38xx;
43912    struct cvmx_pci_bar1_indexx_s        cn38xxp2;
43913    struct cvmx_pci_bar1_indexx_s        cn50xx;
43914    struct cvmx_pci_bar1_indexx_s        cn58xx;
43915    struct cvmx_pci_bar1_indexx_s        cn58xxp1;
43916} cvmx_pci_bar1_indexx_t;
43917
43918
43919/**
43920 * cvmx_pci_bist_reg
43921 *
43922 * PCI_BIST_REG = PCI PNI BIST Status Register
43923 *
43924 * Contains the bist results for the PNI memories.
43925 */
43926typedef union
43927{
43928    uint64_t u64;
43929    struct cvmx_pci_bist_reg_s
43930    {
43931#if __BYTE_ORDER == __BIG_ENDIAN
43932        uint64_t reserved_10_63          : 54;
43933        uint64_t rsp_bs                  : 1;       /**< Bist Status For b12_rsp_fifo_bist
43934                                                         The value of this register is available 100,000
43935                                                         core clocks + 21,000 pclks after:
43936                                                         Host Mode - deassertion of pci_rst_n
43937                                                         Non Host Mode - deassertion of pci_rst_n */
43938        uint64_t dma0_bs                 : 1;       /**< Bist Status For dmao_count
43939                                                         The value of this register is available 100,000
43940                                                         core clocks + 21,000 pclks after:
43941                                                         Host Mode - deassertion of pci_rst_n
43942                                                         Non Host Mode - deassertion of pci_rst_n */
43943        uint64_t cmd0_bs                 : 1;       /**< Bist Status For npi_cmd0_pni_am0
43944                                                         The value of this register is available 100,000
43945                                                         core clocks + 21,000 pclks after:
43946                                                         Host Mode - deassertion of pci_rst_n
43947                                                         Non Host Mode - deassertion of pci_rst_n */
43948        uint64_t cmd_bs                  : 1;       /**< Bist Status For npi_cmd_pni_am1
43949                                                         The value of this register is available 100,000
43950                                                         core clocks + 21,000 pclks after:
43951                                                         Host Mode - deassertion of pci_rst_n
43952                                                         Non Host Mode - deassertion of pci_rst_n */
43953        uint64_t csr2p_bs                : 1;       /**< Bist Status For npi_csr_2_pni_am
43954                                                         The value of this register is available 100,000
43955                                                         core clocks + 21,000 pclks after:
43956                                                         Host Mode - deassertion of pci_rst_n
43957                                                         Non Host Mode - deassertion of pci_rst_n */
43958        uint64_t csrr_bs                 : 1;       /**< Bist Status For npi_csr_rsp_2_pni_am
43959                                                         The value of this register is available 100,000
43960                                                         core clocks + 21,000 pclks after:
43961                                                         Host Mode - deassertion of pci_rst_n
43962                                                         Non Host Mode - deassertion of pci_rst_n */
43963        uint64_t rsp2p_bs                : 1;       /**< Bist Status For npi_rsp_2_pni_am
43964                                                         The value of this register is available 100,000
43965                                                         core clocks + 21,000 pclks after:
43966                                                         Host Mode - deassertion of pci_rst_n
43967                                                         Non Host Mode - deassertion of pci_rst_n */
43968        uint64_t csr2n_bs                : 1;       /**< Bist Status For pni_csr_2_npi_am
43969                                                         The value of this register is available 100,000
43970                                                         core clocks + 21,000 pclks after:
43971                                                         Host Mode - deassertion of pci_rst_n
43972                                                         Non Host Mode - deassertion of pci_rst_n */
43973        uint64_t dat2n_bs                : 1;       /**< Bist Status For pni_data_2_npi_am
43974                                                         The value of this register is available 100,000
43975                                                         core clocks + 21,000 pclks after:
43976                                                         Host Mode - deassertion of pci_rst_n
43977                                                         Non Host Mode - deassertion of pci_rst_n */
43978        uint64_t dbg2n_bs                : 1;       /**< Bist Status For pni_dbg_data_2_npi_am
43979                                                         The value of this register is available 100,000
43980                                                         core clocks + 21,000 pclks after:
43981                                                         Host Mode - deassertion of pci_rst_n
43982                                                         Non Host Mode - deassertion of pci_rst_n */
43983#else
43984        uint64_t dbg2n_bs                : 1;
43985        uint64_t dat2n_bs                : 1;
43986        uint64_t csr2n_bs                : 1;
43987        uint64_t rsp2p_bs                : 1;
43988        uint64_t csrr_bs                 : 1;
43989        uint64_t csr2p_bs                : 1;
43990        uint64_t cmd_bs                  : 1;
43991        uint64_t cmd0_bs                 : 1;
43992        uint64_t dma0_bs                 : 1;
43993        uint64_t rsp_bs                  : 1;
43994        uint64_t reserved_10_63          : 54;
43995#endif
43996    } s;
43997    struct cvmx_pci_bist_reg_s           cn50xx;
43998} cvmx_pci_bist_reg_t;
43999
44000
44001/**
44002 * cvmx_pci_cfg00
44003 *
44004 * Registers at address 0x1000 -> 0x17FF are PNI
44005 * Start at 0x100 into range
44006 * these are shifted by 2 to the left to make address
44007 *                Registers at address 0x1800 -> 0x18FF are CFG
44008 * these are shifted by 2 to the left to make address
44009 *
44010 *           PCI_CFG00 = First 32-bits of PCI config space (PCI Vendor + Device)
44011 *
44012 * This register contains the first 32-bits of the PCI config space registers
44013 */
44014typedef union
44015{
44016    uint32_t u32;
44017    struct cvmx_pci_cfg00_s
44018    {
44019#if __BYTE_ORDER == __BIG_ENDIAN
44020        uint32_t devid                   : 16;      /**< This is the device ID for OCTEON (90nm shhrink) */
44021        uint32_t vendid                  : 16;      /**< This is the Cavium's vendor ID */
44022#else
44023        uint32_t vendid                  : 16;
44024        uint32_t devid                   : 16;
44025#endif
44026    } s;
44027    struct cvmx_pci_cfg00_s              cn30xx;
44028    struct cvmx_pci_cfg00_s              cn31xx;
44029    struct cvmx_pci_cfg00_s              cn38xx;
44030    struct cvmx_pci_cfg00_s              cn38xxp2;
44031    struct cvmx_pci_cfg00_s              cn50xx;
44032    struct cvmx_pci_cfg00_s              cn58xx;
44033    struct cvmx_pci_cfg00_s              cn58xxp1;
44034} cvmx_pci_cfg00_t;
44035
44036
44037/**
44038 * cvmx_pci_cfg01
44039 *
44040 * PCI_CFG01 = Second 32-bits of PCI config space (Command/Status Register)
44041 *
44042 */
44043typedef union
44044{
44045    uint32_t u32;
44046    struct cvmx_pci_cfg01_s
44047    {
44048#if __BYTE_ORDER == __BIG_ENDIAN
44049        uint32_t dpe                     : 1;       /**< Detected Parity Error */
44050        uint32_t sse                     : 1;       /**< Signaled System Error */
44051        uint32_t rma                     : 1;       /**< Received Master Abort */
44052        uint32_t rta                     : 1;       /**< Received Target Abort */
44053        uint32_t sta                     : 1;       /**< Signaled Target Abort */
44054        uint32_t devt                    : 2;       /**< DEVSEL# timing (for PCI only/for PCIX = don't care) */
44055        uint32_t mdpe                    : 1;       /**< Master Data Parity Error */
44056        uint32_t fbb                     : 1;       /**< Fast Back-to-Back Transactions Capable
44057                                                         Mode Dependent (1 = PCI Mode / 0 = PCIX Mode) */
44058        uint32_t reserved_22_22          : 1;
44059        uint32_t m66                     : 1;       /**< 66MHz Capable */
44060        uint32_t cle                     : 1;       /**< Capabilities List Enable */
44061        uint32_t i_stat                  : 1;       /**< When INTx# is asserted by OCTEON this bit will be set.
44062                                                         When deasserted by OCTEON this bit will be cleared. */
44063        uint32_t reserved_11_18          : 8;
44064        uint32_t i_dis                   : 1;       /**< When asserted '1' disables the generation of INTx#
44065                                                         by OCTEON. When disabled '0' allows assertion of INTx#
44066                                                         by OCTEON. */
44067        uint32_t fbbe                    : 1;       /**< Fast Back to Back Transaction Enable */
44068        uint32_t see                     : 1;       /**< System Error Enable */
44069        uint32_t ads                     : 1;       /**< Address/Data Stepping
44070                                                         NOTE: Octeon does NOT support address/data stepping. */
44071        uint32_t pee                     : 1;       /**< PERR# Enable */
44072        uint32_t vps                     : 1;       /**< VGA Palette Snooping */
44073        uint32_t mwice                   : 1;       /**< Memory Write & Invalidate Command Enable */
44074        uint32_t scse                    : 1;       /**< Special Cycle Snooping Enable */
44075        uint32_t me                      : 1;       /**< Master Enable
44076                                                         Must be set for OCTEON to master a PCI/PCI-X
44077                                                         transaction. This should always be set any time
44078                                                         that OCTEON is connected to a PCI/PCI-X bus. */
44079        uint32_t msae                    : 1;       /**< Memory Space Access Enable
44080                                                         Must be set to recieve a PCI/PCI-X memory space
44081                                                         transaction. This must always be set any time that
44082                                                         OCTEON is connected to a PCI/PCI-X bus. */
44083        uint32_t isae                    : 1;       /**< I/O Space Access Enable
44084                                                         NOTE: For OCTEON, this bit MUST NEVER be set
44085                                                         (it is read-only and OCTEON does not respond to I/O
44086                                                         Space accesses). */
44087#else
44088        uint32_t isae                    : 1;
44089        uint32_t msae                    : 1;
44090        uint32_t me                      : 1;
44091        uint32_t scse                    : 1;
44092        uint32_t mwice                   : 1;
44093        uint32_t vps                     : 1;
44094        uint32_t pee                     : 1;
44095        uint32_t ads                     : 1;
44096        uint32_t see                     : 1;
44097        uint32_t fbbe                    : 1;
44098        uint32_t i_dis                   : 1;
44099        uint32_t reserved_11_18          : 8;
44100        uint32_t i_stat                  : 1;
44101        uint32_t cle                     : 1;
44102        uint32_t m66                     : 1;
44103        uint32_t reserved_22_22          : 1;
44104        uint32_t fbb                     : 1;
44105        uint32_t mdpe                    : 1;
44106        uint32_t devt                    : 2;
44107        uint32_t sta                     : 1;
44108        uint32_t rta                     : 1;
44109        uint32_t rma                     : 1;
44110        uint32_t sse                     : 1;
44111        uint32_t dpe                     : 1;
44112#endif
44113    } s;
44114    struct cvmx_pci_cfg01_s              cn30xx;
44115    struct cvmx_pci_cfg01_s              cn31xx;
44116    struct cvmx_pci_cfg01_s              cn38xx;
44117    struct cvmx_pci_cfg01_s              cn38xxp2;
44118    struct cvmx_pci_cfg01_s              cn50xx;
44119    struct cvmx_pci_cfg01_s              cn58xx;
44120    struct cvmx_pci_cfg01_s              cn58xxp1;
44121} cvmx_pci_cfg01_t;
44122
44123
44124/**
44125 * cvmx_pci_cfg02
44126 *
44127 * PCI_CFG02 = Third 32-bits of PCI config space (Class Code / Revision ID)
44128 *
44129 */
44130typedef union
44131{
44132    uint32_t u32;
44133    struct cvmx_pci_cfg02_s
44134    {
44135#if __BYTE_ORDER == __BIG_ENDIAN
44136        uint32_t cc                      : 24;      /**< Class Code (Processor/MIPS)
44137                                                         (was 0x100000 in pass 1 and pass 2) */
44138        uint32_t rid                     : 8;       /**< Revision ID
44139                                                         (0 in pass 1, 1 in pass 1.1, 8 in pass 2.0) */
44140#else
44141        uint32_t rid                     : 8;
44142        uint32_t cc                      : 24;
44143#endif
44144    } s;
44145    struct cvmx_pci_cfg02_s              cn30xx;
44146    struct cvmx_pci_cfg02_s              cn31xx;
44147    struct cvmx_pci_cfg02_s              cn38xx;
44148    struct cvmx_pci_cfg02_s              cn38xxp2;
44149    struct cvmx_pci_cfg02_s              cn50xx;
44150    struct cvmx_pci_cfg02_s              cn58xx;
44151    struct cvmx_pci_cfg02_s              cn58xxp1;
44152} cvmx_pci_cfg02_t;
44153
44154
44155/**
44156 * cvmx_pci_cfg03
44157 *
44158 * PCI_CFG03 = Fourth 32-bits of PCI config space (BIST, HEADER Type, Latency timer, line size)
44159 *
44160 */
44161typedef union
44162{
44163    uint32_t u32;
44164    struct cvmx_pci_cfg03_s
44165    {
44166#if __BYTE_ORDER == __BIG_ENDIAN
44167        uint32_t bcap                    : 1;       /**< BIST Capable */
44168        uint32_t brb                     : 1;       /**< BIST Request/busy bit
44169                                                         Note: OCTEON does not support PCI BIST, therefore
44170                                                         this bit should remain zero. */
44171        uint32_t reserved_28_29          : 2;
44172        uint32_t bcod                    : 4;       /**< BIST Code */
44173        uint32_t ht                      : 8;       /**< Header Type (Type 0) */
44174        uint32_t lt                      : 8;       /**< Latency Timer
44175                                                         (0=PCI)                 (0=PCI)
44176                                                         (0x40=PCIX)             (0x40=PCIX) */
44177        uint32_t cls                     : 8;       /**< Cache Line Size */
44178#else
44179        uint32_t cls                     : 8;
44180        uint32_t lt                      : 8;
44181        uint32_t ht                      : 8;
44182        uint32_t bcod                    : 4;
44183        uint32_t reserved_28_29          : 2;
44184        uint32_t brb                     : 1;
44185        uint32_t bcap                    : 1;
44186#endif
44187    } s;
44188    struct cvmx_pci_cfg03_s              cn30xx;
44189    struct cvmx_pci_cfg03_s              cn31xx;
44190    struct cvmx_pci_cfg03_s              cn38xx;
44191    struct cvmx_pci_cfg03_s              cn38xxp2;
44192    struct cvmx_pci_cfg03_s              cn50xx;
44193    struct cvmx_pci_cfg03_s              cn58xx;
44194    struct cvmx_pci_cfg03_s              cn58xxp1;
44195} cvmx_pci_cfg03_t;
44196
44197
44198/**
44199 * cvmx_pci_cfg04
44200 *
44201 * PCI_CFG04 = Fifth 32-bits of PCI config space (Base Address Register 0 - Low)
44202 *
44203 * Description: BAR0: 4KB 64-bit Prefetchable Memory Space
44204 *       [0]:     0 (Memory Space)
44205 *       [2:1]:   2 (64bit memory decoder)
44206 *       [3]:     1 (Prefetchable)
44207 *       [11:4]:  RAZ (to imply 4KB space)
44208 *       [31:12]: RW (User may define base address)
44209 */
44210typedef union
44211{
44212    uint32_t u32;
44213    struct cvmx_pci_cfg04_s
44214    {
44215#if __BYTE_ORDER == __BIG_ENDIAN
44216        uint32_t lbase                   : 20;      /**< Base Address[31:12]
44217                                                         Base Address[30:12] read as zero if
44218                                                         PCI_CTL_STATUS_2[BB0] is set (in pass 3+) */
44219        uint32_t lbasez                  : 8;       /**< Base Address[11:4] (Read as Zero) */
44220        uint32_t pf                      : 1;       /**< Prefetchable Space */
44221        uint32_t typ                     : 2;       /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */
44222        uint32_t mspc                    : 1;       /**< Memory Space Indicator */
44223#else
44224        uint32_t mspc                    : 1;
44225        uint32_t typ                     : 2;
44226        uint32_t pf                      : 1;
44227        uint32_t lbasez                  : 8;
44228        uint32_t lbase                   : 20;
44229#endif
44230    } s;
44231    struct cvmx_pci_cfg04_s              cn30xx;
44232    struct cvmx_pci_cfg04_s              cn31xx;
44233    struct cvmx_pci_cfg04_s              cn38xx;
44234    struct cvmx_pci_cfg04_s              cn38xxp2;
44235    struct cvmx_pci_cfg04_s              cn50xx;
44236    struct cvmx_pci_cfg04_s              cn58xx;
44237    struct cvmx_pci_cfg04_s              cn58xxp1;
44238} cvmx_pci_cfg04_t;
44239
44240
44241/**
44242 * cvmx_pci_cfg05
44243 *
44244 * PCI_CFG05 = Sixth 32-bits of PCI config space (Base Address Register 0 - High)
44245 *
44246 */
44247typedef union
44248{
44249    uint32_t u32;
44250    struct cvmx_pci_cfg05_s
44251    {
44252#if __BYTE_ORDER == __BIG_ENDIAN
44253        uint32_t hbase                   : 32;      /**< Base Address[63:32] */
44254#else
44255        uint32_t hbase                   : 32;
44256#endif
44257    } s;
44258    struct cvmx_pci_cfg05_s              cn30xx;
44259    struct cvmx_pci_cfg05_s              cn31xx;
44260    struct cvmx_pci_cfg05_s              cn38xx;
44261    struct cvmx_pci_cfg05_s              cn38xxp2;
44262    struct cvmx_pci_cfg05_s              cn50xx;
44263    struct cvmx_pci_cfg05_s              cn58xx;
44264    struct cvmx_pci_cfg05_s              cn58xxp1;
44265} cvmx_pci_cfg05_t;
44266
44267
44268/**
44269 * cvmx_pci_cfg06
44270 *
44271 * PCI_CFG06 = Seventh 32-bits of PCI config space (Base Address Register 1 - Low)
44272 *
44273 * Description: BAR1: 128MB 64-bit Prefetchable Memory Space
44274 *       [0]:     0 (Memory Space)
44275 *       [2:1]:   2 (64bit memory decoder)
44276 *       [3]:     1 (Prefetchable)
44277 *       [26:4]:  RAZ (to imply 128MB space)
44278 *       [31:27]: RW (User may define base address)
44279 */
44280typedef union
44281{
44282    uint32_t u32;
44283    struct cvmx_pci_cfg06_s
44284    {
44285#if __BYTE_ORDER == __BIG_ENDIAN
44286        uint32_t lbase                   : 5;       /**< Base Address[31:27]
44287                                                         In pass 3+:
44288                                                           Base Address[29:27] read as zero if
44289                                                            PCI_CTL_STATUS_2[BB1] is set
44290                                                           Base Address[30] reads as zero if
44291                                                            PCI_CTL_STATUS_2[BB1] is set and
44292                                                            PCI_CTL_STATUS_2[BB1_SIZE] is set */
44293        uint32_t lbasez                  : 23;      /**< Base Address[26:4] (Read as Zero) */
44294        uint32_t pf                      : 1;       /**< Prefetchable Space */
44295        uint32_t typ                     : 2;       /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */
44296        uint32_t mspc                    : 1;       /**< Memory Space Indicator */
44297#else
44298        uint32_t mspc                    : 1;
44299        uint32_t typ                     : 2;
44300        uint32_t pf                      : 1;
44301        uint32_t lbasez                  : 23;
44302        uint32_t lbase                   : 5;
44303#endif
44304    } s;
44305    struct cvmx_pci_cfg06_s              cn30xx;
44306    struct cvmx_pci_cfg06_s              cn31xx;
44307    struct cvmx_pci_cfg06_s              cn38xx;
44308    struct cvmx_pci_cfg06_s              cn38xxp2;
44309    struct cvmx_pci_cfg06_s              cn50xx;
44310    struct cvmx_pci_cfg06_s              cn58xx;
44311    struct cvmx_pci_cfg06_s              cn58xxp1;
44312} cvmx_pci_cfg06_t;
44313
44314
44315/**
44316 * cvmx_pci_cfg07
44317 *
44318 * PCI_CFG07 = Eighth 32-bits of PCI config space (Base Address Register 1 - High)
44319 *
44320 */
44321typedef union
44322{
44323    uint32_t u32;
44324    struct cvmx_pci_cfg07_s
44325    {
44326#if __BYTE_ORDER == __BIG_ENDIAN
44327        uint32_t hbase                   : 32;      /**< Base Address[63:32] */
44328#else
44329        uint32_t hbase                   : 32;
44330#endif
44331    } s;
44332    struct cvmx_pci_cfg07_s              cn30xx;
44333    struct cvmx_pci_cfg07_s              cn31xx;
44334    struct cvmx_pci_cfg07_s              cn38xx;
44335    struct cvmx_pci_cfg07_s              cn38xxp2;
44336    struct cvmx_pci_cfg07_s              cn50xx;
44337    struct cvmx_pci_cfg07_s              cn58xx;
44338    struct cvmx_pci_cfg07_s              cn58xxp1;
44339} cvmx_pci_cfg07_t;
44340
44341
44342/**
44343 * cvmx_pci_cfg08
44344 *
44345 * PCI_CFG08 = Ninth 32-bits of PCI config space (Base Address Register 2 - Low)
44346 *
44347 * Description: BAR1: 2^39 (512GB) 64-bit Prefetchable Memory Space
44348 *       [0]:     0 (Memory Space)
44349 *       [2:1]:   2 (64bit memory decoder)
44350 *       [3]:     1 (Prefetchable)
44351 *       [31:4]:  RAZ
44352 */
44353typedef union
44354{
44355    uint32_t u32;
44356    struct cvmx_pci_cfg08_s
44357    {
44358#if __BYTE_ORDER == __BIG_ENDIAN
44359        uint32_t lbasez                  : 28;      /**< Base Address[31:4] (Read as Zero) */
44360        uint32_t pf                      : 1;       /**< Prefetchable Space */
44361        uint32_t typ                     : 2;       /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */
44362        uint32_t mspc                    : 1;       /**< Memory Space Indicator */
44363#else
44364        uint32_t mspc                    : 1;
44365        uint32_t typ                     : 2;
44366        uint32_t pf                      : 1;
44367        uint32_t lbasez                  : 28;
44368#endif
44369    } s;
44370    struct cvmx_pci_cfg08_s              cn30xx;
44371    struct cvmx_pci_cfg08_s              cn31xx;
44372    struct cvmx_pci_cfg08_s              cn38xx;
44373    struct cvmx_pci_cfg08_s              cn38xxp2;
44374    struct cvmx_pci_cfg08_s              cn50xx;
44375    struct cvmx_pci_cfg08_s              cn58xx;
44376    struct cvmx_pci_cfg08_s              cn58xxp1;
44377} cvmx_pci_cfg08_t;
44378
44379
44380/**
44381 * cvmx_pci_cfg09
44382 *
44383 * PCI_CFG09 = Tenth 32-bits of PCI config space (Base Address Register 2 - High)
44384 *
44385 */
44386typedef union
44387{
44388    uint32_t u32;
44389    struct cvmx_pci_cfg09_s
44390    {
44391#if __BYTE_ORDER == __BIG_ENDIAN
44392        uint32_t hbase                   : 25;      /**< Base Address[63:39] */
44393        uint32_t hbasez                  : 7;       /**< Base Address[38:31]  (Read as Zero) */
44394#else
44395        uint32_t hbasez                  : 7;
44396        uint32_t hbase                   : 25;
44397#endif
44398    } s;
44399    struct cvmx_pci_cfg09_s              cn30xx;
44400    struct cvmx_pci_cfg09_s              cn31xx;
44401    struct cvmx_pci_cfg09_s              cn38xx;
44402    struct cvmx_pci_cfg09_s              cn38xxp2;
44403    struct cvmx_pci_cfg09_s              cn50xx;
44404    struct cvmx_pci_cfg09_s              cn58xx;
44405    struct cvmx_pci_cfg09_s              cn58xxp1;
44406} cvmx_pci_cfg09_t;
44407
44408
44409/**
44410 * cvmx_pci_cfg10
44411 *
44412 * PCI_CFG10 = Eleventh 32-bits of PCI config space (Card Bus CIS Pointer)
44413 *
44414 */
44415typedef union
44416{
44417    uint32_t u32;
44418    struct cvmx_pci_cfg10_s
44419    {
44420#if __BYTE_ORDER == __BIG_ENDIAN
44421        uint32_t cisp                    : 32;      /**< CardBus CIS Pointer (UNUSED) */
44422#else
44423        uint32_t cisp                    : 32;
44424#endif
44425    } s;
44426    struct cvmx_pci_cfg10_s              cn30xx;
44427    struct cvmx_pci_cfg10_s              cn31xx;
44428    struct cvmx_pci_cfg10_s              cn38xx;
44429    struct cvmx_pci_cfg10_s              cn38xxp2;
44430    struct cvmx_pci_cfg10_s              cn50xx;
44431    struct cvmx_pci_cfg10_s              cn58xx;
44432    struct cvmx_pci_cfg10_s              cn58xxp1;
44433} cvmx_pci_cfg10_t;
44434
44435
44436/**
44437 * cvmx_pci_cfg11
44438 *
44439 * PCI_CFG11 = Twelfth 32-bits of PCI config space (SubSystem ID/Subsystem Vendor ID Register)
44440 *
44441 */
44442typedef union
44443{
44444    uint32_t u32;
44445    struct cvmx_pci_cfg11_s
44446    {
44447#if __BYTE_ORDER == __BIG_ENDIAN
44448        uint32_t ssid                    : 16;      /**< SubSystem ID */
44449        uint32_t ssvid                   : 16;      /**< Subsystem Vendor ID */
44450#else
44451        uint32_t ssvid                   : 16;
44452        uint32_t ssid                    : 16;
44453#endif
44454    } s;
44455    struct cvmx_pci_cfg11_s              cn30xx;
44456    struct cvmx_pci_cfg11_s              cn31xx;
44457    struct cvmx_pci_cfg11_s              cn38xx;
44458    struct cvmx_pci_cfg11_s              cn38xxp2;
44459    struct cvmx_pci_cfg11_s              cn50xx;
44460    struct cvmx_pci_cfg11_s              cn58xx;
44461    struct cvmx_pci_cfg11_s              cn58xxp1;
44462} cvmx_pci_cfg11_t;
44463
44464
44465/**
44466 * cvmx_pci_cfg12
44467 *
44468 * PCI_CFG12 = Thirteenth 32-bits of PCI config space (Expansion ROM Base Address Register)
44469 *
44470 */
44471typedef union
44472{
44473    uint32_t u32;
44474    struct cvmx_pci_cfg12_s
44475    {
44476#if __BYTE_ORDER == __BIG_ENDIAN
44477        uint32_t erbar                   : 16;      /**< Expansion ROM Base Address[31:16] 64KB in size */
44478        uint32_t erbarz                  : 5;       /**< Expansion ROM Base Base Address (Read as Zero) */
44479        uint32_t reserved_1_10           : 10;
44480        uint32_t erbar_en                : 1;       /**< Expansion ROM Address Decode Enable */
44481#else
44482        uint32_t erbar_en                : 1;
44483        uint32_t reserved_1_10           : 10;
44484        uint32_t erbarz                  : 5;
44485        uint32_t erbar                   : 16;
44486#endif
44487    } s;
44488    struct cvmx_pci_cfg12_s              cn30xx;
44489    struct cvmx_pci_cfg12_s              cn31xx;
44490    struct cvmx_pci_cfg12_s              cn38xx;
44491    struct cvmx_pci_cfg12_s              cn38xxp2;
44492    struct cvmx_pci_cfg12_s              cn50xx;
44493    struct cvmx_pci_cfg12_s              cn58xx;
44494    struct cvmx_pci_cfg12_s              cn58xxp1;
44495} cvmx_pci_cfg12_t;
44496
44497
44498/**
44499 * cvmx_pci_cfg13
44500 *
44501 * PCI_CFG13 = Fourteenth 32-bits of PCI config space (Capabilities Pointer Register)
44502 *
44503 */
44504typedef union
44505{
44506    uint32_t u32;
44507    struct cvmx_pci_cfg13_s
44508    {
44509#if __BYTE_ORDER == __BIG_ENDIAN
44510        uint32_t reserved_8_31           : 24;
44511        uint32_t cp                      : 8;       /**< Capabilities Pointer */
44512#else
44513        uint32_t cp                      : 8;
44514        uint32_t reserved_8_31           : 24;
44515#endif
44516    } s;
44517    struct cvmx_pci_cfg13_s              cn30xx;
44518    struct cvmx_pci_cfg13_s              cn31xx;
44519    struct cvmx_pci_cfg13_s              cn38xx;
44520    struct cvmx_pci_cfg13_s              cn38xxp2;
44521    struct cvmx_pci_cfg13_s              cn50xx;
44522    struct cvmx_pci_cfg13_s              cn58xx;
44523    struct cvmx_pci_cfg13_s              cn58xxp1;
44524} cvmx_pci_cfg13_t;
44525
44526
44527/**
44528 * cvmx_pci_cfg15
44529 *
44530 * PCI_CFG15 = Sixteenth 32-bits of PCI config space (INT/ARB/LATENCY Register)
44531 *
44532 */
44533typedef union
44534{
44535    uint32_t u32;
44536    struct cvmx_pci_cfg15_s
44537    {
44538#if __BYTE_ORDER == __BIG_ENDIAN
44539        uint32_t ml                      : 8;       /**< Maximum Latency */
44540        uint32_t mg                      : 8;       /**< Minimum Grant */
44541        uint32_t inta                    : 8;       /**< Interrupt Pin (INTA#) */
44542        uint32_t il                      : 8;       /**< Interrupt Line */
44543#else
44544        uint32_t il                      : 8;
44545        uint32_t inta                    : 8;
44546        uint32_t mg                      : 8;
44547        uint32_t ml                      : 8;
44548#endif
44549    } s;
44550    struct cvmx_pci_cfg15_s              cn30xx;
44551    struct cvmx_pci_cfg15_s              cn31xx;
44552    struct cvmx_pci_cfg15_s              cn38xx;
44553    struct cvmx_pci_cfg15_s              cn38xxp2;
44554    struct cvmx_pci_cfg15_s              cn50xx;
44555    struct cvmx_pci_cfg15_s              cn58xx;
44556    struct cvmx_pci_cfg15_s              cn58xxp1;
44557} cvmx_pci_cfg15_t;
44558
44559
44560/**
44561 * cvmx_pci_cfg16
44562 *
44563 * PCI_CFG16 = Seventeenth 32-bits of PCI config space (Target Implementation Register)
44564 *
44565 */
44566typedef union
44567{
44568    uint32_t u32;
44569    struct cvmx_pci_cfg16_s
44570    {
44571#if __BYTE_ORDER == __BIG_ENDIAN
44572        uint32_t trdnpr                  : 1;       /**< Target Read Delayed Transaction for I/O and
44573                                                         non-prefetchable regions discarded. */
44574        uint32_t trdard                  : 1;       /**< Target Read Delayed Transaction for all regions
44575                                                         discarded. */
44576        uint32_t rdsati                  : 1;       /**< Target(I/O and Memory) Read Delayed/Split at
44577                                                          timeout/immediately (default timeout).
44578                                                         Note: OCTEON requires that this bit MBZ(must be zero). */
44579        uint32_t trdrs                   : 1;       /**< Target(I/O and Memory) Read Delayed/Split or Retry
44580                                                         select (of the application interface is not ready)
44581                                                          0 = Delayed Split Transaction
44582                                                          1 = Retry Transaction (always Immediate Retry, no
44583                                                              AT_REQ to application). */
44584        uint32_t trtae                   : 1;       /**< Target(I/O and Memory) Read Target Abort Enable
44585                                                         (if application interface is not ready at the
44586                                                         latency timeout).
44587                                                         Note: OCTEON as target will never target-abort,
44588                                                         therefore this bit should never be set. */
44589        uint32_t twsei                   : 1;       /**< Target(I/O) Write Split Enable (at timeout /
44590                                                         immediately; default timeout) */
44591        uint32_t twsen                   : 1;       /**< T(I/O) write split Enable (if the application
44592                                                         interface is not ready) */
44593        uint32_t twtae                   : 1;       /**< Target(I/O and Memory) Write Target Abort Enable
44594                                                         (if the application interface is not ready at the
44595                                                         start of the cycle).
44596                                                         Note: OCTEON as target will never target-abort,
44597                                                         therefore this bit should never be set. */
44598        uint32_t tmae                    : 1;       /**< Target(Read/Write) Master Abort Enable; check
44599                                                         at the start of each transaction.
44600                                                         Note: This bit can be used to force a Master
44601                                                         Abort when OCTEON is acting as the intended target
44602                                                         device. */
44603        uint32_t tslte                   : 3;       /**< Target Subsequent(2nd-last) Latency Timeout Enable
44604                                                         Valid range: [1..7] and 0=8. */
44605        uint32_t tilt                    : 4;       /**< Target Initial(1st data) Latency Timeout in PCI
44606                                                         ModeValid range: [8..15] and 0=16. */
44607        uint32_t pbe                     : 12;      /**< Programmable Boundary Enable to disconnect/prefetch
44608                                                         for target burst read cycles to prefetchable
44609                                                         region in PCI. A value of 1 indicates end of
44610                                                         boundary (64 KB down to 16 Bytes). */
44611        uint32_t dppmr                   : 1;       /**< Disconnect/Prefetch to prefetchable memory
44612                                                         regions Enable. Prefetchable memory regions
44613                                                         are always disconnected on a region boundary.
44614                                                         Non-prefetchable regions for PCI are always
44615                                                         disconnected on the first transfer.
44616                                                         Note: OCTEON as target will never target-disconnect,
44617                                                         therefore this bit should never be set. */
44618        uint32_t reserved_2_2            : 1;
44619        uint32_t tswc                    : 1;       /**< Target Split Write Control
44620                                                         0 = Blocks all requests except PMW
44621                                                         1 = Blocks all requests including PMW until
44622                                                             split completion occurs. */
44623        uint32_t mltd                    : 1;       /**< Master Latency Timer Disable
44624                                                         Note: For OCTEON, it is recommended that this bit
44625                                                         be set(to disable the Master Latency timer). */
44626#else
44627        uint32_t mltd                    : 1;
44628        uint32_t tswc                    : 1;
44629        uint32_t reserved_2_2            : 1;
44630        uint32_t dppmr                   : 1;
44631        uint32_t pbe                     : 12;
44632        uint32_t tilt                    : 4;
44633        uint32_t tslte                   : 3;
44634        uint32_t tmae                    : 1;
44635        uint32_t twtae                   : 1;
44636        uint32_t twsen                   : 1;
44637        uint32_t twsei                   : 1;
44638        uint32_t trtae                   : 1;
44639        uint32_t trdrs                   : 1;
44640        uint32_t rdsati                  : 1;
44641        uint32_t trdard                  : 1;
44642        uint32_t trdnpr                  : 1;
44643#endif
44644    } s;
44645    struct cvmx_pci_cfg16_s              cn30xx;
44646    struct cvmx_pci_cfg16_s              cn31xx;
44647    struct cvmx_pci_cfg16_s              cn38xx;
44648    struct cvmx_pci_cfg16_s              cn38xxp2;
44649    struct cvmx_pci_cfg16_s              cn50xx;
44650    struct cvmx_pci_cfg16_s              cn58xx;
44651    struct cvmx_pci_cfg16_s              cn58xxp1;
44652} cvmx_pci_cfg16_t;
44653
44654
44655/**
44656 * cvmx_pci_cfg17
44657 *
44658 * PCI_CFG17 = Eighteenth 32-bits of PCI config space (Target Split Completion Message
44659 * Enable Register)
44660 */
44661typedef union
44662{
44663    uint32_t u32;
44664    struct cvmx_pci_cfg17_s
44665    {
44666#if __BYTE_ORDER == __BIG_ENDIAN
44667        uint32_t tscme                   : 32;      /**< Target Split Completion Message Enable
44668                                                          [31:30]: 00
44669                                                          [29]: Split Completion Error Indication
44670                                                          [28]: 0
44671                                                          [27:20]: Split Completion Message Index
44672                                                          [19:0]: 0x00000
44673                                                         For OCTEON, this register is intended for debug use
44674                                                         only. (as such, it is recommended NOT to be written
44675                                                         with anything other than ZEROES). */
44676#else
44677        uint32_t tscme                   : 32;
44678#endif
44679    } s;
44680    struct cvmx_pci_cfg17_s              cn30xx;
44681    struct cvmx_pci_cfg17_s              cn31xx;
44682    struct cvmx_pci_cfg17_s              cn38xx;
44683    struct cvmx_pci_cfg17_s              cn38xxp2;
44684    struct cvmx_pci_cfg17_s              cn50xx;
44685    struct cvmx_pci_cfg17_s              cn58xx;
44686    struct cvmx_pci_cfg17_s              cn58xxp1;
44687} cvmx_pci_cfg17_t;
44688
44689
44690/**
44691 * cvmx_pci_cfg18
44692 *
44693 * PCI_CFG18 = Nineteenth 32-bits of PCI config space (Target Delayed/Split Request
44694 * Pending Sequences)
44695 */
44696typedef union
44697{
44698    uint32_t u32;
44699    struct cvmx_pci_cfg18_s
44700    {
44701#if __BYTE_ORDER == __BIG_ENDIAN
44702        uint32_t tdsrps                  : 32;      /**< Target Delayed/Split Request Pending Sequences
44703                                                         The application uses this address to remove a
44704                                                         pending split sequence from the target queue by
44705                                                         clearing the appropriate bit. Example: Clearing [14]
44706                                                         clears the pending sequence \#14. An application
44707                                                         or configuration write to this address can clear this
44708                                                         register.
44709                                                         For OCTEON, this register is intended for debug use
44710                                                         only and MUST NEVER be written with anything other
44711                                                         than ZEROES. */
44712#else
44713        uint32_t tdsrps                  : 32;
44714#endif
44715    } s;
44716    struct cvmx_pci_cfg18_s              cn30xx;
44717    struct cvmx_pci_cfg18_s              cn31xx;
44718    struct cvmx_pci_cfg18_s              cn38xx;
44719    struct cvmx_pci_cfg18_s              cn38xxp2;
44720    struct cvmx_pci_cfg18_s              cn50xx;
44721    struct cvmx_pci_cfg18_s              cn58xx;
44722    struct cvmx_pci_cfg18_s              cn58xxp1;
44723} cvmx_pci_cfg18_t;
44724
44725
44726/**
44727 * cvmx_pci_cfg19
44728 *
44729 * PCI_CFG19 = Twentieth 32-bits of PCI config space (Master/Target Implementation Register)
44730 *
44731 */
44732typedef union
44733{
44734    uint32_t u32;
44735    struct cvmx_pci_cfg19_s
44736    {
44737#if __BYTE_ORDER == __BIG_ENDIAN
44738        uint32_t mrbcm                   : 1;       /**< Master Request (Memory Read) Byte Count/Byte
44739                                                         Enable select.
44740                                                           0 = Byte Enables valid. In PCI mode, a burst
44741                                                               transaction cannot be performed using
44742                                                               Memory Read command=4'h6.
44743                                                           1 = DWORD Byte Count valid (default). In PCI
44744                                                               Mode, the memory read byte enables are
44745                                                               automatically generated by the core.
44746                                                          NOTE:  For OCTEON, this bit must always be one
44747                                                          for proper operation. */
44748        uint32_t mrbci                   : 1;       /**< Master Request (I/O and CR cycles) byte count/byte
44749                                                         enable select.
44750                                                           0 = Byte Enables valid (default)
44751                                                           1 = DWORD byte count valid
44752                                                          NOTE: For OCTEON, this bit must always be zero
44753                                                          for proper operation (in support of
44754                                                          Type0/1 Cfg Space accesses which require byte
44755                                                          enable generation directly from a read mask). */
44756        uint32_t mdwe                    : 1;       /**< Master (Retry) Deferred Write Enable (allow
44757                                                         read requests to pass).
44758                                                          NOTE: Applicable to PCI Mode I/O and memory
44759                                                          transactions only.
44760                                                           0 = New read requests are NOT accepted until
44761                                                               the current write cycle completes. [Reads
44762                                                               cannot pass writes]
44763                                                           1 = New read requests are accepted, even when
44764                                                               there is a write cycle pending [Reads can
44765                                                               pass writes].
44766                                                          NOTE: For OCTEON, this bit must always be zero
44767                                                          for proper operation. */
44768        uint32_t mdre                    : 1;       /**< Master (Retry) Deferred Read Enable (Allows
44769                                                         read/write requests to pass).
44770                                                          NOTE: Applicable to PCI mode I/O and memory
44771                                                          transactions only.
44772                                                           0 = New read/write requests are NOT accepted
44773                                                               until the current read cycle completes.
44774                                                               [Read/write requests CANNOT pass reads]
44775                                                           1 = New read/write requests are accepted, even
44776                                                               when there is a read cycle pending.
44777                                                               [Read/write requests CAN pass reads]
44778                                                          NOTE: For OCTEON, this bit must always be zero
44779                                                          for proper operation. */
44780        uint32_t mdrimc                  : 1;       /**< Master I/O Deferred/Split Request Outstanding
44781                                                         Maximum Count
44782                                                           0 = MDRRMC[26:24]
44783                                                           1 = 1 */
44784        uint32_t mdrrmc                  : 3;       /**< Master Deferred Read Request Outstanding Max
44785                                                         Count (PCI only).
44786                                                          CR4C[26:24]  Max SAC cycles   MAX DAC cycles
44787                                                           000              8                4
44788                                                           001              1                0
44789                                                           010              2                1
44790                                                           011              3                1
44791                                                           100              4                2
44792                                                           101              5                2
44793                                                           110              6                3
44794                                                           111              7                3
44795                                                          For example, if these bits are programmed to
44796                                                          100, the core can support 2 DAC cycles, 4 SAC
44797                                                          cycles or a combination of 1 DAC and 2 SAC cycles.
44798                                                          NOTE: For the PCI-X maximum outstanding split
44799                                                          transactions, refer to CRE0[22:20] */
44800        uint32_t tmes                    : 8;       /**< Target/Master Error Sequence \# */
44801        uint32_t teci                    : 1;       /**< Target Error Command Indication
44802                                                         0 = Delayed/Split
44803                                                         1 = Others */
44804        uint32_t tmei                    : 1;       /**< Target/Master Error Indication
44805                                                         0 = Target
44806                                                         1 = Master */
44807        uint32_t tmse                    : 1;       /**< Target/Master System Error. This bit is set
44808                                                         whenever ATM_SERR_O is active. */
44809        uint32_t tmdpes                  : 1;       /**< Target/Master Data PERR# error status. This
44810                                                         bit is set whenever ATM_DATA_PERR_O is active. */
44811        uint32_t tmapes                  : 1;       /**< Target/Master Address PERR# error status. This
44812                                                         bit is set whenever ATM_ADDR_PERR_O is active. */
44813        uint32_t reserved_9_10           : 2;
44814        uint32_t tibcd                   : 1;       /**< Target Illegal I/O DWORD byte combinations detected. */
44815        uint32_t tibde                   : 1;       /**< Target Illegal I/O DWORD byte detection enable */
44816        uint32_t reserved_6_6            : 1;
44817        uint32_t tidomc                  : 1;       /**< Target I/O Delayed/Split request outstanding
44818                                                         maximum count.
44819                                                          0 = TDOMC[4:0]
44820                                                          1 = 1 */
44821        uint32_t tdomc                   : 5;       /**< Target Delayed/Split request outstanding maximum
44822                                                         count. [1..31] and 0=32.
44823                                                         NOTE: If the user programs these bits beyond the
44824                                                         Designed Maximum outstanding count, then the
44825                                                         designed maximum table depth will be used instead.
44826                                                         No additional Deferred/Split transactions will be
44827                                                         accepted if this outstanding maximum count
44828                                                         is reached. Furthermore, no additional
44829                                                         deferred/split transactions will be accepted if
44830                                                         the I/O delay/ I/O Split Request outstanding
44831                                                         maximum is reached.
44832                                                         NOTE: For OCTEON in PCI Mode, this field MUST BE
44833                                                         programmed to 1. (OCTEON can only handle 1 delayed
44834                                                         read at a time).
44835                                                         For OCTEON in PCIX Mode, this field can range from
44836                                                         1-4. (The designed maximum table depth is 4
44837                                                         for PCIX mode splits). */
44838#else
44839        uint32_t tdomc                   : 5;
44840        uint32_t tidomc                  : 1;
44841        uint32_t reserved_6_6            : 1;
44842        uint32_t tibde                   : 1;
44843        uint32_t tibcd                   : 1;
44844        uint32_t reserved_9_10           : 2;
44845        uint32_t tmapes                  : 1;
44846        uint32_t tmdpes                  : 1;
44847        uint32_t tmse                    : 1;
44848        uint32_t tmei                    : 1;
44849        uint32_t teci                    : 1;
44850        uint32_t tmes                    : 8;
44851        uint32_t mdrrmc                  : 3;
44852        uint32_t mdrimc                  : 1;
44853        uint32_t mdre                    : 1;
44854        uint32_t mdwe                    : 1;
44855        uint32_t mrbci                   : 1;
44856        uint32_t mrbcm                   : 1;
44857#endif
44858    } s;
44859    struct cvmx_pci_cfg19_s              cn30xx;
44860    struct cvmx_pci_cfg19_s              cn31xx;
44861    struct cvmx_pci_cfg19_s              cn38xx;
44862    struct cvmx_pci_cfg19_s              cn38xxp2;
44863    struct cvmx_pci_cfg19_s              cn50xx;
44864    struct cvmx_pci_cfg19_s              cn58xx;
44865    struct cvmx_pci_cfg19_s              cn58xxp1;
44866} cvmx_pci_cfg19_t;
44867
44868
44869/**
44870 * cvmx_pci_cfg20
44871 *
44872 * PCI_CFG20 = Twenty-first 32-bits of PCI config space (Master Deferred/Split Sequence Pending)
44873 *
44874 */
44875typedef union
44876{
44877    uint32_t u32;
44878    struct cvmx_pci_cfg20_s
44879    {
44880#if __BYTE_ORDER == __BIG_ENDIAN
44881        uint32_t mdsp                    : 32;      /**< Master Deferred/Split sequence Pending
44882                                                         For OCTEON, this register is intended for debug use
44883                                                         only and MUST NEVER be written with anything other
44884                                                         than ZEROES. */
44885#else
44886        uint32_t mdsp                    : 32;
44887#endif
44888    } s;
44889    struct cvmx_pci_cfg20_s              cn30xx;
44890    struct cvmx_pci_cfg20_s              cn31xx;
44891    struct cvmx_pci_cfg20_s              cn38xx;
44892    struct cvmx_pci_cfg20_s              cn38xxp2;
44893    struct cvmx_pci_cfg20_s              cn50xx;
44894    struct cvmx_pci_cfg20_s              cn58xx;
44895    struct cvmx_pci_cfg20_s              cn58xxp1;
44896} cvmx_pci_cfg20_t;
44897
44898
44899/**
44900 * cvmx_pci_cfg21
44901 *
44902 * PCI_CFG21 = Twenty-second 32-bits of PCI config space (Master Split Completion Message Register)
44903 *
44904 */
44905typedef union
44906{
44907    uint32_t u32;
44908    struct cvmx_pci_cfg21_s
44909    {
44910#if __BYTE_ORDER == __BIG_ENDIAN
44911        uint32_t scmre                   : 32;      /**< Master Split Completion message received with
44912                                                         error message.
44913                                                         For OCTEON, this register is intended for debug use
44914                                                         only and MUST NEVER be written with anything other
44915                                                         than ZEROES. */
44916#else
44917        uint32_t scmre                   : 32;
44918#endif
44919    } s;
44920    struct cvmx_pci_cfg21_s              cn30xx;
44921    struct cvmx_pci_cfg21_s              cn31xx;
44922    struct cvmx_pci_cfg21_s              cn38xx;
44923    struct cvmx_pci_cfg21_s              cn38xxp2;
44924    struct cvmx_pci_cfg21_s              cn50xx;
44925    struct cvmx_pci_cfg21_s              cn58xx;
44926    struct cvmx_pci_cfg21_s              cn58xxp1;
44927} cvmx_pci_cfg21_t;
44928
44929
44930/**
44931 * cvmx_pci_cfg22
44932 *
44933 * PCI_CFG22 = Twenty-third 32-bits of PCI config space (Master Arbiter Control Register)
44934 *
44935 */
44936typedef union
44937{
44938    uint32_t u32;
44939    struct cvmx_pci_cfg22_s
44940    {
44941#if __BYTE_ORDER == __BIG_ENDIAN
44942        uint32_t mac                     : 7;       /**< Master Arbiter Control
44943                                                         [31:26]: Used only in Fixed Priority mode
44944                                                                  (when [25]=1)
44945                                                         [31:30]: MSI Request
44946                                                            00 = Highest Priority
44947                                                            01 = Medium Priority
44948                                                            10 = Lowest Priority
44949                                                            11 = RESERVED
44950                                                         [29:28]: Target Split Completion
44951                                                            00 = Highest Priority
44952                                                            01 = Medium Priority
44953                                                            10 = Lowest Priority
44954                                                            11 = RESERVED
44955                                                         [27:26]: New Request; Deferred Read,Deferred Write
44956                                                            00 = Highest Priority
44957                                                            01 = Medium Priority
44958                                                            10 = Lowest Priority
44959                                                            11 = RESERVED
44960                                                         [25]: Fixed/Round Robin Priority Selector
44961                                                            0 = Round Robin
44962                                                            1 = Fixed
44963                                                         NOTE: When [25]=1(fixed priority), the three levels
44964                                                         [31:26] MUST BE programmed to have mutually exclusive
44965                                                         priority levels for proper operation. (Failure to do
44966                                                         so may result in PCI hangs). */
44967        uint32_t reserved_19_24          : 6;
44968        uint32_t flush                   : 1;       /**< AM_DO_FLUSH_I control
44969                                                         NOTE: This bit MUST BE ONE for proper OCTEON operation */
44970        uint32_t mra                     : 1;       /**< Master Retry Aborted */
44971        uint32_t mtta                    : 1;       /**< Master TRDY timeout aborted */
44972        uint32_t mrv                     : 8;       /**< Master Retry Value [1..255] and 0=infinite */
44973        uint32_t mttv                    : 8;       /**< Master TRDY timeout value [1..255] and 0=disabled
44974                                                         NOTE: For OCTEON, this bit must always be zero
44975                                                         for proper operation. (OCTEON does not support
44976                                                         master TRDY timeout - target is expected to be
44977                                                         well behaved). */
44978#else
44979        uint32_t mttv                    : 8;
44980        uint32_t mrv                     : 8;
44981        uint32_t mtta                    : 1;
44982        uint32_t mra                     : 1;
44983        uint32_t flush                   : 1;
44984        uint32_t reserved_19_24          : 6;
44985        uint32_t mac                     : 7;
44986#endif
44987    } s;
44988    struct cvmx_pci_cfg22_s              cn30xx;
44989    struct cvmx_pci_cfg22_s              cn31xx;
44990    struct cvmx_pci_cfg22_s              cn38xx;
44991    struct cvmx_pci_cfg22_s              cn38xxp2;
44992    struct cvmx_pci_cfg22_s              cn50xx;
44993    struct cvmx_pci_cfg22_s              cn58xx;
44994    struct cvmx_pci_cfg22_s              cn58xxp1;
44995} cvmx_pci_cfg22_t;
44996
44997
44998/**
44999 * cvmx_pci_cfg56
45000 *
45001 * PCI_CFG56 = Fifty-seventh 32-bits of PCI config space (PCIX Capabilities Register)
45002 *
45003 */
45004typedef union
45005{
45006    uint32_t u32;
45007    struct cvmx_pci_cfg56_s
45008    {
45009#if __BYTE_ORDER == __BIG_ENDIAN
45010        uint32_t reserved_23_31          : 9;
45011        uint32_t most                    : 3;       /**< Maximum outstanding Split transactions
45012                                                           Encoded Value    \#Max outstanding splits
45013                                                               000                   1
45014                                                               001                   2
45015                                                               010                   3
45016                                                               011                   4
45017                                                               100                   8
45018                                                               101                   8(clamped)
45019                                                               110                   8(clamped)
45020                                                               111                   8(clamped)
45021                                                         NOTE: OCTEON only supports upto a MAXIMUM of 8
45022                                                         outstanding master split transactions. */
45023        uint32_t mmbc                    : 2;       /**< Maximum Memory Byte Count
45024                                                                 [0=512B,1=1024B,2=2048B,3=4096B]
45025                                                         NOTE: OCTEON does not support this field and has
45026                                                         no effect on limiting the maximum memory byte count. */
45027        uint32_t roe                     : 1;       /**< Relaxed Ordering Enable */
45028        uint32_t dpere                   : 1;       /**< Data Parity Error Recovery Enable */
45029        uint32_t ncp                     : 8;       /**< Next Capability Pointer */
45030        uint32_t pxcid                   : 8;       /**< PCI-X Capability ID */
45031#else
45032        uint32_t pxcid                   : 8;
45033        uint32_t ncp                     : 8;
45034        uint32_t dpere                   : 1;
45035        uint32_t roe                     : 1;
45036        uint32_t mmbc                    : 2;
45037        uint32_t most                    : 3;
45038        uint32_t reserved_23_31          : 9;
45039#endif
45040    } s;
45041    struct cvmx_pci_cfg56_s              cn30xx;
45042    struct cvmx_pci_cfg56_s              cn31xx;
45043    struct cvmx_pci_cfg56_s              cn38xx;
45044    struct cvmx_pci_cfg56_s              cn38xxp2;
45045    struct cvmx_pci_cfg56_s              cn50xx;
45046    struct cvmx_pci_cfg56_s              cn58xx;
45047    struct cvmx_pci_cfg56_s              cn58xxp1;
45048} cvmx_pci_cfg56_t;
45049
45050
45051/**
45052 * cvmx_pci_cfg57
45053 *
45054 * PCI_CFG57 = Fifty-eigth 32-bits of PCI config space (PCIX Status Register)
45055 *
45056 */
45057typedef union
45058{
45059    uint32_t u32;
45060    struct cvmx_pci_cfg57_s
45061    {
45062#if __BYTE_ORDER == __BIG_ENDIAN
45063        uint32_t reserved_30_31          : 2;
45064        uint32_t scemr                   : 1;       /**< Split Completion Error Message Received */
45065        uint32_t mcrsd                   : 3;       /**< Maximum Cumulative Read Size designed */
45066        uint32_t mostd                   : 3;       /**< Maximum Outstanding Split transaction designed */
45067        uint32_t mmrbcd                  : 2;       /**< Maximum Memory Read byte count designed */
45068        uint32_t dc                      : 1;       /**< Device Complexity
45069                                                         0 = Simple Device
45070                                                         1 = Bridge Device */
45071        uint32_t usc                     : 1;       /**< Unexpected Split Completion */
45072        uint32_t scd                     : 1;       /**< Split Completion Discarded */
45073        uint32_t m133                    : 1;       /**< 133MHz Capable */
45074        uint32_t w64                     : 1;       /**< Indicates a 32b(=0) or 64b(=1) device */
45075        uint32_t bn                      : 8;       /**< Bus Number. Updated on all configuration write
45076                                                         (0x11=PCI)             cycles. Its value is dependent upon the PCI/X
45077                                                         (0xFF=PCIX)            mode. */
45078        uint32_t dn                      : 5;       /**< Device Number. Updated on all configuration
45079                                                         write cycles. */
45080        uint32_t fn                      : 3;       /**< Function Number */
45081#else
45082        uint32_t fn                      : 3;
45083        uint32_t dn                      : 5;
45084        uint32_t bn                      : 8;
45085        uint32_t w64                     : 1;
45086        uint32_t m133                    : 1;
45087        uint32_t scd                     : 1;
45088        uint32_t usc                     : 1;
45089        uint32_t dc                      : 1;
45090        uint32_t mmrbcd                  : 2;
45091        uint32_t mostd                   : 3;
45092        uint32_t mcrsd                   : 3;
45093        uint32_t scemr                   : 1;
45094        uint32_t reserved_30_31          : 2;
45095#endif
45096    } s;
45097    struct cvmx_pci_cfg57_s              cn30xx;
45098    struct cvmx_pci_cfg57_s              cn31xx;
45099    struct cvmx_pci_cfg57_s              cn38xx;
45100    struct cvmx_pci_cfg57_s              cn38xxp2;
45101    struct cvmx_pci_cfg57_s              cn50xx;
45102    struct cvmx_pci_cfg57_s              cn58xx;
45103    struct cvmx_pci_cfg57_s              cn58xxp1;
45104} cvmx_pci_cfg57_t;
45105
45106
45107/**
45108 * cvmx_pci_cfg58
45109 *
45110 * PCI_CFG58 = Fifty-ninth 32-bits of PCI config space (Power Management Capabilities Register)
45111 *
45112 */
45113typedef union
45114{
45115    uint32_t u32;
45116    struct cvmx_pci_cfg58_s
45117    {
45118#if __BYTE_ORDER == __BIG_ENDIAN
45119        uint32_t pmes                    : 5;       /**< PME Support (D0 to D3cold) */
45120        uint32_t d2s                     : 1;       /**< D2_Support */
45121        uint32_t d1s                     : 1;       /**< D1_Support */
45122        uint32_t auxc                    : 3;       /**< AUX_Current (0..375mA) */
45123        uint32_t dsi                     : 1;       /**< Device Specific Initialization */
45124        uint32_t reserved_20_20          : 1;
45125        uint32_t pmec                    : 1;       /**< PME Clock */
45126        uint32_t pcimiv                  : 3;       /**< Indicates the version of the PCI
45127                                                         Management
45128                                                          Interface Specification with which the core
45129                                                          complies.
45130                                                            010b = Complies with PCI Management Interface
45131                                                            Specification Revision 1.1 */
45132        uint32_t ncp                     : 8;       /**< Next Capability Pointer */
45133        uint32_t pmcid                   : 8;       /**< Power Management Capability ID */
45134#else
45135        uint32_t pmcid                   : 8;
45136        uint32_t ncp                     : 8;
45137        uint32_t pcimiv                  : 3;
45138        uint32_t pmec                    : 1;
45139        uint32_t reserved_20_20          : 1;
45140        uint32_t dsi                     : 1;
45141        uint32_t auxc                    : 3;
45142        uint32_t d1s                     : 1;
45143        uint32_t d2s                     : 1;
45144        uint32_t pmes                    : 5;
45145#endif
45146    } s;
45147    struct cvmx_pci_cfg58_s              cn30xx;
45148    struct cvmx_pci_cfg58_s              cn31xx;
45149    struct cvmx_pci_cfg58_s              cn38xx;
45150    struct cvmx_pci_cfg58_s              cn38xxp2;
45151    struct cvmx_pci_cfg58_s              cn50xx;
45152    struct cvmx_pci_cfg58_s              cn58xx;
45153    struct cvmx_pci_cfg58_s              cn58xxp1;
45154} cvmx_pci_cfg58_t;
45155
45156
45157/**
45158 * cvmx_pci_cfg59
45159 *
45160 * PCI_CFG59 = Sixtieth 32-bits of PCI config space (Power Management Data/PMCSR Register(s))
45161 *
45162 */
45163typedef union
45164{
45165    uint32_t u32;
45166    struct cvmx_pci_cfg59_s
45167    {
45168#if __BYTE_ORDER == __BIG_ENDIAN
45169        uint32_t pmdia                   : 8;       /**< Power Management data input from application
45170                                                         (PME_DATA) */
45171        uint32_t bpccen                  : 1;       /**< BPCC_En (bus power/clock control) enable */
45172        uint32_t bd3h                    : 1;       /**< B2_B3\#, B2/B3 Support for D3hot */
45173        uint32_t reserved_16_21          : 6;
45174        uint32_t pmess                   : 1;       /**< PME_Status sticky bit */
45175        uint32_t pmedsia                 : 2;       /**< PME_Data_Scale input from application
45176                                                         Device                  (PME_DATA_SCALE[1:0])
45177                                                         Specific */
45178        uint32_t pmds                    : 4;       /**< Power Management Data_select */
45179        uint32_t pmeens                  : 1;       /**< PME_En sticky bit */
45180        uint32_t reserved_2_7            : 6;
45181        uint32_t ps                      : 2;       /**< Power State (D0 to D3)
45182                                                         The N2 DOES NOT support D1/D2 Power Management
45183                                                         states, therefore writing to this register has
45184                                                         no effect (please refer to the PCI Power
45185                                                         Management
45186                                                         Specification v1.1 for further details about
45187                                                         it?s R/W nature. This is not a conventional
45188                                                         R/W style register. */
45189#else
45190        uint32_t ps                      : 2;
45191        uint32_t reserved_2_7            : 6;
45192        uint32_t pmeens                  : 1;
45193        uint32_t pmds                    : 4;
45194        uint32_t pmedsia                 : 2;
45195        uint32_t pmess                   : 1;
45196        uint32_t reserved_16_21          : 6;
45197        uint32_t bd3h                    : 1;
45198        uint32_t bpccen                  : 1;
45199        uint32_t pmdia                   : 8;
45200#endif
45201    } s;
45202    struct cvmx_pci_cfg59_s              cn30xx;
45203    struct cvmx_pci_cfg59_s              cn31xx;
45204    struct cvmx_pci_cfg59_s              cn38xx;
45205    struct cvmx_pci_cfg59_s              cn38xxp2;
45206    struct cvmx_pci_cfg59_s              cn50xx;
45207    struct cvmx_pci_cfg59_s              cn58xx;
45208    struct cvmx_pci_cfg59_s              cn58xxp1;
45209} cvmx_pci_cfg59_t;
45210
45211
45212/**
45213 * cvmx_pci_cfg60
45214 *
45215 * PCI_CFG60 = Sixty-first 32-bits of PCI config space (MSI Capabilities Register)
45216 *
45217 */
45218typedef union
45219{
45220    uint32_t u32;
45221    struct cvmx_pci_cfg60_s
45222    {
45223#if __BYTE_ORDER == __BIG_ENDIAN
45224        uint32_t reserved_24_31          : 8;
45225        uint32_t m64                     : 1;       /**< 32/64 b message */
45226        uint32_t mme                     : 3;       /**< Multiple Message Enable(1,2,4,8,16,32) */
45227        uint32_t mmc                     : 3;       /**< Multiple Message Capable(0=1,1=2,2=4,3=8,4=16,5=32) */
45228        uint32_t msien                   : 1;       /**< MSI Enable */
45229        uint32_t ncp                     : 8;       /**< Next Capability Pointer */
45230        uint32_t msicid                  : 8;       /**< MSI Capability ID */
45231#else
45232        uint32_t msicid                  : 8;
45233        uint32_t ncp                     : 8;
45234        uint32_t msien                   : 1;
45235        uint32_t mmc                     : 3;
45236        uint32_t mme                     : 3;
45237        uint32_t m64                     : 1;
45238        uint32_t reserved_24_31          : 8;
45239#endif
45240    } s;
45241    struct cvmx_pci_cfg60_s              cn30xx;
45242    struct cvmx_pci_cfg60_s              cn31xx;
45243    struct cvmx_pci_cfg60_s              cn38xx;
45244    struct cvmx_pci_cfg60_s              cn38xxp2;
45245    struct cvmx_pci_cfg60_s              cn50xx;
45246    struct cvmx_pci_cfg60_s              cn58xx;
45247    struct cvmx_pci_cfg60_s              cn58xxp1;
45248} cvmx_pci_cfg60_t;
45249
45250
45251/**
45252 * cvmx_pci_cfg61
45253 *
45254 * PCI_CFG61 = Sixty-second 32-bits of PCI config space (MSI Lower Address Register)
45255 *
45256 */
45257typedef union
45258{
45259    uint32_t u32;
45260    struct cvmx_pci_cfg61_s
45261    {
45262#if __BYTE_ORDER == __BIG_ENDIAN
45263        uint32_t msi31t2                 : 30;      /**< App Specific    MSI Address [31:2] */
45264        uint32_t reserved_0_1            : 2;
45265#else
45266        uint32_t reserved_0_1            : 2;
45267        uint32_t msi31t2                 : 30;
45268#endif
45269    } s;
45270    struct cvmx_pci_cfg61_s              cn30xx;
45271    struct cvmx_pci_cfg61_s              cn31xx;
45272    struct cvmx_pci_cfg61_s              cn38xx;
45273    struct cvmx_pci_cfg61_s              cn38xxp2;
45274    struct cvmx_pci_cfg61_s              cn50xx;
45275    struct cvmx_pci_cfg61_s              cn58xx;
45276    struct cvmx_pci_cfg61_s              cn58xxp1;
45277} cvmx_pci_cfg61_t;
45278
45279
45280/**
45281 * cvmx_pci_cfg62
45282 *
45283 * PCI_CFG62 = Sixty-third 32-bits of PCI config space (MSI Upper Address Register)
45284 *
45285 */
45286typedef union
45287{
45288    uint32_t u32;
45289    struct cvmx_pci_cfg62_s
45290    {
45291#if __BYTE_ORDER == __BIG_ENDIAN
45292        uint32_t msi                     : 32;      /**< MSI Address [63:32] */
45293#else
45294        uint32_t msi                     : 32;
45295#endif
45296    } s;
45297    struct cvmx_pci_cfg62_s              cn30xx;
45298    struct cvmx_pci_cfg62_s              cn31xx;
45299    struct cvmx_pci_cfg62_s              cn38xx;
45300    struct cvmx_pci_cfg62_s              cn38xxp2;
45301    struct cvmx_pci_cfg62_s              cn50xx;
45302    struct cvmx_pci_cfg62_s              cn58xx;
45303    struct cvmx_pci_cfg62_s              cn58xxp1;
45304} cvmx_pci_cfg62_t;
45305
45306
45307/**
45308 * cvmx_pci_cfg63
45309 *
45310 * PCI_CFG63 = Sixty-fourth 32-bits of PCI config space (MSI Message Data Register)
45311 *
45312 */
45313typedef union
45314{
45315    uint32_t u32;
45316    struct cvmx_pci_cfg63_s
45317    {
45318#if __BYTE_ORDER == __BIG_ENDIAN
45319        uint32_t reserved_16_31          : 16;
45320        uint32_t msimd                   : 16;      /**< MSI Message Data */
45321#else
45322        uint32_t msimd                   : 16;
45323        uint32_t reserved_16_31          : 16;
45324#endif
45325    } s;
45326    struct cvmx_pci_cfg63_s              cn30xx;
45327    struct cvmx_pci_cfg63_s              cn31xx;
45328    struct cvmx_pci_cfg63_s              cn38xx;
45329    struct cvmx_pci_cfg63_s              cn38xxp2;
45330    struct cvmx_pci_cfg63_s              cn50xx;
45331    struct cvmx_pci_cfg63_s              cn58xx;
45332    struct cvmx_pci_cfg63_s              cn58xxp1;
45333} cvmx_pci_cfg63_t;
45334
45335
45336/**
45337 * cvmx_pci_cnt_reg
45338 *
45339 * PCI_CNT_REG = PCI Clock Count Register
45340 *
45341 * This register is provided to software as a means to determine PCI Bus Type/Speed.
45342 */
45343typedef union
45344{
45345    uint64_t u64;
45346    struct cvmx_pci_cnt_reg_s
45347    {
45348#if __BYTE_ORDER == __BIG_ENDIAN
45349        uint64_t reserved_38_63          : 26;
45350        uint64_t hm_pcix                 : 1;       /**< PCI Host Mode Sampled Bus Type (0:PCI/1:PCIX)
45351                                                         This field represents what OCTEON(in Host mode)
45352                                                         sampled as the 'intended' PCI Bus Type based on
45353                                                         the PCI_PCIXCAP pin. (see HM_SPEED Bus Type/Speed
45354                                                         encoding table). */
45355        uint64_t hm_speed                : 2;       /**< PCI Host Mode Sampled Bus Speed
45356                                                          This field represents what OCTEON(in Host mode)
45357                                                          sampled as the 'intended' PCI Bus Speed based on
45358                                                          the PCI100, PCI_M66EN and PCI_PCIXCAP pins.
45359                                                          NOTE: This DOES NOT reflect what the actual PCI
45360                                                          Bus Type/Speed values are. They only indicate what
45361                                                          OCTEON sampled as the 'intended' values.
45362                                                          PCI Host Mode Sampled Bus Type/Speed Table:
45363                                                            M66EN | PCIXCAP | PCI100  |  HM_PCIX | HM_SPEED[1:0]
45364                                                         ---------+---------+---------+----------+-------------
45365                                                              0   |    0    |    0    | 0=PCI    |  00=33 MHz
45366                                                              0   |    0    |    1    | 0=PCI    |  00=33 MHz
45367                                                              0   |    Z    |    0    | 0=PCI    |  01=66 MHz
45368                                                              0   |    Z    |    1    | 0=PCI    |  01=66 MHz
45369                                                              1   |    0    |    0    | 0=PCI    |  01=66 MHz
45370                                                              1   |    0    |    1    | 0=PCI    |  01=66 MHz
45371                                                              1   |    Z    |    0    | 0=PCI    |  01=66 MHz
45372                                                              1   |    Z    |    1    | 0=PCI    |  01=66 MHz
45373                                                              0   |    1    |    1    | 1=PCIX   |  10=100 MHz
45374                                                              1   |    1    |    1    | 1=PCIX   |  10=100 MHz
45375                                                              0   |    1    |    0    | 1=PCIX   |  11=133 MHz
45376                                                              1   |    1    |    0    | 1=PCIX   |  11=133 MHz
45377                                                          NOTE: PCIXCAP has tri-level value (0,1,Z). See PCI specification
45378                                                          for more details on board level hookup to achieve these
45379                                                          values.
45380                                                          NOTE: Software can use the NPI_PCI_INT_ARB_CFG[PCI_OVR]
45381                                                          to override the 'sampled' PCI Bus Type/Speed.
45382                                                          NOTE: Software can also use the PCI_CNT_REG[PCICNT] to determine
45383                                                          the exact PCI(X) Bus speed.
45384                                                          Example: PCI_REF_CLKIN=133MHz
45385                                                             PCI_HOST_MODE=1
45386                                                             PCI_M66EN=0
45387                                                             PCI_PCIXCAP=1
45388                                                             PCI_PCI100=1
45389                                                          For this example, OCTEON will generate
45390                                                          PCI_CLK_OUT=100MHz and drive the proper PCI
45391                                                          Initialization sequence (DEVSEL#=Deasserted,
45392                                                          STOP#=Asserted, TRDY#=Asserted) during PCI_RST_N
45393                                                          deassertion.
45394                                                          NOTE: The HM_SPEED field is only valid after
45395                                                          PLL_REF_CLK is active and PLL_DCOK is asserted.
45396                                                          (see HRM description for power-on/reset sequence).
45397                                                          NOTE: PCI_REF_CLKIN input must be 133MHz (and is used
45398                                                          to generate the PCI_CLK_OUT pin in Host Mode).
45399                                                          *** NOTE: O9N PASS1 Addition */
45400        uint64_t ap_pcix                 : 1;       /**< PCI(X) Bus Type (0:PCI/1:PCIX)
45401                                                         At PCI_RST_N de-assertion, the PCI Initialization
45402                                                         pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is
45403                                                         captured to provide information to software regarding
45404                                                         the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range. */
45405        uint64_t ap_speed                : 2;       /**< PCI(X) Bus Speed (0:33/1:66/2:100/3:133)
45406                                                                                    At PCI_RST_N de-assertion, the PCI Initialization
45407                                                                                    pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is
45408                                                                                    captured to provide information to software regarding
45409                                                                                    the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range.
45410                                                                                    PCI-X Initialization Pattern(see PCIX Spec):
45411                                                           PCI_DEVSEL_N PCI_STOP_N PCI_TRDY_N Mode    MaxClk(ns) MinClk(ns) MinClk(MHz) MaxClk(MHz)
45412                                                         -------------+----------+----------+-------+---------+----------+----------+------------------
45413                                                            Deasserted Deasserted Deasserted PCI 33    --         30          0         33
45414                                                                                             PCI 66    30         15         33         66
45415                                                            Deasserted Deasserted Asserted   PCI-X     20         15         50         66
45416                                                            Deasserted Asserted   Deasserted PCI-X     15         10         66        100
45417                                                            Deasserted Asserted   Asserted   PCI-X     10         7.5       100        133
45418                                                            Asserted   Deasserted Deasserted PCI-X   Reserved   Reserved   Reserved   Reserved
45419                                                            Asserted   Deasserted Asserted   PCI-X   Reserved   Reserved   Reserved   Reserved
45420                                                            Asserted   Asserted   Deasserted PCI-X   Reserved   Reserved   Reserved   Reserved
45421                                                            Asserted   Asserted   Asserted   PCI-X   Reserved   Reserved   Reserved   Reserved
45422                                                                                    NOTE: The PCI Bus speed 'assumed' from the initialization
45423                                                                                    pattern is really intended for an operational range.
45424                                                                                    For example: If PINIT=100, this indicates PCI-X in the
45425                                                                                    100-133MHz range. The PCI_CNT field can be used to further
45426                                                                                    determine a more exacting PCI Bus frequency value if
45427                                                                                    required.
45428                                                                                    *** NOTE: O9N PASS1 Addition */
45429        uint64_t pcicnt                  : 32;      /**< Free Running PCI Clock counter.
45430                                                         At PCI Reset, the PCICNT=0, and is auto-incremented
45431                                                         on every PCI clock and will auto-wrap back to zero
45432                                                         when saturated.
45433                                                         NOTE: Writes override the auto-increment to allow
45434                                                         software to preload any initial value.
45435                                                         The PCICNT field is provided to software as a means
45436                                                         to determine the PCI Bus Speed.
45437                                                         Assuming software has knowledge of the core frequency
45438                                                         (eclk), this register can be written with a value X,
45439                                                         wait 'n' core clocks(eclk) and then read later(Y) to
45440                                                         determine \#PCI clocks(Y-X) have elapsed within 'n' core
45441                                                         clocks to determine the PCI input Clock frequency.
45442                                                         *** NOTE: O9N PASS1 Addition */
45443#else
45444        uint64_t pcicnt                  : 32;
45445        uint64_t ap_speed                : 2;
45446        uint64_t ap_pcix                 : 1;
45447        uint64_t hm_speed                : 2;
45448        uint64_t hm_pcix                 : 1;
45449        uint64_t reserved_38_63          : 26;
45450#endif
45451    } s;
45452    struct cvmx_pci_cnt_reg_s            cn50xx;
45453    struct cvmx_pci_cnt_reg_s            cn58xx;
45454    struct cvmx_pci_cnt_reg_s            cn58xxp1;
45455} cvmx_pci_cnt_reg_t;
45456
45457
45458/**
45459 * cvmx_pci_ctl_status_2
45460 *
45461 * PCI_CTL_STATUS_2 = PCI Control Status 2 Register
45462 *
45463 * Control status register accessable from both PCI and NCB.
45464 */
45465typedef union
45466{
45467    uint32_t u32;
45468    struct cvmx_pci_ctl_status_2_s
45469    {
45470#if __BYTE_ORDER == __BIG_ENDIAN
45471        uint32_t reserved_29_31          : 3;
45472        uint32_t bb1_hole                : 3;       /**< Big BAR 1 Hole
45473                                                         NOT IN PASS 1 NOR PASS 2
45474                                                         When PCI_CTL_STATUS_2[BB1]=1, this field defines
45475                                                         an encoded size of the upper BAR1 region which
45476                                                         OCTEON will mask out (ie: not respond to).
45477                                                         (see definition of BB1_HOLE and BB1_SIZ encodings
45478                                                         in the PCI_CTL_STATUS_2[BB1] definition below). */
45479        uint32_t bb1_siz                 : 1;       /**< Big BAR 1 Size
45480                                                         NOT IN PASS 1 NOR PASS 2
45481                                                         When PCI_CTL_STATUS_2[BB1]=1, this field defines
45482                                                         the programmable SIZE of BAR 1.
45483                                                           - 0: 1GB / 1: 2GB */
45484        uint32_t bb_ca                   : 1;       /**< Set to '1' for Big Bar Mode to do STT/LDT L2C
45485                                                         operations.
45486                                                         NOT IN PASS 1 NOR PASS 2 */
45487        uint32_t bb_es                   : 2;       /**< Big Bar Node Endian Swap Mode
45488                                                           - 0: No Swizzle
45489                                                           - 1: Byte Swizzle (per-QW)
45490                                                           - 2: Byte Swizzle (per-LW)
45491                                                           - 3: LongWord Swizzle
45492                                                         NOT IN PASS 1 NOR PASS 2 */
45493        uint32_t bb1                     : 1;       /**< Big Bar 1 Enable
45494                                                         NOT IN PASS 1 NOR PASS 2
45495                                                         When PCI_CTL_STATUS_2[BB1] is set, the following differences
45496                                                         occur:
45497                                                         - OCTEON's BAR1 becomes somewhere in the range 512-2048 MB rather
45498                                                           than the default 128MB.
45499                                                         - The following table indicates the effective size of
45500                                                           BAR1 when BB1 is set:
45501                                                             BB1_SIZ   BB1_HOLE  Effective size    Comment
45502                                                           +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
45503                                                                0          0         1024 MB      Normal 1GB BAR
45504                                                                0          1         1008 MB      1 GB, 16 MB hole
45505                                                                0          2          992 MB      1 GB, 32 MB hole
45506                                                                0          3          960 MB      1 GB, 64 MB hole
45507                                                                0          4          896 MB      1 GB,128 MB hole
45508                                                                0          5          768 MB      1 GB,256 MB hole
45509                                                                0          6          512 MB      1 GB,512 MB hole
45510                                                                0          7         Illegal
45511                                                                1          0         2048 MB      Normal 2GB BAR
45512                                                                1          1         2032 MB      2 GB, 16 MB hole
45513                                                                1          2         2016 MB      2 GB, 32 MB hole
45514                                                                1          3         1984 MB      2 GB, 64 MB hole
45515                                                                1          4         1920 MB      2 GB,128 MB hole
45516                                                                1          5         1792 MB      2 GB,256 MB hole
45517                                                                1          6         1536 MB      2 GB,512 MB hole
45518                                                                1          7         Illegal
45519                                                         - When BB1_SIZ is 0: PCI_CFG06[LBASE<2:0>] reads as zero
45520                                                           and are ignored on write. BAR1 is an entirely ordinary
45521                                                           1 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0.
45522                                                           When BB1_HOLE is not zero, BAR1 addresses are programmed
45523                                                           as if the BAR were 1GB, but, OCTEON does not respond
45524                                                           to addresses in the programmed holes.
45525                                                         - When BB1_SIZ is 1: PCI_CFG06[LBASE<3:0>] reads as zero
45526                                                           and are ignored on write. BAR1 is an entirely ordinary
45527                                                           2 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0.
45528                                                           When BB1_HOLE is not zero, BAR1 addresses are programmed
45529                                                           as if the BAR were 2GB, but, OCTEON does not respond
45530                                                           to addresses in the programmed holes.
45531                                                         - Note that the BB1_HOLE value has no effect on the
45532                                                           PCI_CFG06[LBASE] behavior. BB1_HOLE only affects whether
45533                                                           OCTEON accepts an address. BB1_SIZ does affect PCI_CFG06[LBASE]
45534                                                           behavior, however.
45535                                                         - The first 128MB, i.e. addresses on the PCI bus in the range
45536                                                             BAR1+0          .. BAR1+0x07FFFFFF
45537                                                           access OCTEON's DRAM addresses with PCI_BAR1_INDEX CSR's
45538                                                           as before
45539                                                         - The remaining address space, i.e. addresses
45540                                                           on the PCI bus in the range
45541                                                              BAR1+0x08000000 .. BAR1+size-1,
45542                                                           where size is the size of BAR1 as selected by the above
45543                                                           table (based on the BB1_SIZ and BB1_HOLE values), are mapped to
45544                                                           OCTEON physical DRAM addresses as follows:
45545                                                                   PCI Address Range         OCTEON Physical Address Range
45546                                                           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
45547                                                            BAR1+0x08000000 .. BAR1+size-1 | 0x88000000 .. 0x7FFFFFFF+size
45548                                                           and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and
45549                                                           PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit
45550                                                           for these references.
45551                                                           The consequences of any burst that crosses the end of the PCI
45552                                                           Address Range for BAR1 are unpredicable.
45553                                                         - The consequences of any burst access that crosses the boundary
45554                                                           between BAR1+0x07FFFFFF and BAR1+0x08000000 are unpredictable in PCI-X
45555                                                           mode. OCTEON may disconnect PCI references at this boundary. */
45556        uint32_t bb0                     : 1;       /**< Big Bar 0 Enable
45557                                                         NOT IN PASS 1 NOR PASS 2
45558                                                         When PCI_CTL_STATUS_2[BB0] is set, the following
45559                                                         differences occur:
45560                                                         - OCTEON's BAR0 becomes 2GB rather than the default 4KB.
45561                                                           PCI_CFG04[LBASE<18:0>] reads as zero and is ignored on write.
45562                                                         - OCTEON's BAR0 becomes burstable. (When BB0 is clear, OCTEON
45563                                                           single-phase disconnects PCI BAR0 reads and PCI/PCI-X BAR0
45564                                                           writes, and splits (burstably) PCI-X BAR0 reads.)
45565                                                         - The first 4KB, i.e. addresses on the PCI bus in the range
45566                                                               BAR0+0      .. BAR0+0xFFF
45567                                                           access OCTEON's PCI-type CSR's as when BB0 is clear.
45568                                                         - The remaining address space, i.e. addresses on the PCI bus
45569                                                           in the range
45570                                                               BAR0+0x1000 .. BAR0+0x7FFFFFFF
45571                                                           are mapped to OCTEON physical DRAM addresses as follows:
45572                                                              PCI Address Range                  OCTEON Physical Address Range
45573                                                           ------------------------------------+------------------------------
45574                                                            BAR0+0x00001000 .. BAR0+0x0FFFFFFF | 0x000001000 .. 0x00FFFFFFF
45575                                                            BAR0+0x10000000 .. BAR0+0x1FFFFFFF | 0x410000000 .. 0x41FFFFFFF
45576                                                            BAR0+0x20000000 .. BAR0+0x7FFFFFFF | 0x020000000 .. 0x07FFFFFFF
45577                                                           and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and
45578                                                           PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit
45579                                                           for these references.
45580                                                           The consequences of any burst that crosses the end of the PCI
45581                                                           Address Range for BAR0 are unpredicable.
45582                                                         - The consequences of any burst access that crosses the boundary
45583                                                           between BAR0+0xFFF and BAR0+0x1000 are unpredictable in PCI-X
45584                                                           mode. OCTEON may disconnect PCI references at this boundary.
45585                                                         - The results of any burst read that crosses the boundary
45586                                                           between BAR0+0x0FFFFFFF and BAR0+0x10000000 are unpredictable.
45587                                                           The consequences of any burst write that crosses this same
45588                                                           boundary are unpredictable.
45589                                                         - The results of any burst read that crosses the boundary
45590                                                           between BAR0+0x1FFFFFFF and BAR0+0x20000000 are unpredictable.
45591                                                           The consequences of any burst write that crosses this same
45592                                                           boundary are unpredictable. */
45593        uint32_t erst_n                  : 1;       /**< Reset active Low. PASS-2 */
45594        uint32_t bar2pres                : 1;       /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN])
45595                                                         is NOT blown the value of this field is '0' after
45596                                                         reset and BAR2 is NOT present. When the fuse IS
45597                                                         blown the value of this field is '1' after reset
45598                                                         and BAR2 is present. Note that SW can change this
45599                                                         field after reset. This is a PASS-2 field. */
45600        uint32_t scmtyp                  : 1;       /**< Split Completion Message CMD Type (0=RD/1=WR)
45601                                                         When SCM=1, SCMTYP specifies the CMD intent (R/W) */
45602        uint32_t scm                     : 1;       /**< Split Completion Message Detected (Read or Write) */
45603        uint32_t en_wfilt                : 1;       /**< When '1' the window-access filter is enabled.
45604                                                         Unfilter writes are:
45605                                                         MIO, SubId0
45606                                                         MIO, SubId7
45607                                                         NPI, SubId0
45608                                                         NPI, SubId7
45609                                                         POW, SubId7
45610                                                         DFA, SubId7
45611                                                         IPD, SubId7
45612                                                         Unfiltered Reads are:
45613                                                         MIO, SubId0
45614                                                         MIO, SubId7
45615                                                         NPI, SubId0
45616                                                         NPI, SubId7
45617                                                         POW, SubId1
45618                                                         POW, SubId2
45619                                                         POW, SubId3
45620                                                         POW, SubId7
45621                                                         DFA, SubId7
45622                                                         IPD, SubId7 */
45623        uint32_t reserved_14_14          : 1;
45624        uint32_t ap_pcix                 : 1;       /**< PCX Core Mode status (0=PCI Bus/1=PCIX)
45625                                                         If one or more of PCI_DEVSEL_N, PCI_STOP_N, and
45626                                                         PCI_TRDY_N are asserted at the rising edge of
45627                                                         PCI_RST_N, the device enters PCI-X mode.
45628                                                         Otherwise, the device enters conventional PCI
45629                                                         mode at the rising edge of RST#. */
45630        uint32_t ap_64ad                 : 1;       /**< PCX Core Bus status (0=32b Bus/1=64b Bus)
45631                                                         When PCI_RST_N pin is de-asserted, the state
45632                                                         of PCI_REQ64_N(driven by central agent) determines
45633                                                         the width of the PCI/X bus. */
45634        uint32_t b12_bist                : 1;       /**< Bist Status For Memeory In B12 */
45635        uint32_t pmo_amod                : 1;       /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */
45636        uint32_t pmo_fpc                 : 3;       /**< PMO-ARB Fixed Priority Counter
45637                                                         When PMO_AMOD=0 (FP mode), this field represents
45638                                                         the \# of CMD1 requests that are issued (at higher
45639                                                         priority) before a single lower priority CMD0
45640                                                         is allowed to issue (to ensure foward progress).
45641                                                           - 0: 1 CMD1 Request issued before CMD0 allowed
45642                                                           - ...
45643                                                           - 7: 8 CMD1 Requests issued before CMD0 allowed */
45644        uint32_t tsr_hwm                 : 3;       /**< Target Split-Read ADB(allowable disconnect boundary)
45645                                                         High Water Mark.
45646                                                         Specifies the number of ADBs(128 Byte aligned chunks)
45647                                                         that are accumulated(pending) BEFORE the Target Split
45648                                                         completion is attempted on the PCI bus.
45649                                                            - 0: RESERVED/ILLEGAL
45650                                                            - 1: 2 Pending ADBs (129B-256B)
45651                                                            - 2: 3 Pending ADBs (257B-384B)
45652                                                            - 3: 4 Pending ADBs (385B-512B)
45653                                                            - 4: 5 Pending ADBs (513B-640B)
45654                                                            - 5: 6 Pending ADBs (641B-768B)
45655                                                            - 6: 7 Pending ADBs (769B-896B)
45656                                                            - 7: 8 Pending ADBs (897B-1024B)
45657                                                         Example: Suppose a 1KB target memory request with
45658                                                         starting byte offset address[6:0]=0x7F is split by
45659                                                         the OCTEON and the TSR_HWM=1(2 ADBs).
45660                                                         The OCTEON will start the target split completion
45661                                                         on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B
45662                                                         of data have been received from memory (even though
45663                                                         the remaining 895B has not yet been received). The
45664                                                         OCTEON will continue the split completion until it
45665                                                         has consumed all of the pended split data. If the
45666                                                         full transaction length(1KB) of data was NOT entirely
45667                                                         transferred, then OCTEON will terminate the split
45668                                                         completion and again wait for another 2 ADB-aligned data
45669                                                         chunks(256B) of pended split data to be received from
45670                                                         memory before starting another split completion request.
45671                                                         This allows Octeon (as split completer), to send back
45672                                                         multiple split completions for a given large split
45673                                                         transaction without having to wait for the entire
45674                                                         transaction length to be received from memory.
45675                                                         NOTE: For split transaction sizes 'smaller' than the
45676                                                         specified TSR_HWM value, the split completion
45677                                                         is started when the last datum has been received from
45678                                                         memory.
45679                                                         NOTE: It is IMPERATIVE that this field NEVER BE
45680                                                         written to a ZERO value. A value of zero is
45681                                                         reserved/illegal and can result in PCIX bus hangs). */
45682        uint32_t bar2_enb                : 1;       /**< When set '1' BAR2 is enable and will respond when
45683                                                         clear '0' BAR2 access will be target-aborted. */
45684        uint32_t bar2_esx                : 2;       /**< Value will be XORed with pci-address[37:36] to
45685                                                         determine the endian swap mode. */
45686        uint32_t bar2_cax                : 1;       /**< Value will be XORed with pci-address[38] to
45687                                                         determine the L2 cache attribute.
45688                                                         When XOR result is 1, not cached in L2 */
45689#else
45690        uint32_t bar2_cax                : 1;
45691        uint32_t bar2_esx                : 2;
45692        uint32_t bar2_enb                : 1;
45693        uint32_t tsr_hwm                 : 3;
45694        uint32_t pmo_fpc                 : 3;
45695        uint32_t pmo_amod                : 1;
45696        uint32_t b12_bist                : 1;
45697        uint32_t ap_64ad                 : 1;
45698        uint32_t ap_pcix                 : 1;
45699        uint32_t reserved_14_14          : 1;
45700        uint32_t en_wfilt                : 1;
45701        uint32_t scm                     : 1;
45702        uint32_t scmtyp                  : 1;
45703        uint32_t bar2pres                : 1;
45704        uint32_t erst_n                  : 1;
45705        uint32_t bb0                     : 1;
45706        uint32_t bb1                     : 1;
45707        uint32_t bb_es                   : 2;
45708        uint32_t bb_ca                   : 1;
45709        uint32_t bb1_siz                 : 1;
45710        uint32_t bb1_hole                : 3;
45711        uint32_t reserved_29_31          : 3;
45712#endif
45713    } s;
45714    struct cvmx_pci_ctl_status_2_s       cn30xx;
45715    struct cvmx_pci_ctl_status_2_cn31xx
45716    {
45717#if __BYTE_ORDER == __BIG_ENDIAN
45718        uint32_t reserved_20_31          : 12;
45719        uint32_t erst_n                  : 1;       /**< Reset active Low. */
45720        uint32_t bar2pres                : 1;       /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN])
45721                                                         is NOT blown the value of this field is '0' after
45722                                                         reset and BAR2 is NOT present. When the fuse IS
45723                                                         blown the value of this field is '1' after reset
45724                                                         and BAR2 is present. Note that SW can change this
45725                                                         field after reset. */
45726        uint32_t scmtyp                  : 1;       /**< Split Completion Message CMD Type (0=RD/1=WR)
45727                                                         When SCM=1, SCMTYP specifies the CMD intent (R/W) */
45728        uint32_t scm                     : 1;       /**< Split Completion Message Detected (Read or Write) */
45729        uint32_t en_wfilt                : 1;       /**< When '1' the window-access filter is enabled.
45730                                                         Unfilter writes are:
45731                                                         MIO,  SubId0
45732                                                         MIO,  SubId7
45733                                                         NPI,  SubId0
45734                                                         NPI,  SubId7
45735                                                         POW,  SubId7
45736                                                         DFA,  SubId7
45737                                                         IPD,  SubId7
45738                                                         USBN, SubId7
45739                                                         Unfiltered Reads are:
45740                                                         MIO,  SubId0
45741                                                         MIO,  SubId7
45742                                                         NPI,  SubId0
45743                                                         NPI,  SubId7
45744                                                         POW,  SubId1
45745                                                         POW,  SubId2
45746                                                         POW,  SubId3
45747                                                         POW,  SubId7
45748                                                         DFA,  SubId7
45749                                                         IPD,  SubId7
45750                                                         USBN, SubId7 */
45751        uint32_t reserved_14_14          : 1;
45752        uint32_t ap_pcix                 : 1;       /**< PCX Core Mode status (0=PCI Bus/1=PCIX) */
45753        uint32_t ap_64ad                 : 1;       /**< PCX Core Bus status (0=32b Bus/1=64b Bus) */
45754        uint32_t b12_bist                : 1;       /**< Bist Status For Memeory In B12 */
45755        uint32_t pmo_amod                : 1;       /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */
45756        uint32_t pmo_fpc                 : 3;       /**< PMO-ARB Fixed Priority Counter
45757                                                         When PMO_AMOD=0 (FP mode), this field represents
45758                                                         the \# of CMD1 requests that are issued (at higher
45759                                                         priority) before a single lower priority CMD0
45760                                                         is allowed to issue (to ensure foward progress).
45761                                                           - 0: 1 CMD1 Request issued before CMD0 allowed
45762                                                           - ...
45763                                                           - 7: 8 CMD1 Requests issued before CMD0 allowed */
45764        uint32_t tsr_hwm                 : 3;       /**< Target Split-Read ADB(allowable disconnect boundary)
45765                                                         High Water Mark.
45766                                                         Specifies the number of ADBs(128 Byte aligned chunks)
45767                                                         that are accumulated(pending) BEFORE the Target Split
45768                                                         completion is attempted on the PCI bus.
45769                                                            - 0: RESERVED/ILLEGAL
45770                                                            - 1: 2 Pending ADBs (129B-256B)
45771                                                            - 2: 3 Pending ADBs (257B-384B)
45772                                                            - 3: 4 Pending ADBs (385B-512B)
45773                                                            - 4: 5 Pending ADBs (513B-640B)
45774                                                            - 5: 6 Pending ADBs (641B-768B)
45775                                                            - 6: 7 Pending ADBs (769B-896B)
45776                                                            - 7: 8 Pending ADBs (897B-1024B)
45777                                                         Example: Suppose a 1KB target memory request with
45778                                                         starting byte offset address[6:0]=0x7F is split by
45779                                                         the OCTEON and the TSR_HWM=1(2 ADBs).
45780                                                         The OCTEON will start the target split completion
45781                                                         on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B
45782                                                         of data have been received from memory (even though
45783                                                         the remaining 895B has not yet been received). The
45784                                                         OCTEON will continue the split completion until it
45785                                                         has consumed all of the pended split data. If the
45786                                                         full transaction length(1KB) of data was NOT entirely
45787                                                         transferred, then OCTEON will terminate the split
45788                                                         completion and again wait for another 2 ADB-aligned data
45789                                                         chunks(256B) of pended split data to be received from
45790                                                         memory before starting another split completion request.
45791                                                         This allows Octeon (as split completer), to send back
45792                                                         multiple split completions for a given large split
45793                                                         transaction without having to wait for the entire
45794                                                         transaction length to be received from memory.
45795                                                         NOTE: For split transaction sizes 'smaller' than the
45796                                                         specified TSR_HWM value, the split completion
45797                                                         is started when the last datum has been received from
45798                                                         memory.
45799                                                         NOTE: It is IMPERATIVE that this field NEVER BE
45800                                                         written to a ZERO value. A value of zero is
45801                                                         reserved/illegal and can result in PCIX bus hangs). */
45802        uint32_t bar2_enb                : 1;       /**< When set '1' BAR2 is enable and will respond when
45803                                                         clear '0' BAR2 access will be target-aborted. */
45804        uint32_t bar2_esx                : 2;       /**< Value will be XORed with pci-address[37:36] to
45805                                                         determine the endian swap mode. */
45806        uint32_t bar2_cax                : 1;       /**< Value will be XORed with pci-address[38] to
45807                                                         determine the L2 cache attribute.
45808                                                         When XOR result is 1, not allocated in L2 cache */
45809#else
45810        uint32_t bar2_cax                : 1;
45811        uint32_t bar2_esx                : 2;
45812        uint32_t bar2_enb                : 1;
45813        uint32_t tsr_hwm                 : 3;
45814        uint32_t pmo_fpc                 : 3;
45815        uint32_t pmo_amod                : 1;
45816        uint32_t b12_bist                : 1;
45817        uint32_t ap_64ad                 : 1;
45818        uint32_t ap_pcix                 : 1;
45819        uint32_t reserved_14_14          : 1;
45820        uint32_t en_wfilt                : 1;
45821        uint32_t scm                     : 1;
45822        uint32_t scmtyp                  : 1;
45823        uint32_t bar2pres                : 1;
45824        uint32_t erst_n                  : 1;
45825        uint32_t reserved_20_31          : 12;
45826#endif
45827    } cn31xx;
45828    struct cvmx_pci_ctl_status_2_s       cn38xx;
45829    struct cvmx_pci_ctl_status_2_cn31xx  cn38xxp2;
45830    struct cvmx_pci_ctl_status_2_s       cn50xx;
45831    struct cvmx_pci_ctl_status_2_s       cn58xx;
45832    struct cvmx_pci_ctl_status_2_s       cn58xxp1;
45833} cvmx_pci_ctl_status_2_t;
45834
45835
45836/**
45837 * cvmx_pci_dbell#
45838 *
45839 * PCI_DBELL0 = PCI Doorbell-0
45840 *
45841 * The value to write to the doorbell 0 register. The value in this register is acted upon when the
45842 * least-significant-byte of this register is written.
45843 */
45844typedef union
45845{
45846    uint32_t u32;
45847    struct cvmx_pci_dbellx_s
45848    {
45849#if __BYTE_ORDER == __BIG_ENDIAN
45850        uint32_t reserved_16_31          : 16;
45851        uint32_t inc_val                 : 16;      /**< Software writes this register with the
45852                                                         number of new Instructions to be processed
45853                                                         on the Instruction Queue. When read this
45854                                                         register contains the last write value. */
45855#else
45856        uint32_t inc_val                 : 16;
45857        uint32_t reserved_16_31          : 16;
45858#endif
45859    } s;
45860    struct cvmx_pci_dbellx_s             cn30xx;
45861    struct cvmx_pci_dbellx_s             cn31xx;
45862    struct cvmx_pci_dbellx_s             cn38xx;
45863    struct cvmx_pci_dbellx_s             cn38xxp2;
45864    struct cvmx_pci_dbellx_s             cn50xx;
45865    struct cvmx_pci_dbellx_s             cn58xx;
45866    struct cvmx_pci_dbellx_s             cn58xxp1;
45867} cvmx_pci_dbellx_t;
45868
45869
45870/**
45871 * cvmx_pci_dma_cnt#
45872 *
45873 * PCI_DMA_CNT0 = PCI DMA Count0
45874 *
45875 * Keeps track of the number of DMAs or bytes sent by DMAs. The value in this register is acted upon when the
45876 * least-significant-byte of this register is written.
45877 */
45878typedef union
45879{
45880    uint32_t u32;
45881    struct cvmx_pci_dma_cntx_s
45882    {
45883#if __BYTE_ORDER == __BIG_ENDIAN
45884        uint32_t dma_cnt                 : 32;      /**< Update with the number of DMAs completed or the
45885                                                         number of bytes sent for DMA's associated with
45886                                                         this counter. When this register is written the
45887                                                         value written to [15:0] will be subtracted from
45888                                                         the value in this register. */
45889#else
45890        uint32_t dma_cnt                 : 32;
45891#endif
45892    } s;
45893    struct cvmx_pci_dma_cntx_s           cn30xx;
45894    struct cvmx_pci_dma_cntx_s           cn31xx;
45895    struct cvmx_pci_dma_cntx_s           cn38xx;
45896    struct cvmx_pci_dma_cntx_s           cn38xxp2;
45897    struct cvmx_pci_dma_cntx_s           cn50xx;
45898    struct cvmx_pci_dma_cntx_s           cn58xx;
45899    struct cvmx_pci_dma_cntx_s           cn58xxp1;
45900} cvmx_pci_dma_cntx_t;
45901
45902
45903/**
45904 * cvmx_pci_dma_int_lev#
45905 *
45906 * PCI_DMA_INT_LEV0 = PCI DMA Sent Interrupt Level For DMA 0
45907 *
45908 * Interrupt when the value in PCI_DMA_CNT0 is equal to or greater than the register value.
45909 */
45910typedef union
45911{
45912    uint32_t u32;
45913    struct cvmx_pci_dma_int_levx_s
45914    {
45915#if __BYTE_ORDER == __BIG_ENDIAN
45916        uint32_t pkt_cnt                 : 32;      /**< When PCI_DMA_CNT0 exceeds the value in this
45917                                                         DCNT0 will be set in PCI_INT_SUM and PCI_INT_SUM2. */
45918#else
45919        uint32_t pkt_cnt                 : 32;
45920#endif
45921    } s;
45922    struct cvmx_pci_dma_int_levx_s       cn30xx;
45923    struct cvmx_pci_dma_int_levx_s       cn31xx;
45924    struct cvmx_pci_dma_int_levx_s       cn38xx;
45925    struct cvmx_pci_dma_int_levx_s       cn38xxp2;
45926    struct cvmx_pci_dma_int_levx_s       cn50xx;
45927    struct cvmx_pci_dma_int_levx_s       cn58xx;
45928    struct cvmx_pci_dma_int_levx_s       cn58xxp1;
45929} cvmx_pci_dma_int_levx_t;
45930
45931
45932/**
45933 * cvmx_pci_dma_time#
45934 *
45935 * PCI_DMA_TIME0 = PCI DMA Sent Timer For DMA0
45936 *
45937 * Time to wait from DMA being sent before issuing an interrupt.
45938 */
45939typedef union
45940{
45941    uint32_t u32;
45942    struct cvmx_pci_dma_timex_s
45943    {
45944#if __BYTE_ORDER == __BIG_ENDIAN
45945        uint32_t dma_time                : 32;      /**< Number of PCI clock cycle to wait before
45946                                                         setting DTIME0 in PCI_INT_SUM and PCI_INT_SUM2.
45947                                                         After PCI_DMA_CNT0 becomes non-zero.
45948                                                         The timer is reset when the
45949                                                         PCI_INT_SUM[27] register is cleared. */
45950#else
45951        uint32_t dma_time                : 32;
45952#endif
45953    } s;
45954    struct cvmx_pci_dma_timex_s          cn30xx;
45955    struct cvmx_pci_dma_timex_s          cn31xx;
45956    struct cvmx_pci_dma_timex_s          cn38xx;
45957    struct cvmx_pci_dma_timex_s          cn38xxp2;
45958    struct cvmx_pci_dma_timex_s          cn50xx;
45959    struct cvmx_pci_dma_timex_s          cn58xx;
45960    struct cvmx_pci_dma_timex_s          cn58xxp1;
45961} cvmx_pci_dma_timex_t;
45962
45963
45964/**
45965 * cvmx_pci_instr_count#
45966 *
45967 * PCI_INSTR_COUNT0 = PCI Instructions Outstanding Request Count
45968 *
45969 * The number of instructions to be fetched by the Instruction-0 Engine.
45970 */
45971typedef union
45972{
45973    uint32_t u32;
45974    struct cvmx_pci_instr_countx_s
45975    {
45976#if __BYTE_ORDER == __BIG_ENDIAN
45977        uint32_t icnt                    : 32;      /**< Number of Instructions to be fetched by the
45978                                                         Instruction Engine.
45979                                                         A write of any non zero value to this register
45980                                                         will clear the value of this register. */
45981#else
45982        uint32_t icnt                    : 32;
45983#endif
45984    } s;
45985    struct cvmx_pci_instr_countx_s       cn30xx;
45986    struct cvmx_pci_instr_countx_s       cn31xx;
45987    struct cvmx_pci_instr_countx_s       cn38xx;
45988    struct cvmx_pci_instr_countx_s       cn38xxp2;
45989    struct cvmx_pci_instr_countx_s       cn50xx;
45990    struct cvmx_pci_instr_countx_s       cn58xx;
45991    struct cvmx_pci_instr_countx_s       cn58xxp1;
45992} cvmx_pci_instr_countx_t;
45993
45994
45995/**
45996 * cvmx_pci_int_enb
45997 *
45998 * PCI_INT_ENB = PCI Interrupt Enable
45999 *
46000 * Enables interrupt bits in the PCI_INT_SUM register.
46001 */
46002typedef union
46003{
46004    uint64_t u64;
46005    struct cvmx_pci_int_enb_s
46006    {
46007#if __BYTE_ORDER == __BIG_ENDIAN
46008        uint64_t reserved_34_63          : 30;
46009        uint64_t ill_rd                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */
46010        uint64_t ill_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */
46011        uint64_t win_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */
46012        uint64_t dma1_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */
46013        uint64_t dma0_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */
46014        uint64_t idtime1                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */
46015        uint64_t idtime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */
46016        uint64_t idcnt1                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */
46017        uint64_t idcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */
46018        uint64_t iptime3                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[24] */
46019        uint64_t iptime2                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[23] */
46020        uint64_t iptime1                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */
46021        uint64_t iptime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */
46022        uint64_t ipcnt3                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[20] */
46023        uint64_t ipcnt2                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[19] */
46024        uint64_t ipcnt1                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */
46025        uint64_t ipcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */
46026        uint64_t irsl_int                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */
46027        uint64_t ill_rrd                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */
46028        uint64_t ill_rwr                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */
46029        uint64_t idperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */
46030        uint64_t iaperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */
46031        uint64_t iserr                   : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */
46032        uint64_t itsr_abt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */
46033        uint64_t imsc_msg                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */
46034        uint64_t imsi_mabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */
46035        uint64_t imsi_tabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */
46036        uint64_t imsi_per                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */
46037        uint64_t imr_tto                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */
46038        uint64_t imr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */
46039        uint64_t itr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */
46040        uint64_t imr_wtto                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */
46041        uint64_t imr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */
46042        uint64_t itr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */
46043#else
46044        uint64_t itr_wabt                : 1;
46045        uint64_t imr_wabt                : 1;
46046        uint64_t imr_wtto                : 1;
46047        uint64_t itr_abt                 : 1;
46048        uint64_t imr_abt                 : 1;
46049        uint64_t imr_tto                 : 1;
46050        uint64_t imsi_per                : 1;
46051        uint64_t imsi_tabt               : 1;
46052        uint64_t imsi_mabt               : 1;
46053        uint64_t imsc_msg                : 1;
46054        uint64_t itsr_abt                : 1;
46055        uint64_t iserr                   : 1;
46056        uint64_t iaperr                  : 1;
46057        uint64_t idperr                  : 1;
46058        uint64_t ill_rwr                 : 1;
46059        uint64_t ill_rrd                 : 1;
46060        uint64_t irsl_int                : 1;
46061        uint64_t ipcnt0                  : 1;
46062        uint64_t ipcnt1                  : 1;
46063        uint64_t ipcnt2                  : 1;
46064        uint64_t ipcnt3                  : 1;
46065        uint64_t iptime0                 : 1;
46066        uint64_t iptime1                 : 1;
46067        uint64_t iptime2                 : 1;
46068        uint64_t iptime3                 : 1;
46069        uint64_t idcnt0                  : 1;
46070        uint64_t idcnt1                  : 1;
46071        uint64_t idtime0                 : 1;
46072        uint64_t idtime1                 : 1;
46073        uint64_t dma0_fi                 : 1;
46074        uint64_t dma1_fi                 : 1;
46075        uint64_t win_wr                  : 1;
46076        uint64_t ill_wr                  : 1;
46077        uint64_t ill_rd                  : 1;
46078        uint64_t reserved_34_63          : 30;
46079#endif
46080    } s;
46081    struct cvmx_pci_int_enb_cn30xx
46082    {
46083#if __BYTE_ORDER == __BIG_ENDIAN
46084        uint64_t reserved_34_63          : 30;
46085        uint64_t ill_rd                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */
46086        uint64_t ill_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */
46087        uint64_t win_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */
46088        uint64_t dma1_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */
46089        uint64_t dma0_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */
46090        uint64_t idtime1                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */
46091        uint64_t idtime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */
46092        uint64_t idcnt1                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */
46093        uint64_t idcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */
46094        uint64_t reserved_22_24          : 3;
46095        uint64_t iptime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */
46096        uint64_t reserved_18_20          : 3;
46097        uint64_t ipcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */
46098        uint64_t irsl_int                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */
46099        uint64_t ill_rrd                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */
46100        uint64_t ill_rwr                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */
46101        uint64_t idperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */
46102        uint64_t iaperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */
46103        uint64_t iserr                   : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */
46104        uint64_t itsr_abt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */
46105        uint64_t imsc_msg                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */
46106        uint64_t imsi_mabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */
46107        uint64_t imsi_tabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */
46108        uint64_t imsi_per                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */
46109        uint64_t imr_tto                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */
46110        uint64_t imr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */
46111        uint64_t itr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */
46112        uint64_t imr_wtto                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */
46113        uint64_t imr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */
46114        uint64_t itr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */
46115#else
46116        uint64_t itr_wabt                : 1;
46117        uint64_t imr_wabt                : 1;
46118        uint64_t imr_wtto                : 1;
46119        uint64_t itr_abt                 : 1;
46120        uint64_t imr_abt                 : 1;
46121        uint64_t imr_tto                 : 1;
46122        uint64_t imsi_per                : 1;
46123        uint64_t imsi_tabt               : 1;
46124        uint64_t imsi_mabt               : 1;
46125        uint64_t imsc_msg                : 1;
46126        uint64_t itsr_abt                : 1;
46127        uint64_t iserr                   : 1;
46128        uint64_t iaperr                  : 1;
46129        uint64_t idperr                  : 1;
46130        uint64_t ill_rwr                 : 1;
46131        uint64_t ill_rrd                 : 1;
46132        uint64_t irsl_int                : 1;
46133        uint64_t ipcnt0                  : 1;
46134        uint64_t reserved_18_20          : 3;
46135        uint64_t iptime0                 : 1;
46136        uint64_t reserved_22_24          : 3;
46137        uint64_t idcnt0                  : 1;
46138        uint64_t idcnt1                  : 1;
46139        uint64_t idtime0                 : 1;
46140        uint64_t idtime1                 : 1;
46141        uint64_t dma0_fi                 : 1;
46142        uint64_t dma1_fi                 : 1;
46143        uint64_t win_wr                  : 1;
46144        uint64_t ill_wr                  : 1;
46145        uint64_t ill_rd                  : 1;
46146        uint64_t reserved_34_63          : 30;
46147#endif
46148    } cn30xx;
46149    struct cvmx_pci_int_enb_cn31xx
46150    {
46151#if __BYTE_ORDER == __BIG_ENDIAN
46152        uint64_t reserved_34_63          : 30;
46153        uint64_t ill_rd                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */
46154        uint64_t ill_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */
46155        uint64_t win_wr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */
46156        uint64_t dma1_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */
46157        uint64_t dma0_fi                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */
46158        uint64_t idtime1                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */
46159        uint64_t idtime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */
46160        uint64_t idcnt1                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */
46161        uint64_t idcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */
46162        uint64_t reserved_23_24          : 2;
46163        uint64_t iptime1                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */
46164        uint64_t iptime0                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */
46165        uint64_t reserved_19_20          : 2;
46166        uint64_t ipcnt1                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */
46167        uint64_t ipcnt0                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */
46168        uint64_t irsl_int                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */
46169        uint64_t ill_rrd                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */
46170        uint64_t ill_rwr                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */
46171        uint64_t idperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */
46172        uint64_t iaperr                  : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */
46173        uint64_t iserr                   : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */
46174        uint64_t itsr_abt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */
46175        uint64_t imsc_msg                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */
46176        uint64_t imsi_mabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */
46177        uint64_t imsi_tabt               : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */
46178        uint64_t imsi_per                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */
46179        uint64_t imr_tto                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */
46180        uint64_t imr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */
46181        uint64_t itr_abt                 : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */
46182        uint64_t imr_wtto                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */
46183        uint64_t imr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */
46184        uint64_t itr_wabt                : 1;       /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */
46185#else
46186        uint64_t itr_wabt                : 1;
46187        uint64_t imr_wabt                : 1;
46188        uint64_t imr_wtto                : 1;
46189        uint64_t itr_abt                 : 1;
46190        uint64_t imr_abt                 : 1;
46191        uint64_t imr_tto                 : 1;
46192        uint64_t imsi_per                : 1;
46193        uint64_t imsi_tabt               : 1;
46194        uint64_t imsi_mabt               : 1;
46195        uint64_t imsc_msg                : 1;
46196        uint64_t itsr_abt                : 1;
46197        uint64_t iserr                   : 1;
46198        uint64_t iaperr                  : 1;
46199        uint64_t idperr                  : 1;
46200        uint64_t ill_rwr                 : 1;
46201        uint64_t ill_rrd                 : 1;
46202        uint64_t irsl_int                : 1;
46203        uint64_t ipcnt0                  : 1;
46204        uint64_t ipcnt1                  : 1;
46205        uint64_t reserved_19_20          : 2;
46206        uint64_t iptime0                 : 1;
46207        uint64_t iptime1                 : 1;
46208        uint64_t reserved_23_24          : 2;
46209        uint64_t idcnt0                  : 1;
46210        uint64_t idcnt1                  : 1;
46211        uint64_t idtime0                 : 1;
46212        uint64_t idtime1                 : 1;
46213        uint64_t dma0_fi                 : 1;
46214        uint64_t dma1_fi                 : 1;
46215        uint64_t win_wr                  : 1;
46216        uint64_t ill_wr                  : 1;
46217        uint64_t ill_rd                  : 1;
46218        uint64_t reserved_34_63          : 30;
46219#endif
46220    } cn31xx;
46221    struct cvmx_pci_int_enb_s            cn38xx;
46222    struct cvmx_pci_int_enb_s            cn38xxp2;
46223    struct cvmx_pci_int_enb_cn31xx       cn50xx;
46224    struct cvmx_pci_int_enb_s            cn58xx;
46225    struct cvmx_pci_int_enb_s            cn58xxp1;
46226} cvmx_pci_int_enb_t;
46227
46228
46229/**
46230 * cvmx_pci_int_enb2
46231 *
46232 * PCI_INT_ENB2 = PCI Interrupt Enable2 Register
46233 *
46234 * Enables interrupt bits in the PCI_INT_SUM2 register.
46235 */
46236typedef union
46237{
46238    uint64_t u64;
46239    struct cvmx_pci_int_enb2_s
46240    {
46241#if __BYTE_ORDER == __BIG_ENDIAN
46242        uint64_t reserved_34_63          : 30;
46243        uint64_t ill_rd                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */
46244        uint64_t ill_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */
46245        uint64_t win_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */
46246        uint64_t dma1_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */
46247        uint64_t dma0_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */
46248        uint64_t rdtime1                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */
46249        uint64_t rdtime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */
46250        uint64_t rdcnt1                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */
46251        uint64_t rdcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */
46252        uint64_t rptime3                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[24] */
46253        uint64_t rptime2                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[23] */
46254        uint64_t rptime1                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */
46255        uint64_t rptime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */
46256        uint64_t rpcnt3                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[20] */
46257        uint64_t rpcnt2                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[19] */
46258        uint64_t rpcnt1                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */
46259        uint64_t rpcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */
46260        uint64_t rrsl_int                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */
46261        uint64_t ill_rrd                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */
46262        uint64_t ill_rwr                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */
46263        uint64_t rdperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */
46264        uint64_t raperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */
46265        uint64_t rserr                   : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */
46266        uint64_t rtsr_abt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */
46267        uint64_t rmsc_msg                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */
46268        uint64_t rmsi_mabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */
46269        uint64_t rmsi_tabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */
46270        uint64_t rmsi_per                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */
46271        uint64_t rmr_tto                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */
46272        uint64_t rmr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */
46273        uint64_t rtr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */
46274        uint64_t rmr_wtto                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */
46275        uint64_t rmr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */
46276        uint64_t rtr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */
46277#else
46278        uint64_t rtr_wabt                : 1;
46279        uint64_t rmr_wabt                : 1;
46280        uint64_t rmr_wtto                : 1;
46281        uint64_t rtr_abt                 : 1;
46282        uint64_t rmr_abt                 : 1;
46283        uint64_t rmr_tto                 : 1;
46284        uint64_t rmsi_per                : 1;
46285        uint64_t rmsi_tabt               : 1;
46286        uint64_t rmsi_mabt               : 1;
46287        uint64_t rmsc_msg                : 1;
46288        uint64_t rtsr_abt                : 1;
46289        uint64_t rserr                   : 1;
46290        uint64_t raperr                  : 1;
46291        uint64_t rdperr                  : 1;
46292        uint64_t ill_rwr                 : 1;
46293        uint64_t ill_rrd                 : 1;
46294        uint64_t rrsl_int                : 1;
46295        uint64_t rpcnt0                  : 1;
46296        uint64_t rpcnt1                  : 1;
46297        uint64_t rpcnt2                  : 1;
46298        uint64_t rpcnt3                  : 1;
46299        uint64_t rptime0                 : 1;
46300        uint64_t rptime1                 : 1;
46301        uint64_t rptime2                 : 1;
46302        uint64_t rptime3                 : 1;
46303        uint64_t rdcnt0                  : 1;
46304        uint64_t rdcnt1                  : 1;
46305        uint64_t rdtime0                 : 1;
46306        uint64_t rdtime1                 : 1;
46307        uint64_t dma0_fi                 : 1;
46308        uint64_t dma1_fi                 : 1;
46309        uint64_t win_wr                  : 1;
46310        uint64_t ill_wr                  : 1;
46311        uint64_t ill_rd                  : 1;
46312        uint64_t reserved_34_63          : 30;
46313#endif
46314    } s;
46315    struct cvmx_pci_int_enb2_cn30xx
46316    {
46317#if __BYTE_ORDER == __BIG_ENDIAN
46318        uint64_t reserved_34_63          : 30;
46319        uint64_t ill_rd                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */
46320        uint64_t ill_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */
46321        uint64_t win_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */
46322        uint64_t dma1_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */
46323        uint64_t dma0_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */
46324        uint64_t rdtime1                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */
46325        uint64_t rdtime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */
46326        uint64_t rdcnt1                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */
46327        uint64_t rdcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */
46328        uint64_t reserved_22_24          : 3;
46329        uint64_t rptime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */
46330        uint64_t reserved_18_20          : 3;
46331        uint64_t rpcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */
46332        uint64_t rrsl_int                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */
46333        uint64_t ill_rrd                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */
46334        uint64_t ill_rwr                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */
46335        uint64_t rdperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */
46336        uint64_t raperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */
46337        uint64_t rserr                   : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */
46338        uint64_t rtsr_abt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */
46339        uint64_t rmsc_msg                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */
46340        uint64_t rmsi_mabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */
46341        uint64_t rmsi_tabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */
46342        uint64_t rmsi_per                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */
46343        uint64_t rmr_tto                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */
46344        uint64_t rmr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */
46345        uint64_t rtr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */
46346        uint64_t rmr_wtto                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */
46347        uint64_t rmr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */
46348        uint64_t rtr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */
46349#else
46350        uint64_t rtr_wabt                : 1;
46351        uint64_t rmr_wabt                : 1;
46352        uint64_t rmr_wtto                : 1;
46353        uint64_t rtr_abt                 : 1;
46354        uint64_t rmr_abt                 : 1;
46355        uint64_t rmr_tto                 : 1;
46356        uint64_t rmsi_per                : 1;
46357        uint64_t rmsi_tabt               : 1;
46358        uint64_t rmsi_mabt               : 1;
46359        uint64_t rmsc_msg                : 1;
46360        uint64_t rtsr_abt                : 1;
46361        uint64_t rserr                   : 1;
46362        uint64_t raperr                  : 1;
46363        uint64_t rdperr                  : 1;
46364        uint64_t ill_rwr                 : 1;
46365        uint64_t ill_rrd                 : 1;
46366        uint64_t rrsl_int                : 1;
46367        uint64_t rpcnt0                  : 1;
46368        uint64_t reserved_18_20          : 3;
46369        uint64_t rptime0                 : 1;
46370        uint64_t reserved_22_24          : 3;
46371        uint64_t rdcnt0                  : 1;
46372        uint64_t rdcnt1                  : 1;
46373        uint64_t rdtime0                 : 1;
46374        uint64_t rdtime1                 : 1;
46375        uint64_t dma0_fi                 : 1;
46376        uint64_t dma1_fi                 : 1;
46377        uint64_t win_wr                  : 1;
46378        uint64_t ill_wr                  : 1;
46379        uint64_t ill_rd                  : 1;
46380        uint64_t reserved_34_63          : 30;
46381#endif
46382    } cn30xx;
46383    struct cvmx_pci_int_enb2_cn31xx
46384    {
46385#if __BYTE_ORDER == __BIG_ENDIAN
46386        uint64_t reserved_34_63          : 30;
46387        uint64_t ill_rd                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */
46388        uint64_t ill_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */
46389        uint64_t win_wr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */
46390        uint64_t dma1_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */
46391        uint64_t dma0_fi                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */
46392        uint64_t rdtime1                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */
46393        uint64_t rdtime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */
46394        uint64_t rdcnt1                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */
46395        uint64_t rdcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */
46396        uint64_t reserved_23_24          : 2;
46397        uint64_t rptime1                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */
46398        uint64_t rptime0                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */
46399        uint64_t reserved_19_20          : 2;
46400        uint64_t rpcnt1                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */
46401        uint64_t rpcnt0                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */
46402        uint64_t rrsl_int                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */
46403        uint64_t ill_rrd                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */
46404        uint64_t ill_rwr                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */
46405        uint64_t rdperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */
46406        uint64_t raperr                  : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */
46407        uint64_t rserr                   : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */
46408        uint64_t rtsr_abt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */
46409        uint64_t rmsc_msg                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */
46410        uint64_t rmsi_mabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */
46411        uint64_t rmsi_tabt               : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */
46412        uint64_t rmsi_per                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */
46413        uint64_t rmr_tto                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */
46414        uint64_t rmr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */
46415        uint64_t rtr_abt                 : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */
46416        uint64_t rmr_wtto                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */
46417        uint64_t rmr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */
46418        uint64_t rtr_wabt                : 1;       /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */
46419#else
46420        uint64_t rtr_wabt                : 1;
46421        uint64_t rmr_wabt                : 1;
46422        uint64_t rmr_wtto                : 1;
46423        uint64_t rtr_abt                 : 1;
46424        uint64_t rmr_abt                 : 1;
46425        uint64_t rmr_tto                 : 1;
46426        uint64_t rmsi_per                : 1;
46427        uint64_t rmsi_tabt               : 1;
46428        uint64_t rmsi_mabt               : 1;
46429        uint64_t rmsc_msg                : 1;
46430        uint64_t rtsr_abt                : 1;
46431        uint64_t rserr                   : 1;
46432        uint64_t raperr                  : 1;
46433        uint64_t rdperr                  : 1;
46434        uint64_t ill_rwr                 : 1;
46435        uint64_t ill_rrd                 : 1;
46436        uint64_t rrsl_int                : 1;
46437        uint64_t rpcnt0                  : 1;
46438        uint64_t rpcnt1                  : 1;
46439        uint64_t reserved_19_20          : 2;
46440        uint64_t rptime0                 : 1;
46441        uint64_t rptime1                 : 1;
46442        uint64_t reserved_23_24          : 2;
46443        uint64_t rdcnt0                  : 1;
46444        uint64_t rdcnt1                  : 1;
46445        uint64_t rdtime0                 : 1;
46446        uint64_t rdtime1                 : 1;
46447        uint64_t dma0_fi                 : 1;
46448        uint64_t dma1_fi                 : 1;
46449        uint64_t win_wr                  : 1;
46450        uint64_t ill_wr                  : 1;
46451        uint64_t ill_rd                  : 1;
46452        uint64_t reserved_34_63          : 30;
46453#endif
46454    } cn31xx;
46455    struct cvmx_pci_int_enb2_s           cn38xx;
46456    struct cvmx_pci_int_enb2_s           cn38xxp2;
46457    struct cvmx_pci_int_enb2_cn31xx      cn50xx;
46458    struct cvmx_pci_int_enb2_s           cn58xx;
46459    struct cvmx_pci_int_enb2_s           cn58xxp1;
46460} cvmx_pci_int_enb2_t;
46461
46462
46463/**
46464 * cvmx_pci_int_sum
46465 *
46466 * PCI_INT_SUM = PCI Interrupt Summary
46467 *
46468 * The PCI Interrupt Summary Register.
46469 */
46470typedef union
46471{
46472    uint64_t u64;
46473    struct cvmx_pci_int_sum_s
46474    {
46475#if __BYTE_ORDER == __BIG_ENDIAN
46476        uint64_t reserved_34_63          : 30;
46477        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
46478                                                         when the mem area is disabled. */
46479        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
46480                                                         when the mem area is disabled. */
46481        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
46482                                                         Read-Address Register took place. */
46483        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
46484                                                         required to set the FORCE-INT bit for counter 1. */
46485        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
46486                                                         required to set the FORCE-INT bit for counter 0. */
46487        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
46488                                                         register is not 0 the DMA_CNT1 timer counts.
46489                                                         When the DMA1_CNT timer has a value greater
46490                                                         than the PCI_DMA_TIME1 register this
46491                                                         bit is set. The timer is reset when bit is
46492                                                         written with a one. */
46493        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
46494                                                         register is not 0 the DMA_CNT0 timer counts.
46495                                                         When the DMA0_CNT timer has a value greater
46496                                                         than the PCI_DMA_TIME0 register this
46497                                                         bit is set. The timer is reset when bit is
46498                                                         written with a one. */
46499        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
46500                                                         value is greater than the value
46501                                                         in the PCI_DMA_INT_LEV1 register. */
46502        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
46503                                                         value is greater than the value
46504                                                         in the PCI_DMA_INT_LEV0 register. */
46505        uint64_t ptime3                  : 1;       /**< When the value in the PCI_PKTS_SENT3
46506                                                         register is not 0 the Sent-3 timer counts.
46507                                                         When the Sent-3 timer has a value greater
46508                                                         than the PCI_PKTS_SENT_TIME3 register this
46509                                                         bit is set. The timer is reset when bit is
46510                                                         written with a one. */
46511        uint64_t ptime2                  : 1;       /**< When the value in the PCI_PKTS_SENT2
46512                                                         register is not 0 the Sent-2 timer counts.
46513                                                         When the Sent-2 timer has a value greater
46514                                                         than the PCI_PKTS_SENT_TIME2 register this
46515                                                         bit is set. The timer is reset when bit is
46516                                                         written with a one. */
46517        uint64_t ptime1                  : 1;       /**< When the value in the PCI_PKTS_SENT1
46518                                                         register is not 0 the Sent-1 timer counts.
46519                                                         When the Sent-1 timer has a value greater
46520                                                         than the PCI_PKTS_SENT_TIME1 register this
46521                                                         bit is set. The timer is reset when bit is
46522                                                         written with a one. */
46523        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
46524                                                         register is not 0 the Sent-0 timer counts.
46525                                                         When the Sent-0 timer has a value greater
46526                                                         than the PCI_PKTS_SENT_TIME0 register this
46527                                                         bit is set. The timer is reset when bit is
46528                                                         written with a one. */
46529        uint64_t pcnt3                   : 1;       /**< This bit indicates that PCI_PKTS_SENT3
46530                                                         value is greater than the value
46531                                                         in the PCI_PKTS_SENT_INT_LEV3 register. */
46532        uint64_t pcnt2                   : 1;       /**< This bit indicates that PCI_PKTS_SENT2
46533                                                         value is greater than the value
46534                                                         in the PCI_PKTS_SENT_INT_LEV2 register. */
46535        uint64_t pcnt1                   : 1;       /**< This bit indicates that PCI_PKTS_SENT1
46536                                                         value is greater than the value
46537                                                         in the PCI_PKTS_SENT_INT_LEV1 register. */
46538        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
46539                                                         value is greater than the value
46540                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
46541        uint64_t rsl_int                 : 1;       /**< This bit is set when the mio_pci_inta_dr wire
46542                                                         is asserted by the MIO. */
46543        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
46544        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
46545        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
46546        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
46547        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
46548        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected
46549                                                         O9N (as completer), has encountered an error
46550                                                         which prevents the split transaction from
46551                                                         completing. In this event, the O9N (as completer),
46552                                                         sends a SCM (Split Completion Message) to the
46553                                                         initiator. See: PCIX Spec v1.0a Fig 2-40.
46554                                                            [31:28]: Message Class = 2(completer error)
46555                                                            [27:20]: Message Index = 0x80
46556                                                            [18:12]: Remaining Lower Address
46557                                                            [11:0]: Remaining Byte Count */
46558        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message (SCM) Detected
46559                                                         for either a Split-Read/Write error case.
46560                                                         Set if:
46561                                                            a) A Split-Write SCM is detected with SCE=1.
46562                                                            b) A Split-Read SCM is detected (regardless
46563                                                               of SCE status).
46564                                                         The Split completion message(SCM)
46565                                                         is also latched into the PCI_SCM_REG[SCM] to
46566                                                         assist SW with error recovery. */
46567        uint64_t msi_mabt                : 1;       /**< PCI Master Abort on Master MSI */
46568        uint64_t msi_tabt                : 1;       /**< PCI Target-Abort on Master MSI */
46569        uint64_t msi_per                 : 1;       /**< PCI Parity Error on Master MSI */
46570        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Master-Read */
46571        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Master-Read */
46572        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Master-Read */
46573        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on Master-write */
46574        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on Master-write */
46575        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on Master-write */
46576#else
46577        uint64_t tr_wabt                 : 1;
46578        uint64_t mr_wabt                 : 1;
46579        uint64_t mr_wtto                 : 1;
46580        uint64_t tr_abt                  : 1;
46581        uint64_t mr_abt                  : 1;
46582        uint64_t mr_tto                  : 1;
46583        uint64_t msi_per                 : 1;
46584        uint64_t msi_tabt                : 1;
46585        uint64_t msi_mabt                : 1;
46586        uint64_t msc_msg                 : 1;
46587        uint64_t tsr_abt                 : 1;
46588        uint64_t serr                    : 1;
46589        uint64_t aperr                   : 1;
46590        uint64_t dperr                   : 1;
46591        uint64_t ill_rwr                 : 1;
46592        uint64_t ill_rrd                 : 1;
46593        uint64_t rsl_int                 : 1;
46594        uint64_t pcnt0                   : 1;
46595        uint64_t pcnt1                   : 1;
46596        uint64_t pcnt2                   : 1;
46597        uint64_t pcnt3                   : 1;
46598        uint64_t ptime0                  : 1;
46599        uint64_t ptime1                  : 1;
46600        uint64_t ptime2                  : 1;
46601        uint64_t ptime3                  : 1;
46602        uint64_t dcnt0                   : 1;
46603        uint64_t dcnt1                   : 1;
46604        uint64_t dtime0                  : 1;
46605        uint64_t dtime1                  : 1;
46606        uint64_t dma0_fi                 : 1;
46607        uint64_t dma1_fi                 : 1;
46608        uint64_t win_wr                  : 1;
46609        uint64_t ill_wr                  : 1;
46610        uint64_t ill_rd                  : 1;
46611        uint64_t reserved_34_63          : 30;
46612#endif
46613    } s;
46614    struct cvmx_pci_int_sum_cn30xx
46615    {
46616#if __BYTE_ORDER == __BIG_ENDIAN
46617        uint64_t reserved_34_63          : 30;
46618        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
46619                                                         when the mem area is disabled. */
46620        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
46621                                                         when the mem area is disabled. */
46622        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
46623                                                         Read-Address Register took place. */
46624        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
46625                                                         required to set the FORCE-INT bit for counter 1. */
46626        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
46627                                                         required to set the FORCE-INT bit for counter 0. */
46628        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
46629                                                         register is not 0 the DMA_CNT1 timer counts.
46630                                                         When the DMA1_CNT timer has a value greater
46631                                                         than the PCI_DMA_TIME1 register this
46632                                                         bit is set. The timer is reset when bit is
46633                                                         written with a one. */
46634        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
46635                                                         register is not 0 the DMA_CNT0 timer counts.
46636                                                         When the DMA0_CNT timer has a value greater
46637                                                         than the PCI_DMA_TIME0 register this
46638                                                         bit is set. The timer is reset when bit is
46639                                                         written with a one. */
46640        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
46641                                                         value is greater than the value
46642                                                         in the PCI_DMA_INT_LEV1 register. */
46643        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
46644                                                         value is greater than the value
46645                                                         in the PCI_DMA_INT_LEV0 register. */
46646        uint64_t reserved_22_24          : 3;
46647        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
46648                                                         register is not 0 the Sent-0 timer counts.
46649                                                         When the Sent-0 timer has a value greater
46650                                                         than the PCI_PKTS_SENT_TIME0 register this
46651                                                         bit is set. The timer is reset when bit is
46652                                                         written with a one. */
46653        uint64_t reserved_18_20          : 3;
46654        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
46655                                                         value is greater than the value
46656                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
46657        uint64_t rsl_int                 : 1;       /**< This bit is set when the mio_pci_inta_dr wire
46658                                                         is asserted by the MIO */
46659        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
46660        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
46661        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
46662        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
46663        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
46664        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected
46665                                                         N3K (as completer), has encountered an error
46666                                                         which prevents the split transaction from
46667                                                         completing. In this event, the N3K (as completer),
46668                                                         sends a SCM (Split Completion Message) to the
46669                                                         initiator. See: PCIX Spec v1.0a Fig 2-40.
46670                                                            [31:28]: Message Class = 2(completer error)
46671                                                            [27:20]: Message Index = 0x80
46672                                                            [18:12]: Remaining Lower Address
46673                                                            [11:0]: Remaining Byte Count */
46674        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message (SCM) Detected
46675                                                         for either a Split-Read/Write error case.
46676                                                         Set if:
46677                                                            a) A Split-Write SCM is detected with SCE=1.
46678                                                            b) A Split-Read SCM is detected (regardless
46679                                                               of SCE status).
46680                                                         The Split completion message(SCM)
46681                                                         is also latched into the PCI_SCM_REG[SCM] to
46682                                                         assist SW with error recovery. */
46683        uint64_t msi_mabt                : 1;       /**< PCI Master Abort on Master MSI */
46684        uint64_t msi_tabt                : 1;       /**< PCI Target-Abort on Master MSI */
46685        uint64_t msi_per                 : 1;       /**< PCI Parity Error on Master MSI */
46686        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Master-Read */
46687        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Master-Read */
46688        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Master-Read */
46689        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on Master-write */
46690        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on Master-write */
46691        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on Master-write */
46692#else
46693        uint64_t tr_wabt                 : 1;
46694        uint64_t mr_wabt                 : 1;
46695        uint64_t mr_wtto                 : 1;
46696        uint64_t tr_abt                  : 1;
46697        uint64_t mr_abt                  : 1;
46698        uint64_t mr_tto                  : 1;
46699        uint64_t msi_per                 : 1;
46700        uint64_t msi_tabt                : 1;
46701        uint64_t msi_mabt                : 1;
46702        uint64_t msc_msg                 : 1;
46703        uint64_t tsr_abt                 : 1;
46704        uint64_t serr                    : 1;
46705        uint64_t aperr                   : 1;
46706        uint64_t dperr                   : 1;
46707        uint64_t ill_rwr                 : 1;
46708        uint64_t ill_rrd                 : 1;
46709        uint64_t rsl_int                 : 1;
46710        uint64_t pcnt0                   : 1;
46711        uint64_t reserved_18_20          : 3;
46712        uint64_t ptime0                  : 1;
46713        uint64_t reserved_22_24          : 3;
46714        uint64_t dcnt0                   : 1;
46715        uint64_t dcnt1                   : 1;
46716        uint64_t dtime0                  : 1;
46717        uint64_t dtime1                  : 1;
46718        uint64_t dma0_fi                 : 1;
46719        uint64_t dma1_fi                 : 1;
46720        uint64_t win_wr                  : 1;
46721        uint64_t ill_wr                  : 1;
46722        uint64_t ill_rd                  : 1;
46723        uint64_t reserved_34_63          : 30;
46724#endif
46725    } cn30xx;
46726    struct cvmx_pci_int_sum_cn31xx
46727    {
46728#if __BYTE_ORDER == __BIG_ENDIAN
46729        uint64_t reserved_34_63          : 30;
46730        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
46731                                                         when the mem area is disabled. */
46732        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
46733                                                         when the mem area is disabled. */
46734        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
46735                                                         Read-Address Register took place. */
46736        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
46737                                                         required to set the FORCE-INT bit for counter 1. */
46738        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
46739                                                         required to set the FORCE-INT bit for counter 0. */
46740        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
46741                                                         register is not 0 the DMA_CNT1 timer counts.
46742                                                         When the DMA1_CNT timer has a value greater
46743                                                         than the PCI_DMA_TIME1 register this
46744                                                         bit is set. The timer is reset when bit is
46745                                                         written with a one. */
46746        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
46747                                                         register is not 0 the DMA_CNT0 timer counts.
46748                                                         When the DMA0_CNT timer has a value greater
46749                                                         than the PCI_DMA_TIME0 register this
46750                                                         bit is set. The timer is reset when bit is
46751                                                         written with a one. */
46752        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
46753                                                         value is greater than the value
46754                                                         in the PCI_DMA_INT_LEV1 register. */
46755        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
46756                                                         value is greater than the value
46757                                                         in the PCI_DMA_INT_LEV0 register. */
46758        uint64_t reserved_23_24          : 2;
46759        uint64_t ptime1                  : 1;       /**< When the value in the PCI_PKTS_SENT1
46760                                                         register is not 0 the Sent-1 timer counts.
46761                                                         When the Sent-1 timer has a value greater
46762                                                         than the PCI_PKTS_SENT_TIME1 register this
46763                                                         bit is set. The timer is reset when bit is
46764                                                         written with a one. */
46765        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
46766                                                         register is not 0 the Sent-0 timer counts.
46767                                                         When the Sent-0 timer has a value greater
46768                                                         than the PCI_PKTS_SENT_TIME0 register this
46769                                                         bit is set. The timer is reset when bit is
46770                                                         written with a one. */
46771        uint64_t reserved_19_20          : 2;
46772        uint64_t pcnt1                   : 1;       /**< This bit indicates that PCI_PKTS_SENT1
46773                                                         value is greater than the value
46774                                                         in the PCI_PKTS_SENT_INT_LEV1 register. */
46775        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
46776                                                         value is greater than the value
46777                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
46778        uint64_t rsl_int                 : 1;       /**< This bit is set when the mio_pci_inta_dr wire
46779                                                         is asserted by the MIO */
46780        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
46781        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
46782        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
46783        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
46784        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
46785        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected
46786                                                         N3K (as completer), has encountered an error
46787                                                         which prevents the split transaction from
46788                                                         completing. In this event, the N3K (as completer),
46789                                                         sends a SCM (Split Completion Message) to the
46790                                                         initiator. See: PCIX Spec v1.0a Fig 2-40.
46791                                                            [31:28]: Message Class = 2(completer error)
46792                                                            [27:20]: Message Index = 0x80
46793                                                            [18:12]: Remaining Lower Address
46794                                                            [11:0]: Remaining Byte Count */
46795        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message (SCM) Detected
46796                                                         for either a Split-Read/Write error case.
46797                                                         Set if:
46798                                                            a) A Split-Write SCM is detected with SCE=1.
46799                                                            b) A Split-Read SCM is detected (regardless
46800                                                               of SCE status).
46801                                                         The Split completion message(SCM)
46802                                                         is also latched into the PCI_SCM_REG[SCM] to
46803                                                         assist SW with error recovery. */
46804        uint64_t msi_mabt                : 1;       /**< PCI Master Abort on Master MSI */
46805        uint64_t msi_tabt                : 1;       /**< PCI Target-Abort on Master MSI */
46806        uint64_t msi_per                 : 1;       /**< PCI Parity Error on Master MSI */
46807        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Master-Read */
46808        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Master-Read */
46809        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Master-Read */
46810        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on Master-write */
46811        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on Master-write */
46812        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on Master-write */
46813#else
46814        uint64_t tr_wabt                 : 1;
46815        uint64_t mr_wabt                 : 1;
46816        uint64_t mr_wtto                 : 1;
46817        uint64_t tr_abt                  : 1;
46818        uint64_t mr_abt                  : 1;
46819        uint64_t mr_tto                  : 1;
46820        uint64_t msi_per                 : 1;
46821        uint64_t msi_tabt                : 1;
46822        uint64_t msi_mabt                : 1;
46823        uint64_t msc_msg                 : 1;
46824        uint64_t tsr_abt                 : 1;
46825        uint64_t serr                    : 1;
46826        uint64_t aperr                   : 1;
46827        uint64_t dperr                   : 1;
46828        uint64_t ill_rwr                 : 1;
46829        uint64_t ill_rrd                 : 1;
46830        uint64_t rsl_int                 : 1;
46831        uint64_t pcnt0                   : 1;
46832        uint64_t pcnt1                   : 1;
46833        uint64_t reserved_19_20          : 2;
46834        uint64_t ptime0                  : 1;
46835        uint64_t ptime1                  : 1;
46836        uint64_t reserved_23_24          : 2;
46837        uint64_t dcnt0                   : 1;
46838        uint64_t dcnt1                   : 1;
46839        uint64_t dtime0                  : 1;
46840        uint64_t dtime1                  : 1;
46841        uint64_t dma0_fi                 : 1;
46842        uint64_t dma1_fi                 : 1;
46843        uint64_t win_wr                  : 1;
46844        uint64_t ill_wr                  : 1;
46845        uint64_t ill_rd                  : 1;
46846        uint64_t reserved_34_63          : 30;
46847#endif
46848    } cn31xx;
46849    struct cvmx_pci_int_sum_s            cn38xx;
46850    struct cvmx_pci_int_sum_s            cn38xxp2;
46851    struct cvmx_pci_int_sum_cn31xx       cn50xx;
46852    struct cvmx_pci_int_sum_s            cn58xx;
46853    struct cvmx_pci_int_sum_s            cn58xxp1;
46854} cvmx_pci_int_sum_t;
46855
46856
46857/**
46858 * cvmx_pci_int_sum2
46859 *
46860 * PCI_INT_SUM2 = PCI Interrupt Summary2 Register
46861 *
46862 * The PCI Interrupt Summary2 Register copy used for RSL interrupts.
46863 */
46864typedef union
46865{
46866    uint64_t u64;
46867    struct cvmx_pci_int_sum2_s
46868    {
46869#if __BYTE_ORDER == __BIG_ENDIAN
46870        uint64_t reserved_34_63          : 30;
46871        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
46872                                                         when the mem area is disabled. */
46873        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
46874                                                         when the mem area is disabled. */
46875        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
46876                                                         Read-Address Register took place. */
46877        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
46878                                                         required to set the FORCE-INT bit for counter 1. */
46879        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
46880                                                         required to set the FORCE-INT bit for counter 0. */
46881        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
46882                                                         register is not 0 the DMA_CNT1 timer counts.
46883                                                         When the DMA1_CNT timer has a value greater
46884                                                         than the PCI_DMA_TIME1 register this
46885                                                         bit is set. The timer is reset when bit is
46886                                                         written with a one. */
46887        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
46888                                                         register is not 0 the DMA_CNT0 timer counts.
46889                                                         When the DMA0_CNT timer has a value greater
46890                                                         than the PCI_DMA_TIME0 register this
46891                                                         bit is set. The timer is reset when bit is
46892                                                         written with a one. */
46893        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
46894                                                         value is greater than the value
46895                                                         in the PCI_DMA_INT_LEV1 register. */
46896        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
46897                                                         value is greater than the value
46898                                                         in the PCI_DMA_INT_LEV0 register. */
46899        uint64_t ptime3                  : 1;       /**< When the value in the PCI_PKTS_SENT3
46900                                                         register is not 0 the Sent-3 timer counts.
46901                                                         When the Sent-3 timer has a value greater
46902                                                         than the PCI_PKTS_SENT_TIME3 register this
46903                                                         bit is set. The timer is reset when bit is
46904                                                         written with a one. */
46905        uint64_t ptime2                  : 1;       /**< When the value in the PCI_PKTS_SENT2
46906                                                         register is not 0 the Sent-2 timer counts.
46907                                                         When the Sent-2 timer has a value greater
46908                                                         than the PCI_PKTS_SENT_TIME2 register this
46909                                                         bit is set. The timer is reset when bit is
46910                                                         written with a one. */
46911        uint64_t ptime1                  : 1;       /**< When the value in the PCI_PKTS_SENT1
46912                                                         register is not 0 the Sent-1 timer counts.
46913                                                         When the Sent-1 timer has a value greater
46914                                                         than the PCI_PKTS_SENT_TIME1 register this
46915                                                         bit is set. The timer is reset when bit is
46916                                                         written with a one. */
46917        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
46918                                                         register is not 0 the Sent-0 timer counts.
46919                                                         When the Sent-0 timer has a value greater
46920                                                         than the PCI_PKTS_SENT_TIME0 register this
46921                                                         bit is set. The timer is reset when bit is
46922                                                         written with a one. */
46923        uint64_t pcnt3                   : 1;       /**< This bit indicates that PCI_PKTS_SENT3
46924                                                         value is greater than the value
46925                                                         in the PCI_PKTS_SENT_INT_LEV3 register. */
46926        uint64_t pcnt2                   : 1;       /**< This bit indicates that PCI_PKTS_SENT2
46927                                                         value is greater than the value
46928                                                         in the PCI_PKTS_SENT_INT_LEV2 register. */
46929        uint64_t pcnt1                   : 1;       /**< This bit indicates that PCI_PKTS_SENT1
46930                                                         value is greater than the value
46931                                                         in the PCI_PKTS_SENT_INT_LEV1 register. */
46932        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
46933                                                         value is greater than the value
46934                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
46935        uint64_t rsl_int                 : 1;       /**< This bit is set when the RSL Chain has
46936                                                         generated an interrupt. */
46937        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
46938        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
46939        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
46940        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
46941        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
46942        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected */
46943        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message Detected */
46944        uint64_t msi_mabt                : 1;       /**< PCI MSI Master Abort. */
46945        uint64_t msi_tabt                : 1;       /**< PCI MSI Target Abort. */
46946        uint64_t msi_per                 : 1;       /**< PCI MSI Parity Error. */
46947        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Read. */
46948        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Read. */
46949        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Read. */
46950        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on write. */
46951        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on write. */
46952        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on write. */
46953#else
46954        uint64_t tr_wabt                 : 1;
46955        uint64_t mr_wabt                 : 1;
46956        uint64_t mr_wtto                 : 1;
46957        uint64_t tr_abt                  : 1;
46958        uint64_t mr_abt                  : 1;
46959        uint64_t mr_tto                  : 1;
46960        uint64_t msi_per                 : 1;
46961        uint64_t msi_tabt                : 1;
46962        uint64_t msi_mabt                : 1;
46963        uint64_t msc_msg                 : 1;
46964        uint64_t tsr_abt                 : 1;
46965        uint64_t serr                    : 1;
46966        uint64_t aperr                   : 1;
46967        uint64_t dperr                   : 1;
46968        uint64_t ill_rwr                 : 1;
46969        uint64_t ill_rrd                 : 1;
46970        uint64_t rsl_int                 : 1;
46971        uint64_t pcnt0                   : 1;
46972        uint64_t pcnt1                   : 1;
46973        uint64_t pcnt2                   : 1;
46974        uint64_t pcnt3                   : 1;
46975        uint64_t ptime0                  : 1;
46976        uint64_t ptime1                  : 1;
46977        uint64_t ptime2                  : 1;
46978        uint64_t ptime3                  : 1;
46979        uint64_t dcnt0                   : 1;
46980        uint64_t dcnt1                   : 1;
46981        uint64_t dtime0                  : 1;
46982        uint64_t dtime1                  : 1;
46983        uint64_t dma0_fi                 : 1;
46984        uint64_t dma1_fi                 : 1;
46985        uint64_t win_wr                  : 1;
46986        uint64_t ill_wr                  : 1;
46987        uint64_t ill_rd                  : 1;
46988        uint64_t reserved_34_63          : 30;
46989#endif
46990    } s;
46991    struct cvmx_pci_int_sum2_cn30xx
46992    {
46993#if __BYTE_ORDER == __BIG_ENDIAN
46994        uint64_t reserved_34_63          : 30;
46995        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
46996                                                         when the mem area is disabled. */
46997        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
46998                                                         when the mem area is disabled. */
46999        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
47000                                                         Read-Address Register took place. */
47001        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
47002                                                         required to set the FORCE-INT bit for counter 1. */
47003        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
47004                                                         required to set the FORCE-INT bit for counter 0. */
47005        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
47006                                                         register is not 0 the DMA_CNT1 timer counts.
47007                                                         When the DMA1_CNT timer has a value greater
47008                                                         than the PCI_DMA_TIME1 register this
47009                                                         bit is set. The timer is reset when bit is
47010                                                         written with a one. */
47011        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
47012                                                         register is not 0 the DMA_CNT0 timer counts.
47013                                                         When the DMA0_CNT timer has a value greater
47014                                                         than the PCI_DMA_TIME0 register this
47015                                                         bit is set. The timer is reset when bit is
47016                                                         written with a one. */
47017        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
47018                                                         value is greater than the value
47019                                                         in the PCI_DMA_INT_LEV1 register. */
47020        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
47021                                                         value is greater than the value
47022                                                         in the PCI_DMA_INT_LEV0 register. */
47023        uint64_t reserved_22_24          : 3;
47024        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
47025                                                         register is not 0 the Sent-0 timer counts.
47026                                                         When the Sent-0 timer has a value greater
47027                                                         than the PCI_PKTS_SENT_TIME0 register this
47028                                                         bit is set. The timer is reset when bit is
47029                                                         written with a one. */
47030        uint64_t reserved_18_20          : 3;
47031        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
47032                                                         value is greater than the value
47033                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
47034        uint64_t rsl_int                 : 1;       /**< This bit is set when the RSL Chain has
47035                                                         generated an interrupt. */
47036        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
47037        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
47038        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
47039        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
47040        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
47041        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected */
47042        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message Detected */
47043        uint64_t msi_mabt                : 1;       /**< PCI MSI Master Abort. */
47044        uint64_t msi_tabt                : 1;       /**< PCI MSI Target Abort. */
47045        uint64_t msi_per                 : 1;       /**< PCI MSI Parity Error. */
47046        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Read. */
47047        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Read. */
47048        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Read. */
47049        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on write. */
47050        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on write. */
47051        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on write. */
47052#else
47053        uint64_t tr_wabt                 : 1;
47054        uint64_t mr_wabt                 : 1;
47055        uint64_t mr_wtto                 : 1;
47056        uint64_t tr_abt                  : 1;
47057        uint64_t mr_abt                  : 1;
47058        uint64_t mr_tto                  : 1;
47059        uint64_t msi_per                 : 1;
47060        uint64_t msi_tabt                : 1;
47061        uint64_t msi_mabt                : 1;
47062        uint64_t msc_msg                 : 1;
47063        uint64_t tsr_abt                 : 1;
47064        uint64_t serr                    : 1;
47065        uint64_t aperr                   : 1;
47066        uint64_t dperr                   : 1;
47067        uint64_t ill_rwr                 : 1;
47068        uint64_t ill_rrd                 : 1;
47069        uint64_t rsl_int                 : 1;
47070        uint64_t pcnt0                   : 1;
47071        uint64_t reserved_18_20          : 3;
47072        uint64_t ptime0                  : 1;
47073        uint64_t reserved_22_24          : 3;
47074        uint64_t dcnt0                   : 1;
47075        uint64_t dcnt1                   : 1;
47076        uint64_t dtime0                  : 1;
47077        uint64_t dtime1                  : 1;
47078        uint64_t dma0_fi                 : 1;
47079        uint64_t dma1_fi                 : 1;
47080        uint64_t win_wr                  : 1;
47081        uint64_t ill_wr                  : 1;
47082        uint64_t ill_rd                  : 1;
47083        uint64_t reserved_34_63          : 30;
47084#endif
47085    } cn30xx;
47086    struct cvmx_pci_int_sum2_cn31xx
47087    {
47088#if __BYTE_ORDER == __BIG_ENDIAN
47089        uint64_t reserved_34_63          : 30;
47090        uint64_t ill_rd                  : 1;       /**< A read to a disabled area of bar1 or bar2,
47091                                                         when the mem area is disabled. */
47092        uint64_t ill_wr                  : 1;       /**< A write to a disabled area of bar1 or bar2,
47093                                                         when the mem area is disabled. */
47094        uint64_t win_wr                  : 1;       /**< A write to the disabled Window Write Data or
47095                                                         Read-Address Register took place. */
47096        uint64_t dma1_fi                 : 1;       /**< A DMA operation operation finished that was
47097                                                         required to set the FORCE-INT bit for counter 1. */
47098        uint64_t dma0_fi                 : 1;       /**< A DMA operation operation finished that was
47099                                                         required to set the FORCE-INT bit for counter 0. */
47100        uint64_t dtime1                  : 1;       /**< When the value in the PCI_DMA_CNT1
47101                                                         register is not 0 the DMA_CNT1 timer counts.
47102                                                         When the DMA1_CNT timer has a value greater
47103                                                         than the PCI_DMA_TIME1 register this
47104                                                         bit is set. The timer is reset when bit is
47105                                                         written with a one. */
47106        uint64_t dtime0                  : 1;       /**< When the value in the PCI_DMA_CNT0
47107                                                         register is not 0 the DMA_CNT0 timer counts.
47108                                                         When the DMA0_CNT timer has a value greater
47109                                                         than the PCI_DMA_TIME0 register this
47110                                                         bit is set. The timer is reset when bit is
47111                                                         written with a one. */
47112        uint64_t dcnt1                   : 1;       /**< This bit indicates that PCI_DMA_CNT1
47113                                                         value is greater than the value
47114                                                         in the PCI_DMA_INT_LEV1 register. */
47115        uint64_t dcnt0                   : 1;       /**< This bit indicates that PCI_DMA_CNT0
47116                                                         value is greater than the value
47117                                                         in the PCI_DMA_INT_LEV0 register. */
47118        uint64_t reserved_23_24          : 2;
47119        uint64_t ptime1                  : 1;       /**< When the value in the PCI_PKTS_SENT1
47120                                                         register is not 0 the Sent-1 timer counts.
47121                                                         When the Sent-1 timer has a value greater
47122                                                         than the PCI_PKTS_SENT_TIME1 register this
47123                                                         bit is set. The timer is reset when bit is
47124                                                         written with a one. */
47125        uint64_t ptime0                  : 1;       /**< When the value in the PCI_PKTS_SENT0
47126                                                         register is not 0 the Sent-0 timer counts.
47127                                                         When the Sent-0 timer has a value greater
47128                                                         than the PCI_PKTS_SENT_TIME0 register this
47129                                                         bit is set. The timer is reset when bit is
47130                                                         written with a one. */
47131        uint64_t reserved_19_20          : 2;
47132        uint64_t pcnt1                   : 1;       /**< This bit indicates that PCI_PKTS_SENT1
47133                                                         value is greater than the value
47134                                                         in the PCI_PKTS_SENT_INT_LEV1 register. */
47135        uint64_t pcnt0                   : 1;       /**< This bit indicates that PCI_PKTS_SENT0
47136                                                         value is greater than the value
47137                                                         in the PCI_PKTS_SENT_INT_LEV0 register. */
47138        uint64_t rsl_int                 : 1;       /**< This bit is set when the RSL Chain has
47139                                                         generated an interrupt. */
47140        uint64_t ill_rrd                 : 1;       /**< A read  to the disabled PCI registers took place. */
47141        uint64_t ill_rwr                 : 1;       /**< A write to the disabled PCI registers took place. */
47142        uint64_t dperr                   : 1;       /**< Data Parity Error detected by PCX Core */
47143        uint64_t aperr                   : 1;       /**< Address Parity Error detected by PCX Core */
47144        uint64_t serr                    : 1;       /**< SERR# detected by PCX Core */
47145        uint64_t tsr_abt                 : 1;       /**< Target Split-Read Abort Detected */
47146        uint64_t msc_msg                 : 1;       /**< Master Split Completion Message Detected */
47147        uint64_t msi_mabt                : 1;       /**< PCI MSI Master Abort. */
47148        uint64_t msi_tabt                : 1;       /**< PCI MSI Target Abort. */
47149        uint64_t msi_per                 : 1;       /**< PCI MSI Parity Error. */
47150        uint64_t mr_tto                  : 1;       /**< PCI Master Retry Timeout On Read. */
47151        uint64_t mr_abt                  : 1;       /**< PCI Master Abort On Read. */
47152        uint64_t tr_abt                  : 1;       /**< PCI Target Abort On Read. */
47153        uint64_t mr_wtto                 : 1;       /**< PCI Master Retry Timeout on write. */
47154        uint64_t mr_wabt                 : 1;       /**< PCI Master Abort detected on write. */
47155        uint64_t tr_wabt                 : 1;       /**< PCI Target Abort detected on write. */
47156#else
47157        uint64_t tr_wabt                 : 1;
47158        uint64_t mr_wabt                 : 1;
47159        uint64_t mr_wtto                 : 1;
47160        uint64_t tr_abt                  : 1;
47161        uint64_t mr_abt                  : 1;
47162        uint64_t mr_tto                  : 1;
47163        uint64_t msi_per                 : 1;
47164        uint64_t msi_tabt                : 1;
47165        uint64_t msi_mabt                : 1;
47166        uint64_t msc_msg                 : 1;
47167        uint64_t tsr_abt                 : 1;
47168        uint64_t serr                    : 1;
47169        uint64_t aperr                   : 1;
47170        uint64_t dperr                   : 1;
47171        uint64_t ill_rwr                 : 1;
47172        uint64_t ill_rrd                 : 1;
47173        uint64_t rsl_int                 : 1;
47174        uint64_t pcnt0                   : 1;
47175        uint64_t pcnt1                   : 1;
47176        uint64_t reserved_19_20          : 2;
47177        uint64_t ptime0                  : 1;
47178        uint64_t ptime1                  : 1;
47179        uint64_t reserved_23_24          : 2;
47180        uint64_t dcnt0                   : 1;
47181        uint64_t dcnt1                   : 1;
47182        uint64_t dtime0                  : 1;
47183        uint64_t dtime1                  : 1;
47184        uint64_t dma0_fi                 : 1;
47185        uint64_t dma1_fi                 : 1;
47186        uint64_t win_wr                  : 1;
47187        uint64_t ill_wr                  : 1;
47188        uint64_t ill_rd                  : 1;
47189        uint64_t reserved_34_63          : 30;
47190#endif
47191    } cn31xx;
47192    struct cvmx_pci_int_sum2_s           cn38xx;
47193    struct cvmx_pci_int_sum2_s           cn38xxp2;
47194    struct cvmx_pci_int_sum2_cn31xx      cn50xx;
47195    struct cvmx_pci_int_sum2_s           cn58xx;
47196    struct cvmx_pci_int_sum2_s           cn58xxp1;
47197} cvmx_pci_int_sum2_t;
47198
47199
47200/**
47201 * cvmx_pci_msi_rcv
47202 *
47203 * PCI_MSI_RCV = PCI's MSI Received Vector Register
47204 *
47205 * A bit is set in this register relative to the vector received during a MSI. The value in this
47206 * register is acted upon when the least-significant-byte of this register is written.
47207 */
47208typedef union
47209{
47210    uint32_t u32;
47211    struct cvmx_pci_msi_rcv_s
47212    {
47213#if __BYTE_ORDER == __BIG_ENDIAN
47214        uint32_t reserved_6_31           : 26;
47215        uint32_t intr                    : 6;       /**< When an MSI is received on the PCI the bit selected
47216                                                         by data [5:0] will be set in this register. To
47217                                                         clear this bit a write must take place to the
47218                                                         NPI_MSI_RCV register where any bit set to 1 is
47219                                                         cleared. Reading this address will return an
47220                                                         unpredicatable value. */
47221#else
47222        uint32_t intr                    : 6;
47223        uint32_t reserved_6_31           : 26;
47224#endif
47225    } s;
47226    struct cvmx_pci_msi_rcv_s            cn30xx;
47227    struct cvmx_pci_msi_rcv_s            cn31xx;
47228    struct cvmx_pci_msi_rcv_s            cn38xx;
47229    struct cvmx_pci_msi_rcv_s            cn38xxp2;
47230    struct cvmx_pci_msi_rcv_s            cn50xx;
47231    struct cvmx_pci_msi_rcv_s            cn58xx;
47232    struct cvmx_pci_msi_rcv_s            cn58xxp1;
47233} cvmx_pci_msi_rcv_t;
47234
47235
47236/**
47237 * cvmx_pci_pkt_credits#
47238 *
47239 * PCI_PKT_CREDITS0 = PCI Packet Credits For Output 0
47240 *
47241 * Used to decrease the number of packets to be processed by the host from Output-0 and return
47242 * buffer/info pointer pairs to OCTEON Output-0. The value in this register is acted upon when the
47243 * least-significant-byte of this register is written.
47244 */
47245typedef union
47246{
47247    uint32_t u32;
47248    struct cvmx_pci_pkt_creditsx_s
47249    {
47250#if __BYTE_ORDER == __BIG_ENDIAN
47251        uint32_t pkt_cnt                 : 16;      /**< The value written to this field will be
47252                                                         subtracted from PCI_PKTS_SENT0[PKT_CNT]. */
47253        uint32_t ptr_cnt                 : 16;      /**< This field value is added to the
47254                                                         NPI's internal Buffer/Info Pointer Pair count. */
47255#else
47256        uint32_t ptr_cnt                 : 16;
47257        uint32_t pkt_cnt                 : 16;
47258#endif
47259    } s;
47260    struct cvmx_pci_pkt_creditsx_s       cn30xx;
47261    struct cvmx_pci_pkt_creditsx_s       cn31xx;
47262    struct cvmx_pci_pkt_creditsx_s       cn38xx;
47263    struct cvmx_pci_pkt_creditsx_s       cn38xxp2;
47264    struct cvmx_pci_pkt_creditsx_s       cn50xx;
47265    struct cvmx_pci_pkt_creditsx_s       cn58xx;
47266    struct cvmx_pci_pkt_creditsx_s       cn58xxp1;
47267} cvmx_pci_pkt_creditsx_t;
47268
47269
47270/**
47271 * cvmx_pci_pkts_sent#
47272 *
47273 * PCI_PKTS_SENT0 = PCI Packets Sent 0
47274 *
47275 * Number of packets sent to the host memory from PCI Output 0
47276 */
47277typedef union
47278{
47279    uint32_t u32;
47280    struct cvmx_pci_pkts_sentx_s
47281    {
47282#if __BYTE_ORDER == __BIG_ENDIAN
47283        uint32_t pkt_cnt                 : 32;      /**< Each time a packet is written to the memory via
47284                                                         PCI from PCI Output 0,  this counter is
47285                                                         incremented by 1 or the byte count of the packet
47286                                                         as set in NPI_OUTPUT_CONTROL[P0_BMODE]. */
47287#else
47288        uint32_t pkt_cnt                 : 32;
47289#endif
47290    } s;
47291    struct cvmx_pci_pkts_sentx_s         cn30xx;
47292    struct cvmx_pci_pkts_sentx_s         cn31xx;
47293    struct cvmx_pci_pkts_sentx_s         cn38xx;
47294    struct cvmx_pci_pkts_sentx_s         cn38xxp2;
47295    struct cvmx_pci_pkts_sentx_s         cn50xx;
47296    struct cvmx_pci_pkts_sentx_s         cn58xx;
47297    struct cvmx_pci_pkts_sentx_s         cn58xxp1;
47298} cvmx_pci_pkts_sentx_t;
47299
47300
47301/**
47302 * cvmx_pci_pkts_sent_int_lev#
47303 *
47304 * PCI_PKTS_SENT_INT_LEV0 = PCI Packets Sent Interrupt Level For Output 0
47305 *
47306 * Interrupt when number of packets sent is equal to or greater than the register value.
47307 */
47308typedef union
47309{
47310    uint32_t u32;
47311    struct cvmx_pci_pkts_sent_int_levx_s
47312    {
47313#if __BYTE_ORDER == __BIG_ENDIAN
47314        uint32_t pkt_cnt                 : 32;      /**< When corresponding port's PCI_PKTS_SENT0 value
47315                                                         exceeds the value in this register, PCNT0 of the
47316                                                         PCI_INT_SUM and PCI_INT_SUM2 will be set. */
47317#else
47318        uint32_t pkt_cnt                 : 32;
47319#endif
47320    } s;
47321    struct cvmx_pci_pkts_sent_int_levx_s cn30xx;
47322    struct cvmx_pci_pkts_sent_int_levx_s cn31xx;
47323    struct cvmx_pci_pkts_sent_int_levx_s cn38xx;
47324    struct cvmx_pci_pkts_sent_int_levx_s cn38xxp2;
47325    struct cvmx_pci_pkts_sent_int_levx_s cn50xx;
47326    struct cvmx_pci_pkts_sent_int_levx_s cn58xx;
47327    struct cvmx_pci_pkts_sent_int_levx_s cn58xxp1;
47328} cvmx_pci_pkts_sent_int_levx_t;
47329
47330
47331/**
47332 * cvmx_pci_pkts_sent_time#
47333 *
47334 * PCI_PKTS_SENT_TIME0 = PCI Packets Sent Timer For Output-0
47335 *
47336 * Time to wait from packet being sent to host from Output-0 before issuing an interrupt.
47337 */
47338typedef union
47339{
47340    uint32_t u32;
47341    struct cvmx_pci_pkts_sent_timex_s
47342    {
47343#if __BYTE_ORDER == __BIG_ENDIAN
47344        uint32_t pkt_time                : 32;      /**< Number of PCI clock cycle to wait before
47345                                                         issuing an interrupt to the host when a
47346                                                         packet from this port has been sent to the
47347                                                         host.  The timer is reset when the
47348                                                         PCI_INT_SUM[21] register is cleared. */
47349#else
47350        uint32_t pkt_time                : 32;
47351#endif
47352    } s;
47353    struct cvmx_pci_pkts_sent_timex_s    cn30xx;
47354    struct cvmx_pci_pkts_sent_timex_s    cn31xx;
47355    struct cvmx_pci_pkts_sent_timex_s    cn38xx;
47356    struct cvmx_pci_pkts_sent_timex_s    cn38xxp2;
47357    struct cvmx_pci_pkts_sent_timex_s    cn50xx;
47358    struct cvmx_pci_pkts_sent_timex_s    cn58xx;
47359    struct cvmx_pci_pkts_sent_timex_s    cn58xxp1;
47360} cvmx_pci_pkts_sent_timex_t;
47361
47362
47363/**
47364 * cvmx_pci_read_cmd_6
47365 *
47366 * PCI_READ_CMD_6 = PCI Read Command 6 Register
47367 *
47368 * Contains control inforamtion related to a received PCI Command 6.
47369 */
47370typedef union
47371{
47372    uint32_t u32;
47373    struct cvmx_pci_read_cmd_6_s
47374    {
47375#if __BYTE_ORDER == __BIG_ENDIAN
47376        uint32_t reserved_9_31           : 23;
47377        uint32_t min_data                : 6;       /**< The number of words to have buffered in the PNI
47378                                                         before informing the PCIX-Core that we have
47379                                                         read data available for the outstanding Delayed
47380                                                         read. 0 is treated as a 64.
47381                                                         For reads to the expansion this value is not used. */
47382        uint32_t prefetch                : 3;       /**< Control the amount of data to be preteched when
47383                                                         this type of bhmstREAD command is received.
47384                                                         0 = 1 32/64 bit word.
47385                                                         1 = From address to end of 128B block.
47386                                                         2 = From address to end of 128B block plus 128B.
47387                                                         3 = From address to end of 128B block plus 256B.
47388                                                         4 = From address to end of 128B block plus 384B.
47389                                                         For reads to the expansion this value is not used. */
47390#else
47391        uint32_t prefetch                : 3;
47392        uint32_t min_data                : 6;
47393        uint32_t reserved_9_31           : 23;
47394#endif
47395    } s;
47396    struct cvmx_pci_read_cmd_6_s         cn30xx;
47397    struct cvmx_pci_read_cmd_6_s         cn31xx;
47398    struct cvmx_pci_read_cmd_6_s         cn38xx;
47399    struct cvmx_pci_read_cmd_6_s         cn38xxp2;
47400    struct cvmx_pci_read_cmd_6_s         cn50xx;
47401    struct cvmx_pci_read_cmd_6_s         cn58xx;
47402    struct cvmx_pci_read_cmd_6_s         cn58xxp1;
47403} cvmx_pci_read_cmd_6_t;
47404
47405
47406/**
47407 * cvmx_pci_read_cmd_c
47408 *
47409 * PCI_READ_CMD_C = PCI Read Command C Register
47410 *
47411 * Contains control inforamtion related to a received PCI Command C.
47412 */
47413typedef union
47414{
47415    uint32_t u32;
47416    struct cvmx_pci_read_cmd_c_s
47417    {
47418#if __BYTE_ORDER == __BIG_ENDIAN
47419        uint32_t reserved_9_31           : 23;
47420        uint32_t min_data                : 6;       /**< The number of words to have buffered in the PNI
47421                                                         before informing the PCIX-Core that we have
47422                                                         read data available for the outstanding Delayed
47423                                                         read. 0 is treated as a 64.
47424                                                         For reads to the expansion this value is not used. */
47425        uint32_t prefetch                : 3;       /**< Control the amount of data to be preteched when
47426                                                         this type of READ command is received.
47427                                                         0 = 1 32/64 bit word.
47428                                                         1 = From address to end of 128B block.
47429                                                         2 = From address to end of 128B block plus 128B.
47430                                                         3 = From address to end of 128B block plus 256B.
47431                                                         4 = From address to end of 128B block plus 384B.
47432                                                         For reads to the expansion this value is not used. */
47433#else
47434        uint32_t prefetch                : 3;
47435        uint32_t min_data                : 6;
47436        uint32_t reserved_9_31           : 23;
47437#endif
47438    } s;
47439    struct cvmx_pci_read_cmd_c_s         cn30xx;
47440    struct cvmx_pci_read_cmd_c_s         cn31xx;
47441    struct cvmx_pci_read_cmd_c_s         cn38xx;
47442    struct cvmx_pci_read_cmd_c_s         cn38xxp2;
47443    struct cvmx_pci_read_cmd_c_s         cn50xx;
47444    struct cvmx_pci_read_cmd_c_s         cn58xx;
47445    struct cvmx_pci_read_cmd_c_s         cn58xxp1;
47446} cvmx_pci_read_cmd_c_t;
47447
47448
47449/**
47450 * cvmx_pci_read_cmd_e
47451 *
47452 * PCI_READ_CMD_E = PCI Read Command E Register
47453 *
47454 * Contains control inforamtion related to a received PCI Command 6.
47455 */
47456typedef union
47457{
47458    uint32_t u32;
47459    struct cvmx_pci_read_cmd_e_s
47460    {
47461#if __BYTE_ORDER == __BIG_ENDIAN
47462        uint32_t reserved_9_31           : 23;
47463        uint32_t min_data                : 6;       /**< The number of words to have buffered in the PNI
47464                                                         before informaing the PCIX-Core that we have
47465                                                         read data available for the outstanding Delayed
47466                                                         read. 0 is treated as a 64.
47467                                                         For reads to the expansion this value is not used. */
47468        uint32_t prefetch                : 3;       /**< Control the amount of data to be preteched when
47469                                                         this type of READ command is received.
47470                                                         0 = 1 32/64 bit word.
47471                                                         1 = From address to end of 128B block.
47472                                                         2 = From address to end of 128B block plus 128B.
47473                                                         3 = From address to end of 128B block plus 256B.
47474                                                         4 = From address to end of 128B block plus 384B.
47475                                                         For reads to the expansion this value is not used. */
47476#else
47477        uint32_t prefetch                : 3;
47478        uint32_t min_data                : 6;
47479        uint32_t reserved_9_31           : 23;
47480#endif
47481    } s;
47482    struct cvmx_pci_read_cmd_e_s         cn30xx;
47483    struct cvmx_pci_read_cmd_e_s         cn31xx;
47484    struct cvmx_pci_read_cmd_e_s         cn38xx;
47485    struct cvmx_pci_read_cmd_e_s         cn38xxp2;
47486    struct cvmx_pci_read_cmd_e_s         cn50xx;
47487    struct cvmx_pci_read_cmd_e_s         cn58xx;
47488    struct cvmx_pci_read_cmd_e_s         cn58xxp1;
47489} cvmx_pci_read_cmd_e_t;
47490
47491
47492/**
47493 * cvmx_pci_read_timeout
47494 *
47495 * PCI_READ_TIMEOUT = PCI Read Timeour Register
47496 *
47497 * The address to start reading Instructions from for Input-3.
47498 */
47499typedef union
47500{
47501    uint64_t u64;
47502    struct cvmx_pci_read_timeout_s
47503    {
47504#if __BYTE_ORDER == __BIG_ENDIAN
47505        uint64_t reserved_32_63          : 32;
47506        uint64_t enb                     : 1;       /**< Enable the use of the Timeout function. */
47507        uint64_t cnt                     : 31;      /**< The number of eclk cycles to wait after issuing
47508                                                         a read request to the PNI before setting a
47509                                                         timeout and not expecting the data to return.
47510                                                         This is considered a fatal condition by the NPI. */
47511#else
47512        uint64_t cnt                     : 31;
47513        uint64_t enb                     : 1;
47514        uint64_t reserved_32_63          : 32;
47515#endif
47516    } s;
47517    struct cvmx_pci_read_timeout_s       cn30xx;
47518    struct cvmx_pci_read_timeout_s       cn31xx;
47519    struct cvmx_pci_read_timeout_s       cn38xx;
47520    struct cvmx_pci_read_timeout_s       cn38xxp2;
47521    struct cvmx_pci_read_timeout_s       cn50xx;
47522    struct cvmx_pci_read_timeout_s       cn58xx;
47523    struct cvmx_pci_read_timeout_s       cn58xxp1;
47524} cvmx_pci_read_timeout_t;
47525
47526
47527/**
47528 * cvmx_pci_scm_reg
47529 *
47530 * PCI_SCM_REG = PCI Master Split Completion Message Register
47531 *
47532 * This register contains the Master Split Completion Message(SCM) generated when a master split
47533 * transaction is aborted.
47534 */
47535typedef union
47536{
47537    uint64_t u64;
47538    struct cvmx_pci_scm_reg_s
47539    {
47540#if __BYTE_ORDER == __BIG_ENDIAN
47541        uint64_t reserved_32_63          : 32;
47542        uint64_t scm                     : 32;      /**< Contains the Split Completion Message (SCM)
47543                                                         driven when a master-split transaction is aborted.
47544                                                            [31:28]: Message Class
47545                                                            [27:20]: Message Index
47546                                                            [19]:    Reserved
47547                                                            [18:12]: Remaining Lower Address
47548                                                            [11:8]:  Upper Remaining Byte Count
47549                                                            [7:0]:   Lower Remaining Byte Count
47550                                                         Refer to the PCIX1.0a specification, Fig 2-40
47551                                                         for additional details for the split completion
47552                                                         message format. */
47553#else
47554        uint64_t scm                     : 32;
47555        uint64_t reserved_32_63          : 32;
47556#endif
47557    } s;
47558    struct cvmx_pci_scm_reg_s            cn30xx;
47559    struct cvmx_pci_scm_reg_s            cn31xx;
47560    struct cvmx_pci_scm_reg_s            cn38xx;
47561    struct cvmx_pci_scm_reg_s            cn38xxp2;
47562    struct cvmx_pci_scm_reg_s            cn50xx;
47563    struct cvmx_pci_scm_reg_s            cn58xx;
47564    struct cvmx_pci_scm_reg_s            cn58xxp1;
47565} cvmx_pci_scm_reg_t;
47566
47567
47568/**
47569 * cvmx_pci_tsr_reg
47570 *
47571 * PCI_TSR_REG = PCI Target Split Attribute Register
47572 *
47573 * This register contains the Attribute field Master Split Completion Message(SCM) generated when a master split
47574 * transaction is aborted.
47575 */
47576typedef union
47577{
47578    uint64_t u64;
47579    struct cvmx_pci_tsr_reg_s
47580    {
47581#if __BYTE_ORDER == __BIG_ENDIAN
47582        uint64_t reserved_36_63          : 28;
47583        uint64_t tsr                     : 36;      /**< Contains the Target Split Attribute field when a
47584                                                         target-split transaction is aborted.
47585                                                           [35:32]: Upper Byte Count
47586                                                           [31]:    BCM=Byte Count Modified
47587                                                           [30]:    SCE=Split Completion Error
47588                                                           [29]:    SCM=Split Completion Message
47589                                                           [28:24]: RESERVED
47590                                                           [23:16]: Completer Bus Number
47591                                                           [15:11]: Completer Device Number
47592                                                           [10:8]:  Completer Function Number
47593                                                           [7:0]:   Lower Byte Count
47594                                                         Refer to the PCIX1.0a specification, Fig 2-39
47595                                                         for additional details on the completer attribute
47596                                                         bit assignments. */
47597#else
47598        uint64_t tsr                     : 36;
47599        uint64_t reserved_36_63          : 28;
47600#endif
47601    } s;
47602    struct cvmx_pci_tsr_reg_s            cn30xx;
47603    struct cvmx_pci_tsr_reg_s            cn31xx;
47604    struct cvmx_pci_tsr_reg_s            cn38xx;
47605    struct cvmx_pci_tsr_reg_s            cn38xxp2;
47606    struct cvmx_pci_tsr_reg_s            cn50xx;
47607    struct cvmx_pci_tsr_reg_s            cn58xx;
47608    struct cvmx_pci_tsr_reg_s            cn58xxp1;
47609} cvmx_pci_tsr_reg_t;
47610
47611
47612/**
47613 * cvmx_pci_win_rd_addr
47614 *
47615 * PCI_WIN_RD_ADDR = PCI Window Read Address Register
47616 *
47617 * Writing the least-significant-byte of this register will cause a read operation to take place,
47618 * UNLESS, a read operation is already taking place. A read is consider to end when the PCI_WIN_RD_DATA
47619 * register is read.
47620 */
47621typedef union
47622{
47623    uint64_t u64;
47624    struct cvmx_pci_win_rd_addr_s
47625    {
47626#if __BYTE_ORDER == __BIG_ENDIAN
47627        uint64_t reserved_49_63          : 15;
47628        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
47629                                                         read as '0'. */
47630        uint64_t reserved_0_47           : 48;
47631#else
47632        uint64_t reserved_0_47           : 48;
47633        uint64_t iobit                   : 1;
47634        uint64_t reserved_49_63          : 15;
47635#endif
47636    } s;
47637    struct cvmx_pci_win_rd_addr_cn30xx
47638    {
47639#if __BYTE_ORDER == __BIG_ENDIAN
47640        uint64_t reserved_49_63          : 15;
47641        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
47642                                                         read as '0'. */
47643        uint64_t rd_addr                 : 46;      /**< The address to be read from. Whenever the LSB of
47644                                                         this register is written, the Read Operation will
47645                                                         take place.
47646                                                         [47:40] = NCB_ID
47647                                                         [39:3]  = Address
47648                                                         When [47:43] == NPI & [42:0] == 0 bits [39:0] are:
47649                                                              [39:32] == x, Not Used
47650                                                              [31:27] == RSL_ID
47651                                                              [12:2]  == RSL Register Offset
47652                                                              [1:0]   == x, Not Used */
47653        uint64_t reserved_0_1            : 2;
47654#else
47655        uint64_t reserved_0_1            : 2;
47656        uint64_t rd_addr                 : 46;
47657        uint64_t iobit                   : 1;
47658        uint64_t reserved_49_63          : 15;
47659#endif
47660    } cn30xx;
47661    struct cvmx_pci_win_rd_addr_cn30xx   cn31xx;
47662    struct cvmx_pci_win_rd_addr_cn38xx
47663    {
47664#if __BYTE_ORDER == __BIG_ENDIAN
47665        uint64_t reserved_49_63          : 15;
47666        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
47667                                                         read as '0'. */
47668        uint64_t rd_addr                 : 45;      /**< The address to be read from. Whenever the LSB of
47669                                                         this register is written, the Read Operation will
47670                                                         take place.
47671                                                         [47:40] = NCB_ID
47672                                                         [39:3]  = Address
47673                                                         When [47:43] == NPI & [42:0] == 0 bits [39:0] are:
47674                                                              [39:32] == x, Not Used
47675                                                              [31:27] == RSL_ID
47676                                                              [12:3]  == RSL Register Offset
47677                                                              [2:0]   == x, Not Used */
47678        uint64_t reserved_0_2            : 3;
47679#else
47680        uint64_t reserved_0_2            : 3;
47681        uint64_t rd_addr                 : 45;
47682        uint64_t iobit                   : 1;
47683        uint64_t reserved_49_63          : 15;
47684#endif
47685    } cn38xx;
47686    struct cvmx_pci_win_rd_addr_cn38xx   cn38xxp2;
47687    struct cvmx_pci_win_rd_addr_cn30xx   cn50xx;
47688    struct cvmx_pci_win_rd_addr_cn38xx   cn58xx;
47689    struct cvmx_pci_win_rd_addr_cn38xx   cn58xxp1;
47690} cvmx_pci_win_rd_addr_t;
47691
47692
47693/**
47694 * cvmx_pci_win_rd_data
47695 *
47696 * PCI_WIN_RD_DATA = PCI Window Read Data Register
47697 *
47698 * Contains the result from the read operation that took place when the LSB of the PCI_WIN_RD_ADDR
47699 * register was written.
47700 */
47701typedef union
47702{
47703    uint64_t u64;
47704    struct cvmx_pci_win_rd_data_s
47705    {
47706#if __BYTE_ORDER == __BIG_ENDIAN
47707        uint64_t rd_data                 : 64;      /**< The read data. */
47708#else
47709        uint64_t rd_data                 : 64;
47710#endif
47711    } s;
47712    struct cvmx_pci_win_rd_data_s        cn30xx;
47713    struct cvmx_pci_win_rd_data_s        cn31xx;
47714    struct cvmx_pci_win_rd_data_s        cn38xx;
47715    struct cvmx_pci_win_rd_data_s        cn38xxp2;
47716    struct cvmx_pci_win_rd_data_s        cn50xx;
47717    struct cvmx_pci_win_rd_data_s        cn58xx;
47718    struct cvmx_pci_win_rd_data_s        cn58xxp1;
47719} cvmx_pci_win_rd_data_t;
47720
47721
47722/**
47723 * cvmx_pci_win_wr_addr
47724 *
47725 * PCI_WIN_WR_ADDR = PCI Window Write Address Register
47726 *
47727 * Contains the address to be writen to when a write operation is started by writing the
47728 * PCI_WIN_WR_DATA register (see below).
47729 */
47730typedef union
47731{
47732    uint64_t u64;
47733    struct cvmx_pci_win_wr_addr_s
47734    {
47735#if __BYTE_ORDER == __BIG_ENDIAN
47736        uint64_t reserved_49_63          : 15;
47737        uint64_t iobit                   : 1;       /**< A 1 or 0 can be written here but this will always
47738                                                         read as '0'. */
47739        uint64_t wr_addr                 : 45;      /**< The address that will be written to when the
47740                                                         PCI_WIN_WR_DATA register is written.
47741                                                         [47:40] = NCB_ID
47742                                                         [39:3]  = Address
47743                                                         When [47:43] == NPI & [42:0] == 0 bits [39:0] are:
47744                                                              [39:32] == x, Not Used
47745                                                              [31:27] == RSL_ID
47746                                                              [12:3]  == RSL Register Offset
47747                                                              [2:0]   == x, Not Used */
47748        uint64_t reserved_0_2            : 3;
47749#else
47750        uint64_t reserved_0_2            : 3;
47751        uint64_t wr_addr                 : 45;
47752        uint64_t iobit                   : 1;
47753        uint64_t reserved_49_63          : 15;
47754#endif
47755    } s;
47756    struct cvmx_pci_win_wr_addr_s        cn30xx;
47757    struct cvmx_pci_win_wr_addr_s        cn31xx;
47758    struct cvmx_pci_win_wr_addr_s        cn38xx;
47759    struct cvmx_pci_win_wr_addr_s        cn38xxp2;
47760    struct cvmx_pci_win_wr_addr_s        cn50xx;
47761    struct cvmx_pci_win_wr_addr_s        cn58xx;
47762    struct cvmx_pci_win_wr_addr_s        cn58xxp1;
47763} cvmx_pci_win_wr_addr_t;
47764
47765
47766/**
47767 * cvmx_pci_win_wr_data
47768 *
47769 * PCI_WIN_WR_DATA = PCI Window Write Data Register
47770 *
47771 * Contains the data to write to the address located in the PCI_WIN_WR_ADDR Register.
47772 * Writing the least-significant-byte of this register will cause a write operation to take place.
47773 */
47774typedef union
47775{
47776    uint64_t u64;
47777    struct cvmx_pci_win_wr_data_s
47778    {
47779#if __BYTE_ORDER == __BIG_ENDIAN
47780        uint64_t wr_data                 : 64;      /**< The data to be written. Whenever the LSB of this
47781                                                         register is written, the Window Write will take
47782                                                         place. */
47783#else
47784        uint64_t wr_data                 : 64;
47785#endif
47786    } s;
47787    struct cvmx_pci_win_wr_data_s        cn30xx;
47788    struct cvmx_pci_win_wr_data_s        cn31xx;
47789    struct cvmx_pci_win_wr_data_s        cn38xx;
47790    struct cvmx_pci_win_wr_data_s        cn38xxp2;
47791    struct cvmx_pci_win_wr_data_s        cn50xx;
47792    struct cvmx_pci_win_wr_data_s        cn58xx;
47793    struct cvmx_pci_win_wr_data_s        cn58xxp1;
47794} cvmx_pci_win_wr_data_t;
47795
47796
47797/**
47798 * cvmx_pci_win_wr_mask
47799 *
47800 * PCI_WIN_WR_MASK = PCI Window Write Mask Register
47801 *
47802 * Contains the mask for the data in the PCI_WIN_WR_DATA Register.
47803 */
47804typedef union
47805{
47806    uint64_t u64;
47807    struct cvmx_pci_win_wr_mask_s
47808    {
47809#if __BYTE_ORDER == __BIG_ENDIAN
47810        uint64_t reserved_8_63           : 56;
47811        uint64_t wr_mask                 : 8;       /**< The data to be written. When a bit is set '1'
47812                                                         the corresponding byte will not be written. */
47813#else
47814        uint64_t wr_mask                 : 8;
47815        uint64_t reserved_8_63           : 56;
47816#endif
47817    } s;
47818    struct cvmx_pci_win_wr_mask_s        cn30xx;
47819    struct cvmx_pci_win_wr_mask_s        cn31xx;
47820    struct cvmx_pci_win_wr_mask_s        cn38xx;
47821    struct cvmx_pci_win_wr_mask_s        cn38xxp2;
47822    struct cvmx_pci_win_wr_mask_s        cn50xx;
47823    struct cvmx_pci_win_wr_mask_s        cn58xx;
47824    struct cvmx_pci_win_wr_mask_s        cn58xxp1;
47825} cvmx_pci_win_wr_mask_t;
47826
47827
47828/**
47829 * cvmx_pcieep_cfg000
47830 *
47831 * PCIE_CFG000 = First 32-bits of PCIE type 0 config space (Device ID and Vendor ID Register)
47832 *
47833 */
47834typedef union
47835{
47836    uint32_t u32;
47837    struct cvmx_pcieep_cfg000_s
47838    {
47839#if __BYTE_ORDER == __BIG_ENDIAN
47840        uint32_t devid                   : 16;      /**< Device ID, writable through the DBI
47841                                                          However, the application must not change this field.
47842                                                         For EEPROM loads also see VENDID of this register. */
47843        uint32_t vendid                  : 16;      /**< Vendor ID, writable through the DBI
47844                                                          However, the application must not change this field.
47845                                                         During and EPROM Load is a value of 0xFFFF is loaded to this
47846                                                         field and a value of 0xFFFF is loaded to the DEVID field of
47847                                                         this register, the value will not be loaded, EEPROM load will
47848                                                         stop, and the FastLinkEnable bit will be set in the
47849                                                         PCIE_CFG452 register. */
47850#else
47851        uint32_t vendid                  : 16;
47852        uint32_t devid                   : 16;
47853#endif
47854    } s;
47855    struct cvmx_pcieep_cfg000_s          cn52xx;
47856    struct cvmx_pcieep_cfg000_s          cn52xxp1;
47857    struct cvmx_pcieep_cfg000_s          cn56xx;
47858    struct cvmx_pcieep_cfg000_s          cn56xxp1;
47859} cvmx_pcieep_cfg000_t;
47860
47861
47862/**
47863 * cvmx_pcieep_cfg001
47864 *
47865 * PCIE_CFG001 = Second 32-bits of PCIE type 0 config space (Command/Status Register)
47866 *
47867 */
47868typedef union
47869{
47870    uint32_t u32;
47871    struct cvmx_pcieep_cfg001_s
47872    {
47873#if __BYTE_ORDER == __BIG_ENDIAN
47874        uint32_t dpe                     : 1;       /**< Detected Parity Error */
47875        uint32_t sse                     : 1;       /**< Signaled System Error */
47876        uint32_t rma                     : 1;       /**< Received Master Abort */
47877        uint32_t rta                     : 1;       /**< Received Target Abort */
47878        uint32_t sta                     : 1;       /**< Signaled Target Abort */
47879        uint32_t devt                    : 2;       /**< DEVSEL Timing
47880                                                         Not applicable for PCI Express. Hardwired to 0. */
47881        uint32_t mdpe                    : 1;       /**< Master Data Parity Error */
47882        uint32_t fbb                     : 1;       /**< Fast Back-to-Back Capable
47883                                                         Not applicable for PCI Express. Hardwired to 0. */
47884        uint32_t reserved_22_22          : 1;
47885        uint32_t m66                     : 1;       /**< 66 MHz Capable
47886                                                         Not applicable for PCI Express. Hardwired to 0. */
47887        uint32_t cl                      : 1;       /**< Capabilities List
47888                                                         Indicates presence of an extended capability item.
47889                                                         Hardwired to 1. */
47890        uint32_t i_stat                  : 1;       /**< INTx Status */
47891        uint32_t reserved_11_18          : 8;
47892        uint32_t i_dis                   : 1;       /**< INTx Assertion Disable */
47893        uint32_t fbbe                    : 1;       /**< Fast Back-to-Back Enable
47894                                                         Not applicable for PCI Express. Must be hardwired to 0. */
47895        uint32_t see                     : 1;       /**< SERR# Enable */
47896        uint32_t ids_wcc                 : 1;       /**< IDSEL Stepping/Wait Cycle Control
47897                                                         Not applicable for PCI Express. Must be hardwired to 0 */
47898        uint32_t per                     : 1;       /**< Parity Error Response */
47899        uint32_t vps                     : 1;       /**< VGA Palette Snoop
47900                                                         Not applicable for PCI Express. Must be hardwired to 0. */
47901        uint32_t mwice                   : 1;       /**< Memory Write and Invalidate
47902                                                         Not applicable for PCI Express. Must be hardwired to 0. */
47903        uint32_t scse                    : 1;       /**< Special Cycle Enable
47904                                                         Not applicable for PCI Express. Must be hardwired to 0. */
47905        uint32_t me                      : 1;       /**< Bus Master Enable */
47906        uint32_t msae                    : 1;       /**< Memory Space Enable */
47907        uint32_t isae                    : 1;       /**< I/O Space Enable */
47908#else
47909        uint32_t isae                    : 1;
47910        uint32_t msae                    : 1;
47911        uint32_t me                      : 1;
47912        uint32_t scse                    : 1;
47913        uint32_t mwice                   : 1;
47914        uint32_t vps                     : 1;
47915        uint32_t per                     : 1;
47916        uint32_t ids_wcc                 : 1;
47917        uint32_t see                     : 1;
47918        uint32_t fbbe                    : 1;
47919        uint32_t i_dis                   : 1;
47920        uint32_t reserved_11_18          : 8;
47921        uint32_t i_stat                  : 1;
47922        uint32_t cl                      : 1;
47923        uint32_t m66                     : 1;
47924        uint32_t reserved_22_22          : 1;
47925        uint32_t fbb                     : 1;
47926        uint32_t mdpe                    : 1;
47927        uint32_t devt                    : 2;
47928        uint32_t sta                     : 1;
47929        uint32_t rta                     : 1;
47930        uint32_t rma                     : 1;
47931        uint32_t sse                     : 1;
47932        uint32_t dpe                     : 1;
47933#endif
47934    } s;
47935    struct cvmx_pcieep_cfg001_s          cn52xx;
47936    struct cvmx_pcieep_cfg001_s          cn52xxp1;
47937    struct cvmx_pcieep_cfg001_s          cn56xx;
47938    struct cvmx_pcieep_cfg001_s          cn56xxp1;
47939} cvmx_pcieep_cfg001_t;
47940
47941
47942/**
47943 * cvmx_pcieep_cfg002
47944 *
47945 * PCIE_CFG002 = Third 32-bits of PCIE type 0 config space (Revision ID/Class Code Register)
47946 *
47947 */
47948typedef union
47949{
47950    uint32_t u32;
47951    struct cvmx_pcieep_cfg002_s
47952    {
47953#if __BYTE_ORDER == __BIG_ENDIAN
47954        uint32_t bcc                     : 8;       /**< Base Class Code, writable through the DBI
47955                                                         However, the application must not change this field. */
47956        uint32_t sc                      : 8;       /**< Subclass Code, writable through the DBI
47957                                                         However, the application must not change this field. */
47958        uint32_t pi                      : 8;       /**< Programming Interface, writable through the DBI
47959                                                         However, the application must not change this field. */
47960        uint32_t rid                     : 8;       /**< Revision ID, writable through the DBI
47961                                                         However, the application must not change this field. */
47962#else
47963        uint32_t rid                     : 8;
47964        uint32_t pi                      : 8;
47965        uint32_t sc                      : 8;
47966        uint32_t bcc                     : 8;
47967#endif
47968    } s;
47969    struct cvmx_pcieep_cfg002_s          cn52xx;
47970    struct cvmx_pcieep_cfg002_s          cn52xxp1;
47971    struct cvmx_pcieep_cfg002_s          cn56xx;
47972    struct cvmx_pcieep_cfg002_s          cn56xxp1;
47973} cvmx_pcieep_cfg002_t;
47974
47975
47976/**
47977 * cvmx_pcieep_cfg003
47978 *
47979 * PCIE_CFG003 = Fourth 32-bits of PCIE type 0 config space (Cache Line Size/Master Latency Timer/Header Type Register/BIST Register)
47980 *
47981 */
47982typedef union
47983{
47984    uint32_t u32;
47985    struct cvmx_pcieep_cfg003_s
47986    {
47987#if __BYTE_ORDER == __BIG_ENDIAN
47988        uint32_t bist                    : 8;       /**< The BIST register functions are not supported.
47989                                                         All 8 bits of the BIST register are hardwired to 0. */
47990        uint32_t mfd                     : 1;       /**< Multi Function Device
47991                                                         The Multi Function Device bit is writable through the DBI.
47992                                                         However, this is a single function device. Therefore, the
47993                                                         application must not write a 1 to this bit. */
47994        uint32_t chf                     : 7;       /**< Configuration Header Format
47995                                                         Hardwired to 0 for type 0. */
47996        uint32_t lt                      : 8;       /**< Master Latency Timer
47997                                                         Not applicable for PCI Express, hardwired to 0. */
47998        uint32_t cls                     : 8;       /**< Cache Line Size
47999                                                         The Cache Line Size register is RW for legacy compatibility
48000                                                         purposes and is not applicable to PCI Express device
48001                                                         functionality.
48002                                                         Writing to the Cache Line Size register does not impact
48003                                                         functionality. */
48004#else
48005        uint32_t cls                     : 8;
48006        uint32_t lt                      : 8;
48007        uint32_t chf                     : 7;
48008        uint32_t mfd                     : 1;
48009        uint32_t bist                    : 8;
48010#endif
48011    } s;
48012    struct cvmx_pcieep_cfg003_s          cn52xx;
48013    struct cvmx_pcieep_cfg003_s          cn52xxp1;
48014    struct cvmx_pcieep_cfg003_s          cn56xx;
48015    struct cvmx_pcieep_cfg003_s          cn56xxp1;
48016} cvmx_pcieep_cfg003_t;
48017
48018
48019/**
48020 * cvmx_pcieep_cfg004
48021 *
48022 * PCIE_CFG004 = Fifth 32-bits of PCIE type 0 config space (Base Address Register 0 - Low)
48023 *
48024 */
48025typedef union
48026{
48027    uint32_t u32;
48028    struct cvmx_pcieep_cfg004_s
48029    {
48030#if __BYTE_ORDER == __BIG_ENDIAN
48031        uint32_t lbab                    : 18;      /**< Lower bits of the BAR 0 base address */
48032        uint32_t reserved_4_13           : 10;
48033        uint32_t pf                      : 1;       /**< Prefetchable
48034                                                         This field is writable through the DBI.
48035                                                         However, the application must not change this field. */
48036        uint32_t typ                     : 2;       /**< BAR type
48037                                                            o 00 = 32-bit BAR
48038                                                            o 10 = 64-bit BAR
48039                                                         This field is writable through the DBI.
48040                                                         However, the application must not change this field. */
48041        uint32_t mspc                    : 1;       /**< Memory Space Indicator
48042                                                            o 0 = BAR 0 is a memory BAR
48043                                                            o 1 = BAR 0 is an I/O BAR
48044                                                         This field is writable through the DBI.
48045                                                         However, the application must not change this field. */
48046#else
48047        uint32_t mspc                    : 1;
48048        uint32_t typ                     : 2;
48049        uint32_t pf                      : 1;
48050        uint32_t reserved_4_13           : 10;
48051        uint32_t lbab                    : 18;
48052#endif
48053    } s;
48054    struct cvmx_pcieep_cfg004_s          cn52xx;
48055    struct cvmx_pcieep_cfg004_s          cn52xxp1;
48056    struct cvmx_pcieep_cfg004_s          cn56xx;
48057    struct cvmx_pcieep_cfg004_s          cn56xxp1;
48058} cvmx_pcieep_cfg004_t;
48059
48060
48061/**
48062 * cvmx_pcieep_cfg004_mask
48063 *
48064 * PCIE_CFG004_MASK (BAR Mask 0 - Low)
48065 * The BAR 0 Mask register is invisible to host software and not readable from the application.
48066 * The BAR 0 Mask register is only writable through the DBI.
48067 */
48068typedef union
48069{
48070    uint32_t u32;
48071    struct cvmx_pcieep_cfg004_mask_s
48072    {
48073#if __BYTE_ORDER == __BIG_ENDIAN
48074        uint32_t lmask                   : 31;      /**< Bar Mask Low */
48075        uint32_t enb                     : 1;       /**< Bar Enable
48076                                                         o 0: BAR 0 is disabled
48077                                                         o 1: BAR 0 is enabled
48078                                                         Bit 0 is interpreted as BAR Enable when writing to the BAR Mask
48079                                                         register rather than as a mask bit because bit 0 of a BAR is
48080                                                         always masked from writing by host software. Bit 0 must be
48081                                                         written prior to writing the other mask bits. */
48082#else
48083        uint32_t enb                     : 1;
48084        uint32_t lmask                   : 31;
48085#endif
48086    } s;
48087    struct cvmx_pcieep_cfg004_mask_s     cn52xx;
48088    struct cvmx_pcieep_cfg004_mask_s     cn52xxp1;
48089    struct cvmx_pcieep_cfg004_mask_s     cn56xx;
48090    struct cvmx_pcieep_cfg004_mask_s     cn56xxp1;
48091} cvmx_pcieep_cfg004_mask_t;
48092
48093
48094/**
48095 * cvmx_pcieep_cfg005
48096 *
48097 * PCIE_CFG005 = Sixth 32-bits of PCIE type 0 config space (Base Address Register 0 - High)
48098 *
48099 */
48100typedef union
48101{
48102    uint32_t u32;
48103    struct cvmx_pcieep_cfg005_s
48104    {
48105#if __BYTE_ORDER == __BIG_ENDIAN
48106        uint32_t ubab                    : 32;      /**< Contains the upper 32 bits of the BAR 0 base address. */
48107#else
48108        uint32_t ubab                    : 32;
48109#endif
48110    } s;
48111    struct cvmx_pcieep_cfg005_s          cn52xx;
48112    struct cvmx_pcieep_cfg005_s          cn52xxp1;
48113    struct cvmx_pcieep_cfg005_s          cn56xx;
48114    struct cvmx_pcieep_cfg005_s          cn56xxp1;
48115} cvmx_pcieep_cfg005_t;
48116
48117
48118/**
48119 * cvmx_pcieep_cfg005_mask
48120 *
48121 * PCIE_CFG005_MASK = (BAR Mask 0 - High)
48122 * The BAR 0 Mask register is invisible to host software and not readable from the application.
48123 * The BAR 0 Mask register is only writable through the DBI.
48124 */
48125typedef union
48126{
48127    uint32_t u32;
48128    struct cvmx_pcieep_cfg005_mask_s
48129    {
48130#if __BYTE_ORDER == __BIG_ENDIAN
48131        uint32_t umask                   : 32;      /**< Bar Mask High */
48132#else
48133        uint32_t umask                   : 32;
48134#endif
48135    } s;
48136    struct cvmx_pcieep_cfg005_mask_s     cn52xx;
48137    struct cvmx_pcieep_cfg005_mask_s     cn52xxp1;
48138    struct cvmx_pcieep_cfg005_mask_s     cn56xx;
48139    struct cvmx_pcieep_cfg005_mask_s     cn56xxp1;
48140} cvmx_pcieep_cfg005_mask_t;
48141
48142
48143/**
48144 * cvmx_pcieep_cfg006
48145 *
48146 * PCIE_CFG006 = Seventh 32-bits of PCIE type 0 config space (Base Address Register 1 - Low)
48147 *
48148 */
48149typedef union
48150{
48151    uint32_t u32;
48152    struct cvmx_pcieep_cfg006_s
48153    {
48154#if __BYTE_ORDER == __BIG_ENDIAN
48155        uint32_t lbab                    : 6;       /**< Lower bits of the BAR 1 base address */
48156        uint32_t reserved_4_25           : 22;
48157        uint32_t pf                      : 1;       /**< Prefetchable
48158                                                         This field is writable through the DBI.
48159                                                         However, the application must not change this field. */
48160        uint32_t typ                     : 2;       /**< BAR type
48161                                                            o 00 = 32-bit BAR
48162                                                            o 10 = 64-bit BAR
48163                                                         This field is writable through the DBI.
48164                                                         However, the application must not change this field. */
48165        uint32_t mspc                    : 1;       /**< Memory Space Indicator
48166                                                            o 0 = BAR 0 is a memory BAR
48167                                                            o 1 = BAR 0 is an I/O BAR
48168                                                         This field is writable through the DBI.
48169                                                         However, the application must not change this field. */
48170#else
48171        uint32_t mspc                    : 1;
48172        uint32_t typ                     : 2;
48173        uint32_t pf                      : 1;
48174        uint32_t reserved_4_25           : 22;
48175        uint32_t lbab                    : 6;
48176#endif
48177    } s;
48178    struct cvmx_pcieep_cfg006_s          cn52xx;
48179    struct cvmx_pcieep_cfg006_s          cn52xxp1;
48180    struct cvmx_pcieep_cfg006_s          cn56xx;
48181    struct cvmx_pcieep_cfg006_s          cn56xxp1;
48182} cvmx_pcieep_cfg006_t;
48183
48184
48185/**
48186 * cvmx_pcieep_cfg006_mask
48187 *
48188 * PCIE_CFG006_MASK (BAR Mask 1 - Low)
48189 * The BAR 1 Mask register is invisible to host software and not readable from the application.
48190 * The BAR 1 Mask register is only writable through the DBI.
48191 */
48192typedef union
48193{
48194    uint32_t u32;
48195    struct cvmx_pcieep_cfg006_mask_s
48196    {
48197#if __BYTE_ORDER == __BIG_ENDIAN
48198        uint32_t lmask                   : 31;      /**< Bar Mask Low */
48199        uint32_t enb                     : 1;       /**< Bar Enable
48200                                                         o 0: BAR 1 is disabled
48201                                                         o 1: BAR 1 is enabled
48202                                                         Bit 0 is interpreted as BAR Enable when writing to the BAR Mask
48203                                                         register rather than as a mask bit because bit 0 of a BAR is
48204                                                         always masked from writing by host software. Bit 0 must be
48205                                                         written prior to writing the other mask bits. */
48206#else
48207        uint32_t enb                     : 1;
48208        uint32_t lmask                   : 31;
48209#endif
48210    } s;
48211    struct cvmx_pcieep_cfg006_mask_s     cn52xx;
48212    struct cvmx_pcieep_cfg006_mask_s     cn52xxp1;
48213    struct cvmx_pcieep_cfg006_mask_s     cn56xx;
48214    struct cvmx_pcieep_cfg006_mask_s     cn56xxp1;
48215} cvmx_pcieep_cfg006_mask_t;
48216
48217
48218/**
48219 * cvmx_pcieep_cfg007
48220 *
48221 * PCIE_CFG007 = Eighth 32-bits of PCIE type 0 config space (Base Address Register 1 - High)
48222 *
48223 */
48224typedef union
48225{
48226    uint32_t u32;
48227    struct cvmx_pcieep_cfg007_s
48228    {
48229#if __BYTE_ORDER == __BIG_ENDIAN
48230        uint32_t ubab                    : 32;      /**< Contains the upper 32 bits of the BAR 1 base address. */
48231#else
48232        uint32_t ubab                    : 32;
48233#endif
48234    } s;
48235    struct cvmx_pcieep_cfg007_s          cn52xx;
48236    struct cvmx_pcieep_cfg007_s          cn52xxp1;
48237    struct cvmx_pcieep_cfg007_s          cn56xx;
48238    struct cvmx_pcieep_cfg007_s          cn56xxp1;
48239} cvmx_pcieep_cfg007_t;
48240
48241
48242/**
48243 * cvmx_pcieep_cfg007_mask
48244 *
48245 * PCIE_CFG007_MASK (BAR Mask 1 - High)
48246 * The BAR 1 Mask register is invisible to host software and not readable from the application.
48247 * The BAR 1 Mask register is only writable through the DBI.
48248 */
48249typedef union
48250{
48251    uint32_t u32;
48252    struct cvmx_pcieep_cfg007_mask_s
48253    {
48254#if __BYTE_ORDER == __BIG_ENDIAN
48255        uint32_t umask                   : 32;      /**< Bar Mask High */
48256#else
48257        uint32_t umask                   : 32;
48258#endif
48259    } s;
48260    struct cvmx_pcieep_cfg007_mask_s     cn52xx;
48261    struct cvmx_pcieep_cfg007_mask_s     cn52xxp1;
48262    struct cvmx_pcieep_cfg007_mask_s     cn56xx;
48263    struct cvmx_pcieep_cfg007_mask_s     cn56xxp1;
48264} cvmx_pcieep_cfg007_mask_t;
48265
48266
48267/**
48268 * cvmx_pcieep_cfg008
48269 *
48270 * PCIE_CFG008 = Ninth 32-bits of PCIE type 0 config space (Base Address Register 2 - Low)
48271 *
48272 */
48273typedef union
48274{
48275    uint32_t u32;
48276    struct cvmx_pcieep_cfg008_s
48277    {
48278#if __BYTE_ORDER == __BIG_ENDIAN
48279        uint32_t reserved_4_31           : 28;
48280        uint32_t pf                      : 1;       /**< Prefetchable
48281                                                         This field is writable through the DBI.
48282                                                         However, the application must not change this field. */
48283        uint32_t typ                     : 2;       /**< BAR type
48284                                                            o 00 = 32-bit BAR
48285                                                            o 10 = 64-bit BAR
48286                                                         This field is writable through the DBI.
48287                                                         However, the application must not change this field. */
48288        uint32_t mspc                    : 1;       /**< Memory Space Indicator
48289                                                            o 0 = BAR 0 is a memory BAR
48290                                                            o 1 = BAR 0 is an I/O BAR
48291                                                         This field is writable through the DBI.
48292                                                         However, the application must not change this field. */
48293#else
48294        uint32_t mspc                    : 1;
48295        uint32_t typ                     : 2;
48296        uint32_t pf                      : 1;
48297        uint32_t reserved_4_31           : 28;
48298#endif
48299    } s;
48300    struct cvmx_pcieep_cfg008_s          cn52xx;
48301    struct cvmx_pcieep_cfg008_s          cn52xxp1;
48302    struct cvmx_pcieep_cfg008_s          cn56xx;
48303    struct cvmx_pcieep_cfg008_s          cn56xxp1;
48304} cvmx_pcieep_cfg008_t;
48305
48306
48307/**
48308 * cvmx_pcieep_cfg008_mask
48309 *
48310 * PCIE_CFG008_MASK (BAR Mask 2 - Low)
48311 * The BAR 2 Mask register is invisible to host software and not readable from the application.
48312 * The BAR 2 Mask register is only writable through the DBI.
48313 */
48314typedef union
48315{
48316    uint32_t u32;
48317    struct cvmx_pcieep_cfg008_mask_s
48318    {
48319#if __BYTE_ORDER == __BIG_ENDIAN
48320        uint32_t lmask                   : 31;      /**< Bar Mask Low */
48321        uint32_t enb                     : 1;       /**< Bar Enable
48322                                                         o 0: BAR 2 is disabled
48323                                                         o 1: BAR 2 is enabled
48324                                                         Bit 0 is interpreted as BAR Enable when writing to the BAR Mask
48325                                                         register rather than as a mask bit because bit 0 of a BAR is
48326                                                         always masked from writing by host software. Bit 0 must be
48327                                                         written prior to writing the other mask bits. */
48328#else
48329        uint32_t enb                     : 1;
48330        uint32_t lmask                   : 31;
48331#endif
48332    } s;
48333    struct cvmx_pcieep_cfg008_mask_s     cn52xx;
48334    struct cvmx_pcieep_cfg008_mask_s     cn52xxp1;
48335    struct cvmx_pcieep_cfg008_mask_s     cn56xx;
48336    struct cvmx_pcieep_cfg008_mask_s     cn56xxp1;
48337} cvmx_pcieep_cfg008_mask_t;
48338
48339
48340/**
48341 * cvmx_pcieep_cfg009
48342 *
48343 * PCIE_CFG009 = Tenth 32-bits of PCIE type 0 config space (Base Address Register 2 - High)
48344 *
48345 */
48346typedef union
48347{
48348    uint32_t u32;
48349    struct cvmx_pcieep_cfg009_s
48350    {
48351#if __BYTE_ORDER == __BIG_ENDIAN
48352        uint32_t ubab                    : 25;      /**< Contains the upper 32 bits of the BAR 2 base address. */
48353        uint32_t reserved_0_6            : 7;
48354#else
48355        uint32_t reserved_0_6            : 7;
48356        uint32_t ubab                    : 25;
48357#endif
48358    } s;
48359    struct cvmx_pcieep_cfg009_s          cn52xx;
48360    struct cvmx_pcieep_cfg009_s          cn52xxp1;
48361    struct cvmx_pcieep_cfg009_s          cn56xx;
48362    struct cvmx_pcieep_cfg009_s          cn56xxp1;
48363} cvmx_pcieep_cfg009_t;
48364
48365
48366/**
48367 * cvmx_pcieep_cfg009_mask
48368 *
48369 * PCIE_CFG009_MASK (BAR Mask 2 - High)
48370 * The BAR 2 Mask register is invisible to host software and not readable from the application.
48371 * The BAR 2 Mask register is only writable through the DBI.
48372 */
48373typedef union
48374{
48375    uint32_t u32;
48376    struct cvmx_pcieep_cfg009_mask_s
48377    {
48378#if __BYTE_ORDER == __BIG_ENDIAN
48379        uint32_t umask                   : 32;      /**< Bar Mask High */
48380#else
48381        uint32_t umask                   : 32;
48382#endif
48383    } s;
48384    struct cvmx_pcieep_cfg009_mask_s     cn52xx;
48385    struct cvmx_pcieep_cfg009_mask_s     cn52xxp1;
48386    struct cvmx_pcieep_cfg009_mask_s     cn56xx;
48387    struct cvmx_pcieep_cfg009_mask_s     cn56xxp1;
48388} cvmx_pcieep_cfg009_mask_t;
48389
48390
48391/**
48392 * cvmx_pcieep_cfg010
48393 *
48394 * PCIE_CFG010 = Eleventh 32-bits of PCIE type 0 config space (CardBus CIS Pointer Register)
48395 *
48396 */
48397typedef union
48398{
48399    uint32_t u32;
48400    struct cvmx_pcieep_cfg010_s
48401    {
48402#if __BYTE_ORDER == __BIG_ENDIAN
48403        uint32_t cisp                    : 32;      /**< CardBus CIS Pointer
48404                                                         Optional, writable through the DBI. */
48405#else
48406        uint32_t cisp                    : 32;
48407#endif
48408    } s;
48409    struct cvmx_pcieep_cfg010_s          cn52xx;
48410    struct cvmx_pcieep_cfg010_s          cn52xxp1;
48411    struct cvmx_pcieep_cfg010_s          cn56xx;
48412    struct cvmx_pcieep_cfg010_s          cn56xxp1;
48413} cvmx_pcieep_cfg010_t;
48414
48415
48416/**
48417 * cvmx_pcieep_cfg011
48418 *
48419 * PCIE_CFG011 = Twelfth 32-bits of PCIE type 0 config space (Subsystem ID and Subsystem Vendor ID Register)
48420 *
48421 */
48422typedef union
48423{
48424    uint32_t u32;
48425    struct cvmx_pcieep_cfg011_s
48426    {
48427#if __BYTE_ORDER == __BIG_ENDIAN
48428        uint32_t ssid                    : 16;      /**< Subsystem ID
48429                                                         Assigned by PCI-SIG, writable through the DBI.                                                                                                               However, the application must not change this field. */
48430        uint32_t ssvid                   : 16;      /**< Subsystem Vendor ID
48431                                                         Assigned by PCI-SIG, writable through the DBI.
48432                                                         However, the application must not change this field. */
48433#else
48434        uint32_t ssvid                   : 16;
48435        uint32_t ssid                    : 16;
48436#endif
48437    } s;
48438    struct cvmx_pcieep_cfg011_s          cn52xx;
48439    struct cvmx_pcieep_cfg011_s          cn52xxp1;
48440    struct cvmx_pcieep_cfg011_s          cn56xx;
48441    struct cvmx_pcieep_cfg011_s          cn56xxp1;
48442} cvmx_pcieep_cfg011_t;
48443
48444
48445/**
48446 * cvmx_pcieep_cfg012
48447 *
48448 * PCIE_CFG012 = Thirteenth 32-bits of PCIE type 0 config space (Expansion ROM Base Address Register)
48449 *
48450 */
48451typedef union
48452{
48453    uint32_t u32;
48454    struct cvmx_pcieep_cfg012_s
48455    {
48456#if __BYTE_ORDER == __BIG_ENDIAN
48457        uint32_t eraddr                  : 16;      /**< Expansion ROM Address */
48458        uint32_t reserved_1_15           : 15;
48459        uint32_t er_en                   : 1;       /**< Expansion ROM Enable */
48460#else
48461        uint32_t er_en                   : 1;
48462        uint32_t reserved_1_15           : 15;
48463        uint32_t eraddr                  : 16;
48464#endif
48465    } s;
48466    struct cvmx_pcieep_cfg012_s          cn52xx;
48467    struct cvmx_pcieep_cfg012_s          cn52xxp1;
48468    struct cvmx_pcieep_cfg012_s          cn56xx;
48469    struct cvmx_pcieep_cfg012_s          cn56xxp1;
48470} cvmx_pcieep_cfg012_t;
48471
48472
48473/**
48474 * cvmx_pcieep_cfg012_mask
48475 *
48476 * PCIE_CFG012_MASK (Exapansion ROM BAR Mask)
48477 * The ROM Mask register is invisible to host software and not readable from the application.
48478 * The ROM Mask register is only writable through the DBI.
48479 */
48480typedef union
48481{
48482    uint32_t u32;
48483    struct cvmx_pcieep_cfg012_mask_s
48484    {
48485#if __BYTE_ORDER == __BIG_ENDIAN
48486        uint32_t mask                    : 31;      /**< Bar Mask Low */
48487        uint32_t enb                     : 1;       /**< Bar Enable
48488                                                         o 0: BAR ROM is disabled
48489                                                         o 1: BAR ROM is enabled
48490                                                         Bit 0 is interpreted as BAR Enable when writing to the BAR Mask
48491                                                         register rather than as a mask bit because bit 0 of a BAR is
48492                                                         always masked from writing by host software. Bit 0 must be
48493                                                         written prior to writing the other mask bits. */
48494#else
48495        uint32_t enb                     : 1;
48496        uint32_t mask                    : 31;
48497#endif
48498    } s;
48499    struct cvmx_pcieep_cfg012_mask_s     cn52xx;
48500    struct cvmx_pcieep_cfg012_mask_s     cn52xxp1;
48501    struct cvmx_pcieep_cfg012_mask_s     cn56xx;
48502    struct cvmx_pcieep_cfg012_mask_s     cn56xxp1;
48503} cvmx_pcieep_cfg012_mask_t;
48504
48505
48506/**
48507 * cvmx_pcieep_cfg013
48508 *
48509 * PCIE_CFG013 = Fourteenth 32-bits of PCIE type 0 config space (Capability Pointer Register)
48510 *
48511 */
48512typedef union
48513{
48514    uint32_t u32;
48515    struct cvmx_pcieep_cfg013_s
48516    {
48517#if __BYTE_ORDER == __BIG_ENDIAN
48518        uint32_t reserved_8_31           : 24;
48519        uint32_t cp                      : 8;       /**< First Capability Pointer.
48520                                                         Points to Power Management Capability structure by
48521                                                         default, writable through the DBI.
48522                                                         However, the application must not change this field. */
48523#else
48524        uint32_t cp                      : 8;
48525        uint32_t reserved_8_31           : 24;
48526#endif
48527    } s;
48528    struct cvmx_pcieep_cfg013_s          cn52xx;
48529    struct cvmx_pcieep_cfg013_s          cn52xxp1;
48530    struct cvmx_pcieep_cfg013_s          cn56xx;
48531    struct cvmx_pcieep_cfg013_s          cn56xxp1;
48532} cvmx_pcieep_cfg013_t;
48533
48534
48535/**
48536 * cvmx_pcieep_cfg015
48537 *
48538 * PCIE_CFG015 = Sixteenth 32-bits of PCIE type 0 config space (Interrupt Line Register/Interrupt Pin/Bridge Control Register)
48539 *
48540 */
48541typedef union
48542{
48543    uint32_t u32;
48544    struct cvmx_pcieep_cfg015_s
48545    {
48546#if __BYTE_ORDER == __BIG_ENDIAN
48547        uint32_t ml                      : 8;       /**< Maximum Latency     (Hardwired to 0) */
48548        uint32_t mg                      : 8;       /**< Minimum Grant       (Hardwired to 0) */
48549        uint32_t inta                    : 8;       /**< Interrupt Pin
48550                                                         Identifies the legacy interrupt Message that the device
48551                                                         (or device function) uses.
48552                                                         The Interrupt Pin register is writable through the DBI.
48553                                                         In a single-function configuration, only INTA is used.
48554                                                         Therefore, the application must not change this field. */
48555        uint32_t il                      : 8;       /**< Interrupt Line */
48556#else
48557        uint32_t il                      : 8;
48558        uint32_t inta                    : 8;
48559        uint32_t mg                      : 8;
48560        uint32_t ml                      : 8;
48561#endif
48562    } s;
48563    struct cvmx_pcieep_cfg015_s          cn52xx;
48564    struct cvmx_pcieep_cfg015_s          cn52xxp1;
48565    struct cvmx_pcieep_cfg015_s          cn56xx;
48566    struct cvmx_pcieep_cfg015_s          cn56xxp1;
48567} cvmx_pcieep_cfg015_t;
48568
48569
48570/**
48571 * cvmx_pcieep_cfg016
48572 *
48573 * PCIE_CFG016 = Seventeenth 32-bits of PCIE type 0 config space
48574 * (Power Management Capability ID/
48575 * Power Management Next Item Pointer/
48576 * Power Management Capabilities Register)
48577 */
48578typedef union
48579{
48580    uint32_t u32;
48581    struct cvmx_pcieep_cfg016_s
48582    {
48583#if __BYTE_ORDER == __BIG_ENDIAN
48584        uint32_t pmes                    : 5;       /**< PME_Support
48585                                                         o Bit 11: If set, PME Messages can be generated from D0
48586                                                         o Bit 12: If set, PME Messages can be generated from D1
48587                                                         o Bit 13: If set, PME Messages can be generated from D2
48588                                                         o Bit 14: If set, PME Messages can be generated from D3hot
48589                                                         o Bit 15: If set, PME Messages can be generated from D3cold
48590                                                         The PME_Support field is writable through the DBI.
48591                                                         However, the application must not change this field. */
48592        uint32_t d2s                     : 1;       /**< D2 Support, writable through the DBI
48593                                                         However, the application must not change this field. */
48594        uint32_t d1s                     : 1;       /**< D1 Support, writable through the DBI
48595                                                         However, the application must not change this field. */
48596        uint32_t auxc                    : 3;       /**< AUX Current, writable through the DBI
48597                                                         However, the application must not change this field. */
48598        uint32_t dsi                     : 1;       /**< Device Specific Initialization (DSI), writable through the DBI
48599                                                         However, the application must not change this field. */
48600        uint32_t reserved_20_20          : 1;
48601        uint32_t pme_clock               : 1;       /**< PME Clock, hardwired to 0 */
48602        uint32_t pmsv                    : 3;       /**< Power Management Specification Version, writable through the DBI
48603                                                         However, the application must not change this field. */
48604        uint32_t ncp                     : 8;       /**< Next Capability Pointer
48605                                                         Points to the MSI capabilities by default, writable
48606                                                         through the DBI.
48607                                                         However, the application must not change this field. */
48608        uint32_t pmcid                   : 8;       /**< Power Management Capability ID */
48609#else
48610        uint32_t pmcid                   : 8;
48611        uint32_t ncp                     : 8;
48612        uint32_t pmsv                    : 3;
48613        uint32_t pme_clock               : 1;
48614        uint32_t reserved_20_20          : 1;
48615        uint32_t dsi                     : 1;
48616        uint32_t auxc                    : 3;
48617        uint32_t d1s                     : 1;
48618        uint32_t d2s                     : 1;
48619        uint32_t pmes                    : 5;
48620#endif
48621    } s;
48622    struct cvmx_pcieep_cfg016_s          cn52xx;
48623    struct cvmx_pcieep_cfg016_s          cn52xxp1;
48624    struct cvmx_pcieep_cfg016_s          cn56xx;
48625    struct cvmx_pcieep_cfg016_s          cn56xxp1;
48626} cvmx_pcieep_cfg016_t;
48627
48628
48629/**
48630 * cvmx_pcieep_cfg017
48631 *
48632 * PCIE_CFG017 = Eighteenth 32-bits of PCIE type 0 config space (Power Management Control and Status Register)
48633 *
48634 */
48635typedef union
48636{
48637    uint32_t u32;
48638    struct cvmx_pcieep_cfg017_s
48639    {
48640#if __BYTE_ORDER == __BIG_ENDIAN
48641        uint32_t pmdia                   : 8;       /**< Data register for additional information (not supported) */
48642        uint32_t bpccee                  : 1;       /**< Bus Power/Clock Control Enable, hardwired to 0 */
48643        uint32_t bd3h                    : 1;       /**< B2/B3 Support, hardwired to 0 */
48644        uint32_t reserved_16_21          : 6;
48645        uint32_t pmess                   : 1;       /**< PME Status
48646                                                         Indicates if a previously enabled PME event occurred or not. */
48647        uint32_t pmedsia                 : 2;       /**< Data Scale (not supported) */
48648        uint32_t pmds                    : 4;       /**< Data Select (not supported) */
48649        uint32_t pmeens                  : 1;       /**< PME Enable
48650                                                         A value of 1 indicates that the device is enabled to
48651                                                         generate PME. */
48652        uint32_t reserved_4_7            : 4;
48653        uint32_t nsr                     : 1;       /**< No Soft Reset, writable through the DBI
48654                                                         However, the application must not change this field. */
48655        uint32_t reserved_2_2            : 1;
48656        uint32_t ps                      : 2;       /**< Power State
48657                                                         Controls the device power state:
48658                                                           o 00b: D0
48659                                                           o 01b: D1
48660                                                           o 10b: D2
48661                                                           o 11b: D3
48662                                                         The written value is ignored if the specific state is
48663                                                         not supported. */
48664#else
48665        uint32_t ps                      : 2;
48666        uint32_t reserved_2_2            : 1;
48667        uint32_t nsr                     : 1;
48668        uint32_t reserved_4_7            : 4;
48669        uint32_t pmeens                  : 1;
48670        uint32_t pmds                    : 4;
48671        uint32_t pmedsia                 : 2;
48672        uint32_t pmess                   : 1;
48673        uint32_t reserved_16_21          : 6;
48674        uint32_t bd3h                    : 1;
48675        uint32_t bpccee                  : 1;
48676        uint32_t pmdia                   : 8;
48677#endif
48678    } s;
48679    struct cvmx_pcieep_cfg017_s          cn52xx;
48680    struct cvmx_pcieep_cfg017_s          cn52xxp1;
48681    struct cvmx_pcieep_cfg017_s          cn56xx;
48682    struct cvmx_pcieep_cfg017_s          cn56xxp1;
48683} cvmx_pcieep_cfg017_t;
48684
48685
48686/**
48687 * cvmx_pcieep_cfg020
48688 *
48689 * PCIE_CFG020 = Twenty-first 32-bits of PCIE type 0 config space
48690 * (MSI Capability ID/
48691 *  MSI Next Item Pointer/
48692 *  MSI Control Register)
48693 */
48694typedef union
48695{
48696    uint32_t u32;
48697    struct cvmx_pcieep_cfg020_s
48698    {
48699#if __BYTE_ORDER == __BIG_ENDIAN
48700        uint32_t reserved_24_31          : 8;
48701        uint32_t m64                     : 1;       /**< 64-bit Address Capable, writable through the DBI
48702                                                         However, the application must not change this field. */
48703        uint32_t mme                     : 3;       /**< Multiple Message Enabled
48704                                                         Indicates that multiple Message mode is enabled by system
48705                                                         software. The number of Messages enabled must be less than
48706                                                         or equal to the Multiple Message Capable value. */
48707        uint32_t mmc                     : 3;       /**< Multiple Message Capable, writable through the DBI
48708                                                         However, the application must not change this field. */
48709        uint32_t msien                   : 1;       /**< MSI Enabled
48710                                                         When set, INTx must be disabled. */
48711        uint32_t ncp                     : 8;       /**< Next Capability Pointer
48712                                                         Points to PCI Express Capabilities by default,
48713                                                         writable through the DBI.
48714                                                         However, the application must not change this field. */
48715        uint32_t msicid                  : 8;       /**< MSI Capability ID */
48716#else
48717        uint32_t msicid                  : 8;
48718        uint32_t ncp                     : 8;
48719        uint32_t msien                   : 1;
48720        uint32_t mmc                     : 3;
48721        uint32_t mme                     : 3;
48722        uint32_t m64                     : 1;
48723        uint32_t reserved_24_31          : 8;
48724#endif
48725    } s;
48726    struct cvmx_pcieep_cfg020_s          cn52xx;
48727    struct cvmx_pcieep_cfg020_s          cn52xxp1;
48728    struct cvmx_pcieep_cfg020_s          cn56xx;
48729    struct cvmx_pcieep_cfg020_s          cn56xxp1;
48730} cvmx_pcieep_cfg020_t;
48731
48732
48733/**
48734 * cvmx_pcieep_cfg021
48735 *
48736 * PCIE_CFG021 = Twenty-second 32-bits of PCIE type 0 config space (MSI Lower 32 Bits Address Register)
48737 *
48738 */
48739typedef union
48740{
48741    uint32_t u32;
48742    struct cvmx_pcieep_cfg021_s
48743    {
48744#if __BYTE_ORDER == __BIG_ENDIAN
48745        uint32_t lmsi                    : 30;      /**< Lower 32-bit Address */
48746        uint32_t reserved_0_1            : 2;
48747#else
48748        uint32_t reserved_0_1            : 2;
48749        uint32_t lmsi                    : 30;
48750#endif
48751    } s;
48752    struct cvmx_pcieep_cfg021_s          cn52xx;
48753    struct cvmx_pcieep_cfg021_s          cn52xxp1;
48754    struct cvmx_pcieep_cfg021_s          cn56xx;
48755    struct cvmx_pcieep_cfg021_s          cn56xxp1;
48756} cvmx_pcieep_cfg021_t;
48757
48758
48759/**
48760 * cvmx_pcieep_cfg022
48761 *
48762 * PCIE_CFG022 = Twenty-third 32-bits of PCIE type 0 config space (MSI Upper 32 bits Address Register)
48763 *
48764 */
48765typedef union
48766{
48767    uint32_t u32;
48768    struct cvmx_pcieep_cfg022_s
48769    {
48770#if __BYTE_ORDER == __BIG_ENDIAN
48771        uint32_t umsi                    : 32;      /**< Upper 32-bit Address */
48772#else
48773        uint32_t umsi                    : 32;
48774#endif
48775    } s;
48776    struct cvmx_pcieep_cfg022_s          cn52xx;
48777    struct cvmx_pcieep_cfg022_s          cn52xxp1;
48778    struct cvmx_pcieep_cfg022_s          cn56xx;
48779    struct cvmx_pcieep_cfg022_s          cn56xxp1;
48780} cvmx_pcieep_cfg022_t;
48781
48782
48783/**
48784 * cvmx_pcieep_cfg023
48785 *
48786 * PCIE_CFG023 = Twenty-fourth 32-bits of PCIE type 0 config space (MSI Data Register)
48787 *
48788 */
48789typedef union
48790{
48791    uint32_t u32;
48792    struct cvmx_pcieep_cfg023_s
48793    {
48794#if __BYTE_ORDER == __BIG_ENDIAN
48795        uint32_t reserved_16_31          : 16;
48796        uint32_t msimd                   : 16;      /**< MSI Data
48797                                                         Pattern assigned by system software, bits [4:0] are Or-ed with
48798                                                         MSI_VECTOR to generate 32 MSI Messages per function. */
48799#else
48800        uint32_t msimd                   : 16;
48801        uint32_t reserved_16_31          : 16;
48802#endif
48803    } s;
48804    struct cvmx_pcieep_cfg023_s          cn52xx;
48805    struct cvmx_pcieep_cfg023_s          cn52xxp1;
48806    struct cvmx_pcieep_cfg023_s          cn56xx;
48807    struct cvmx_pcieep_cfg023_s          cn56xxp1;
48808} cvmx_pcieep_cfg023_t;
48809
48810
48811/**
48812 * cvmx_pcieep_cfg028
48813 *
48814 * PCIE_CFG028 = Twenty-ninth 32-bits of PCIE type 0 config space
48815 * (PCI Express Capabilities List Register/
48816 *  PCI Express Capabilities Register)
48817 */
48818typedef union
48819{
48820    uint32_t u32;
48821    struct cvmx_pcieep_cfg028_s
48822    {
48823#if __BYTE_ORDER == __BIG_ENDIAN
48824        uint32_t reserved_30_31          : 2;
48825        uint32_t imn                     : 5;       /**< Interrupt Message Number
48826                                                         Updated by hardware, writable through the DBI.
48827                                                         However, the application must not change this field. */
48828        uint32_t si                      : 1;       /**< Slot Implemented
48829                                                         This bit is writable through the DBI. However, it must be 0 for
48830                                                         an Endpoint device. Therefore, the application must not write a
48831                                                         1 to this bit. */
48832        uint32_t dpt                     : 4;       /**< Device Port Type */
48833        uint32_t pciecv                  : 4;       /**< PCI Express Capability Version */
48834        uint32_t ncp                     : 8;       /**< Next Capability Pointer
48835                                                         Writable through the DBI.
48836                                                         However, the application must not change this field. */
48837        uint32_t pcieid                  : 8;       /**< PCIE Capability ID */
48838#else
48839        uint32_t pcieid                  : 8;
48840        uint32_t ncp                     : 8;
48841        uint32_t pciecv                  : 4;
48842        uint32_t dpt                     : 4;
48843        uint32_t si                      : 1;
48844        uint32_t imn                     : 5;
48845        uint32_t reserved_30_31          : 2;
48846#endif
48847    } s;
48848    struct cvmx_pcieep_cfg028_s          cn52xx;
48849    struct cvmx_pcieep_cfg028_s          cn52xxp1;
48850    struct cvmx_pcieep_cfg028_s          cn56xx;
48851    struct cvmx_pcieep_cfg028_s          cn56xxp1;
48852} cvmx_pcieep_cfg028_t;
48853
48854
48855/**
48856 * cvmx_pcieep_cfg029
48857 *
48858 * PCIE_CFG029 = Thirtieth 32-bits of PCIE type 0 config space (Device Capabilities Register)
48859 *
48860 */
48861typedef union
48862{
48863    uint32_t u32;
48864    struct cvmx_pcieep_cfg029_s
48865    {
48866#if __BYTE_ORDER == __BIG_ENDIAN
48867        uint32_t reserved_28_31          : 4;
48868        uint32_t cspls                   : 2;       /**< Captured Slot Power Limit Scale
48869                                                         From Message from RC, upstream port only. */
48870        uint32_t csplv                   : 8;       /**< Captured Slot Power Limit Value
48871                                                         From Message from RC, upstream port only. */
48872        uint32_t reserved_16_17          : 2;
48873        uint32_t rber                    : 1;       /**< Role-Based Error Reporting, writable through the DBI
48874                                                         However, the application must not change this field. */
48875        uint32_t reserved_12_14          : 3;
48876        uint32_t el1al                   : 3;       /**< Endpoint L1 Acceptable Latency, writable through the DBI
48877                                                         However, the application must not change this field. */
48878        uint32_t el0al                   : 3;       /**< Endpoint L0s Acceptable Latency, writable through the DBI
48879                                                         However, the application must not change this field. */
48880        uint32_t etfs                    : 1;       /**< Extended Tag Field Supported
48881                                                         This bit is writable through the DBI. However, the application
48882                                                         must not write a 1 to this bit. */
48883        uint32_t pfs                     : 2;       /**< Phantom Function Supported
48884                                                         This field is writable through the DBI. However, Phantom
48885                                                         Function is not supported. Therefore, the application must not
48886                                                         write any value other than 0x0 to this field. */
48887        uint32_t mpss                    : 3;       /**< Max_Payload_Size Supported, writable through the DBI
48888                                                         However, the application must not change this field. */
48889#else
48890        uint32_t mpss                    : 3;
48891        uint32_t pfs                     : 2;
48892        uint32_t etfs                    : 1;
48893        uint32_t el0al                   : 3;
48894        uint32_t el1al                   : 3;
48895        uint32_t reserved_12_14          : 3;
48896        uint32_t rber                    : 1;
48897        uint32_t reserved_16_17          : 2;
48898        uint32_t csplv                   : 8;
48899        uint32_t cspls                   : 2;
48900        uint32_t reserved_28_31          : 4;
48901#endif
48902    } s;
48903    struct cvmx_pcieep_cfg029_s          cn52xx;
48904    struct cvmx_pcieep_cfg029_s          cn52xxp1;
48905    struct cvmx_pcieep_cfg029_s          cn56xx;
48906    struct cvmx_pcieep_cfg029_s          cn56xxp1;
48907} cvmx_pcieep_cfg029_t;
48908
48909
48910/**
48911 * cvmx_pcieep_cfg030
48912 *
48913 * PCIE_CFG030 = Thirty-first 32-bits of PCIE type 0 config space
48914 * (Device Control Register/Device Status Register)
48915 */
48916typedef union
48917{
48918    uint32_t u32;
48919    struct cvmx_pcieep_cfg030_s
48920    {
48921#if __BYTE_ORDER == __BIG_ENDIAN
48922        uint32_t reserved_22_31          : 10;
48923        uint32_t tp                      : 1;       /**< Transaction Pending
48924                                                         Set to 1 when Non-Posted Requests are not yet completed
48925                                                         and clear when they are completed. */
48926        uint32_t ap_d                    : 1;       /**< Aux Power Detected
48927                                                         Set to 1 if Aux power detected. */
48928        uint32_t ur_d                    : 1;       /**< Unsupported Request Detected
48929                                                          Errors are logged in this register regardless of whether
48930                                                          error reporting is enabled in the Device Control register.
48931                                                         UR_D occurs when we receive something we don't support.
48932                                                         Unsupported requests are Nonfatal errors, so UR_D should
48933                                                         cause NFE_D.  Receiving a  vendor defined message should
48934                                                         cause an unsupported request. */
48935        uint32_t fe_d                    : 1;       /**< Fatal Error Detected
48936                                                          Errors are logged in this register regardless of whether
48937                                                          error reporting is enabled in the Device Control register.
48938                                                         FE_D is set if receive any of the errors in PCIE_CFG066 that
48939                                                         has a severity set to Fatal.  Malformed TLP's generally fit
48940                                                         into this category. */
48941        uint32_t nfe_d                   : 1;       /**< Non-Fatal Error detected
48942                                                          Errors are logged in this register regardless of whether
48943                                                          error reporting is enabled in the Device Control register.
48944                                                         NFE_D is set if we receive any of the errors in PCIE_CFG066
48945                                                         that has a severity set to Nonfatal and does NOT meet Advisory
48946                                                         Nonfatal criteria (PCIe 1.1 spec, Section 6.2.3.2.4), which
48947                                                         most poisoned TLP's should be. */
48948        uint32_t ce_d                    : 1;       /**< Correctable Error Detected
48949                                                          Errors are logged in this register regardless of whether
48950                                                          error reporting is enabled in the Device Control register.
48951                                                         CE_D is set if we receive any of the errors in PCIE_CFG068
48952                                                         for example a Replay Timer Timeout.  Also, it can be set if
48953                                                         we get any of the errors in PCIE_CFG066 that has a severity
48954                                                         set to Nonfatal and meets the Advisory Nonfatal criteria
48955                                                         (PCIe 1.1 spec, Section 6.2.3.2.4), which most ECRC errors
48956                                                         should be. */
48957        uint32_t reserved_15_15          : 1;
48958        uint32_t mrrs                    : 3;       /**< Max Read Request Size
48959                                                          0 = 128B
48960                                                          1 = 256B
48961                                                          2 = 512B
48962                                                          3 = 1024B
48963                                                          4 = 2048B
48964                                                          5 = 4096B
48965                                                         Note: NPEI_CTL_STATUS2[MRRS] also must be set properly.
48966                                                         NPEI_CTL_STATUS2[MRRS] must not exceed the
48967                                                         desired max read request size. */
48968        uint32_t ns_en                   : 1;       /**< Enable No Snoop */
48969        uint32_t ap_en                   : 1;       /**< AUX Power PM Enable */
48970        uint32_t pf_en                   : 1;       /**< Phantom Function Enable
48971                                                         This bit should never be set - OCTEON requests never use
48972                                                         phantom functions. */
48973        uint32_t etf_en                  : 1;       /**< Extended Tag Field Enable
48974                                                         This bit should never be set - OCTEON requests never use
48975                                                         extended tags. */
48976        uint32_t mps                     : 3;       /**< Max Payload Size
48977                                                          Legal values:
48978                                                           0  = 128B
48979                                                           1  = 256B
48980                                                          Larger sizes not supported by OCTEON.
48981                                                         Note: NPEI_CTL_STATUS2[MPS] must be set to the same
48982                                                               value for proper functionality. */
48983        uint32_t ro_en                   : 1;       /**< Enable Relaxed Ordering */
48984        uint32_t ur_en                   : 1;       /**< Unsupported Request Reporting Enable */
48985        uint32_t fe_en                   : 1;       /**< Fatal Error Reporting Enable */
48986        uint32_t nfe_en                  : 1;       /**< Non-Fatal Error Reporting Enable */
48987        uint32_t ce_en                   : 1;       /**< Correctable Error Reporting Enable */
48988#else
48989        uint32_t ce_en                   : 1;
48990        uint32_t nfe_en                  : 1;
48991        uint32_t fe_en                   : 1;
48992        uint32_t ur_en                   : 1;
48993        uint32_t ro_en                   : 1;
48994        uint32_t mps                     : 3;
48995        uint32_t etf_en                  : 1;
48996        uint32_t pf_en                   : 1;
48997        uint32_t ap_en                   : 1;
48998        uint32_t ns_en                   : 1;
48999        uint32_t mrrs                    : 3;
49000        uint32_t reserved_15_15          : 1;
49001        uint32_t ce_d                    : 1;
49002        uint32_t nfe_d                   : 1;
49003        uint32_t fe_d                    : 1;
49004        uint32_t ur_d                    : 1;
49005        uint32_t ap_d                    : 1;
49006        uint32_t tp                      : 1;
49007        uint32_t reserved_22_31          : 10;
49008#endif
49009    } s;
49010    struct cvmx_pcieep_cfg030_s          cn52xx;
49011    struct cvmx_pcieep_cfg030_s          cn52xxp1;
49012    struct cvmx_pcieep_cfg030_s          cn56xx;
49013    struct cvmx_pcieep_cfg030_s          cn56xxp1;
49014} cvmx_pcieep_cfg030_t;
49015
49016
49017/**
49018 * cvmx_pcieep_cfg031
49019 *
49020 * PCIE_CFG031 = Thirty-second 32-bits of PCIE type 0 config space
49021 * (Link Capabilities Register)
49022 */
49023typedef union
49024{
49025    uint32_t u32;
49026    struct cvmx_pcieep_cfg031_s
49027    {
49028#if __BYTE_ORDER == __BIG_ENDIAN
49029        uint32_t pnum                    : 8;       /**< Port Number, writable through the DBI
49030                                                         However, the application must not change this field. */
49031        uint32_t reserved_22_23          : 2;
49032        uint32_t lbnc                    : 1;       /**< Link Bandwith Notification Capability */
49033        uint32_t dllarc                  : 1;       /**< Data Link Layer Active Reporting Capable */
49034        uint32_t sderc                   : 1;       /**< Surprise Down Error Reporting Capable
49035                                                         Not supported, hardwired to 0x0. */
49036        uint32_t cpm                     : 1;       /**< Clock Power Management
49037                                                         The default value is the value you specify during hardware
49038                                                         configuration, writable through the DBI.
49039                                                         However, the application must not change this field. */
49040        uint32_t l1el                    : 3;       /**< L1 Exit Latency
49041                                                         The default value is the value you specify during hardware
49042                                                         configuration, writable through the DBI.
49043                                                         However, the application must not change this field. */
49044        uint32_t l0el                    : 3;       /**< L0s Exit Latency
49045                                                         The default value is the value you specify during hardware
49046                                                         configuration, writable through the DBI.
49047                                                         However, the application must not change this field. */
49048        uint32_t aslpms                  : 2;       /**< Active State Link PM Support
49049                                                         The default value is the value you specify during hardware
49050                                                         configuration, writable through the DBI.
49051                                                         However, the application must not change this field. */
49052        uint32_t mlw                     : 6;       /**< Maximum Link Width
49053                                                         The default value is the value you specify during hardware
49054                                                         configuration (x1, x4, x8, or x16), writable through the DBI. */
49055        uint32_t mls                     : 4;       /**< Maximum Link Speed
49056                                                         Default value is 0x1 for 2.5 Gbps Link.
49057                                                         This field is writable through the DBI. However, 0x1 is the
49058                                                         only supported value. Therefore, the application must not write
49059                                                         any value other than 0x1 to this field. */
49060#else
49061        uint32_t mls                     : 4;
49062        uint32_t mlw                     : 6;
49063        uint32_t aslpms                  : 2;
49064        uint32_t l0el                    : 3;
49065        uint32_t l1el                    : 3;
49066        uint32_t cpm                     : 1;
49067        uint32_t sderc                   : 1;
49068        uint32_t dllarc                  : 1;
49069        uint32_t lbnc                    : 1;
49070        uint32_t reserved_22_23          : 2;
49071        uint32_t pnum                    : 8;
49072#endif
49073    } s;
49074    struct cvmx_pcieep_cfg031_s          cn52xx;
49075    struct cvmx_pcieep_cfg031_s          cn52xxp1;
49076    struct cvmx_pcieep_cfg031_s          cn56xx;
49077    struct cvmx_pcieep_cfg031_s          cn56xxp1;
49078} cvmx_pcieep_cfg031_t;
49079
49080
49081/**
49082 * cvmx_pcieep_cfg032
49083 *
49084 * PCIE_CFG032 = Thirty-third 32-bits of PCIE type 0 config space
49085 * (Link Control Register/Link Status Register)
49086 */
49087typedef union
49088{
49089    uint32_t u32;
49090    struct cvmx_pcieep_cfg032_s
49091    {
49092#if __BYTE_ORDER == __BIG_ENDIAN
49093        uint32_t reserved_30_31          : 2;
49094        uint32_t dlla                    : 1;       /**< Data Link Layer Active
49095                                                         Not applicable for an upstream Port or Endpoint device,
49096                                                         hardwired to 0. */
49097        uint32_t scc                     : 1;       /**< Slot Clock Configuration
49098                                                         Indicates that the component uses the same physical reference
49099                                                         clock that the platform provides on the connector.
49100                                                         Writable through the DBI.
49101                                                         However, the application must not change this field. */
49102        uint32_t lt                      : 1;       /**< Link Training
49103                                                         Not applicable for an upstream Port or Endpoint device,
49104                                                         hardwired to 0. */
49105        uint32_t reserved_26_26          : 1;
49106        uint32_t nlw                     : 6;       /**< Negotiated Link Width
49107                                                         Set automatically by hardware after Link initialization. */
49108        uint32_t ls                      : 4;       /**< Link Speed
49109                                                         The negotiated Link speed: 2.5 Gbps */
49110        uint32_t reserved_10_15          : 6;
49111        uint32_t hawd                    : 1;       /**< Hardware Autonomous Width Disable
49112                                                         (Not Supported) */
49113        uint32_t ecpm                    : 1;       /**< Enable Clock Power Management
49114                                                         Hardwired to 0 if Clock Power Management is disabled in
49115                                                         the Link Capabilities register. */
49116        uint32_t es                      : 1;       /**< Extended Synch */
49117        uint32_t ccc                     : 1;       /**< Common Clock Configuration */
49118        uint32_t rl                      : 1;       /**< Retrain Link
49119                                                         Not applicable for an upstream Port or Endpoint device,
49120                                                         hardwired to 0. */
49121        uint32_t ld                      : 1;       /**< Link Disable
49122                                                         Not applicable for an upstream Port or Endpoint device,
49123                                                         hardwired to 0. */
49124        uint32_t rcb                     : 1;       /**< Read Completion Boundary (RCB) */
49125        uint32_t reserved_2_2            : 1;
49126        uint32_t aslpc                   : 2;       /**< Active State Link PM Control */
49127#else
49128        uint32_t aslpc                   : 2;
49129        uint32_t reserved_2_2            : 1;
49130        uint32_t rcb                     : 1;
49131        uint32_t ld                      : 1;
49132        uint32_t rl                      : 1;
49133        uint32_t ccc                     : 1;
49134        uint32_t es                      : 1;
49135        uint32_t ecpm                    : 1;
49136        uint32_t hawd                    : 1;
49137        uint32_t reserved_10_15          : 6;
49138        uint32_t ls                      : 4;
49139        uint32_t nlw                     : 6;
49140        uint32_t reserved_26_26          : 1;
49141        uint32_t lt                      : 1;
49142        uint32_t scc                     : 1;
49143        uint32_t dlla                    : 1;
49144        uint32_t reserved_30_31          : 2;
49145#endif
49146    } s;
49147    struct cvmx_pcieep_cfg032_s          cn52xx;
49148    struct cvmx_pcieep_cfg032_s          cn52xxp1;
49149    struct cvmx_pcieep_cfg032_s          cn56xx;
49150    struct cvmx_pcieep_cfg032_s          cn56xxp1;
49151} cvmx_pcieep_cfg032_t;
49152
49153
49154/**
49155 * cvmx_pcieep_cfg033
49156 *
49157 * PCIE_CFG033 = Thirty-fourth 32-bits of PCIE type 0 config space
49158 * (Slot Capabilities Register)
49159 */
49160typedef union
49161{
49162    uint32_t u32;
49163    struct cvmx_pcieep_cfg033_s
49164    {
49165#if __BYTE_ORDER == __BIG_ENDIAN
49166        uint32_t ps_num                  : 13;      /**< Physical Slot Number, writable through the DBI
49167                                                         However, the application must not change this field. */
49168        uint32_t nccs                    : 1;       /**< No Command Complete Support, writable through the DBI
49169                                                         However, the application must not change this field. */
49170        uint32_t emip                    : 1;       /**< Electromechanical Interlock Present, writable through the DBI
49171                                                         However, the application must not change this field. */
49172        uint32_t sp_ls                   : 2;       /**< Slot Power Limit Scale, writable through the DBI
49173                                                         However, the application must not change this field. */
49174        uint32_t sp_lv                   : 8;       /**< Slot Power Limit Value, writable through the DBI
49175                                                         However, the application must not change this field. */
49176        uint32_t hp_c                    : 1;       /**< Hot-Plug Capable, writable through the DBI
49177                                                         However, the application must not change this field. */
49178        uint32_t hp_s                    : 1;       /**< Hot-Plug Surprise, writable through the DBI
49179                                                         However, the application must not change this field. */
49180        uint32_t pip                     : 1;       /**< Power Indicator Present, writable through the DBI
49181                                                         However, the application must not change this field. */
49182        uint32_t aip                     : 1;       /**< Attention Indicator Present, writable through the DBI
49183                                                         However, the application must not change this field. */
49184        uint32_t mrlsp                   : 1;       /**< MRL Sensor Present, writable through the DBI
49185                                                         However, the application must not change this field. */
49186        uint32_t pcp                     : 1;       /**< Power Controller Present, writable through the DBI
49187                                                         However, the application must not change this field. */
49188        uint32_t abp                     : 1;       /**< Attention Button Present, writable through the DBI
49189                                                         However, the application must not change this field. */
49190#else
49191        uint32_t abp                     : 1;
49192        uint32_t pcp                     : 1;
49193        uint32_t mrlsp                   : 1;
49194        uint32_t aip                     : 1;
49195        uint32_t pip                     : 1;
49196        uint32_t hp_s                    : 1;
49197        uint32_t hp_c                    : 1;
49198        uint32_t sp_lv                   : 8;
49199        uint32_t sp_ls                   : 2;
49200        uint32_t emip                    : 1;
49201        uint32_t nccs                    : 1;
49202        uint32_t ps_num                  : 13;
49203#endif
49204    } s;
49205    struct cvmx_pcieep_cfg033_s          cn52xx;
49206    struct cvmx_pcieep_cfg033_s          cn52xxp1;
49207    struct cvmx_pcieep_cfg033_s          cn56xx;
49208    struct cvmx_pcieep_cfg033_s          cn56xxp1;
49209} cvmx_pcieep_cfg033_t;
49210
49211
49212/**
49213 * cvmx_pcieep_cfg034
49214 *
49215 * PCIE_CFG034 = Thirty-fifth 32-bits of PCIE type 0 config space
49216 * (Slot Control Register/Slot Status Register)
49217 */
49218typedef union
49219{
49220    uint32_t u32;
49221    struct cvmx_pcieep_cfg034_s
49222    {
49223#if __BYTE_ORDER == __BIG_ENDIAN
49224        uint32_t reserved_25_31          : 7;
49225        uint32_t dlls_c                  : 1;       /**< Data Link Layer State Changed
49226                                                         Not applicable for an upstream Port or Endpoint device,
49227                                                         hardwired to 0. */
49228        uint32_t emis                    : 1;       /**< Electromechanical Interlock Status */
49229        uint32_t pds                     : 1;       /**< Presence Detect State */
49230        uint32_t mrlss                   : 1;       /**< MRL Sensor State */
49231        uint32_t ccint_d                 : 1;       /**< Command Completed */
49232        uint32_t pd_c                    : 1;       /**< Presence Detect Changed */
49233        uint32_t mrls_c                  : 1;       /**< MRL Sensor Changed */
49234        uint32_t pf_d                    : 1;       /**< Power Fault Detected */
49235        uint32_t abp_d                   : 1;       /**< Attention Button Pressed */
49236        uint32_t reserved_13_15          : 3;
49237        uint32_t dlls_en                 : 1;       /**< Data Link Layer State Changed Enable
49238                                                         Not applicable for an upstream Port or Endpoint device,
49239                                                         hardwired to 0. */
49240        uint32_t emic                    : 1;       /**< Electromechanical Interlock Control */
49241        uint32_t pcc                     : 1;       /**< Power Controller Control */
49242        uint32_t pic                     : 2;       /**< Power Indicator Control */
49243        uint32_t aic                     : 2;       /**< Attention Indicator Control */
49244        uint32_t hpint_en                : 1;       /**< Hot-Plug Interrupt Enable */
49245        uint32_t ccint_en                : 1;       /**< Command Completed Interrupt Enable */
49246        uint32_t pd_en                   : 1;       /**< Presence Detect Changed Enable */
49247        uint32_t mrls_en                 : 1;       /**< MRL Sensor Changed Enable */
49248        uint32_t pf_en                   : 1;       /**< Power Fault Detected Enable */
49249        uint32_t abp_en                  : 1;       /**< Attention Button Pressed Enable */
49250#else
49251        uint32_t abp_en                  : 1;
49252        uint32_t pf_en                   : 1;
49253        uint32_t mrls_en                 : 1;
49254        uint32_t pd_en                   : 1;
49255        uint32_t ccint_en                : 1;
49256        uint32_t hpint_en                : 1;
49257        uint32_t aic                     : 2;
49258        uint32_t pic                     : 2;
49259        uint32_t pcc                     : 1;
49260        uint32_t emic                    : 1;
49261        uint32_t dlls_en                 : 1;
49262        uint32_t reserved_13_15          : 3;
49263        uint32_t abp_d                   : 1;
49264        uint32_t pf_d                    : 1;
49265        uint32_t mrls_c                  : 1;
49266        uint32_t pd_c                    : 1;
49267        uint32_t ccint_d                 : 1;
49268        uint32_t mrlss                   : 1;
49269        uint32_t pds                     : 1;
49270        uint32_t emis                    : 1;
49271        uint32_t dlls_c                  : 1;
49272        uint32_t reserved_25_31          : 7;
49273#endif
49274    } s;
49275    struct cvmx_pcieep_cfg034_s          cn52xx;
49276    struct cvmx_pcieep_cfg034_s          cn52xxp1;
49277    struct cvmx_pcieep_cfg034_s          cn56xx;
49278    struct cvmx_pcieep_cfg034_s          cn56xxp1;
49279} cvmx_pcieep_cfg034_t;
49280
49281
49282/**
49283 * cvmx_pcieep_cfg037
49284 *
49285 * PCIE_CFG037 = Thirty-eighth 32-bits of PCIE type 0 config space
49286 * (Device Capabilities 2 Register)
49287 */
49288typedef union
49289{
49290    uint32_t u32;
49291    struct cvmx_pcieep_cfg037_s
49292    {
49293#if __BYTE_ORDER == __BIG_ENDIAN
49294        uint32_t reserved_5_31           : 27;
49295        uint32_t ctds                    : 1;       /**< Completion Timeout Disable Supported */
49296        uint32_t ctrs                    : 4;       /**< Completion Timeout Ranges Supported
49297                                                         Value of 0 indicates that Completion Timeout Programming
49298                                                         is not supported
49299                                                         Completion timeout is 16.7ms. */
49300#else
49301        uint32_t ctrs                    : 4;
49302        uint32_t ctds                    : 1;
49303        uint32_t reserved_5_31           : 27;
49304#endif
49305    } s;
49306    struct cvmx_pcieep_cfg037_s          cn52xx;
49307    struct cvmx_pcieep_cfg037_s          cn52xxp1;
49308    struct cvmx_pcieep_cfg037_s          cn56xx;
49309    struct cvmx_pcieep_cfg037_s          cn56xxp1;
49310} cvmx_pcieep_cfg037_t;
49311
49312
49313/**
49314 * cvmx_pcieep_cfg038
49315 *
49316 * PCIE_CFG038 = Thirty-ninth 32-bits of PCIE type 0 config space
49317 * (Device Control 2 Register/Device Status 2 Register)
49318 */
49319typedef union
49320{
49321    uint32_t u32;
49322    struct cvmx_pcieep_cfg038_s
49323    {
49324#if __BYTE_ORDER == __BIG_ENDIAN
49325        uint32_t reserved_5_31           : 27;
49326        uint32_t ctd                     : 1;       /**< Completion Timeout Disable */
49327        uint32_t ctv                     : 4;       /**< Completion Timeout Value
49328                                                         Completion Timeout Programming is not supported
49329                                                         Completion timeout is 16.7ms. */
49330#else
49331        uint32_t ctv                     : 4;
49332        uint32_t ctd                     : 1;
49333        uint32_t reserved_5_31           : 27;
49334#endif
49335    } s;
49336    struct cvmx_pcieep_cfg038_s          cn52xx;
49337    struct cvmx_pcieep_cfg038_s          cn52xxp1;
49338    struct cvmx_pcieep_cfg038_s          cn56xx;
49339    struct cvmx_pcieep_cfg038_s          cn56xxp1;
49340} cvmx_pcieep_cfg038_t;
49341
49342
49343/**
49344 * cvmx_pcieep_cfg039
49345 *
49346 * PCIE_CFG039 = Fourtieth 32-bits of PCIE type 0 config space
49347 * (Link Capabilities 2 Register)
49348 */
49349typedef union
49350{
49351    uint32_t u32;
49352    struct cvmx_pcieep_cfg039_s
49353    {
49354#if __BYTE_ORDER == __BIG_ENDIAN
49355        uint32_t reserved_0_31           : 32;
49356#else
49357        uint32_t reserved_0_31           : 32;
49358#endif
49359    } s;
49360    struct cvmx_pcieep_cfg039_s          cn52xx;
49361    struct cvmx_pcieep_cfg039_s          cn52xxp1;
49362    struct cvmx_pcieep_cfg039_s          cn56xx;
49363    struct cvmx_pcieep_cfg039_s          cn56xxp1;
49364} cvmx_pcieep_cfg039_t;
49365
49366
49367/**
49368 * cvmx_pcieep_cfg040
49369 *
49370 * PCIE_CFG040 = Fourty-first 32-bits of PCIE type 0 config space
49371 * (Link Control 2 Register/Link Status 2 Register)
49372 */
49373typedef union
49374{
49375    uint32_t u32;
49376    struct cvmx_pcieep_cfg040_s
49377    {
49378#if __BYTE_ORDER == __BIG_ENDIAN
49379        uint32_t reserved_0_31           : 32;
49380#else
49381        uint32_t reserved_0_31           : 32;
49382#endif
49383    } s;
49384    struct cvmx_pcieep_cfg040_s          cn52xx;
49385    struct cvmx_pcieep_cfg040_s          cn52xxp1;
49386    struct cvmx_pcieep_cfg040_s          cn56xx;
49387    struct cvmx_pcieep_cfg040_s          cn56xxp1;
49388} cvmx_pcieep_cfg040_t;
49389
49390
49391/**
49392 * cvmx_pcieep_cfg041
49393 *
49394 * PCIE_CFG041 = Fourty-second 32-bits of PCIE type 0 config space
49395 * (Slot Capabilities 2 Register)
49396 */
49397typedef union
49398{
49399    uint32_t u32;
49400    struct cvmx_pcieep_cfg041_s
49401    {
49402#if __BYTE_ORDER == __BIG_ENDIAN
49403        uint32_t reserved_0_31           : 32;
49404#else
49405        uint32_t reserved_0_31           : 32;
49406#endif
49407    } s;
49408    struct cvmx_pcieep_cfg041_s          cn52xx;
49409    struct cvmx_pcieep_cfg041_s          cn52xxp1;
49410    struct cvmx_pcieep_cfg041_s          cn56xx;
49411    struct cvmx_pcieep_cfg041_s          cn56xxp1;
49412} cvmx_pcieep_cfg041_t;
49413
49414
49415/**
49416 * cvmx_pcieep_cfg042
49417 *
49418 * PCIE_CFG042 = Fourty-third 32-bits of PCIE type 0 config space
49419 * (Slot Control 2 Register/Slot Status 2 Register)
49420 */
49421typedef union
49422{
49423    uint32_t u32;
49424    struct cvmx_pcieep_cfg042_s
49425    {
49426#if __BYTE_ORDER == __BIG_ENDIAN
49427        uint32_t reserved_0_31           : 32;
49428#else
49429        uint32_t reserved_0_31           : 32;
49430#endif
49431    } s;
49432    struct cvmx_pcieep_cfg042_s          cn52xx;
49433    struct cvmx_pcieep_cfg042_s          cn52xxp1;
49434    struct cvmx_pcieep_cfg042_s          cn56xx;
49435    struct cvmx_pcieep_cfg042_s          cn56xxp1;
49436} cvmx_pcieep_cfg042_t;
49437
49438
49439/**
49440 * cvmx_pcieep_cfg064
49441 *
49442 * PCIE_CFG064 = Sixty-fifth 32-bits of PCIE type 0 config space
49443 * (PCI Express Enhanced Capability Header)
49444 */
49445typedef union
49446{
49447    uint32_t u32;
49448    struct cvmx_pcieep_cfg064_s
49449    {
49450#if __BYTE_ORDER == __BIG_ENDIAN
49451        uint32_t nco                     : 12;      /**< Next Capability Offset */
49452        uint32_t cv                      : 4;       /**< Capability Version */
49453        uint32_t pcieec                  : 16;      /**< PCIE Express Extended Capability */
49454#else
49455        uint32_t pcieec                  : 16;
49456        uint32_t cv                      : 4;
49457        uint32_t nco                     : 12;
49458#endif
49459    } s;
49460    struct cvmx_pcieep_cfg064_s          cn52xx;
49461    struct cvmx_pcieep_cfg064_s          cn52xxp1;
49462    struct cvmx_pcieep_cfg064_s          cn56xx;
49463    struct cvmx_pcieep_cfg064_s          cn56xxp1;
49464} cvmx_pcieep_cfg064_t;
49465
49466
49467/**
49468 * cvmx_pcieep_cfg065
49469 *
49470 * PCIE_CFG065 = Sixty-sixth 32-bits of PCIE type 0 config space
49471 * (Uncorrectable Error Status Register)
49472 */
49473typedef union
49474{
49475    uint32_t u32;
49476    struct cvmx_pcieep_cfg065_s
49477    {
49478#if __BYTE_ORDER == __BIG_ENDIAN
49479        uint32_t reserved_21_31          : 11;
49480        uint32_t ures                    : 1;       /**< Unsupported Request Error Status */
49481        uint32_t ecrces                  : 1;       /**< ECRC Error Status */
49482        uint32_t mtlps                   : 1;       /**< Malformed TLP Status */
49483        uint32_t ros                     : 1;       /**< Receiver Overflow Status */
49484        uint32_t ucs                     : 1;       /**< Unexpected Completion Status */
49485        uint32_t cas                     : 1;       /**< Completer Abort Status */
49486        uint32_t cts                     : 1;       /**< Completion Timeout Status */
49487        uint32_t fcpes                   : 1;       /**< Flow Control Protocol Error Status */
49488        uint32_t ptlps                   : 1;       /**< Poisoned TLP Status */
49489        uint32_t reserved_6_11           : 6;
49490        uint32_t sdes                    : 1;       /**< Surprise Down Error Status (not supported) */
49491        uint32_t dlpes                   : 1;       /**< Data Link Protocol Error Status */
49492        uint32_t reserved_0_3            : 4;
49493#else
49494        uint32_t reserved_0_3            : 4;
49495        uint32_t dlpes                   : 1;
49496        uint32_t sdes                    : 1;
49497        uint32_t reserved_6_11           : 6;
49498        uint32_t ptlps                   : 1;
49499        uint32_t fcpes                   : 1;
49500        uint32_t cts                     : 1;
49501        uint32_t cas                     : 1;
49502        uint32_t ucs                     : 1;
49503        uint32_t ros                     : 1;
49504        uint32_t mtlps                   : 1;
49505        uint32_t ecrces                  : 1;
49506        uint32_t ures                    : 1;
49507        uint32_t reserved_21_31          : 11;
49508#endif
49509    } s;
49510    struct cvmx_pcieep_cfg065_s          cn52xx;
49511    struct cvmx_pcieep_cfg065_s          cn52xxp1;
49512    struct cvmx_pcieep_cfg065_s          cn56xx;
49513    struct cvmx_pcieep_cfg065_s          cn56xxp1;
49514} cvmx_pcieep_cfg065_t;
49515
49516
49517/**
49518 * cvmx_pcieep_cfg066
49519 *
49520 * PCIE_CFG066 = Sixty-seventh 32-bits of PCIE type 0 config space
49521 * (Uncorrectable Error Mask Register)
49522 */
49523typedef union
49524{
49525    uint32_t u32;
49526    struct cvmx_pcieep_cfg066_s
49527    {
49528#if __BYTE_ORDER == __BIG_ENDIAN
49529        uint32_t reserved_21_31          : 11;
49530        uint32_t urem                    : 1;       /**< Unsupported Request Error Mask */
49531        uint32_t ecrcem                  : 1;       /**< ECRC Error Mask */
49532        uint32_t mtlpm                   : 1;       /**< Malformed TLP Mask */
49533        uint32_t rom                     : 1;       /**< Receiver Overflow Mask */
49534        uint32_t ucm                     : 1;       /**< Unexpected Completion Mask */
49535        uint32_t cam                     : 1;       /**< Completer Abort Mask */
49536        uint32_t ctm                     : 1;       /**< Completion Timeout Mask */
49537        uint32_t fcpem                   : 1;       /**< Flow Control Protocol Error Mask */
49538        uint32_t ptlpm                   : 1;       /**< Poisoned TLP Mask */
49539        uint32_t reserved_6_11           : 6;
49540        uint32_t sdem                    : 1;       /**< Surprise Down Error Mask (not supported) */
49541        uint32_t dlpem                   : 1;       /**< Data Link Protocol Error Mask */
49542        uint32_t reserved_0_3            : 4;
49543#else
49544        uint32_t reserved_0_3            : 4;
49545        uint32_t dlpem                   : 1;
49546        uint32_t sdem                    : 1;
49547        uint32_t reserved_6_11           : 6;
49548        uint32_t ptlpm                   : 1;
49549        uint32_t fcpem                   : 1;
49550        uint32_t ctm                     : 1;
49551        uint32_t cam                     : 1;
49552        uint32_t ucm                     : 1;
49553        uint32_t rom                     : 1;
49554        uint32_t mtlpm                   : 1;
49555        uint32_t ecrcem                  : 1;
49556        uint32_t urem                    : 1;
49557        uint32_t reserved_21_31          : 11;
49558#endif
49559    } s;
49560    struct cvmx_pcieep_cfg066_s          cn52xx;
49561    struct cvmx_pcieep_cfg066_s          cn52xxp1;
49562    struct cvmx_pcieep_cfg066_s          cn56xx;
49563    struct cvmx_pcieep_cfg066_s          cn56xxp1;
49564} cvmx_pcieep_cfg066_t;
49565
49566
49567/**
49568 * cvmx_pcieep_cfg067
49569 *
49570 * PCIE_CFG067 = Sixty-eighth 32-bits of PCIE type 0 config space
49571 * (Uncorrectable Error Severity Register)
49572 */
49573typedef union
49574{
49575    uint32_t u32;
49576    struct cvmx_pcieep_cfg067_s
49577    {
49578#if __BYTE_ORDER == __BIG_ENDIAN
49579        uint32_t reserved_21_31          : 11;
49580        uint32_t ures                    : 1;       /**< Unsupported Request Error Severity */
49581        uint32_t ecrces                  : 1;       /**< ECRC Error Severity */
49582        uint32_t mtlps                   : 1;       /**< Malformed TLP Severity */
49583        uint32_t ros                     : 1;       /**< Receiver Overflow Severity */
49584        uint32_t ucs                     : 1;       /**< Unexpected Completion Severity */
49585        uint32_t cas                     : 1;       /**< Completer Abort Severity */
49586        uint32_t cts                     : 1;       /**< Completion Timeout Severity */
49587        uint32_t fcpes                   : 1;       /**< Flow Control Protocol Error Severity */
49588        uint32_t ptlps                   : 1;       /**< Poisoned TLP Severity */
49589        uint32_t reserved_6_11           : 6;
49590        uint32_t sdes                    : 1;       /**< Surprise Down Error Severity (not supported) */
49591        uint32_t dlpes                   : 1;       /**< Data Link Protocol Error Severity */
49592        uint32_t reserved_0_3            : 4;
49593#else
49594        uint32_t reserved_0_3            : 4;
49595        uint32_t dlpes                   : 1;
49596        uint32_t sdes                    : 1;
49597        uint32_t reserved_6_11           : 6;
49598        uint32_t ptlps                   : 1;
49599        uint32_t fcpes                   : 1;
49600        uint32_t cts                     : 1;
49601        uint32_t cas                     : 1;
49602        uint32_t ucs                     : 1;
49603        uint32_t ros                     : 1;
49604        uint32_t mtlps                   : 1;
49605        uint32_t ecrces                  : 1;
49606        uint32_t ures                    : 1;
49607        uint32_t reserved_21_31          : 11;
49608#endif
49609    } s;
49610    struct cvmx_pcieep_cfg067_s          cn52xx;
49611    struct cvmx_pcieep_cfg067_s          cn52xxp1;
49612    struct cvmx_pcieep_cfg067_s          cn56xx;
49613    struct cvmx_pcieep_cfg067_s          cn56xxp1;
49614} cvmx_pcieep_cfg067_t;
49615
49616
49617/**
49618 * cvmx_pcieep_cfg068
49619 *
49620 * PCIE_CFG068 = Sixty-ninth 32-bits of PCIE type 0 config space
49621 * (Correctable Error Status Register)
49622 */
49623typedef union
49624{
49625    uint32_t u32;
49626    struct cvmx_pcieep_cfg068_s
49627    {
49628#if __BYTE_ORDER == __BIG_ENDIAN
49629        uint32_t reserved_14_31          : 18;
49630        uint32_t anfes                   : 1;       /**< Advisory Non-Fatal Error Status */
49631        uint32_t rtts                    : 1;       /**< Reply Timer Timeout Status */
49632        uint32_t reserved_9_11           : 3;
49633        uint32_t rnrs                    : 1;       /**< REPLAY_NUM Rollover Status */
49634        uint32_t bdllps                  : 1;       /**< Bad DLLP Status */
49635        uint32_t btlps                   : 1;       /**< Bad TLP Status */
49636        uint32_t reserved_1_5            : 5;
49637        uint32_t res                     : 1;       /**< Receiver Error Status */
49638#else
49639        uint32_t res                     : 1;
49640        uint32_t reserved_1_5            : 5;
49641        uint32_t btlps                   : 1;
49642        uint32_t bdllps                  : 1;
49643        uint32_t rnrs                    : 1;
49644        uint32_t reserved_9_11           : 3;
49645        uint32_t rtts                    : 1;
49646        uint32_t anfes                   : 1;
49647        uint32_t reserved_14_31          : 18;
49648#endif
49649    } s;
49650    struct cvmx_pcieep_cfg068_s          cn52xx;
49651    struct cvmx_pcieep_cfg068_s          cn52xxp1;
49652    struct cvmx_pcieep_cfg068_s          cn56xx;
49653    struct cvmx_pcieep_cfg068_s          cn56xxp1;
49654} cvmx_pcieep_cfg068_t;
49655
49656
49657/**
49658 * cvmx_pcieep_cfg069
49659 *
49660 * PCIE_CFG069 = Seventieth 32-bits of PCIE type 0 config space
49661 * (Correctable Error Mask Register)
49662 */
49663typedef union
49664{
49665    uint32_t u32;
49666    struct cvmx_pcieep_cfg069_s
49667    {
49668#if __BYTE_ORDER == __BIG_ENDIAN
49669        uint32_t reserved_14_31          : 18;
49670        uint32_t anfem                   : 1;       /**< Advisory Non-Fatal Error Mask */
49671        uint32_t rttm                    : 1;       /**< Reply Timer Timeout Mask */
49672        uint32_t reserved_9_11           : 3;
49673        uint32_t rnrm                    : 1;       /**< REPLAY_NUM Rollover Mask */
49674        uint32_t bdllpm                  : 1;       /**< Bad DLLP Mask */
49675        uint32_t btlpm                   : 1;       /**< Bad TLP Mask */
49676        uint32_t reserved_1_5            : 5;
49677        uint32_t rem                     : 1;       /**< Receiver Error Mask */
49678#else
49679        uint32_t rem                     : 1;
49680        uint32_t reserved_1_5            : 5;
49681        uint32_t btlpm                   : 1;
49682        uint32_t bdllpm                  : 1;
49683        uint32_t rnrm                    : 1;
49684        uint32_t reserved_9_11           : 3;
49685        uint32_t rttm                    : 1;
49686        uint32_t anfem                   : 1;
49687        uint32_t reserved_14_31          : 18;
49688#endif
49689    } s;
49690    struct cvmx_pcieep_cfg069_s          cn52xx;
49691    struct cvmx_pcieep_cfg069_s          cn52xxp1;
49692    struct cvmx_pcieep_cfg069_s          cn56xx;
49693    struct cvmx_pcieep_cfg069_s          cn56xxp1;
49694} cvmx_pcieep_cfg069_t;
49695
49696
49697/**
49698 * cvmx_pcieep_cfg070
49699 *
49700 * PCIE_CFG070 = Seventy-first 32-bits of PCIE type 0 config space
49701 * (Advanced Error Capabilities and Control Register)
49702 */
49703typedef union
49704{
49705    uint32_t u32;
49706    struct cvmx_pcieep_cfg070_s
49707    {
49708#if __BYTE_ORDER == __BIG_ENDIAN
49709        uint32_t reserved_9_31           : 23;
49710        uint32_t ce                      : 1;       /**< ECRC Check Enable */
49711        uint32_t cc                      : 1;       /**< ECRC Check Capable */
49712        uint32_t ge                      : 1;       /**< ECRC Generation Enable */
49713        uint32_t gc                      : 1;       /**< ECRC Generation Capability */
49714        uint32_t fep                     : 5;       /**< First Error Pointer */
49715#else
49716        uint32_t fep                     : 5;
49717        uint32_t gc                      : 1;
49718        uint32_t ge                      : 1;
49719        uint32_t cc                      : 1;
49720        uint32_t ce                      : 1;
49721        uint32_t reserved_9_31           : 23;
49722#endif
49723    } s;
49724    struct cvmx_pcieep_cfg070_s          cn52xx;
49725    struct cvmx_pcieep_cfg070_s          cn52xxp1;
49726    struct cvmx_pcieep_cfg070_s          cn56xx;
49727    struct cvmx_pcieep_cfg070_s          cn56xxp1;
49728} cvmx_pcieep_cfg070_t;
49729
49730
49731/**
49732 * cvmx_pcieep_cfg071
49733 *
49734 * PCIE_CFG071 = Seventy-second 32-bits of PCIE type 0 config space
49735 * (Header Log Register 1)
49736 */
49737typedef union
49738{
49739    uint32_t u32;
49740    struct cvmx_pcieep_cfg071_s
49741    {
49742#if __BYTE_ORDER == __BIG_ENDIAN
49743        uint32_t dword1                  : 32;      /**< Header Log Register (first DWORD) */
49744#else
49745        uint32_t dword1                  : 32;
49746#endif
49747    } s;
49748    struct cvmx_pcieep_cfg071_s          cn52xx;
49749    struct cvmx_pcieep_cfg071_s          cn52xxp1;
49750    struct cvmx_pcieep_cfg071_s          cn56xx;
49751    struct cvmx_pcieep_cfg071_s          cn56xxp1;
49752} cvmx_pcieep_cfg071_t;
49753
49754
49755/**
49756 * cvmx_pcieep_cfg072
49757 *
49758 * PCIE_CFG072 = Seventy-third 32-bits of PCIE type 0 config space
49759 * (Header Log Register 2)
49760 */
49761typedef union
49762{
49763    uint32_t u32;
49764    struct cvmx_pcieep_cfg072_s
49765    {
49766#if __BYTE_ORDER == __BIG_ENDIAN
49767        uint32_t dword2                  : 32;      /**< Header Log Register (second DWORD) */
49768#else
49769        uint32_t dword2                  : 32;
49770#endif
49771    } s;
49772    struct cvmx_pcieep_cfg072_s          cn52xx;
49773    struct cvmx_pcieep_cfg072_s          cn52xxp1;
49774    struct cvmx_pcieep_cfg072_s          cn56xx;
49775    struct cvmx_pcieep_cfg072_s          cn56xxp1;
49776} cvmx_pcieep_cfg072_t;
49777
49778
49779/**
49780 * cvmx_pcieep_cfg073
49781 *
49782 * PCIE_CFG073 = Seventy-fourth 32-bits of PCIE type 0 config space
49783 * (Header Log Register 3)
49784 */
49785typedef union
49786{
49787    uint32_t u32;
49788    struct cvmx_pcieep_cfg073_s
49789    {
49790#if __BYTE_ORDER == __BIG_ENDIAN
49791        uint32_t dword3                  : 32;      /**< Header Log Register (third DWORD) */
49792#else
49793        uint32_t dword3                  : 32;
49794#endif
49795    } s;
49796    struct cvmx_pcieep_cfg073_s          cn52xx;
49797    struct cvmx_pcieep_cfg073_s          cn52xxp1;
49798    struct cvmx_pcieep_cfg073_s          cn56xx;
49799    struct cvmx_pcieep_cfg073_s          cn56xxp1;
49800} cvmx_pcieep_cfg073_t;
49801
49802
49803/**
49804 * cvmx_pcieep_cfg074
49805 *
49806 * PCIE_CFG074 = Seventy-fifth 32-bits of PCIE type 0 config space
49807 * (Header Log Register 4)
49808 */
49809typedef union
49810{
49811    uint32_t u32;
49812    struct cvmx_pcieep_cfg074_s
49813    {
49814#if __BYTE_ORDER == __BIG_ENDIAN
49815        uint32_t dword4                  : 32;      /**< Header Log Register (fourth DWORD) */
49816#else
49817        uint32_t dword4                  : 32;
49818#endif
49819    } s;
49820    struct cvmx_pcieep_cfg074_s          cn52xx;
49821    struct cvmx_pcieep_cfg074_s          cn52xxp1;
49822    struct cvmx_pcieep_cfg074_s          cn56xx;
49823    struct cvmx_pcieep_cfg074_s          cn56xxp1;
49824} cvmx_pcieep_cfg074_t;
49825
49826
49827/**
49828 * cvmx_pcieep_cfg448
49829 *
49830 * PCIE_CFG448 = Four hundred forty-ninth 32-bits of PCIE type 0 config space
49831 * (Ack Latency Timer and Replay Timer Register)
49832 */
49833typedef union
49834{
49835    uint32_t u32;
49836    struct cvmx_pcieep_cfg448_s
49837    {
49838#if __BYTE_ORDER == __BIG_ENDIAN
49839        uint32_t rtl                     : 16;      /**< Replay Time Limit
49840                                                         The replay timer expires when it reaches this limit. The PCI
49841                                                         Express bus initiates a replay upon reception of a Nak or when
49842                                                         the replay timer expires.
49843                                                         The default is then updated based on the Negotiated Link Width
49844                                                         and Max_Payload_Size. */
49845        uint32_t rtltl                   : 16;      /**< Round Trip Latency Time Limit
49846                                                         The Ack/Nak latency timer expires when it reaches this limit.
49847                                                         The default is then updated based on the Negotiated Link Width
49848                                                         and Max_Payload_Size. */
49849#else
49850        uint32_t rtltl                   : 16;
49851        uint32_t rtl                     : 16;
49852#endif
49853    } s;
49854    struct cvmx_pcieep_cfg448_s          cn52xx;
49855    struct cvmx_pcieep_cfg448_s          cn52xxp1;
49856    struct cvmx_pcieep_cfg448_s          cn56xx;
49857    struct cvmx_pcieep_cfg448_s          cn56xxp1;
49858} cvmx_pcieep_cfg448_t;
49859
49860
49861/**
49862 * cvmx_pcieep_cfg449
49863 *
49864 * PCIE_CFG449 = Four hundred fiftieth 32-bits of PCIE type 0 config space
49865 * (Other Message Register)
49866 */
49867typedef union
49868{
49869    uint32_t u32;
49870    struct cvmx_pcieep_cfg449_s
49871    {
49872#if __BYTE_ORDER == __BIG_ENDIAN
49873        uint32_t omr                     : 32;      /**< Other Message Register
49874                                                         This register can be used for either of the following purposes:
49875                                                         o To send a specific PCI Express Message, the application
49876                                                           writes the payload of the Message into this register, then
49877                                                           sets bit 0 of the Port Link Control Register to send the
49878                                                           Message.
49879                                                         o To store a corruption pattern for corrupting the LCRC on all
49880                                                           TLPs, the application places a 32-bit corruption pattern into
49881                                                           this register and enables this function by setting bit 25 of
49882                                                           the Port Link Control Register. When enabled, the transmit
49883                                                           LCRC result is XOR'd with this pattern before inserting
49884                                                           it into the packet. */
49885#else
49886        uint32_t omr                     : 32;
49887#endif
49888    } s;
49889    struct cvmx_pcieep_cfg449_s          cn52xx;
49890    struct cvmx_pcieep_cfg449_s          cn52xxp1;
49891    struct cvmx_pcieep_cfg449_s          cn56xx;
49892    struct cvmx_pcieep_cfg449_s          cn56xxp1;
49893} cvmx_pcieep_cfg449_t;
49894
49895
49896/**
49897 * cvmx_pcieep_cfg450
49898 *
49899 * PCIE_CFG450 = Four hundred fifty-first 32-bits of PCIE type 0 config space
49900 * (Port Force Link Register)
49901 */
49902typedef union
49903{
49904    uint32_t u32;
49905    struct cvmx_pcieep_cfg450_s
49906    {
49907#if __BYTE_ORDER == __BIG_ENDIAN
49908        uint32_t lpec                    : 8;       /**< Low Power Entrance Count
49909                                                         The Power Management state will wait for this many clock cycles
49910                                                         for the associated completion of a CfgWr to PCIE_CFG017 register
49911                                                         Power State (PS) field register to go low-power. This register
49912                                                         is intended for applications that do not let the PCI Express
49913                                                         bus handle a completion for configuration request to the
49914                                                         Power Management Control and Status (PCIE_CFG017) register. */
49915        uint32_t reserved_22_23          : 2;
49916        uint32_t link_state              : 6;       /**< Link State
49917                                                         The Link state that the PCI Express Bus will be forced to
49918                                                         when bit 15 (Force Link) is set.
49919                                                         State encoding:
49920                                                         o DETECT_QUIET              00h
49921                                                         o DETECT_ACT                01h
49922                                                         o POLL_ACTIVE               02h
49923                                                         o POLL_COMPLIANCE           03h
49924                                                         o POLL_CONFIG               04h
49925                                                         o PRE_DETECT_QUIET          05h
49926                                                         o DETECT_WAIT               06h
49927                                                         o CFG_LINKWD_START          07h
49928                                                         o CFG_LINKWD_ACEPT          08h
49929                                                         o CFG_LANENUM_WAIT          09h
49930                                                         o CFG_LANENUM_ACEPT         0Ah
49931                                                         o CFG_COMPLETE              0Bh
49932                                                         o CFG_IDLE                  0Ch
49933                                                         o RCVRY_LOCK                0Dh
49934                                                         o RCVRY_SPEED               0Eh
49935                                                         o RCVRY_RCVRCFG             0Fh
49936                                                         o RCVRY_IDLE                10h
49937                                                         o L0                        11h
49938                                                         o L0S                       12h
49939                                                         o L123_SEND_EIDLE           13h
49940                                                         o L1_IDLE                   14h
49941                                                         o L2_IDLE                   15h
49942                                                         o L2_WAKE                   16h
49943                                                         o DISABLED_ENTRY            17h
49944                                                         o DISABLED_IDLE             18h
49945                                                         o DISABLED                  19h
49946                                                         o LPBK_ENTRY                1Ah
49947                                                         o LPBK_ACTIVE               1Bh
49948                                                         o LPBK_EXIT                 1Ch
49949                                                         o LPBK_EXIT_TIMEOUT         1Dh
49950                                                         o HOT_RESET_ENTRY           1Eh
49951                                                         o HOT_RESET                 1Fh */
49952        uint32_t force_link              : 1;       /**< Force Link
49953                                                         Forces the Link to the state specified by the Link State field.
49954                                                         The Force Link pulse will trigger Link re-negotiation.
49955                                                         * As the The Force Link is a pulse, writing a 1 to it does
49956                                                           trigger the forced link state event, even thought reading it
49957                                                           always returns a 0. */
49958        uint32_t reserved_8_14           : 7;
49959        uint32_t link_num                : 8;       /**< Link Number
49960                                                         Not used for Endpoint */
49961#else
49962        uint32_t link_num                : 8;
49963        uint32_t reserved_8_14           : 7;
49964        uint32_t force_link              : 1;
49965        uint32_t link_state              : 6;
49966        uint32_t reserved_22_23          : 2;
49967        uint32_t lpec                    : 8;
49968#endif
49969    } s;
49970    struct cvmx_pcieep_cfg450_s          cn52xx;
49971    struct cvmx_pcieep_cfg450_s          cn52xxp1;
49972    struct cvmx_pcieep_cfg450_s          cn56xx;
49973    struct cvmx_pcieep_cfg450_s          cn56xxp1;
49974} cvmx_pcieep_cfg450_t;
49975
49976
49977/**
49978 * cvmx_pcieep_cfg451
49979 *
49980 * PCIE_CFG451 = Four hundred fifty-second 32-bits of PCIE type 0 config space
49981 * (Ack Frequency Register)
49982 */
49983typedef union
49984{
49985    uint32_t u32;
49986    struct cvmx_pcieep_cfg451_s
49987    {
49988#if __BYTE_ORDER == __BIG_ENDIAN
49989        uint32_t reserved_30_31          : 2;
49990        uint32_t l1el                    : 3;       /**< L1 Entrance Latency
49991                                                         Values correspond to:
49992                                                         o 000: 1 ms
49993                                                         o 001: 2 ms
49994                                                         o 010: 4 ms
49995                                                         o 011: 8 ms
49996                                                         o 100: 16 ms
49997                                                         o 101: 32 ms
49998                                                         o 110 or 111: 64 ms */
49999        uint32_t l0el                    : 3;       /**< L0s Entrance Latency
50000                                                         Values correspond to:
50001                                                         o 000: 1 ms
50002                                                         o 001: 2 ms
50003                                                         o 010: 3 ms
50004                                                         o 011: 4 ms
50005                                                         o 100: 5 ms
50006                                                         o 101: 6 ms
50007                                                         o 110 or 111: 7 ms */
50008        uint32_t n_fts_cc                : 8;       /**< N_FTS when common clock is used.
50009                                                         The number of Fast Training Sequence ordered sets to be
50010                                                         transmitted when transitioning from L0s to L0. The maximum
50011                                                         number of FTS ordered-sets that a component can request is 255.
50012                                                          Note: A value of zero is not supported; a value of
50013                                                                zero can cause the LTSSM to go into the recovery state
50014                                                                when exiting from L0s. */
50015        uint32_t n_fts                   : 8;       /**< N_FTS
50016                                                         The number of Fast Training Sequence ordered sets to be
50017                                                         transmitted when transitioning from L0s to L0. The maximum
50018                                                         number of FTS ordered-sets that a component can request is 255.
50019                                                         Note: A value of zero is not supported; a value of
50020                                                               zero can cause the LTSSM to go into the recovery state
50021                                                               when exiting from L0s. */
50022        uint32_t ack_freq                : 8;       /**< Ack Frequency
50023                                                         The number of pending Ack's specified here (up to 255) before
50024                                                         sending an Ack. */
50025#else
50026        uint32_t ack_freq                : 8;
50027        uint32_t n_fts                   : 8;
50028        uint32_t n_fts_cc                : 8;
50029        uint32_t l0el                    : 3;
50030        uint32_t l1el                    : 3;
50031        uint32_t reserved_30_31          : 2;
50032#endif
50033    } s;
50034    struct cvmx_pcieep_cfg451_s          cn52xx;
50035    struct cvmx_pcieep_cfg451_s          cn52xxp1;
50036    struct cvmx_pcieep_cfg451_s          cn56xx;
50037    struct cvmx_pcieep_cfg451_s          cn56xxp1;
50038} cvmx_pcieep_cfg451_t;
50039
50040
50041/**
50042 * cvmx_pcieep_cfg452
50043 *
50044 * PCIE_CFG452 = Four hundred fifty-third 32-bits of PCIE type 0 config space
50045 * (Port Link Control Register)
50046 */
50047typedef union
50048{
50049    uint32_t u32;
50050    struct cvmx_pcieep_cfg452_s
50051    {
50052#if __BYTE_ORDER == __BIG_ENDIAN
50053        uint32_t reserved_26_31          : 6;
50054        uint32_t eccrc                   : 1;       /**< Enable Corrupted CRC
50055                                                         Causes corrupt LCRC for TLPs when set,
50056                                                         using the pattern contained in the Other Message register.
50057                                                         This is a test feature, not to be used in normal operation. */
50058        uint32_t reserved_22_24          : 3;
50059        uint32_t lme                     : 6;       /**< Link Mode Enable
50060                                                         o 000001: x1
50061                                                         o 000011: x2
50062                                                         o 000111: x4
50063                                                         o 001111: x8
50064                                                         o 011111: x16 (not supported)
50065                                                         o 111111: x32 (not supported)
50066                                                         This field indicates the MAXIMUM number of lanes supported
50067                                                         by the PCIe port. It is set to 0xF or 0x7 depending
50068                                                         on the value of the QLM_CFG bits (0xF when QLM_CFG == 0
50069                                                         otherwise 0x7). The value can be set less than 0xF or 0x7
50070                                                         to limit the number of lanes the PCIe will attempt to use.
50071                                                         If the value of 0xF or 0x7 set by the HW is not desired,
50072                                                         this field can be programmed to a smaller value (i.e. EEPROM)
50073                                                         See also MLW.
50074                                                         (Note: The value of this field does NOT indicate the number
50075                                                          of lanes in use by the PCIe. LME sets the max number of lanes
50076                                                          in the PCIe core that COULD be used. As per the PCIe specs,
50077                                                          the PCIe core can negotiate a smaller link width, so all
50078                                                          of x8, x4, x2, and x1 are supported when LME=0xF,
50079                                                          for example.) */
50080        uint32_t reserved_8_15           : 8;
50081        uint32_t flm                     : 1;       /**< Fast Link Mode
50082                                                         Sets all internal timers to fast mode for simulation purposes.
50083                                                         If during an eeprom load, the first word loaded is 0xffffffff,
50084                                                         then the EEPROM load will be terminated and this bit will be set. */
50085        uint32_t reserved_6_6            : 1;
50086        uint32_t dllle                   : 1;       /**< DLL Link Enable
50087                                                         Enables Link initialization. If DLL Link Enable = 0, the PCI
50088                                                         Express bus does not transmit InitFC DLLPs and does not
50089                                                         establish a Link. */
50090        uint32_t reserved_4_4            : 1;
50091        uint32_t ra                      : 1;       /**< Reset Assert
50092                                                         Triggers a recovery and forces the LTSSM to the Hot Reset
50093                                                         state (downstream port only). */
50094        uint32_t le                      : 1;       /**< Loopback Enable
50095                                                         Turns on loopback. */
50096        uint32_t sd                      : 1;       /**< Scramble Disable
50097                                                         Turns off data scrambling. */
50098        uint32_t omr                     : 1;       /**< Other Message Request
50099                                                         When software writes a `1' to this bit, the PCI Express bus
50100                                                         transmits the Message contained in the Other Message register. */
50101#else
50102        uint32_t omr                     : 1;
50103        uint32_t sd                      : 1;
50104        uint32_t le                      : 1;
50105        uint32_t ra                      : 1;
50106        uint32_t reserved_4_4            : 1;
50107        uint32_t dllle                   : 1;
50108        uint32_t reserved_6_6            : 1;
50109        uint32_t flm                     : 1;
50110        uint32_t reserved_8_15           : 8;
50111        uint32_t lme                     : 6;
50112        uint32_t reserved_22_24          : 3;
50113        uint32_t eccrc                   : 1;
50114        uint32_t reserved_26_31          : 6;
50115#endif
50116    } s;
50117    struct cvmx_pcieep_cfg452_s          cn52xx;
50118    struct cvmx_pcieep_cfg452_s          cn52xxp1;
50119    struct cvmx_pcieep_cfg452_s          cn56xx;
50120    struct cvmx_pcieep_cfg452_s          cn56xxp1;
50121} cvmx_pcieep_cfg452_t;
50122
50123
50124/**
50125 * cvmx_pcieep_cfg453
50126 *
50127 * PCIE_CFG453 = Four hundred fifty-fourth 32-bits of PCIE type 0 config space
50128 * (Lane Skew Register)
50129 */
50130typedef union
50131{
50132    uint32_t u32;
50133    struct cvmx_pcieep_cfg453_s
50134    {
50135#if __BYTE_ORDER == __BIG_ENDIAN
50136        uint32_t dlld                    : 1;       /**< Disable Lane-to-Lane Deskew
50137                                                         Disables the internal Lane-to-Lane deskew logic. */
50138        uint32_t reserved_26_30          : 5;
50139        uint32_t ack_nak                 : 1;       /**< Ack/Nak Disable
50140                                                         Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
50141        uint32_t fcd                     : 1;       /**< Flow Control Disable
50142                                                         Prevents the PCI Express bus from sending FC DLLPs. */
50143        uint32_t ilst                    : 24;      /**< Insert Lane Skew for Transmit
50144                                                         Causes skew between lanes for test purposes. There are three
50145                                                         bits per Lane. The value is in units of one symbol time. For
50146                                                         example, the value 010b for a Lane forces a skew of two symbol
50147                                                         times for that Lane. The maximum skew value for any Lane is 5
50148                                                         symbol times. */
50149#else
50150        uint32_t ilst                    : 24;
50151        uint32_t fcd                     : 1;
50152        uint32_t ack_nak                 : 1;
50153        uint32_t reserved_26_30          : 5;
50154        uint32_t dlld                    : 1;
50155#endif
50156    } s;
50157    struct cvmx_pcieep_cfg453_s          cn52xx;
50158    struct cvmx_pcieep_cfg453_s          cn52xxp1;
50159    struct cvmx_pcieep_cfg453_s          cn56xx;
50160    struct cvmx_pcieep_cfg453_s          cn56xxp1;
50161} cvmx_pcieep_cfg453_t;
50162
50163
50164/**
50165 * cvmx_pcieep_cfg454
50166 *
50167 * PCIE_CFG454 = Four hundred fifty-fifth 32-bits of PCIE type 0 config space
50168 * (Symbol Number Register)
50169 */
50170typedef union
50171{
50172    uint32_t u32;
50173    struct cvmx_pcieep_cfg454_s
50174    {
50175#if __BYTE_ORDER == __BIG_ENDIAN
50176        uint32_t reserved_29_31          : 3;
50177        uint32_t tmfcwt                  : 5;       /**< Timer Modifier for Flow Control Watchdog Timer
50178                                                         Increases the timer value for the Flow Control watchdog timer,
50179                                                         in increments of 16 clock cycles. */
50180        uint32_t tmanlt                  : 5;       /**< Timer Modifier for Ack/Nak Latency Timer
50181                                                         Increases the timer value for the Ack/Nak latency timer, in
50182                                                         increments of 64 clock cycles. */
50183        uint32_t tmrt                    : 5;       /**< Timer Modifier for Replay Timer
50184                                                         Increases the timer value for the replay timer, in increments
50185                                                         of 64 clock cycles. */
50186        uint32_t reserved_11_13          : 3;
50187        uint32_t nskps                   : 3;       /**< Number of SKP Symbols */
50188        uint32_t reserved_4_7            : 4;
50189        uint32_t ntss                    : 4;       /**< Number of TS Symbols
50190                                                         Sets the number of TS identifier symbols that are sent in TS1
50191                                                         and TS2 ordered sets. */
50192#else
50193        uint32_t ntss                    : 4;
50194        uint32_t reserved_4_7            : 4;
50195        uint32_t nskps                   : 3;
50196        uint32_t reserved_11_13          : 3;
50197        uint32_t tmrt                    : 5;
50198        uint32_t tmanlt                  : 5;
50199        uint32_t tmfcwt                  : 5;
50200        uint32_t reserved_29_31          : 3;
50201#endif
50202    } s;
50203    struct cvmx_pcieep_cfg454_s          cn52xx;
50204    struct cvmx_pcieep_cfg454_s          cn52xxp1;
50205    struct cvmx_pcieep_cfg454_s          cn56xx;
50206    struct cvmx_pcieep_cfg454_s          cn56xxp1;
50207} cvmx_pcieep_cfg454_t;
50208
50209
50210/**
50211 * cvmx_pcieep_cfg455
50212 *
50213 * PCIE_CFG455 = Four hundred fifty-sixth 32-bits of PCIE type 0 config space
50214 * (Symbol Timer Register/Filter Mask Register 1)
50215 */
50216typedef union
50217{
50218    uint32_t u32;
50219    struct cvmx_pcieep_cfg455_s
50220    {
50221#if __BYTE_ORDER == __BIG_ENDIAN
50222        uint32_t m_cfg0_filt             : 1;       /**< Mask filtering of received Configuration Requests (RC mode only) */
50223        uint32_t m_io_filt               : 1;       /**< Mask filtering of received I/O Requests (RC mode only) */
50224        uint32_t msg_ctrl                : 1;       /**< Message Control
50225                                                         The application must not change this field. */
50226        uint32_t m_cpl_ecrc_filt         : 1;       /**< Mask ECRC error filtering for Completions */
50227        uint32_t m_ecrc_filt             : 1;       /**< Mask ECRC error filtering */
50228        uint32_t m_cpl_len_err           : 1;       /**< Mask Length mismatch error for received Completions */
50229        uint32_t m_cpl_attr_err          : 1;       /**< Mask Attributes mismatch error for received Completions */
50230        uint32_t m_cpl_tc_err            : 1;       /**< Mask Traffic Class mismatch error for received Completions */
50231        uint32_t m_cpl_fun_err           : 1;       /**< Mask function mismatch error for received Completions */
50232        uint32_t m_cpl_rid_err           : 1;       /**< Mask Requester ID mismatch error for received Completions */
50233        uint32_t m_cpl_tag_err           : 1;       /**< Mask Tag error rules for received Completions */
50234        uint32_t m_lk_filt               : 1;       /**< Mask Locked Request filtering */
50235        uint32_t m_cfg1_filt             : 1;       /**< Mask Type 1 Configuration Request filtering */
50236        uint32_t m_bar_match             : 1;       /**< Mask BAR match filtering */
50237        uint32_t m_pois_filt             : 1;       /**< Mask poisoned TLP filtering */
50238        uint32_t m_fun                   : 1;       /**< Mask function */
50239        uint32_t dfcwt                   : 1;       /**< Disable FC Watchdog Timer */
50240        uint32_t reserved_11_14          : 4;
50241        uint32_t skpiv                   : 11;      /**< SKP Interval Value */
50242#else
50243        uint32_t skpiv                   : 11;
50244        uint32_t reserved_11_14          : 4;
50245        uint32_t dfcwt                   : 1;
50246        uint32_t m_fun                   : 1;
50247        uint32_t m_pois_filt             : 1;
50248        uint32_t m_bar_match             : 1;
50249        uint32_t m_cfg1_filt             : 1;
50250        uint32_t m_lk_filt               : 1;
50251        uint32_t m_cpl_tag_err           : 1;
50252        uint32_t m_cpl_rid_err           : 1;
50253        uint32_t m_cpl_fun_err           : 1;
50254        uint32_t m_cpl_tc_err            : 1;
50255        uint32_t m_cpl_attr_err          : 1;
50256        uint32_t m_cpl_len_err           : 1;
50257        uint32_t m_ecrc_filt             : 1;
50258        uint32_t m_cpl_ecrc_filt         : 1;
50259        uint32_t msg_ctrl                : 1;
50260        uint32_t m_io_filt               : 1;
50261        uint32_t m_cfg0_filt             : 1;
50262#endif
50263    } s;
50264    struct cvmx_pcieep_cfg455_s          cn52xx;
50265    struct cvmx_pcieep_cfg455_s          cn52xxp1;
50266    struct cvmx_pcieep_cfg455_s          cn56xx;
50267    struct cvmx_pcieep_cfg455_s          cn56xxp1;
50268} cvmx_pcieep_cfg455_t;
50269
50270
50271/**
50272 * cvmx_pcieep_cfg456
50273 *
50274 * PCIE_CFG456 = Four hundred fifty-seventh 32-bits of PCIE type 0 config space
50275 * (Filter Mask Register 2)
50276 */
50277typedef union
50278{
50279    uint32_t u32;
50280    struct cvmx_pcieep_cfg456_s
50281    {
50282#if __BYTE_ORDER == __BIG_ENDIAN
50283        uint32_t reserved_2_31           : 30;
50284        uint32_t m_vend1_drp             : 1;       /**< Mask Vendor MSG Type 1 dropped silently */
50285        uint32_t m_vend0_drp             : 1;       /**< Mask Vendor MSG Type 0 dropped with UR error reporting. */
50286#else
50287        uint32_t m_vend0_drp             : 1;
50288        uint32_t m_vend1_drp             : 1;
50289        uint32_t reserved_2_31           : 30;
50290#endif
50291    } s;
50292    struct cvmx_pcieep_cfg456_s          cn52xx;
50293    struct cvmx_pcieep_cfg456_s          cn52xxp1;
50294    struct cvmx_pcieep_cfg456_s          cn56xx;
50295    struct cvmx_pcieep_cfg456_s          cn56xxp1;
50296} cvmx_pcieep_cfg456_t;
50297
50298
50299/**
50300 * cvmx_pcieep_cfg458
50301 *
50302 * PCIE_CFG458 = Four hundred fifty-ninth 32-bits of PCIE type 0 config space
50303 * (Debug Register 0)
50304 */
50305typedef union
50306{
50307    uint32_t u32;
50308    struct cvmx_pcieep_cfg458_s
50309    {
50310#if __BYTE_ORDER == __BIG_ENDIAN
50311        uint32_t dbg_info_l32            : 32;      /**< Debug Info Lower 32 Bits */
50312#else
50313        uint32_t dbg_info_l32            : 32;
50314#endif
50315    } s;
50316    struct cvmx_pcieep_cfg458_s          cn52xx;
50317    struct cvmx_pcieep_cfg458_s          cn52xxp1;
50318    struct cvmx_pcieep_cfg458_s          cn56xx;
50319    struct cvmx_pcieep_cfg458_s          cn56xxp1;
50320} cvmx_pcieep_cfg458_t;
50321
50322
50323/**
50324 * cvmx_pcieep_cfg459
50325 *
50326 * PCIE_CFG459 = Four hundred sixtieth 32-bits of PCIE type 0 config space
50327 * (Debug Register 1)
50328 */
50329typedef union
50330{
50331    uint32_t u32;
50332    struct cvmx_pcieep_cfg459_s
50333    {
50334#if __BYTE_ORDER == __BIG_ENDIAN
50335        uint32_t dbg_info_u32            : 32;      /**< Debug Info Upper 32 Bits */
50336#else
50337        uint32_t dbg_info_u32            : 32;
50338#endif
50339    } s;
50340    struct cvmx_pcieep_cfg459_s          cn52xx;
50341    struct cvmx_pcieep_cfg459_s          cn52xxp1;
50342    struct cvmx_pcieep_cfg459_s          cn56xx;
50343    struct cvmx_pcieep_cfg459_s          cn56xxp1;
50344} cvmx_pcieep_cfg459_t;
50345
50346
50347/**
50348 * cvmx_pcieep_cfg460
50349 *
50350 * PCIE_CFG460 = Four hundred sixty-first 32-bits of PCIE type 0 config space
50351 * (Transmit Posted FC Credit Status)
50352 */
50353typedef union
50354{
50355    uint32_t u32;
50356    struct cvmx_pcieep_cfg460_s
50357    {
50358#if __BYTE_ORDER == __BIG_ENDIAN
50359        uint32_t reserved_20_31          : 12;
50360        uint32_t tphfcc                  : 8;       /**< Transmit Posted Header FC Credits
50361                                                         The Posted Header credits advertised by the receiver at the
50362                                                         other end of the Link, updated with each UpdateFC DLLP. */
50363        uint32_t tpdfcc                  : 12;      /**< Transmit Posted Data FC Credits
50364                                                         The Posted Data credits advertised by the receiver at the other
50365                                                         end of the Link, updated with each UpdateFC DLLP. */
50366#else
50367        uint32_t tpdfcc                  : 12;
50368        uint32_t tphfcc                  : 8;
50369        uint32_t reserved_20_31          : 12;
50370#endif
50371    } s;
50372    struct cvmx_pcieep_cfg460_s          cn52xx;
50373    struct cvmx_pcieep_cfg460_s          cn52xxp1;
50374    struct cvmx_pcieep_cfg460_s          cn56xx;
50375    struct cvmx_pcieep_cfg460_s          cn56xxp1;
50376} cvmx_pcieep_cfg460_t;
50377
50378
50379/**
50380 * cvmx_pcieep_cfg461
50381 *
50382 * PCIE_CFG461 = Four hundred sixty-second 32-bits of PCIE type 0 config space
50383 * (Transmit Non-Posted FC Credit Status)
50384 */
50385typedef union
50386{
50387    uint32_t u32;
50388    struct cvmx_pcieep_cfg461_s
50389    {
50390#if __BYTE_ORDER == __BIG_ENDIAN
50391        uint32_t reserved_20_31          : 12;
50392        uint32_t tchfcc                  : 8;       /**< Transmit Non-Posted Header FC Credits
50393                                                         The Non-Posted Header credits advertised by the receiver at the
50394                                                         other end of the Link, updated with each UpdateFC DLLP. */
50395        uint32_t tcdfcc                  : 12;      /**< Transmit Non-Posted Data FC Credits
50396                                                         The Non-Posted Data credits advertised by the receiver at the
50397                                                         other end of the Link, updated with each UpdateFC DLLP. */
50398#else
50399        uint32_t tcdfcc                  : 12;
50400        uint32_t tchfcc                  : 8;
50401        uint32_t reserved_20_31          : 12;
50402#endif
50403    } s;
50404    struct cvmx_pcieep_cfg461_s          cn52xx;
50405    struct cvmx_pcieep_cfg461_s          cn52xxp1;
50406    struct cvmx_pcieep_cfg461_s          cn56xx;
50407    struct cvmx_pcieep_cfg461_s          cn56xxp1;
50408} cvmx_pcieep_cfg461_t;
50409
50410
50411/**
50412 * cvmx_pcieep_cfg462
50413 *
50414 * PCIE_CFG462 = Four hundred sixty-third 32-bits of PCIE type 0 config space
50415 * (Transmit Completion FC Credit Status )
50416 */
50417typedef union
50418{
50419    uint32_t u32;
50420    struct cvmx_pcieep_cfg462_s
50421    {
50422#if __BYTE_ORDER == __BIG_ENDIAN
50423        uint32_t reserved_20_31          : 12;
50424        uint32_t tchfcc                  : 8;       /**< Transmit Completion Header FC Credits
50425                                                         The Completion Header credits advertised by the receiver at the
50426                                                         other end of the Link, updated with each UpdateFC DLLP. */
50427        uint32_t tcdfcc                  : 12;      /**< Transmit Completion Data FC Credits
50428                                                         The Completion Data credits advertised by the receiver at the
50429                                                         other end of the Link, updated with each UpdateFC DLLP. */
50430#else
50431        uint32_t tcdfcc                  : 12;
50432        uint32_t tchfcc                  : 8;
50433        uint32_t reserved_20_31          : 12;
50434#endif
50435    } s;
50436    struct cvmx_pcieep_cfg462_s          cn52xx;
50437    struct cvmx_pcieep_cfg462_s          cn52xxp1;
50438    struct cvmx_pcieep_cfg462_s          cn56xx;
50439    struct cvmx_pcieep_cfg462_s          cn56xxp1;
50440} cvmx_pcieep_cfg462_t;
50441
50442
50443/**
50444 * cvmx_pcieep_cfg463
50445 *
50446 * PCIE_CFG463 = Four hundred sixty-fourth 32-bits of PCIE type 0 config space
50447 * (Queue Status)
50448 */
50449typedef union
50450{
50451    uint32_t u32;
50452    struct cvmx_pcieep_cfg463_s
50453    {
50454#if __BYTE_ORDER == __BIG_ENDIAN
50455        uint32_t reserved_3_31           : 29;
50456        uint32_t rqne                    : 1;       /**< Received Queue Not Empty
50457                                                         Indicates there is data in one or more of the receive buffers. */
50458        uint32_t trbne                   : 1;       /**< Transmit Retry Buffer Not Empty
50459                                                         Indicates that there is data in the transmit retry buffer. */
50460        uint32_t rtlpfccnr               : 1;       /**< Received TLP FC Credits Not Returned
50461                                                         Indicates that the PCI Express bus has sent a TLP but has not
50462                                                         yet received an UpdateFC DLLP indicating that the credits for
50463                                                         that TLP have been restored by the receiver at the other end of
50464                                                         the Link. */
50465#else
50466        uint32_t rtlpfccnr               : 1;
50467        uint32_t trbne                   : 1;
50468        uint32_t rqne                    : 1;
50469        uint32_t reserved_3_31           : 29;
50470#endif
50471    } s;
50472    struct cvmx_pcieep_cfg463_s          cn52xx;
50473    struct cvmx_pcieep_cfg463_s          cn52xxp1;
50474    struct cvmx_pcieep_cfg463_s          cn56xx;
50475    struct cvmx_pcieep_cfg463_s          cn56xxp1;
50476} cvmx_pcieep_cfg463_t;
50477
50478
50479/**
50480 * cvmx_pcieep_cfg464
50481 *
50482 * PCIE_CFG464 = Four hundred sixty-fifth 32-bits of PCIE type 0 config space
50483 * (VC Transmit Arbitration Register 1)
50484 */
50485typedef union
50486{
50487    uint32_t u32;
50488    struct cvmx_pcieep_cfg464_s
50489    {
50490#if __BYTE_ORDER == __BIG_ENDIAN
50491        uint32_t wrr_vc3                 : 8;       /**< WRR Weight for VC3 */
50492        uint32_t wrr_vc2                 : 8;       /**< WRR Weight for VC2 */
50493        uint32_t wrr_vc1                 : 8;       /**< WRR Weight for VC1 */
50494        uint32_t wrr_vc0                 : 8;       /**< WRR Weight for VC0 */
50495#else
50496        uint32_t wrr_vc0                 : 8;
50497        uint32_t wrr_vc1                 : 8;
50498        uint32_t wrr_vc2                 : 8;
50499        uint32_t wrr_vc3                 : 8;
50500#endif
50501    } s;
50502    struct cvmx_pcieep_cfg464_s          cn52xx;
50503    struct cvmx_pcieep_cfg464_s          cn52xxp1;
50504    struct cvmx_pcieep_cfg464_s          cn56xx;
50505    struct cvmx_pcieep_cfg464_s          cn56xxp1;
50506} cvmx_pcieep_cfg464_t;
50507
50508
50509/**
50510 * cvmx_pcieep_cfg465
50511 *
50512 * PCIE_CFG465 = Four hundred sixty-sixth 32-bits of PCIE type 0 config space
50513 * (VC Transmit Arbitration Register 2)
50514 */
50515typedef union
50516{
50517    uint32_t u32;
50518    struct cvmx_pcieep_cfg465_s
50519    {
50520#if __BYTE_ORDER == __BIG_ENDIAN
50521        uint32_t wrr_vc7                 : 8;       /**< WRR Weight for VC7 */
50522        uint32_t wrr_vc6                 : 8;       /**< WRR Weight for VC6 */
50523        uint32_t wrr_vc5                 : 8;       /**< WRR Weight for VC5 */
50524        uint32_t wrr_vc4                 : 8;       /**< WRR Weight for VC4 */
50525#else
50526        uint32_t wrr_vc4                 : 8;
50527        uint32_t wrr_vc5                 : 8;
50528        uint32_t wrr_vc6                 : 8;
50529        uint32_t wrr_vc7                 : 8;
50530#endif
50531    } s;
50532    struct cvmx_pcieep_cfg465_s          cn52xx;
50533    struct cvmx_pcieep_cfg465_s          cn52xxp1;
50534    struct cvmx_pcieep_cfg465_s          cn56xx;
50535    struct cvmx_pcieep_cfg465_s          cn56xxp1;
50536} cvmx_pcieep_cfg465_t;
50537
50538
50539/**
50540 * cvmx_pcieep_cfg466
50541 *
50542 * PCIE_CFG466 = Four hundred sixty-seventh 32-bits of PCIE type 0 config space
50543 * (VC0 Posted Receive Queue Control)
50544 */
50545typedef union
50546{
50547    uint32_t u32;
50548    struct cvmx_pcieep_cfg466_s
50549    {
50550#if __BYTE_ORDER == __BIG_ENDIAN
50551        uint32_t rx_queue_order          : 1;       /**< VC Ordering for Receive Queues
50552                                                         Determines the VC ordering rule for the receive queues, used
50553                                                         only in the segmented-buffer configuration,
50554                                                         writable through the DBI:
50555                                                         o 1: Strict ordering, higher numbered VCs have higher priority
50556                                                         o 0: Round robin
50557                                                         However, the application must not change this field. */
50558        uint32_t type_ordering           : 1;       /**< TLP Type Ordering for VC0
50559                                                         Determines the TLP type ordering rule for VC0 receive queues,
50560                                                         used only in the segmented-buffer configuration, writable
50561                                                         through the DBI:
50562                                                         o 1: Ordering of received TLPs follows the rules in
50563                                                              PCI Express Base Specification, Revision 1.1
50564                                                         o 0: Strict ordering for received TLPs: Posted, then
50565                                                              Completion, then Non-Posted
50566                                                         However, the application must not change this field. */
50567        uint32_t reserved_24_29          : 6;
50568        uint32_t queue_mode              : 3;       /**< VC0 Posted TLP Queue Mode
50569                                                         The operating mode of the Posted receive queue for VC0, used
50570                                                         only in the segmented-buffer configuration, writable through
50571                                                         the DBI. However, the application must not change this field.
50572                                                         Only one bit can be set at a time:
50573                                                         o Bit 23: Bypass
50574                                                         o Bit 22: Cut-through
50575                                                         o Bit 21: Store-and-forward */
50576        uint32_t reserved_20_20          : 1;
50577        uint32_t header_credits          : 8;       /**< VC0 Posted Header Credits
50578                                                         The number of initial Posted header credits for VC0, used for
50579                                                         all receive queue buffer configurations.
50580                                                         This field is writable through the DBI.
50581                                                         However, the application must not change this field. */
50582        uint32_t data_credits            : 12;      /**< VC0 Posted Data Credits
50583                                                         The number of initial Posted data credits for VC0, used for all
50584                                                         receive queue buffer configurations.
50585                                                         This field is writable through the DBI.
50586                                                         However, the application must not change this field. */
50587#else
50588        uint32_t data_credits            : 12;
50589        uint32_t header_credits          : 8;
50590        uint32_t reserved_20_20          : 1;
50591        uint32_t queue_mode              : 3;
50592        uint32_t reserved_24_29          : 6;
50593        uint32_t type_ordering           : 1;
50594        uint32_t rx_queue_order          : 1;
50595#endif
50596    } s;
50597    struct cvmx_pcieep_cfg466_s          cn52xx;
50598    struct cvmx_pcieep_cfg466_s          cn52xxp1;
50599    struct cvmx_pcieep_cfg466_s          cn56xx;
50600    struct cvmx_pcieep_cfg466_s          cn56xxp1;
50601} cvmx_pcieep_cfg466_t;
50602
50603
50604/**
50605 * cvmx_pcieep_cfg467
50606 *
50607 * PCIE_CFG467 = Four hundred sixty-eighth 32-bits of PCIE type 0 config space
50608 * (VC0 Non-Posted Receive Queue Control)
50609 */
50610typedef union
50611{
50612    uint32_t u32;
50613    struct cvmx_pcieep_cfg467_s
50614    {
50615#if __BYTE_ORDER == __BIG_ENDIAN
50616        uint32_t reserved_24_31          : 8;
50617        uint32_t queue_mode              : 3;       /**< VC0 Non-Posted TLP Queue Mode
50618                                                         The operating mode of the Non-Posted receive queue for VC0,
50619                                                         used only in the segmented-buffer configuration, writable
50620                                                         through the DBI. Only one bit can be set at a time:
50621                                                         o Bit 23: Bypass
50622                                                         o Bit 22: Cut-through
50623                                                         o Bit 21: Store-and-forward
50624                                                         However, the application must not change this field. */
50625        uint32_t reserved_20_20          : 1;
50626        uint32_t header_credits          : 8;       /**< VC0 Non-Posted Header Credits
50627                                                         The number of initial Non-Posted header credits for VC0, used
50628                                                         for all receive queue buffer configurations.
50629                                                         This field is writable through the DBI.
50630                                                         However, the application must not change this field. */
50631        uint32_t data_credits            : 12;      /**< VC0 Non-Posted Data Credits
50632                                                         The number of initial Non-Posted data credits for VC0, used for
50633                                                         all receive queue buffer configurations.
50634                                                         This field is writable through the DBI.
50635                                                         However, the application must not change this field. */
50636#else
50637        uint32_t data_credits            : 12;
50638        uint32_t header_credits          : 8;
50639        uint32_t reserved_20_20          : 1;
50640        uint32_t queue_mode              : 3;
50641        uint32_t reserved_24_31          : 8;
50642#endif
50643    } s;
50644    struct cvmx_pcieep_cfg467_s          cn52xx;
50645    struct cvmx_pcieep_cfg467_s          cn52xxp1;
50646    struct cvmx_pcieep_cfg467_s          cn56xx;
50647    struct cvmx_pcieep_cfg467_s          cn56xxp1;
50648} cvmx_pcieep_cfg467_t;
50649
50650
50651/**
50652 * cvmx_pcieep_cfg468
50653 *
50654 * PCIE_CFG468 = Four hundred sixty-ninth 32-bits of PCIE type 0 config space
50655 * (VC0 Completion Receive Queue Control)
50656 */
50657typedef union
50658{
50659    uint32_t u32;
50660    struct cvmx_pcieep_cfg468_s
50661    {
50662#if __BYTE_ORDER == __BIG_ENDIAN
50663        uint32_t reserved_24_31          : 8;
50664        uint32_t queue_mode              : 3;       /**< VC0 Completion TLP Queue Mode
50665                                                         The operating mode of the Completion receive queue for VC0,
50666                                                         used only in the segmented-buffer configuration, writable
50667                                                         through the DBI. Only one bit can be set at a time:
50668                                                         o Bit 23: Bypass
50669                                                         o Bit 22: Cut-through
50670                                                         o Bit 21: Store-and-forward
50671                                                         However, the application must not change this field. */
50672        uint32_t reserved_20_20          : 1;
50673        uint32_t header_credits          : 8;       /**< VC0 Completion Header Credits
50674                                                         The number of initial Completion header credits for VC0, used
50675                                                         for all receive queue buffer configurations.
50676                                                         This field is writable through the DBI.
50677                                                         However, the application must not change this field. */
50678        uint32_t data_credits            : 12;      /**< VC0 Completion Data Credits
50679                                                         The number of initial Completion data credits for VC0, used for
50680                                                         all receive queue buffer configurations.
50681                                                         This field is writable through the DBI.
50682                                                         However, the application must not change this field. */
50683#else
50684        uint32_t data_credits            : 12;
50685        uint32_t header_credits          : 8;
50686        uint32_t reserved_20_20          : 1;
50687        uint32_t queue_mode              : 3;
50688        uint32_t reserved_24_31          : 8;
50689#endif
50690    } s;
50691    struct cvmx_pcieep_cfg468_s          cn52xx;
50692    struct cvmx_pcieep_cfg468_s          cn52xxp1;
50693    struct cvmx_pcieep_cfg468_s          cn56xx;
50694    struct cvmx_pcieep_cfg468_s          cn56xxp1;
50695} cvmx_pcieep_cfg468_t;
50696
50697
50698/**
50699 * cvmx_pcieep_cfg490
50700 *
50701 * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 0 config space
50702 * (VC0 Posted Buffer Depth)
50703 */
50704typedef union
50705{
50706    uint32_t u32;
50707    struct cvmx_pcieep_cfg490_s
50708    {
50709#if __BYTE_ORDER == __BIG_ENDIAN
50710        uint32_t reserved_26_31          : 6;
50711        uint32_t header_depth            : 10;      /**< VC0 Posted Header Queue Depth
50712                                                         Sets the number of entries in the Posted header queue for VC0
50713                                                         when using the segmented-buffer configuration, writable through
50714                                                         the DBI.
50715                                                         However, the application must not change this field. */
50716        uint32_t reserved_14_15          : 2;
50717        uint32_t data_depth              : 14;      /**< VC0 Posted Data Queue Depth
50718                                                         Sets the number of entries in the Posted data queue for VC0
50719                                                         when using the segmented-buffer configuration, writable
50720                                                         through the DBI.
50721                                                         However, the application must not change this field. */
50722#else
50723        uint32_t data_depth              : 14;
50724        uint32_t reserved_14_15          : 2;
50725        uint32_t header_depth            : 10;
50726        uint32_t reserved_26_31          : 6;
50727#endif
50728    } s;
50729    struct cvmx_pcieep_cfg490_s          cn52xx;
50730    struct cvmx_pcieep_cfg490_s          cn52xxp1;
50731    struct cvmx_pcieep_cfg490_s          cn56xx;
50732    struct cvmx_pcieep_cfg490_s          cn56xxp1;
50733} cvmx_pcieep_cfg490_t;
50734
50735
50736/**
50737 * cvmx_pcieep_cfg491
50738 *
50739 * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 0 config space
50740 * (VC0 Non-Posted Buffer Depth)
50741 */
50742typedef union
50743{
50744    uint32_t u32;
50745    struct cvmx_pcieep_cfg491_s
50746    {
50747#if __BYTE_ORDER == __BIG_ENDIAN
50748        uint32_t reserved_26_31          : 6;
50749        uint32_t header_depth            : 10;      /**< VC0 Non-Posted Header Queue Depth
50750                                                         Sets the number of entries in the Non-Posted header queue for
50751                                                         VC0 when using the segmented-buffer configuration, writable
50752                                                         through the DBI.
50753                                                         However, the application must not change this field. */
50754        uint32_t reserved_14_15          : 2;
50755        uint32_t data_depth              : 14;      /**< VC0 Non-Posted Data Queue Depth
50756                                                         Sets the number of entries in the Non-Posted data queue for VC0
50757                                                         when using the segmented-buffer configuration, writable
50758                                                         through the DBI.
50759                                                         However, the application must not change this field. */
50760#else
50761        uint32_t data_depth              : 14;
50762        uint32_t reserved_14_15          : 2;
50763        uint32_t header_depth            : 10;
50764        uint32_t reserved_26_31          : 6;
50765#endif
50766    } s;
50767    struct cvmx_pcieep_cfg491_s          cn52xx;
50768    struct cvmx_pcieep_cfg491_s          cn52xxp1;
50769    struct cvmx_pcieep_cfg491_s          cn56xx;
50770    struct cvmx_pcieep_cfg491_s          cn56xxp1;
50771} cvmx_pcieep_cfg491_t;
50772
50773
50774/**
50775 * cvmx_pcieep_cfg492
50776 *
50777 * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 0 config space
50778 * (VC0 Completion Buffer Depth)
50779 */
50780typedef union
50781{
50782    uint32_t u32;
50783    struct cvmx_pcieep_cfg492_s
50784    {
50785#if __BYTE_ORDER == __BIG_ENDIAN
50786        uint32_t reserved_26_31          : 6;
50787        uint32_t header_depth            : 10;      /**< VC0 Completion Header Queue Depth
50788                                                         Sets the number of entries in the Completion header queue for
50789                                                         VC0 when using the segmented-buffer configuration, writable
50790                                                         through the DBI.
50791                                                         However, the application must not change this field. */
50792        uint32_t reserved_14_15          : 2;
50793        uint32_t data_depth              : 14;      /**< VC0 Completion Data Queue Depth
50794                                                         Sets the number of entries in the Completion data queue for VC0
50795                                                         when using the segmented-buffer configuration, writable
50796                                                         through the DBI.
50797                                                         However, the application must not change this field. */
50798#else
50799        uint32_t data_depth              : 14;
50800        uint32_t reserved_14_15          : 2;
50801        uint32_t header_depth            : 10;
50802        uint32_t reserved_26_31          : 6;
50803#endif
50804    } s;
50805    struct cvmx_pcieep_cfg492_s          cn52xx;
50806    struct cvmx_pcieep_cfg492_s          cn52xxp1;
50807    struct cvmx_pcieep_cfg492_s          cn56xx;
50808    struct cvmx_pcieep_cfg492_s          cn56xxp1;
50809} cvmx_pcieep_cfg492_t;
50810
50811
50812/**
50813 * cvmx_pcieep_cfg516
50814 *
50815 * PCIE_CFG516 = Five hundred seventeenth 32-bits of PCIE type 0 config space
50816 * (PHY Status Register)
50817 */
50818typedef union
50819{
50820    uint32_t u32;
50821    struct cvmx_pcieep_cfg516_s
50822    {
50823#if __BYTE_ORDER == __BIG_ENDIAN
50824        uint32_t phy_stat                : 32;      /**< PHY Status */
50825#else
50826        uint32_t phy_stat                : 32;
50827#endif
50828    } s;
50829    struct cvmx_pcieep_cfg516_s          cn52xx;
50830    struct cvmx_pcieep_cfg516_s          cn52xxp1;
50831    struct cvmx_pcieep_cfg516_s          cn56xx;
50832    struct cvmx_pcieep_cfg516_s          cn56xxp1;
50833} cvmx_pcieep_cfg516_t;
50834
50835
50836/**
50837 * cvmx_pcieep_cfg517
50838 *
50839 * PCIE_CFG517 = Five hundred eighteenth 32-bits of PCIE type 0 config space
50840 * (PHY Control Register)
50841 */
50842typedef union
50843{
50844    uint32_t u32;
50845    struct cvmx_pcieep_cfg517_s
50846    {
50847#if __BYTE_ORDER == __BIG_ENDIAN
50848        uint32_t phy_ctrl                : 32;      /**< PHY Control */
50849#else
50850        uint32_t phy_ctrl                : 32;
50851#endif
50852    } s;
50853    struct cvmx_pcieep_cfg517_s          cn52xx;
50854    struct cvmx_pcieep_cfg517_s          cn52xxp1;
50855    struct cvmx_pcieep_cfg517_s          cn56xx;
50856    struct cvmx_pcieep_cfg517_s          cn56xxp1;
50857} cvmx_pcieep_cfg517_t;
50858
50859
50860/**
50861 * cvmx_pcierc#_cfg000
50862 *
50863 * PCIE_CFG000 = First 32-bits of PCIE type 1 config space (Device ID and Vendor ID Register)
50864 *
50865 */
50866typedef union
50867{
50868    uint32_t u32;
50869    struct cvmx_pciercx_cfg000_s
50870    {
50871#if __BYTE_ORDER == __BIG_ENDIAN
50872        uint32_t devid                   : 16;      /**< Device ID, writable through the DBI
50873                                                         However, the application must not change this field. */
50874        uint32_t vendid                  : 16;      /**< Vendor ID, writable through the DBI
50875                                                         However, the application must not change this field. */
50876#else
50877        uint32_t vendid                  : 16;
50878        uint32_t devid                   : 16;
50879#endif
50880    } s;
50881    struct cvmx_pciercx_cfg000_s         cn52xx;
50882    struct cvmx_pciercx_cfg000_s         cn52xxp1;
50883    struct cvmx_pciercx_cfg000_s         cn56xx;
50884    struct cvmx_pciercx_cfg000_s         cn56xxp1;
50885} cvmx_pciercx_cfg000_t;
50886
50887
50888/**
50889 * cvmx_pcierc#_cfg001
50890 *
50891 * PCIE_CFG001 = Second 32-bits of PCIE type 1 config space (Command/Status Register)
50892 *
50893 */
50894typedef union
50895{
50896    uint32_t u32;
50897    struct cvmx_pciercx_cfg001_s
50898    {
50899#if __BYTE_ORDER == __BIG_ENDIAN
50900        uint32_t dpe                     : 1;       /**< Detected Parity Error */
50901        uint32_t sse                     : 1;       /**< Signaled System Error */
50902        uint32_t rma                     : 1;       /**< Received Master Abort */
50903        uint32_t rta                     : 1;       /**< Received Target Abort */
50904        uint32_t sta                     : 1;       /**< Signaled Target Abort */
50905        uint32_t devt                    : 2;       /**< DEVSEL Timing
50906                                                         Not applicable for PCI Express. Hardwired to 0. */
50907        uint32_t mdpe                    : 1;       /**< Master Data Parity Error */
50908        uint32_t fbb                     : 1;       /**< Fast Back-to-Back Capable
50909                                                         Not applicable for PCI Express. Hardwired to 0. */
50910        uint32_t reserved_22_22          : 1;
50911        uint32_t m66                     : 1;       /**< 66 MHz Capable
50912                                                         Not applicable for PCI Express. Hardwired to 0. */
50913        uint32_t cl                      : 1;       /**< Capabilities List
50914                                                         Indicates presence of an extended capability item.
50915                                                         Hardwired to 1. */
50916        uint32_t i_stat                  : 1;       /**< INTx Status */
50917        uint32_t reserved_11_18          : 8;
50918        uint32_t i_dis                   : 1;       /**< INTx Assertion Disable */
50919        uint32_t fbbe                    : 1;       /**< Fast Back-to-Back Enable
50920                                                         Not applicable for PCI Express. Must be hardwired to 0. */
50921        uint32_t see                     : 1;       /**< SERR# Enable */
50922        uint32_t ids_wcc                 : 1;       /**< IDSEL Stepping/Wait Cycle Control
50923                                                         Not applicable for PCI Express. Must be hardwired to 0 */
50924        uint32_t per                     : 1;       /**< Parity Error Response */
50925        uint32_t vps                     : 1;       /**< VGA Palette Snoop
50926                                                         Not applicable for PCI Express. Must be hardwired to 0. */
50927        uint32_t mwice                   : 1;       /**< Memory Write and Invalidate
50928                                                         Not applicable for PCI Express. Must be hardwired to 0. */
50929        uint32_t scse                    : 1;       /**< Special Cycle Enable
50930                                                         Not applicable for PCI Express. Must be hardwired to 0. */
50931        uint32_t me                      : 1;       /**< Bus Master Enable */
50932        uint32_t msae                    : 1;       /**< Memory Space Enable */
50933        uint32_t isae                    : 1;       /**< I/O Space Enable */
50934#else
50935        uint32_t isae                    : 1;
50936        uint32_t msae                    : 1;
50937        uint32_t me                      : 1;
50938        uint32_t scse                    : 1;
50939        uint32_t mwice                   : 1;
50940        uint32_t vps                     : 1;
50941        uint32_t per                     : 1;
50942        uint32_t ids_wcc                 : 1;
50943        uint32_t see                     : 1;
50944        uint32_t fbbe                    : 1;
50945        uint32_t i_dis                   : 1;
50946        uint32_t reserved_11_18          : 8;
50947        uint32_t i_stat                  : 1;
50948        uint32_t cl                      : 1;
50949        uint32_t m66                     : 1;
50950        uint32_t reserved_22_22          : 1;
50951        uint32_t fbb                     : 1;
50952        uint32_t mdpe                    : 1;
50953        uint32_t devt                    : 2;
50954        uint32_t sta                     : 1;
50955        uint32_t rta                     : 1;
50956        uint32_t rma                     : 1;
50957        uint32_t sse                     : 1;
50958        uint32_t dpe                     : 1;
50959#endif
50960    } s;
50961    struct cvmx_pciercx_cfg001_s         cn52xx;
50962    struct cvmx_pciercx_cfg001_s         cn52xxp1;
50963    struct cvmx_pciercx_cfg001_s         cn56xx;
50964    struct cvmx_pciercx_cfg001_s         cn56xxp1;
50965} cvmx_pciercx_cfg001_t;
50966
50967
50968/**
50969 * cvmx_pcierc#_cfg002
50970 *
50971 * PCIE_CFG002 = Third 32-bits of PCIE type 1 config space (Revision ID/Class Code Register)
50972 *
50973 */
50974typedef union
50975{
50976    uint32_t u32;
50977    struct cvmx_pciercx_cfg002_s
50978    {
50979#if __BYTE_ORDER == __BIG_ENDIAN
50980        uint32_t bcc                     : 8;       /**< Base Class Code, writable through the DBI
50981                                                         However, the application must not change this field. */
50982        uint32_t sc                      : 8;       /**< Subclass Code, writable through the DBI
50983                                                         However, the application must not change this field. */
50984        uint32_t pi                      : 8;       /**< Programming Interface, writable through the DBI
50985                                                         However, the application must not change this field. */
50986        uint32_t rid                     : 8;       /**< Revision ID, writable through the DBI
50987                                                         However, the application must not change this field. */
50988#else
50989        uint32_t rid                     : 8;
50990        uint32_t pi                      : 8;
50991        uint32_t sc                      : 8;
50992        uint32_t bcc                     : 8;
50993#endif
50994    } s;
50995    struct cvmx_pciercx_cfg002_s         cn52xx;
50996    struct cvmx_pciercx_cfg002_s         cn52xxp1;
50997    struct cvmx_pciercx_cfg002_s         cn56xx;
50998    struct cvmx_pciercx_cfg002_s         cn56xxp1;
50999} cvmx_pciercx_cfg002_t;
51000
51001
51002/**
51003 * cvmx_pcierc#_cfg003
51004 *
51005 * PCIE_CFG003 = Fourth 32-bits of PCIE type 1 config space (Cache Line Size/Master Latency Timer/Header Type Register/BIST Register)
51006 *
51007 */
51008typedef union
51009{
51010    uint32_t u32;
51011    struct cvmx_pciercx_cfg003_s
51012    {
51013#if __BYTE_ORDER == __BIG_ENDIAN
51014        uint32_t bist                    : 8;       /**< The BIST register functions are not supported.
51015                                                         All 8 bits of the BIST register are hardwired to 0. */
51016        uint32_t mfd                     : 1;       /**< Multi Function Device
51017                                                         The Multi Function Device bit is writable through the DBI.
51018                                                         However, this is a single function device. Therefore, the
51019                                                         application must not write a 1 to this bit. */
51020        uint32_t chf                     : 7;       /**< Configuration Header Format
51021                                                         Hardwired to 1. */
51022        uint32_t lt                      : 8;       /**< Master Latency Timer
51023                                                         Not applicable for PCI Express, hardwired to 0. */
51024        uint32_t cls                     : 8;       /**< Cache Line Size
51025                                                         The Cache Line Size register is RW for legacy compatibility
51026                                                         purposes and is not applicable to PCI Express device
51027                                                         functionality. */
51028#else
51029        uint32_t cls                     : 8;
51030        uint32_t lt                      : 8;
51031        uint32_t chf                     : 7;
51032        uint32_t mfd                     : 1;
51033        uint32_t bist                    : 8;
51034#endif
51035    } s;
51036    struct cvmx_pciercx_cfg003_s         cn52xx;
51037    struct cvmx_pciercx_cfg003_s         cn52xxp1;
51038    struct cvmx_pciercx_cfg003_s         cn56xx;
51039    struct cvmx_pciercx_cfg003_s         cn56xxp1;
51040} cvmx_pciercx_cfg003_t;
51041
51042
51043/**
51044 * cvmx_pcierc#_cfg004
51045 *
51046 * PCIE_CFG004 = Fifth 32-bits of PCIE type 1 config space (Base Address Register 0 - Low)
51047 *
51048 */
51049typedef union
51050{
51051    uint32_t u32;
51052    struct cvmx_pciercx_cfg004_s
51053    {
51054#if __BYTE_ORDER == __BIG_ENDIAN
51055        uint32_t reserved_0_31           : 32;
51056#else
51057        uint32_t reserved_0_31           : 32;
51058#endif
51059    } s;
51060    struct cvmx_pciercx_cfg004_s         cn52xx;
51061    struct cvmx_pciercx_cfg004_s         cn52xxp1;
51062    struct cvmx_pciercx_cfg004_s         cn56xx;
51063    struct cvmx_pciercx_cfg004_s         cn56xxp1;
51064} cvmx_pciercx_cfg004_t;
51065
51066
51067/**
51068 * cvmx_pcierc#_cfg005
51069 *
51070 * PCIE_CFG005 = Sixth 32-bits of PCIE type 1 config space (Base Address Register 0 - High)
51071 *
51072 */
51073typedef union
51074{
51075    uint32_t u32;
51076    struct cvmx_pciercx_cfg005_s
51077    {
51078#if __BYTE_ORDER == __BIG_ENDIAN
51079        uint32_t reserved_0_31           : 32;
51080#else
51081        uint32_t reserved_0_31           : 32;
51082#endif
51083    } s;
51084    struct cvmx_pciercx_cfg005_s         cn52xx;
51085    struct cvmx_pciercx_cfg005_s         cn52xxp1;
51086    struct cvmx_pciercx_cfg005_s         cn56xx;
51087    struct cvmx_pciercx_cfg005_s         cn56xxp1;
51088} cvmx_pciercx_cfg005_t;
51089
51090
51091/**
51092 * cvmx_pcierc#_cfg006
51093 *
51094 * PCIE_CFG006 = Seventh 32-bits of PCIE type 1 config space (Bus Number Registers)
51095 *
51096 */
51097typedef union
51098{
51099    uint32_t u32;
51100    struct cvmx_pciercx_cfg006_s
51101    {
51102#if __BYTE_ORDER == __BIG_ENDIAN
51103        uint32_t slt                     : 8;       /**< Secondary Latency Timer
51104                                                         Not applicable to PCI Express, hardwired to 0x00. */
51105        uint32_t subbnum                 : 8;       /**< Subordinate Bus Number */
51106        uint32_t sbnum                   : 8;       /**< Secondary Bus Number */
51107        uint32_t pbnum                   : 8;       /**< Primary Bus Number */
51108#else
51109        uint32_t pbnum                   : 8;
51110        uint32_t sbnum                   : 8;
51111        uint32_t subbnum                 : 8;
51112        uint32_t slt                     : 8;
51113#endif
51114    } s;
51115    struct cvmx_pciercx_cfg006_s         cn52xx;
51116    struct cvmx_pciercx_cfg006_s         cn52xxp1;
51117    struct cvmx_pciercx_cfg006_s         cn56xx;
51118    struct cvmx_pciercx_cfg006_s         cn56xxp1;
51119} cvmx_pciercx_cfg006_t;
51120
51121
51122/**
51123 * cvmx_pcierc#_cfg007
51124 *
51125 * PCIE_CFG007 = Eighth 32-bits of PCIE type 1 config space (IO Base and IO Limit/Secondary Status Register)
51126 *
51127 */
51128typedef union
51129{
51130    uint32_t u32;
51131    struct cvmx_pciercx_cfg007_s
51132    {
51133#if __BYTE_ORDER == __BIG_ENDIAN
51134        uint32_t dpe                     : 1;       /**< Detected Parity Error */
51135        uint32_t sse                     : 1;       /**< Signaled System Error */
51136        uint32_t rma                     : 1;       /**< Received Master Abort */
51137        uint32_t rta                     : 1;       /**< Received Target Abort */
51138        uint32_t sta                     : 1;       /**< Signaled Target Abort */
51139        uint32_t devt                    : 2;       /**< DEVSEL Timing
51140                                                         Not applicable for PCI Express. Hardwired to 0. */
51141        uint32_t mdpe                    : 1;       /**< Master Data Parity Error */
51142        uint32_t fbb                     : 1;       /**< Fast Back-to-Back Capable
51143                                                         Not applicable for PCI Express. Hardwired to 0. */
51144        uint32_t reserved_22_22          : 1;
51145        uint32_t m66                     : 1;       /**< 66 MHz Capable
51146                                                         Not applicable for PCI Express. Hardwired to 0. */
51147        uint32_t reserved_16_20          : 5;
51148        uint32_t lio_limi                : 4;       /**< I/O Space Limit */
51149        uint32_t reserved_9_11           : 3;
51150        uint32_t io32b                   : 1;       /**< 32-Bit I/O Space */
51151        uint32_t lio_base                : 4;       /**< I/O Space Base */
51152        uint32_t reserved_1_3            : 3;
51153        uint32_t io32a                   : 1;       /**< 32-Bit I/O Space
51154                                                         o 0 = 16-bit I/O addressing
51155                                                         o 1 = 32-bit I/O addressing
51156                                                         This bit is writable through the DBI. When the application
51157                                                         writes to this bit through the DBI, the same value is written
51158                                                         to bit 8 of this register. */
51159#else
51160        uint32_t io32a                   : 1;
51161        uint32_t reserved_1_3            : 3;
51162        uint32_t lio_base                : 4;
51163        uint32_t io32b                   : 1;
51164        uint32_t reserved_9_11           : 3;
51165        uint32_t lio_limi                : 4;
51166        uint32_t reserved_16_20          : 5;
51167        uint32_t m66                     : 1;
51168        uint32_t reserved_22_22          : 1;
51169        uint32_t fbb                     : 1;
51170        uint32_t mdpe                    : 1;
51171        uint32_t devt                    : 2;
51172        uint32_t sta                     : 1;
51173        uint32_t rta                     : 1;
51174        uint32_t rma                     : 1;
51175        uint32_t sse                     : 1;
51176        uint32_t dpe                     : 1;
51177#endif
51178    } s;
51179    struct cvmx_pciercx_cfg007_s         cn52xx;
51180    struct cvmx_pciercx_cfg007_s         cn52xxp1;
51181    struct cvmx_pciercx_cfg007_s         cn56xx;
51182    struct cvmx_pciercx_cfg007_s         cn56xxp1;
51183} cvmx_pciercx_cfg007_t;
51184
51185
51186/**
51187 * cvmx_pcierc#_cfg008
51188 *
51189 * PCIE_CFG008 = Ninth 32-bits of PCIE type 1 config space (Memory Base and Memory Limit Register)
51190 *
51191 */
51192typedef union
51193{
51194    uint32_t u32;
51195    struct cvmx_pciercx_cfg008_s
51196    {
51197#if __BYTE_ORDER == __BIG_ENDIAN
51198        uint32_t ml_addr                 : 12;      /**< Memory Limit Address */
51199        uint32_t reserved_16_19          : 4;
51200        uint32_t mb_addr                 : 12;      /**< Memory Base Address */
51201        uint32_t reserved_0_3            : 4;
51202#else
51203        uint32_t reserved_0_3            : 4;
51204        uint32_t mb_addr                 : 12;
51205        uint32_t reserved_16_19          : 4;
51206        uint32_t ml_addr                 : 12;
51207#endif
51208    } s;
51209    struct cvmx_pciercx_cfg008_s         cn52xx;
51210    struct cvmx_pciercx_cfg008_s         cn52xxp1;
51211    struct cvmx_pciercx_cfg008_s         cn56xx;
51212    struct cvmx_pciercx_cfg008_s         cn56xxp1;
51213} cvmx_pciercx_cfg008_t;
51214
51215
51216/**
51217 * cvmx_pcierc#_cfg009
51218 *
51219 * PCIE_CFG009 = Tenth 32-bits of PCIE type 1 config space (Prefetchable Memory Base and Limit Register)
51220 *
51221 */
51222typedef union
51223{
51224    uint32_t u32;
51225    struct cvmx_pciercx_cfg009_s
51226    {
51227#if __BYTE_ORDER == __BIG_ENDIAN
51228        uint32_t lmem_limit              : 12;      /**< Upper 12 bits of 32-bit Prefetchable Memory End Address */
51229        uint32_t reserved_17_19          : 3;
51230        uint32_t mem64b                  : 1;       /**< 64-Bit Memory Addressing
51231                                                         o 0 = 32-bit memory addressing
51232                                                         o 1 = 64-bit memory addressing */
51233        uint32_t lmem_base               : 12;      /**< Upper 12 bits of 32-bit Prefetchable Memory Start Address */
51234        uint32_t reserved_1_3            : 3;
51235        uint32_t mem64a                  : 1;       /**< 64-Bit Memory Addressing
51236                                                         o 0 = 32-bit memory addressing
51237                                                         o 1 = 64-bit memory addressing
51238                                                         This bit is writable through the DBI. When the application
51239                                                         writes to this bit through the DBI, the same value is written
51240                                                         to bit 16 of this register. */
51241#else
51242        uint32_t mem64a                  : 1;
51243        uint32_t reserved_1_3            : 3;
51244        uint32_t lmem_base               : 12;
51245        uint32_t mem64b                  : 1;
51246        uint32_t reserved_17_19          : 3;
51247        uint32_t lmem_limit              : 12;
51248#endif
51249    } s;
51250    struct cvmx_pciercx_cfg009_s         cn52xx;
51251    struct cvmx_pciercx_cfg009_s         cn52xxp1;
51252    struct cvmx_pciercx_cfg009_s         cn56xx;
51253    struct cvmx_pciercx_cfg009_s         cn56xxp1;
51254} cvmx_pciercx_cfg009_t;
51255
51256
51257/**
51258 * cvmx_pcierc#_cfg010
51259 *
51260 * PCIE_CFG010 = Eleventh 32-bits of PCIE type 1 config space (Prefetchable Base Upper 32 Bits Register)
51261 *
51262 */
51263typedef union
51264{
51265    uint32_t u32;
51266    struct cvmx_pciercx_cfg010_s
51267    {
51268#if __BYTE_ORDER == __BIG_ENDIAN
51269        uint32_t umem_base               : 32;      /**< Upper 32 Bits of Base Address of Prefetchable Memory Space
51270                                                         Used only when 64-bit prefetchable memory addressing is
51271                                                         enabled. */
51272#else
51273        uint32_t umem_base               : 32;
51274#endif
51275    } s;
51276    struct cvmx_pciercx_cfg010_s         cn52xx;
51277    struct cvmx_pciercx_cfg010_s         cn52xxp1;
51278    struct cvmx_pciercx_cfg010_s         cn56xx;
51279    struct cvmx_pciercx_cfg010_s         cn56xxp1;
51280} cvmx_pciercx_cfg010_t;
51281
51282
51283/**
51284 * cvmx_pcierc#_cfg011
51285 *
51286 * PCIE_CFG011 = Twelfth 32-bits of PCIE type 1 config space (Prefetchable Limit Upper 32 Bits Register)
51287 *
51288 */
51289typedef union
51290{
51291    uint32_t u32;
51292    struct cvmx_pciercx_cfg011_s
51293    {
51294#if __BYTE_ORDER == __BIG_ENDIAN
51295        uint32_t umem_limit              : 32;      /**< Upper 32 Bits of Limit Address of Prefetchable Memory Space
51296                                                         Used only when 64-bit prefetchable memory addressing is
51297                                                         enabled. */
51298#else
51299        uint32_t umem_limit              : 32;
51300#endif
51301    } s;
51302    struct cvmx_pciercx_cfg011_s         cn52xx;
51303    struct cvmx_pciercx_cfg011_s         cn52xxp1;
51304    struct cvmx_pciercx_cfg011_s         cn56xx;
51305    struct cvmx_pciercx_cfg011_s         cn56xxp1;
51306} cvmx_pciercx_cfg011_t;
51307
51308
51309/**
51310 * cvmx_pcierc#_cfg012
51311 *
51312 * PCIE_CFG012 = Thirteenth 32-bits of PCIE type 1 config space (IO Base and Limit Upper 16 Bits Register)
51313 *
51314 */
51315typedef union
51316{
51317    uint32_t u32;
51318    struct cvmx_pciercx_cfg012_s
51319    {
51320#if __BYTE_ORDER == __BIG_ENDIAN
51321        uint32_t uio_limit               : 16;      /**< Upper 16 Bits of I/O Limit (if 32-bit I/O decoding is supported
51322                                                         for devices on the secondary side) */
51323        uint32_t uio_base                : 16;      /**< Upper 16 Bits of I/O Base (if 32-bit I/O decoding is supported
51324                                                         for devices on the secondary side) */
51325#else
51326        uint32_t uio_base                : 16;
51327        uint32_t uio_limit               : 16;
51328#endif
51329    } s;
51330    struct cvmx_pciercx_cfg012_s         cn52xx;
51331    struct cvmx_pciercx_cfg012_s         cn52xxp1;
51332    struct cvmx_pciercx_cfg012_s         cn56xx;
51333    struct cvmx_pciercx_cfg012_s         cn56xxp1;
51334} cvmx_pciercx_cfg012_t;
51335
51336
51337/**
51338 * cvmx_pcierc#_cfg013
51339 *
51340 * PCIE_CFG013 = Fourteenth 32-bits of PCIE type 1 config space (Capability Pointer Register)
51341 *
51342 */
51343typedef union
51344{
51345    uint32_t u32;
51346    struct cvmx_pciercx_cfg013_s
51347    {
51348#if __BYTE_ORDER == __BIG_ENDIAN
51349        uint32_t reserved_8_31           : 24;
51350        uint32_t cp                      : 8;       /**< First Capability Pointer.
51351                                                         Points to Power Management Capability structure by
51352                                                         default, writable through the DBI
51353                                                         However, the application must not change this field. */
51354#else
51355        uint32_t cp                      : 8;
51356        uint32_t reserved_8_31           : 24;
51357#endif
51358    } s;
51359    struct cvmx_pciercx_cfg013_s         cn52xx;
51360    struct cvmx_pciercx_cfg013_s         cn52xxp1;
51361    struct cvmx_pciercx_cfg013_s         cn56xx;
51362    struct cvmx_pciercx_cfg013_s         cn56xxp1;
51363} cvmx_pciercx_cfg013_t;
51364
51365
51366/**
51367 * cvmx_pcierc#_cfg014
51368 *
51369 * PCIE_CFG014 = Fifteenth 32-bits of PCIE type 1 config space (Expansion ROM Base Address Register)
51370 *
51371 */
51372typedef union
51373{
51374    uint32_t u32;
51375    struct cvmx_pciercx_cfg014_s
51376    {
51377#if __BYTE_ORDER == __BIG_ENDIAN
51378        uint32_t reserved_0_31           : 32;
51379#else
51380        uint32_t reserved_0_31           : 32;
51381#endif
51382    } s;
51383    struct cvmx_pciercx_cfg014_s         cn52xx;
51384    struct cvmx_pciercx_cfg014_s         cn52xxp1;
51385    struct cvmx_pciercx_cfg014_s         cn56xx;
51386    struct cvmx_pciercx_cfg014_s         cn56xxp1;
51387} cvmx_pciercx_cfg014_t;
51388
51389
51390/**
51391 * cvmx_pcierc#_cfg015
51392 *
51393 * PCIE_CFG015 = Sixteenth 32-bits of PCIE type 1 config space (Interrupt Line Register/Interrupt Pin/Bridge Control Register)
51394 *
51395 */
51396typedef union
51397{
51398    uint32_t u32;
51399    struct cvmx_pciercx_cfg015_s
51400    {
51401#if __BYTE_ORDER == __BIG_ENDIAN
51402        uint32_t reserved_28_31          : 4;
51403        uint32_t dtsees                  : 1;       /**< Discard Timer SERR Enable Status
51404                                                         Not applicable to PCI Express, hardwired to 0. */
51405        uint32_t dts                     : 1;       /**< Discard Timer Status
51406                                                         Not applicable to PCI Express, hardwired to 0. */
51407        uint32_t sdt                     : 1;       /**< Secondary Discard Timer
51408                                                         Not applicable to PCI Express, hardwired to 0. */
51409        uint32_t pdt                     : 1;       /**< Primary Discard Timer
51410                                                         Not applicable to PCI Express, hardwired to 0. */
51411        uint32_t fbbe                    : 1;       /**< Fast Back-to-Back Transactions Enable
51412                                                         Not applicable to PCI Express, hardwired to 0. */
51413        uint32_t sbrst                   : 1;       /**< Secondary Bus Reset
51414                                                         Hot reset. Causes TS1s with the hot reset bit to be sent to
51415                                                         the link partner. When set, SW should wait 2ms before
51416                                                         clearing. The link partner normally responds by sending TS1s
51417                                                         with the hot reset bit set, which will cause a link
51418                                                         down event - refer to "PCIe Link-Down Reset in RC Mode"
51419                                                         section. */
51420        uint32_t mam                     : 1;       /**< Master Abort Mode
51421                                                         Not applicable to PCI Express, hardwired to 0. */
51422        uint32_t vga16d                  : 1;       /**< VGA 16-Bit Decode */
51423        uint32_t vgae                    : 1;       /**< VGA Enable */
51424        uint32_t isae                    : 1;       /**< ISA Enable */
51425        uint32_t see                     : 1;       /**< SERR Enable */
51426        uint32_t pere                    : 1;       /**< Parity Error Response Enable */
51427        uint32_t inta                    : 8;       /**< Interrupt Pin
51428                                                         Identifies the legacy interrupt Message that the device
51429                                                         (or device function) uses.
51430                                                         The Interrupt Pin register is writable through the DBI.
51431                                                         In a single-function configuration, only INTA is used.
51432                                                         Therefore, the application must not change this field. */
51433        uint32_t il                      : 8;       /**< Interrupt Line */
51434#else
51435        uint32_t il                      : 8;
51436        uint32_t inta                    : 8;
51437        uint32_t pere                    : 1;
51438        uint32_t see                     : 1;
51439        uint32_t isae                    : 1;
51440        uint32_t vgae                    : 1;
51441        uint32_t vga16d                  : 1;
51442        uint32_t mam                     : 1;
51443        uint32_t sbrst                   : 1;
51444        uint32_t fbbe                    : 1;
51445        uint32_t pdt                     : 1;
51446        uint32_t sdt                     : 1;
51447        uint32_t dts                     : 1;
51448        uint32_t dtsees                  : 1;
51449        uint32_t reserved_28_31          : 4;
51450#endif
51451    } s;
51452    struct cvmx_pciercx_cfg015_s         cn52xx;
51453    struct cvmx_pciercx_cfg015_s         cn52xxp1;
51454    struct cvmx_pciercx_cfg015_s         cn56xx;
51455    struct cvmx_pciercx_cfg015_s         cn56xxp1;
51456} cvmx_pciercx_cfg015_t;
51457
51458
51459/**
51460 * cvmx_pcierc#_cfg016
51461 *
51462 * PCIE_CFG016 = Seventeenth 32-bits of PCIE type 1 config space
51463 * (Power Management Capability ID/
51464 * Power Management Next Item Pointer/
51465 * Power Management Capabilities Register)
51466 */
51467typedef union
51468{
51469    uint32_t u32;
51470    struct cvmx_pciercx_cfg016_s
51471    {
51472#if __BYTE_ORDER == __BIG_ENDIAN
51473        uint32_t pmes                    : 5;       /**< PME_Support
51474                                                         A value of 0 for any bit indicates that the
51475                                                         device (or function) is not capable of generating PME Messages
51476                                                         while in that power state:
51477                                                         o Bit 11: If set, PME Messages can be generated from D0
51478                                                         o Bit 12: If set, PME Messages can be generated from D1
51479                                                         o Bit 13: If set, PME Messages can be generated from D2
51480                                                         o Bit 14: If set, PME Messages can be generated from D3hot
51481                                                         o Bit 15: If set, PME Messages can be generated from D3cold
51482                                                         The PME_Support field is writable through the DBI.
51483                                                         However, the application must not change this field. */
51484        uint32_t d2s                     : 1;       /**< D2 Support, writable through the DBI
51485                                                         However, the application must not change this field. */
51486        uint32_t d1s                     : 1;       /**< D1 Support, writable through the DBI
51487                                                         However, the application must not change this field. */
51488        uint32_t auxc                    : 3;       /**< AUX Current, writable through the DBI
51489                                                         However, the application must not change this field. */
51490        uint32_t dsi                     : 1;       /**< Device Specific Initialization (DSI), writable through the DBI
51491                                                         However, the application must not change this field. */
51492        uint32_t reserved_20_20          : 1;
51493        uint32_t pme_clock               : 1;       /**< PME Clock, hardwired to 0 */
51494        uint32_t pmsv                    : 3;       /**< Power Management Specification Version, writable through the DBI
51495                                                         However, the application must not change this field. */
51496        uint32_t ncp                     : 8;       /**< Next Capability Pointer
51497                                                         Points to the MSI capabilities by default, writable
51498                                                         through the DBI. */
51499        uint32_t pmcid                   : 8;       /**< Power Management Capability ID */
51500#else
51501        uint32_t pmcid                   : 8;
51502        uint32_t ncp                     : 8;
51503        uint32_t pmsv                    : 3;
51504        uint32_t pme_clock               : 1;
51505        uint32_t reserved_20_20          : 1;
51506        uint32_t dsi                     : 1;
51507        uint32_t auxc                    : 3;
51508        uint32_t d1s                     : 1;
51509        uint32_t d2s                     : 1;
51510        uint32_t pmes                    : 5;
51511#endif
51512    } s;
51513    struct cvmx_pciercx_cfg016_s         cn52xx;
51514    struct cvmx_pciercx_cfg016_s         cn52xxp1;
51515    struct cvmx_pciercx_cfg016_s         cn56xx;
51516    struct cvmx_pciercx_cfg016_s         cn56xxp1;
51517} cvmx_pciercx_cfg016_t;
51518
51519
51520/**
51521 * cvmx_pcierc#_cfg017
51522 *
51523 * PCIE_CFG017 = Eighteenth 32-bits of PCIE type 1 config space (Power Management Control and Status Register)
51524 *
51525 */
51526typedef union
51527{
51528    uint32_t u32;
51529    struct cvmx_pciercx_cfg017_s
51530    {
51531#if __BYTE_ORDER == __BIG_ENDIAN
51532        uint32_t pmdia                   : 8;       /**< Data register for additional information (not supported) */
51533        uint32_t bpccee                  : 1;       /**< Bus Power/Clock Control Enable, hardwired to 0 */
51534        uint32_t bd3h                    : 1;       /**< B2/B3 Support, hardwired to 0 */
51535        uint32_t reserved_16_21          : 6;
51536        uint32_t pmess                   : 1;       /**< PME Status
51537                                                         Indicates if a previously enabled PME event occurred or not. */
51538        uint32_t pmedsia                 : 2;       /**< Data Scale (not supported) */
51539        uint32_t pmds                    : 4;       /**< Data Select (not supported) */
51540        uint32_t pmeens                  : 1;       /**< PME Enable
51541                                                         A value of 1 indicates that the device is enabled to
51542                                                         generate PME. */
51543        uint32_t reserved_4_7            : 4;
51544        uint32_t nsr                     : 1;       /**< No Soft Reset, writable through the DBI
51545                                                         However, the application must not change this field. */
51546        uint32_t reserved_2_2            : 1;
51547        uint32_t ps                      : 2;       /**< Power State
51548                                                         Controls the device power state:
51549                                                           o 00b: D0
51550                                                           o 01b: D1
51551                                                           o 10b: D2
51552                                                           o 11b: D3
51553                                                         The written value is ignored if the specific state is
51554                                                         not supported. */
51555#else
51556        uint32_t ps                      : 2;
51557        uint32_t reserved_2_2            : 1;
51558        uint32_t nsr                     : 1;
51559        uint32_t reserved_4_7            : 4;
51560        uint32_t pmeens                  : 1;
51561        uint32_t pmds                    : 4;
51562        uint32_t pmedsia                 : 2;
51563        uint32_t pmess                   : 1;
51564        uint32_t reserved_16_21          : 6;
51565        uint32_t bd3h                    : 1;
51566        uint32_t bpccee                  : 1;
51567        uint32_t pmdia                   : 8;
51568#endif
51569    } s;
51570    struct cvmx_pciercx_cfg017_s         cn52xx;
51571    struct cvmx_pciercx_cfg017_s         cn52xxp1;
51572    struct cvmx_pciercx_cfg017_s         cn56xx;
51573    struct cvmx_pciercx_cfg017_s         cn56xxp1;
51574} cvmx_pciercx_cfg017_t;
51575
51576
51577/**
51578 * cvmx_pcierc#_cfg020
51579 *
51580 * PCIE_CFG020 = Twenty-first 32-bits of PCIE type 1 config space
51581 * (MSI Capability ID/
51582 *  MSI Next Item Pointer/
51583 *  MSI Control Register)
51584 */
51585typedef union
51586{
51587    uint32_t u32;
51588    struct cvmx_pciercx_cfg020_s
51589    {
51590#if __BYTE_ORDER == __BIG_ENDIAN
51591        uint32_t reserved_24_31          : 8;
51592        uint32_t m64                     : 1;       /**< 64-bit Address Capable, writable through the DBI
51593                                                         However, the application must not change this field. */
51594        uint32_t mme                     : 3;       /**< Multiple Message Enabled
51595                                                         Indicates that multiple Message mode is enabled by system
51596                                                         software. The number of Messages enabled must be less than
51597                                                         or equal to the Multiple Message Capable value. */
51598        uint32_t mmc                     : 3;       /**< Multiple Message Capable, writable through the DBI
51599                                                         However, the application must not change this field. */
51600        uint32_t msien                   : 1;       /**< MSI Enabled
51601                                                         When set, INTx must be disabled.
51602                                                         This bit must never be set, as internal-MSI is not supported in
51603                                                         RC mode. (Note that this has no effect on external MSI, which
51604                                                         will be commonly used in RC mode.) */
51605        uint32_t ncp                     : 8;       /**< Next Capability Pointer
51606                                                         Points to PCI Express Capabilities by default,
51607                                                         writable through the DBI.
51608                                                         However, the application must not change this field. */
51609        uint32_t msicid                  : 8;       /**< MSI Capability ID */
51610#else
51611        uint32_t msicid                  : 8;
51612        uint32_t ncp                     : 8;
51613        uint32_t msien                   : 1;
51614        uint32_t mmc                     : 3;
51615        uint32_t mme                     : 3;
51616        uint32_t m64                     : 1;
51617        uint32_t reserved_24_31          : 8;
51618#endif
51619    } s;
51620    struct cvmx_pciercx_cfg020_s         cn52xx;
51621    struct cvmx_pciercx_cfg020_s         cn52xxp1;
51622    struct cvmx_pciercx_cfg020_s         cn56xx;
51623    struct cvmx_pciercx_cfg020_s         cn56xxp1;
51624} cvmx_pciercx_cfg020_t;
51625
51626
51627/**
51628 * cvmx_pcierc#_cfg021
51629 *
51630 * PCIE_CFG021 = Twenty-second 32-bits of PCIE type 1 config space (MSI Lower 32 Bits Address Register)
51631 *
51632 */
51633typedef union
51634{
51635    uint32_t u32;
51636    struct cvmx_pciercx_cfg021_s
51637    {
51638#if __BYTE_ORDER == __BIG_ENDIAN
51639        uint32_t lmsi                    : 30;      /**< Lower 32-bit Address */
51640        uint32_t reserved_0_1            : 2;
51641#else
51642        uint32_t reserved_0_1            : 2;
51643        uint32_t lmsi                    : 30;
51644#endif
51645    } s;
51646    struct cvmx_pciercx_cfg021_s         cn52xx;
51647    struct cvmx_pciercx_cfg021_s         cn52xxp1;
51648    struct cvmx_pciercx_cfg021_s         cn56xx;
51649    struct cvmx_pciercx_cfg021_s         cn56xxp1;
51650} cvmx_pciercx_cfg021_t;
51651
51652
51653/**
51654 * cvmx_pcierc#_cfg022
51655 *
51656 * PCIE_CFG022 = Twenty-third 32-bits of PCIE type 1 config space (MSI Upper 32 bits Address Register)
51657 *
51658 */
51659typedef union
51660{
51661    uint32_t u32;
51662    struct cvmx_pciercx_cfg022_s
51663    {
51664#if __BYTE_ORDER == __BIG_ENDIAN
51665        uint32_t umsi                    : 32;      /**< Upper 32-bit Address */
51666#else
51667        uint32_t umsi                    : 32;
51668#endif
51669    } s;
51670    struct cvmx_pciercx_cfg022_s         cn52xx;
51671    struct cvmx_pciercx_cfg022_s         cn52xxp1;
51672    struct cvmx_pciercx_cfg022_s         cn56xx;
51673    struct cvmx_pciercx_cfg022_s         cn56xxp1;
51674} cvmx_pciercx_cfg022_t;
51675
51676
51677/**
51678 * cvmx_pcierc#_cfg023
51679 *
51680 * PCIE_CFG023 = Twenty-fourth 32-bits of PCIE type 1 config space (MSI Data Register)
51681 *
51682 */
51683typedef union
51684{
51685    uint32_t u32;
51686    struct cvmx_pciercx_cfg023_s
51687    {
51688#if __BYTE_ORDER == __BIG_ENDIAN
51689        uint32_t reserved_16_31          : 16;
51690        uint32_t msimd                   : 16;      /**< MSI Data
51691                                                         Pattern assigned by system software, bits [4:0] are Or-ed with
51692                                                         MSI_VECTOR to generate 32 MSI Messages per function. */
51693#else
51694        uint32_t msimd                   : 16;
51695        uint32_t reserved_16_31          : 16;
51696#endif
51697    } s;
51698    struct cvmx_pciercx_cfg023_s         cn52xx;
51699    struct cvmx_pciercx_cfg023_s         cn52xxp1;
51700    struct cvmx_pciercx_cfg023_s         cn56xx;
51701    struct cvmx_pciercx_cfg023_s         cn56xxp1;
51702} cvmx_pciercx_cfg023_t;
51703
51704
51705/**
51706 * cvmx_pcierc#_cfg028
51707 *
51708 * PCIE_CFG028 = Twenty-ninth 32-bits of PCIE type 1 config space
51709 * (PCI Express Capabilities List Register/
51710 *  PCI Express Capabilities Register)
51711 */
51712typedef union
51713{
51714    uint32_t u32;
51715    struct cvmx_pciercx_cfg028_s
51716    {
51717#if __BYTE_ORDER == __BIG_ENDIAN
51718        uint32_t reserved_30_31          : 2;
51719        uint32_t imn                     : 5;       /**< Interrupt Message Number
51720                                                         Updated by hardware, writable through the DBI.
51721                                                          However, the application must not change this field. */
51722        uint32_t si                      : 1;       /**< Slot Implemented
51723                                                         This bit is writable through the DBI. However, it must 0 for an
51724                                                         Endpoint device. Therefore, the application must not write a
51725                                                         1 to this bit. */
51726        uint32_t dpt                     : 4;       /**< Device Port Type */
51727        uint32_t pciecv                  : 4;       /**< PCI Express Capability Version */
51728        uint32_t ncp                     : 8;       /**< Next Capability Pointer
51729                                                         writable through the DBI.
51730                                                         However, the application must not change this field. */
51731        uint32_t pcieid                  : 8;       /**< PCIE Capability ID */
51732#else
51733        uint32_t pcieid                  : 8;
51734        uint32_t ncp                     : 8;
51735        uint32_t pciecv                  : 4;
51736        uint32_t dpt                     : 4;
51737        uint32_t si                      : 1;
51738        uint32_t imn                     : 5;
51739        uint32_t reserved_30_31          : 2;
51740#endif
51741    } s;
51742    struct cvmx_pciercx_cfg028_s         cn52xx;
51743    struct cvmx_pciercx_cfg028_s         cn52xxp1;
51744    struct cvmx_pciercx_cfg028_s         cn56xx;
51745    struct cvmx_pciercx_cfg028_s         cn56xxp1;
51746} cvmx_pciercx_cfg028_t;
51747
51748
51749/**
51750 * cvmx_pcierc#_cfg029
51751 *
51752 * PCIE_CFG029 = Thirtieth 32-bits of PCIE type 1 config space (Device Capabilities Register)
51753 *
51754 */
51755typedef union
51756{
51757    uint32_t u32;
51758    struct cvmx_pciercx_cfg029_s
51759    {
51760#if __BYTE_ORDER == __BIG_ENDIAN
51761        uint32_t reserved_28_31          : 4;
51762        uint32_t cspls                   : 2;       /**< Captured Slot Power Limit Scale
51763                                                         Not applicable for RC port, upstream port only. */
51764        uint32_t csplv                   : 8;       /**< Captured Slot Power Limit Value
51765                                                         Not applicable for RC port, upstream port only. */
51766        uint32_t reserved_16_17          : 2;
51767        uint32_t rber                    : 1;       /**< Role-Based Error Reporting, writable through the DBI
51768                                                         However, the application must not change this field. */
51769        uint32_t reserved_12_14          : 3;
51770        uint32_t el1al                   : 3;       /**< Endpoint L1 Acceptable Latency, writable through the DBI
51771                                                         Must be 0x0 for non-endpoint devices. */
51772        uint32_t el0al                   : 3;       /**< Endpoint L0s Acceptable Latency, writable through the DBI
51773                                                         Must be 0x0 for non-endpoint devices. */
51774        uint32_t etfs                    : 1;       /**< Extended Tag Field Supported
51775                                                         This bit is writable through the DBI. However, the application
51776                                                         must not write a 1 to this bit. */
51777        uint32_t pfs                     : 2;       /**< Phantom Function Supported
51778                                                         This field is writable through the DBI. However, Phantom
51779                                                         Function is not supported. Therefore, the application must not
51780                                                         write any value other than 0x0 to this field. */
51781        uint32_t mpss                    : 3;       /**< Max_Payload_Size Supported, writable through the DBI
51782                                                         However, the application must not change this field. */
51783#else
51784        uint32_t mpss                    : 3;
51785        uint32_t pfs                     : 2;
51786        uint32_t etfs                    : 1;
51787        uint32_t el0al                   : 3;
51788        uint32_t el1al                   : 3;
51789        uint32_t reserved_12_14          : 3;
51790        uint32_t rber                    : 1;
51791        uint32_t reserved_16_17          : 2;
51792        uint32_t csplv                   : 8;
51793        uint32_t cspls                   : 2;
51794        uint32_t reserved_28_31          : 4;
51795#endif
51796    } s;
51797    struct cvmx_pciercx_cfg029_s         cn52xx;
51798    struct cvmx_pciercx_cfg029_s         cn52xxp1;
51799    struct cvmx_pciercx_cfg029_s         cn56xx;
51800    struct cvmx_pciercx_cfg029_s         cn56xxp1;
51801} cvmx_pciercx_cfg029_t;
51802
51803
51804/**
51805 * cvmx_pcierc#_cfg030
51806 *
51807 * PCIE_CFG030 = Thirty-first 32-bits of PCIE type 1 config space
51808 * (Device Control Register/Device Status Register)
51809 */
51810typedef union
51811{
51812    uint32_t u32;
51813    struct cvmx_pciercx_cfg030_s
51814    {
51815#if __BYTE_ORDER == __BIG_ENDIAN
51816        uint32_t reserved_22_31          : 10;
51817        uint32_t tp                      : 1;       /**< Transaction Pending
51818                                                         Set to 1 when Non-Posted Requests are not yet completed
51819                                                         and clear when they are completed. */
51820        uint32_t ap_d                    : 1;       /**< Aux Power Detected
51821                                                         Set to 1 if Aux power detected. */
51822        uint32_t ur_d                    : 1;       /**< Unsupported Request Detected
51823                                                         Errors are logged in this register regardless of whether
51824                                                          error reporting is enabled in the Device Control register.
51825                                                         UR_D occurs when we receive something we don't support.
51826                                                         Unsupported requests are Nonfatal errors, so UR_D should
51827                                                         cause NFE_D.  Receiving a  vendor defined message should
51828                                                         cause an unsupported request. */
51829        uint32_t fe_d                    : 1;       /**< Fatal Error Detected
51830                                                         Errors are logged in this register regardless of whether
51831                                                          error reporting is enabled in the Device Control register.
51832                                                         FE_D is set if receive any of the errors in PCIE_CFG066 that
51833                                                         has a severity set to Fatal.  Malformed TLP's generally fit
51834                                                         into this category. */
51835        uint32_t nfe_d                   : 1;       /**< Non-Fatal Error detected
51836                                                         Errors are logged in this register regardless of whether
51837                                                          error reporting is enabled in the Device Control register.
51838                                                         NFE_D is set if we receive any of the errors in PCIE_CFG066
51839                                                         that has a severity set to Nonfatal and does NOT meet Advisory
51840                                                         Nonfatal criteria (PCIe 1.1 spec, Section 6.2.3.2.4), which
51841                                                         most poisoned TLP's should be. */
51842        uint32_t ce_d                    : 1;       /**< Correctable Error Detected
51843                                                          Errors are logged in this register regardless of whether
51844                                                          error reporting is enabled in the Device Control register.
51845                                                         CE_D is set if we receive any of the errors in PCIE_CFG068
51846                                                         for example a Replay Timer Timeout.  Also, it can be set if
51847                                                         we get any of the errors in PCIE_CFG066 that has a severity
51848                                                         set to Nonfatal and meets the Advisory Nonfatal criteria
51849                                                         (PCIe 1.1 spec, Section 6.2.3.2.4), which most ECRC errors
51850                                                         should be. */
51851        uint32_t reserved_15_15          : 1;
51852        uint32_t mrrs                    : 3;       /**< Max Read Request Size
51853                                                          0 = 128B
51854                                                          1 = 256B
51855                                                          2 = 512B
51856                                                          3 = 1024B
51857                                                          4 = 2048B
51858                                                          5 = 4096B
51859                                                         Note: NPEI_CTL_STATUS2[MRRS] also must be set properly.
51860                                                         NPEI_CTL_STATUS2[MRRS] must not exceed the
51861                                                         desired max read request size. */
51862        uint32_t ns_en                   : 1;       /**< Enable No Snoop */
51863        uint32_t ap_en                   : 1;       /**< AUX Power PM Enable */
51864        uint32_t pf_en                   : 1;       /**< Phantom Function Enable
51865                                                         This bit should never be set - OCTEON requests never use
51866                                                         phantom functions. */
51867        uint32_t etf_en                  : 1;       /**< Extended Tag Field Enable
51868                                                         This bit should never be set - OCTEON requests never use
51869                                                         extended tags. */
51870        uint32_t mps                     : 3;       /**< Max Payload Size
51871                                                          Legal values:
51872                                                           0  = 128B
51873                                                           1  = 256B
51874                                                          Larger sizes not supported.
51875                                                         Note: Both PCI Express Ports must be set to the same value
51876                                                               for Peer-to-Peer to function properly.
51877                                                         Note: NPEI_CTL_STATUS2[MPS] must also be set to the same
51878                                                               value for proper functionality. */
51879        uint32_t ro_en                   : 1;       /**< Enable Relaxed Ordering */
51880        uint32_t ur_en                   : 1;       /**< Unsupported Request Reporting Enable */
51881        uint32_t fe_en                   : 1;       /**< Fatal Error Reporting Enable */
51882        uint32_t nfe_en                  : 1;       /**< Non-Fatal Error Reporting Enable */
51883        uint32_t ce_en                   : 1;       /**< Correctable Error Reporting Enable */
51884#else
51885        uint32_t ce_en                   : 1;
51886        uint32_t nfe_en                  : 1;
51887        uint32_t fe_en                   : 1;
51888        uint32_t ur_en                   : 1;
51889        uint32_t ro_en                   : 1;
51890        uint32_t mps                     : 3;
51891        uint32_t etf_en                  : 1;
51892        uint32_t pf_en                   : 1;
51893        uint32_t ap_en                   : 1;
51894        uint32_t ns_en                   : 1;
51895        uint32_t mrrs                    : 3;
51896        uint32_t reserved_15_15          : 1;
51897        uint32_t ce_d                    : 1;
51898        uint32_t nfe_d                   : 1;
51899        uint32_t fe_d                    : 1;
51900        uint32_t ur_d                    : 1;
51901        uint32_t ap_d                    : 1;
51902        uint32_t tp                      : 1;
51903        uint32_t reserved_22_31          : 10;
51904#endif
51905    } s;
51906    struct cvmx_pciercx_cfg030_s         cn52xx;
51907    struct cvmx_pciercx_cfg030_s         cn52xxp1;
51908    struct cvmx_pciercx_cfg030_s         cn56xx;
51909    struct cvmx_pciercx_cfg030_s         cn56xxp1;
51910} cvmx_pciercx_cfg030_t;
51911
51912
51913/**
51914 * cvmx_pcierc#_cfg031
51915 *
51916 * PCIE_CFG031 = Thirty-second 32-bits of PCIE type 1 config space
51917 * (Link Capabilities Register)
51918 */
51919typedef union
51920{
51921    uint32_t u32;
51922    struct cvmx_pciercx_cfg031_s
51923    {
51924#if __BYTE_ORDER == __BIG_ENDIAN
51925        uint32_t pnum                    : 8;       /**< Port Number, writable through the DBI
51926                                                         However, the application must not change this field. */
51927        uint32_t reserved_22_23          : 2;
51928        uint32_t lbnc                    : 1;       /**< Link Bandwith Notification Capability */
51929        uint32_t dllarc                  : 1;       /**< Data Link Layer Active Reporting Capable
51930                                                         Set to 1 for Root Complex devices and 0 for Endpoint devices. */
51931        uint32_t sderc                   : 1;       /**< Surprise Down Error Reporting Capable
51932                                                         Not supported, hardwired to 0x0. */
51933        uint32_t cpm                     : 1;       /**< Clock Power Management
51934                                                         The default value is the value you specify during hardware
51935                                                         configuration, writable through the DBI.
51936                                                         However, the application must not change this field. */
51937        uint32_t l1el                    : 3;       /**< L1 Exit Latency
51938                                                         The default value is the value you specify during hardware
51939                                                         configuration, writable through the DBI.
51940                                                         However, the application must not change this field. */
51941        uint32_t l0el                    : 3;       /**< L0s Exit Latency
51942                                                         The default value is the value you specify during hardware
51943                                                         configuration, writable through the DBI.
51944                                                         However, the application must not change this field. */
51945        uint32_t aslpms                  : 2;       /**< Active State Link PM Support
51946                                                         The default value is the value you specify during hardware
51947                                                         configuration, writable through the DBI.
51948                                                         However, the application must not change this field. */
51949        uint32_t mlw                     : 6;       /**< Maximum Link Width
51950                                                         The default value is the value you specify during hardware
51951                                                         configuration (x1, x4, x8, or x16), writable through the DBI.
51952                                                         The SW needs to set this to 0x8 or 0x4 depending on the max
51953                                                         number of lanes (QLM_CFG == 0 set to 0x8 else 0x4). */
51954        uint32_t mls                     : 4;       /**< Maximum Link Speed
51955                                                         Default value is 0x1 for 2.5 Gbps Link.
51956                                                         This field is writable through the DBI. However, 0x1 is the
51957                                                         only supported value. Therefore, the application must not write
51958                                                         any value other than 0x1 to this field. */
51959#else
51960        uint32_t mls                     : 4;
51961        uint32_t mlw                     : 6;
51962        uint32_t aslpms                  : 2;
51963        uint32_t l0el                    : 3;
51964        uint32_t l1el                    : 3;
51965        uint32_t cpm                     : 1;
51966        uint32_t sderc                   : 1;
51967        uint32_t dllarc                  : 1;
51968        uint32_t lbnc                    : 1;
51969        uint32_t reserved_22_23          : 2;
51970        uint32_t pnum                    : 8;
51971#endif
51972    } s;
51973    struct cvmx_pciercx_cfg031_s         cn52xx;
51974    struct cvmx_pciercx_cfg031_s         cn52xxp1;
51975    struct cvmx_pciercx_cfg031_s         cn56xx;
51976    struct cvmx_pciercx_cfg031_s         cn56xxp1;
51977} cvmx_pciercx_cfg031_t;
51978
51979
51980/**
51981 * cvmx_pcierc#_cfg032
51982 *
51983 * PCIE_CFG032 = Thirty-third 32-bits of PCIE type 1 config space
51984 * (Link Control Register/Link Status Register)
51985 */
51986typedef union
51987{
51988    uint32_t u32;
51989    struct cvmx_pciercx_cfg032_s
51990    {
51991#if __BYTE_ORDER == __BIG_ENDIAN
51992        uint32_t lab                     : 1;       /**< Link Autonomous Bandwidth Status */
51993        uint32_t lbm                     : 1;       /**< Link Bandwidth Management Status */
51994        uint32_t dlla                    : 1;       /**< Data Link Layer Active */
51995        uint32_t scc                     : 1;       /**< Slot Clock Configuration
51996                                                         Indicates that the component uses the same physical reference
51997                                                         clock that the platform provides on the connector. The default
51998                                                         value is the value you select during hardware configuration,
51999                                                         writable through the DBI.
52000                                                         However, the application must not change this field. */
52001        uint32_t lt                      : 1;       /**< Link Training */
52002        uint32_t reserved_26_26          : 1;
52003        uint32_t nlw                     : 6;       /**< Negotiated Link Width
52004                                                         Set automatically by hardware after Link initialization. */
52005        uint32_t ls                      : 4;       /**< Link Speed
52006                                                         The negotiated Link speed: 2.5 Gbps */
52007        uint32_t reserved_12_15          : 4;
52008        uint32_t lab_int_enb             : 1;       /**< Link Autonomous Bandwidth Interrupt Enable
52009                                                         This interrupt is for Gen2 and is not supported. This bit should
52010                                                         always be written to zero. */
52011        uint32_t lbm_int_enb             : 1;       /**< Link Bandwidth Management Interrupt Enable
52012                                                         This interrupt is for Gen2 and is not supported. This bit should
52013                                                         always be written to zero. */
52014        uint32_t hawd                    : 1;       /**< Hardware Autonomous Width Disable
52015                                                         (Not Supported) */
52016        uint32_t ecpm                    : 1;       /**< Enable Clock Power Management
52017                                                         Hardwired to 0 if Clock Power Management is disabled in
52018                                                         the Link Capabilities register. */
52019        uint32_t es                      : 1;       /**< Extended Synch */
52020        uint32_t ccc                     : 1;       /**< Common Clock Configuration */
52021        uint32_t rl                      : 1;       /**< Retrain Link */
52022        uint32_t ld                      : 1;       /**< Link Disable */
52023        uint32_t rcb                     : 1;       /**< Read Completion Boundary (RCB), writable through the DBI
52024                                                         However, the application must not change this field
52025                                                         because an RCB of 64 bytes is not supported. */
52026        uint32_t reserved_2_2            : 1;
52027        uint32_t aslpc                   : 2;       /**< Active State Link PM Control */
52028#else
52029        uint32_t aslpc                   : 2;
52030        uint32_t reserved_2_2            : 1;
52031        uint32_t rcb                     : 1;
52032        uint32_t ld                      : 1;
52033        uint32_t rl                      : 1;
52034        uint32_t ccc                     : 1;
52035        uint32_t es                      : 1;
52036        uint32_t ecpm                    : 1;
52037        uint32_t hawd                    : 1;
52038        uint32_t lbm_int_enb             : 1;
52039        uint32_t lab_int_enb             : 1;
52040        uint32_t reserved_12_15          : 4;
52041        uint32_t ls                      : 4;
52042        uint32_t nlw                     : 6;
52043        uint32_t reserved_26_26          : 1;
52044        uint32_t lt                      : 1;
52045        uint32_t scc                     : 1;
52046        uint32_t dlla                    : 1;
52047        uint32_t lbm                     : 1;
52048        uint32_t lab                     : 1;
52049#endif
52050    } s;
52051    struct cvmx_pciercx_cfg032_s         cn52xx;
52052    struct cvmx_pciercx_cfg032_s         cn52xxp1;
52053    struct cvmx_pciercx_cfg032_s         cn56xx;
52054    struct cvmx_pciercx_cfg032_s         cn56xxp1;
52055} cvmx_pciercx_cfg032_t;
52056
52057
52058/**
52059 * cvmx_pcierc#_cfg033
52060 *
52061 * PCIE_CFG033 = Thirty-fourth 32-bits of PCIE type 1 config space
52062 * (Slot Capabilities Register)
52063 */
52064typedef union
52065{
52066    uint32_t u32;
52067    struct cvmx_pciercx_cfg033_s
52068    {
52069#if __BYTE_ORDER == __BIG_ENDIAN
52070        uint32_t ps_num                  : 13;      /**< Physical Slot Number, writable through the DBI
52071                                                         However, the application must not change this field. */
52072        uint32_t nccs                    : 1;       /**< No Command Complete Support, writable through the DBI
52073                                                         However, the application must not change this field. */
52074        uint32_t emip                    : 1;       /**< Electromechanical Interlock Present, writable through the DBI
52075                                                         However, the application must not change this field. */
52076        uint32_t sp_ls                   : 2;       /**< Slot Power Limit Scale, writable through the DBI. */
52077        uint32_t sp_lv                   : 8;       /**< Slot Power Limit Value, writable through the DBI. */
52078        uint32_t hp_c                    : 1;       /**< Hot-Plug Capable, writable through the DBI
52079                                                         However, the application must not change this field. */
52080        uint32_t hp_s                    : 1;       /**< Hot-Plug Surprise, writable through the DBI
52081                                                         However, the application must not change this field. */
52082        uint32_t pip                     : 1;       /**< Power Indicator Present, writable through the DBI
52083                                                         However, the application must not change this field. */
52084        uint32_t aip                     : 1;       /**< Attention Indicator Present, writable through the DBI
52085                                                         However, the application must not change this field. */
52086        uint32_t mrlsp                   : 1;       /**< MRL Sensor Present, writable through the DBI
52087                                                         However, the application must not change this field. */
52088        uint32_t pcp                     : 1;       /**< Power Controller Present, writable through the DBI
52089                                                         However, the application must not change this field. */
52090        uint32_t abp                     : 1;       /**< Attention Button Present, writable through the DBI
52091                                                         However, the application must not change this field. */
52092#else
52093        uint32_t abp                     : 1;
52094        uint32_t pcp                     : 1;
52095        uint32_t mrlsp                   : 1;
52096        uint32_t aip                     : 1;
52097        uint32_t pip                     : 1;
52098        uint32_t hp_s                    : 1;
52099        uint32_t hp_c                    : 1;
52100        uint32_t sp_lv                   : 8;
52101        uint32_t sp_ls                   : 2;
52102        uint32_t emip                    : 1;
52103        uint32_t nccs                    : 1;
52104        uint32_t ps_num                  : 13;
52105#endif
52106    } s;
52107    struct cvmx_pciercx_cfg033_s         cn52xx;
52108    struct cvmx_pciercx_cfg033_s         cn52xxp1;
52109    struct cvmx_pciercx_cfg033_s         cn56xx;
52110    struct cvmx_pciercx_cfg033_s         cn56xxp1;
52111} cvmx_pciercx_cfg033_t;
52112
52113
52114/**
52115 * cvmx_pcierc#_cfg034
52116 *
52117 * PCIE_CFG034 = Thirty-fifth 32-bits of PCIE type 1 config space
52118 * (Slot Control Register/Slot Status Register)
52119 */
52120typedef union
52121{
52122    uint32_t u32;
52123    struct cvmx_pciercx_cfg034_s
52124    {
52125#if __BYTE_ORDER == __BIG_ENDIAN
52126        uint32_t reserved_25_31          : 7;
52127        uint32_t dlls_c                  : 1;       /**< Data Link Layer State Changed */
52128        uint32_t emis                    : 1;       /**< Electromechanical Interlock Status */
52129        uint32_t pds                     : 1;       /**< Presence Detect State */
52130        uint32_t mrlss                   : 1;       /**< MRL Sensor State */
52131        uint32_t ccint_d                 : 1;       /**< Command Completed */
52132        uint32_t pd_c                    : 1;       /**< Presence Detect Changed */
52133        uint32_t mrls_c                  : 1;       /**< MRL Sensor Changed */
52134        uint32_t pf_d                    : 1;       /**< Power Fault Detected */
52135        uint32_t abp_d                   : 1;       /**< Attention Button Pressed */
52136        uint32_t reserved_13_15          : 3;
52137        uint32_t dlls_en                 : 1;       /**< Data Link Layer State Changed Enable */
52138        uint32_t emic                    : 1;       /**< Electromechanical Interlock Control */
52139        uint32_t pcc                     : 1;       /**< Power Controller Control */
52140        uint32_t pic                     : 2;       /**< Power Indicator Control */
52141        uint32_t aic                     : 2;       /**< Attention Indicator Control */
52142        uint32_t hpint_en                : 1;       /**< Hot-Plug Interrupt Enable */
52143        uint32_t ccint_en                : 1;       /**< Command Completed Interrupt Enable */
52144        uint32_t pd_en                   : 1;       /**< Presence Detect Changed Enable */
52145        uint32_t mrls_en                 : 1;       /**< MRL Sensor Changed Enable */
52146        uint32_t pf_en                   : 1;       /**< Power Fault Detected Enable */
52147        uint32_t abp_en                  : 1;       /**< Attention Button Pressed Enable */
52148#else
52149        uint32_t abp_en                  : 1;
52150        uint32_t pf_en                   : 1;
52151        uint32_t mrls_en                 : 1;
52152        uint32_t pd_en                   : 1;
52153        uint32_t ccint_en                : 1;
52154        uint32_t hpint_en                : 1;
52155        uint32_t aic                     : 2;
52156        uint32_t pic                     : 2;
52157        uint32_t pcc                     : 1;
52158        uint32_t emic                    : 1;
52159        uint32_t dlls_en                 : 1;
52160        uint32_t reserved_13_15          : 3;
52161        uint32_t abp_d                   : 1;
52162        uint32_t pf_d                    : 1;
52163        uint32_t mrls_c                  : 1;
52164        uint32_t pd_c                    : 1;
52165        uint32_t ccint_d                 : 1;
52166        uint32_t mrlss                   : 1;
52167        uint32_t pds                     : 1;
52168        uint32_t emis                    : 1;
52169        uint32_t dlls_c                  : 1;
52170        uint32_t reserved_25_31          : 7;
52171#endif
52172    } s;
52173    struct cvmx_pciercx_cfg034_s         cn52xx;
52174    struct cvmx_pciercx_cfg034_s         cn52xxp1;
52175    struct cvmx_pciercx_cfg034_s         cn56xx;
52176    struct cvmx_pciercx_cfg034_s         cn56xxp1;
52177} cvmx_pciercx_cfg034_t;
52178
52179
52180/**
52181 * cvmx_pcierc#_cfg035
52182 *
52183 * PCIE_CFG035 = Thirty-sixth 32-bits of PCIE type 1 config space
52184 * (Root Control Register/Root Capabilities Register)
52185 */
52186typedef union
52187{
52188    uint32_t u32;
52189    struct cvmx_pciercx_cfg035_s
52190    {
52191#if __BYTE_ORDER == __BIG_ENDIAN
52192        uint32_t reserved_17_31          : 15;
52193        uint32_t crssv                   : 1;       /**< CRS Software Visibility
52194                                                         Not supported, hardwired to 0x0. */
52195        uint32_t reserved_5_15           : 11;
52196        uint32_t crssve                  : 1;       /**< CRS Software Visibility Enable
52197                                                         Not supported, hardwired to 0x0. */
52198        uint32_t pmeie                   : 1;       /**< PME Interrupt Enable */
52199        uint32_t sefee                   : 1;       /**< System Error on Fatal Error Enable */
52200        uint32_t senfee                  : 1;       /**< System Error on Non-fatal Error Enable */
52201        uint32_t secee                   : 1;       /**< System Error on Correctable Error Enable */
52202#else
52203        uint32_t secee                   : 1;
52204        uint32_t senfee                  : 1;
52205        uint32_t sefee                   : 1;
52206        uint32_t pmeie                   : 1;
52207        uint32_t crssve                  : 1;
52208        uint32_t reserved_5_15           : 11;
52209        uint32_t crssv                   : 1;
52210        uint32_t reserved_17_31          : 15;
52211#endif
52212    } s;
52213    struct cvmx_pciercx_cfg035_s         cn52xx;
52214    struct cvmx_pciercx_cfg035_s         cn52xxp1;
52215    struct cvmx_pciercx_cfg035_s         cn56xx;
52216    struct cvmx_pciercx_cfg035_s         cn56xxp1;
52217} cvmx_pciercx_cfg035_t;
52218
52219
52220/**
52221 * cvmx_pcierc#_cfg036
52222 *
52223 * PCIE_CFG036 = Thirty-seventh 32-bits of PCIE type 1 config space
52224 * (Root Status Register)
52225 */
52226typedef union
52227{
52228    uint32_t u32;
52229    struct cvmx_pciercx_cfg036_s
52230    {
52231#if __BYTE_ORDER == __BIG_ENDIAN
52232        uint32_t reserved_18_31          : 14;
52233        uint32_t pme_pend                : 1;       /**< PME Pending */
52234        uint32_t pme_stat                : 1;       /**< PME Status */
52235        uint32_t pme_rid                 : 16;      /**< PME Requester ID */
52236#else
52237        uint32_t pme_rid                 : 16;
52238        uint32_t pme_stat                : 1;
52239        uint32_t pme_pend                : 1;
52240        uint32_t reserved_18_31          : 14;
52241#endif
52242    } s;
52243    struct cvmx_pciercx_cfg036_s         cn52xx;
52244    struct cvmx_pciercx_cfg036_s         cn52xxp1;
52245    struct cvmx_pciercx_cfg036_s         cn56xx;
52246    struct cvmx_pciercx_cfg036_s         cn56xxp1;
52247} cvmx_pciercx_cfg036_t;
52248
52249
52250/**
52251 * cvmx_pcierc#_cfg037
52252 *
52253 * PCIE_CFG037 = Thirty-eighth 32-bits of PCIE type 1 config space
52254 * (Device Capabilities 2 Register)
52255 */
52256typedef union
52257{
52258    uint32_t u32;
52259    struct cvmx_pciercx_cfg037_s
52260    {
52261#if __BYTE_ORDER == __BIG_ENDIAN
52262        uint32_t reserved_5_31           : 27;
52263        uint32_t ctds                    : 1;       /**< Completion Timeout Disable Supported */
52264        uint32_t ctrs                    : 4;       /**< Completion Timeout Ranges Supported
52265                                                         Value of 0 indicates that Completion Timeout Programming
52266                                                         is not supported.
52267                                                         Completion timeout is 16.7ms. */
52268#else
52269        uint32_t ctrs                    : 4;
52270        uint32_t ctds                    : 1;
52271        uint32_t reserved_5_31           : 27;
52272#endif
52273    } s;
52274    struct cvmx_pciercx_cfg037_s         cn52xx;
52275    struct cvmx_pciercx_cfg037_s         cn52xxp1;
52276    struct cvmx_pciercx_cfg037_s         cn56xx;
52277    struct cvmx_pciercx_cfg037_s         cn56xxp1;
52278} cvmx_pciercx_cfg037_t;
52279
52280
52281/**
52282 * cvmx_pcierc#_cfg038
52283 *
52284 * PCIE_CFG038 = Thirty-ninth 32-bits of PCIE type 1 config space
52285 * (Device Control 2 Register)
52286 */
52287typedef union
52288{
52289    uint32_t u32;
52290    struct cvmx_pciercx_cfg038_s
52291    {
52292#if __BYTE_ORDER == __BIG_ENDIAN
52293        uint32_t reserved_5_31           : 27;
52294        uint32_t ctd                     : 1;       /**< Completion Timeout Disable */
52295        uint32_t ctv                     : 4;       /**< Completion Timeout Value
52296                                                         Completion Timeout Programming is not supported
52297                                                         Completion timeout is 16.7ms. */
52298#else
52299        uint32_t ctv                     : 4;
52300        uint32_t ctd                     : 1;
52301        uint32_t reserved_5_31           : 27;
52302#endif
52303    } s;
52304    struct cvmx_pciercx_cfg038_s         cn52xx;
52305    struct cvmx_pciercx_cfg038_s         cn52xxp1;
52306    struct cvmx_pciercx_cfg038_s         cn56xx;
52307    struct cvmx_pciercx_cfg038_s         cn56xxp1;
52308} cvmx_pciercx_cfg038_t;
52309
52310
52311/**
52312 * cvmx_pcierc#_cfg039
52313 *
52314 * PCIE_CFG039 = Fourtieth 32-bits of PCIE type 1 config space
52315 * (Link Capabilities 2 Register)
52316 */
52317typedef union
52318{
52319    uint32_t u32;
52320    struct cvmx_pciercx_cfg039_s
52321    {
52322#if __BYTE_ORDER == __BIG_ENDIAN
52323        uint32_t reserved_0_31           : 32;
52324#else
52325        uint32_t reserved_0_31           : 32;
52326#endif
52327    } s;
52328    struct cvmx_pciercx_cfg039_s         cn52xx;
52329    struct cvmx_pciercx_cfg039_s         cn52xxp1;
52330    struct cvmx_pciercx_cfg039_s         cn56xx;
52331    struct cvmx_pciercx_cfg039_s         cn56xxp1;
52332} cvmx_pciercx_cfg039_t;
52333
52334
52335/**
52336 * cvmx_pcierc#_cfg040
52337 *
52338 * PCIE_CFG040 = Fourty-first 32-bits of PCIE type 1 config space
52339 * (Link Control 2 Register/Link Status 2 Register)
52340 */
52341typedef union
52342{
52343    uint32_t u32;
52344    struct cvmx_pciercx_cfg040_s
52345    {
52346#if __BYTE_ORDER == __BIG_ENDIAN
52347        uint32_t reserved_0_31           : 32;
52348#else
52349        uint32_t reserved_0_31           : 32;
52350#endif
52351    } s;
52352    struct cvmx_pciercx_cfg040_s         cn52xx;
52353    struct cvmx_pciercx_cfg040_s         cn52xxp1;
52354    struct cvmx_pciercx_cfg040_s         cn56xx;
52355    struct cvmx_pciercx_cfg040_s         cn56xxp1;
52356} cvmx_pciercx_cfg040_t;
52357
52358
52359/**
52360 * cvmx_pcierc#_cfg041
52361 *
52362 * PCIE_CFG041 = Fourty-second 32-bits of PCIE type 1 config space
52363 * (Slot Capabilities 2 Register)
52364 */
52365typedef union
52366{
52367    uint32_t u32;
52368    struct cvmx_pciercx_cfg041_s
52369    {
52370#if __BYTE_ORDER == __BIG_ENDIAN
52371        uint32_t reserved_0_31           : 32;
52372#else
52373        uint32_t reserved_0_31           : 32;
52374#endif
52375    } s;
52376    struct cvmx_pciercx_cfg041_s         cn52xx;
52377    struct cvmx_pciercx_cfg041_s         cn52xxp1;
52378    struct cvmx_pciercx_cfg041_s         cn56xx;
52379    struct cvmx_pciercx_cfg041_s         cn56xxp1;
52380} cvmx_pciercx_cfg041_t;
52381
52382
52383/**
52384 * cvmx_pcierc#_cfg042
52385 *
52386 * PCIE_CFG042 = Fourty-third 32-bits of PCIE type 1 config space
52387 * (Slot Control 2 Register/Slot Status 2 Register)
52388 */
52389typedef union
52390{
52391    uint32_t u32;
52392    struct cvmx_pciercx_cfg042_s
52393    {
52394#if __BYTE_ORDER == __BIG_ENDIAN
52395        uint32_t reserved_0_31           : 32;
52396#else
52397        uint32_t reserved_0_31           : 32;
52398#endif
52399    } s;
52400    struct cvmx_pciercx_cfg042_s         cn52xx;
52401    struct cvmx_pciercx_cfg042_s         cn52xxp1;
52402    struct cvmx_pciercx_cfg042_s         cn56xx;
52403    struct cvmx_pciercx_cfg042_s         cn56xxp1;
52404} cvmx_pciercx_cfg042_t;
52405
52406
52407/**
52408 * cvmx_pcierc#_cfg064
52409 *
52410 * PCIE_CFG064 = Sixty-fifth 32-bits of PCIE type 1 config space
52411 * (PCI Express Enhanced Capability Header)
52412 */
52413typedef union
52414{
52415    uint32_t u32;
52416    struct cvmx_pciercx_cfg064_s
52417    {
52418#if __BYTE_ORDER == __BIG_ENDIAN
52419        uint32_t nco                     : 12;      /**< Next Capability Offset */
52420        uint32_t cv                      : 4;       /**< Capability Version */
52421        uint32_t pcieec                  : 16;      /**< PCIE Express Extended Capability */
52422#else
52423        uint32_t pcieec                  : 16;
52424        uint32_t cv                      : 4;
52425        uint32_t nco                     : 12;
52426#endif
52427    } s;
52428    struct cvmx_pciercx_cfg064_s         cn52xx;
52429    struct cvmx_pciercx_cfg064_s         cn52xxp1;
52430    struct cvmx_pciercx_cfg064_s         cn56xx;
52431    struct cvmx_pciercx_cfg064_s         cn56xxp1;
52432} cvmx_pciercx_cfg064_t;
52433
52434
52435/**
52436 * cvmx_pcierc#_cfg065
52437 *
52438 * PCIE_CFG065 = Sixty-sixth 32-bits of PCIE type 1 config space
52439 * (Uncorrectable Error Status Register)
52440 */
52441typedef union
52442{
52443    uint32_t u32;
52444    struct cvmx_pciercx_cfg065_s
52445    {
52446#if __BYTE_ORDER == __BIG_ENDIAN
52447        uint32_t reserved_21_31          : 11;
52448        uint32_t ures                    : 1;       /**< Unsupported Request Error Status */
52449        uint32_t ecrces                  : 1;       /**< ECRC Error Status */
52450        uint32_t mtlps                   : 1;       /**< Malformed TLP Status */
52451        uint32_t ros                     : 1;       /**< Receiver Overflow Status */
52452        uint32_t ucs                     : 1;       /**< Unexpected Completion Status */
52453        uint32_t cas                     : 1;       /**< Completer Abort Status */
52454        uint32_t cts                     : 1;       /**< Completion Timeout Status */
52455        uint32_t fcpes                   : 1;       /**< Flow Control Protocol Error Status */
52456        uint32_t ptlps                   : 1;       /**< Poisoned TLP Status */
52457        uint32_t reserved_6_11           : 6;
52458        uint32_t sdes                    : 1;       /**< Surprise Down Error Status (not supported) */
52459        uint32_t dlpes                   : 1;       /**< Data Link Protocol Error Status */
52460        uint32_t reserved_0_3            : 4;
52461#else
52462        uint32_t reserved_0_3            : 4;
52463        uint32_t dlpes                   : 1;
52464        uint32_t sdes                    : 1;
52465        uint32_t reserved_6_11           : 6;
52466        uint32_t ptlps                   : 1;
52467        uint32_t fcpes                   : 1;
52468        uint32_t cts                     : 1;
52469        uint32_t cas                     : 1;
52470        uint32_t ucs                     : 1;
52471        uint32_t ros                     : 1;
52472        uint32_t mtlps                   : 1;
52473        uint32_t ecrces                  : 1;
52474        uint32_t ures                    : 1;
52475        uint32_t reserved_21_31          : 11;
52476#endif
52477    } s;
52478    struct cvmx_pciercx_cfg065_s         cn52xx;
52479    struct cvmx_pciercx_cfg065_s         cn52xxp1;
52480    struct cvmx_pciercx_cfg065_s         cn56xx;
52481    struct cvmx_pciercx_cfg065_s         cn56xxp1;
52482} cvmx_pciercx_cfg065_t;
52483
52484
52485/**
52486 * cvmx_pcierc#_cfg066
52487 *
52488 * PCIE_CFG066 = Sixty-seventh 32-bits of PCIE type 1 config space
52489 * (Uncorrectable Error Mask Register)
52490 */
52491typedef union
52492{
52493    uint32_t u32;
52494    struct cvmx_pciercx_cfg066_s
52495    {
52496#if __BYTE_ORDER == __BIG_ENDIAN
52497        uint32_t reserved_21_31          : 11;
52498        uint32_t urem                    : 1;       /**< Unsupported Request Error Mask */
52499        uint32_t ecrcem                  : 1;       /**< ECRC Error Mask */
52500        uint32_t mtlpm                   : 1;       /**< Malformed TLP Mask */
52501        uint32_t rom                     : 1;       /**< Receiver Overflow Mask */
52502        uint32_t ucm                     : 1;       /**< Unexpected Completion Mask */
52503        uint32_t cam                     : 1;       /**< Completer Abort Mask */
52504        uint32_t ctm                     : 1;       /**< Completion Timeout Mask */
52505        uint32_t fcpem                   : 1;       /**< Flow Control Protocol Error Mask */
52506        uint32_t ptlpm                   : 1;       /**< Poisoned TLP Mask */
52507        uint32_t reserved_6_11           : 6;
52508        uint32_t sdem                    : 1;       /**< Surprise Down Error Mask (not supported) */
52509        uint32_t dlpem                   : 1;       /**< Data Link Protocol Error Mask */
52510        uint32_t reserved_0_3            : 4;
52511#else
52512        uint32_t reserved_0_3            : 4;
52513        uint32_t dlpem                   : 1;
52514        uint32_t sdem                    : 1;
52515        uint32_t reserved_6_11           : 6;
52516        uint32_t ptlpm                   : 1;
52517        uint32_t fcpem                   : 1;
52518        uint32_t ctm                     : 1;
52519        uint32_t cam                     : 1;
52520        uint32_t ucm                     : 1;
52521        uint32_t rom                     : 1;
52522        uint32_t mtlpm                   : 1;
52523        uint32_t ecrcem                  : 1;
52524        uint32_t urem                    : 1;
52525        uint32_t reserved_21_31          : 11;
52526#endif
52527    } s;
52528    struct cvmx_pciercx_cfg066_s         cn52xx;
52529    struct cvmx_pciercx_cfg066_s         cn52xxp1;
52530    struct cvmx_pciercx_cfg066_s         cn56xx;
52531    struct cvmx_pciercx_cfg066_s         cn56xxp1;
52532} cvmx_pciercx_cfg066_t;
52533
52534
52535/**
52536 * cvmx_pcierc#_cfg067
52537 *
52538 * PCIE_CFG067 = Sixty-eighth 32-bits of PCIE type 1 config space
52539 * (Uncorrectable Error Severity Register)
52540 */
52541typedef union
52542{
52543    uint32_t u32;
52544    struct cvmx_pciercx_cfg067_s
52545    {
52546#if __BYTE_ORDER == __BIG_ENDIAN
52547        uint32_t reserved_21_31          : 11;
52548        uint32_t ures                    : 1;       /**< Unsupported Request Error Severity */
52549        uint32_t ecrces                  : 1;       /**< ECRC Error Severity */
52550        uint32_t mtlps                   : 1;       /**< Malformed TLP Severity */
52551        uint32_t ros                     : 1;       /**< Receiver Overflow Severity */
52552        uint32_t ucs                     : 1;       /**< Unexpected Completion Severity */
52553        uint32_t cas                     : 1;       /**< Completer Abort Severity */
52554        uint32_t cts                     : 1;       /**< Completion Timeout Severity */
52555        uint32_t fcpes                   : 1;       /**< Flow Control Protocol Error Severity */
52556        uint32_t ptlps                   : 1;       /**< Poisoned TLP Severity */
52557        uint32_t reserved_6_11           : 6;
52558        uint32_t sdes                    : 1;       /**< Surprise Down Error Severity (not supported) */
52559        uint32_t dlpes                   : 1;       /**< Data Link Protocol Error Severity */
52560        uint32_t reserved_0_3            : 4;
52561#else
52562        uint32_t reserved_0_3            : 4;
52563        uint32_t dlpes                   : 1;
52564        uint32_t sdes                    : 1;
52565        uint32_t reserved_6_11           : 6;
52566        uint32_t ptlps                   : 1;
52567        uint32_t fcpes                   : 1;
52568        uint32_t cts                     : 1;
52569        uint32_t cas                     : 1;
52570        uint32_t ucs                     : 1;
52571        uint32_t ros                     : 1;
52572        uint32_t mtlps                   : 1;
52573        uint32_t ecrces                  : 1;
52574        uint32_t ures                    : 1;
52575        uint32_t reserved_21_31          : 11;
52576#endif
52577    } s;
52578    struct cvmx_pciercx_cfg067_s         cn52xx;
52579    struct cvmx_pciercx_cfg067_s         cn52xxp1;
52580    struct cvmx_pciercx_cfg067_s         cn56xx;
52581    struct cvmx_pciercx_cfg067_s         cn56xxp1;
52582} cvmx_pciercx_cfg067_t;
52583
52584
52585/**
52586 * cvmx_pcierc#_cfg068
52587 *
52588 * PCIE_CFG068 = Sixty-ninth 32-bits of PCIE type 1 config space
52589 * (Correctable Error Status Register)
52590 */
52591typedef union
52592{
52593    uint32_t u32;
52594    struct cvmx_pciercx_cfg068_s
52595    {
52596#if __BYTE_ORDER == __BIG_ENDIAN
52597        uint32_t reserved_14_31          : 18;
52598        uint32_t anfes                   : 1;       /**< Advisory Non-Fatal Error Status */
52599        uint32_t rtts                    : 1;       /**< Replay Timer Timeout Status */
52600        uint32_t reserved_9_11           : 3;
52601        uint32_t rnrs                    : 1;       /**< REPLAY_NUM Rollover Status */
52602        uint32_t bdllps                  : 1;       /**< Bad DLLP Status */
52603        uint32_t btlps                   : 1;       /**< Bad TLP Status */
52604        uint32_t reserved_1_5            : 5;
52605        uint32_t res                     : 1;       /**< Receiver Error Status */
52606#else
52607        uint32_t res                     : 1;
52608        uint32_t reserved_1_5            : 5;
52609        uint32_t btlps                   : 1;
52610        uint32_t bdllps                  : 1;
52611        uint32_t rnrs                    : 1;
52612        uint32_t reserved_9_11           : 3;
52613        uint32_t rtts                    : 1;
52614        uint32_t anfes                   : 1;
52615        uint32_t reserved_14_31          : 18;
52616#endif
52617    } s;
52618    struct cvmx_pciercx_cfg068_s         cn52xx;
52619    struct cvmx_pciercx_cfg068_s         cn52xxp1;
52620    struct cvmx_pciercx_cfg068_s         cn56xx;
52621    struct cvmx_pciercx_cfg068_s         cn56xxp1;
52622} cvmx_pciercx_cfg068_t;
52623
52624
52625/**
52626 * cvmx_pcierc#_cfg069
52627 *
52628 * PCIE_CFG069 = Seventieth 32-bits of PCIE type 1 config space
52629 * (Correctable Error Mask Register)
52630 */
52631typedef union
52632{
52633    uint32_t u32;
52634    struct cvmx_pciercx_cfg069_s
52635    {
52636#if __BYTE_ORDER == __BIG_ENDIAN
52637        uint32_t reserved_14_31          : 18;
52638        uint32_t anfem                   : 1;       /**< Advisory Non-Fatal Error Mask */
52639        uint32_t rttm                    : 1;       /**< Replay Timer Timeout Mask */
52640        uint32_t reserved_9_11           : 3;
52641        uint32_t rnrm                    : 1;       /**< REPLAY_NUM Rollover Mask */
52642        uint32_t bdllpm                  : 1;       /**< Bad DLLP Mask */
52643        uint32_t btlpm                   : 1;       /**< Bad TLP Mask */
52644        uint32_t reserved_1_5            : 5;
52645        uint32_t rem                     : 1;       /**< Receiver Error Mask */
52646#else
52647        uint32_t rem                     : 1;
52648        uint32_t reserved_1_5            : 5;
52649        uint32_t btlpm                   : 1;
52650        uint32_t bdllpm                  : 1;
52651        uint32_t rnrm                    : 1;
52652        uint32_t reserved_9_11           : 3;
52653        uint32_t rttm                    : 1;
52654        uint32_t anfem                   : 1;
52655        uint32_t reserved_14_31          : 18;
52656#endif
52657    } s;
52658    struct cvmx_pciercx_cfg069_s         cn52xx;
52659    struct cvmx_pciercx_cfg069_s         cn52xxp1;
52660    struct cvmx_pciercx_cfg069_s         cn56xx;
52661    struct cvmx_pciercx_cfg069_s         cn56xxp1;
52662} cvmx_pciercx_cfg069_t;
52663
52664
52665/**
52666 * cvmx_pcierc#_cfg070
52667 *
52668 * PCIE_CFG070 = Seventy-first 32-bits of PCIE type 1 config space
52669 * (Advanced Capabilities and Control Register)
52670 */
52671typedef union
52672{
52673    uint32_t u32;
52674    struct cvmx_pciercx_cfg070_s
52675    {
52676#if __BYTE_ORDER == __BIG_ENDIAN
52677        uint32_t reserved_9_31           : 23;
52678        uint32_t ce                      : 1;       /**< ECRC Check Enable */
52679        uint32_t cc                      : 1;       /**< ECRC Check Capable */
52680        uint32_t ge                      : 1;       /**< ECRC Generation Enable */
52681        uint32_t gc                      : 1;       /**< ECRC Generation Capability */
52682        uint32_t fep                     : 5;       /**< First Error Pointer */
52683#else
52684        uint32_t fep                     : 5;
52685        uint32_t gc                      : 1;
52686        uint32_t ge                      : 1;
52687        uint32_t cc                      : 1;
52688        uint32_t ce                      : 1;
52689        uint32_t reserved_9_31           : 23;
52690#endif
52691    } s;
52692    struct cvmx_pciercx_cfg070_s         cn52xx;
52693    struct cvmx_pciercx_cfg070_s         cn52xxp1;
52694    struct cvmx_pciercx_cfg070_s         cn56xx;
52695    struct cvmx_pciercx_cfg070_s         cn56xxp1;
52696} cvmx_pciercx_cfg070_t;
52697
52698
52699/**
52700 * cvmx_pcierc#_cfg071
52701 *
52702 * PCIE_CFG071 = Seventy-second 32-bits of PCIE type 1 config space
52703 *                  (Header Log Register 1)
52704 *
52705 * The Header Log registers collect the header for the TLP corresponding to a detected error.
52706 */
52707typedef union
52708{
52709    uint32_t u32;
52710    struct cvmx_pciercx_cfg071_s
52711    {
52712#if __BYTE_ORDER == __BIG_ENDIAN
52713        uint32_t dword1                  : 32;      /**< Header Log Register (first DWORD) */
52714#else
52715        uint32_t dword1                  : 32;
52716#endif
52717    } s;
52718    struct cvmx_pciercx_cfg071_s         cn52xx;
52719    struct cvmx_pciercx_cfg071_s         cn52xxp1;
52720    struct cvmx_pciercx_cfg071_s         cn56xx;
52721    struct cvmx_pciercx_cfg071_s         cn56xxp1;
52722} cvmx_pciercx_cfg071_t;
52723
52724
52725/**
52726 * cvmx_pcierc#_cfg072
52727 *
52728 * PCIE_CFG072 = Seventy-third 32-bits of PCIE type 1 config space
52729 *                  (Header Log Register 2)
52730 *
52731 * The Header Log registers collect the header for the TLP corresponding to a detected error.
52732 */
52733typedef union
52734{
52735    uint32_t u32;
52736    struct cvmx_pciercx_cfg072_s
52737    {
52738#if __BYTE_ORDER == __BIG_ENDIAN
52739        uint32_t dword2                  : 32;      /**< Header Log Register (second DWORD) */
52740#else
52741        uint32_t dword2                  : 32;
52742#endif
52743    } s;
52744    struct cvmx_pciercx_cfg072_s         cn52xx;
52745    struct cvmx_pciercx_cfg072_s         cn52xxp1;
52746    struct cvmx_pciercx_cfg072_s         cn56xx;
52747    struct cvmx_pciercx_cfg072_s         cn56xxp1;
52748} cvmx_pciercx_cfg072_t;
52749
52750
52751/**
52752 * cvmx_pcierc#_cfg073
52753 *
52754 * PCIE_CFG073 = Seventy-fourth 32-bits of PCIE type 1 config space
52755 *                  (Header Log Register 3)
52756 *
52757 * The Header Log registers collect the header for the TLP corresponding to a detected error.
52758 */
52759typedef union
52760{
52761    uint32_t u32;
52762    struct cvmx_pciercx_cfg073_s
52763    {
52764#if __BYTE_ORDER == __BIG_ENDIAN
52765        uint32_t dword3                  : 32;      /**< Header Log Register (third DWORD) */
52766#else
52767        uint32_t dword3                  : 32;
52768#endif
52769    } s;
52770    struct cvmx_pciercx_cfg073_s         cn52xx;
52771    struct cvmx_pciercx_cfg073_s         cn52xxp1;
52772    struct cvmx_pciercx_cfg073_s         cn56xx;
52773    struct cvmx_pciercx_cfg073_s         cn56xxp1;
52774} cvmx_pciercx_cfg073_t;
52775
52776
52777/**
52778 * cvmx_pcierc#_cfg074
52779 *
52780 * PCIE_CFG074 = Seventy-fifth 32-bits of PCIE type 1 config space
52781 *                  (Header Log Register 4)
52782 *
52783 * The Header Log registers collect the header for the TLP corresponding to a detected error.
52784 */
52785typedef union
52786{
52787    uint32_t u32;
52788    struct cvmx_pciercx_cfg074_s
52789    {
52790#if __BYTE_ORDER == __BIG_ENDIAN
52791        uint32_t dword4                  : 32;      /**< Header Log Register (fourth DWORD) */
52792#else
52793        uint32_t dword4                  : 32;
52794#endif
52795    } s;
52796    struct cvmx_pciercx_cfg074_s         cn52xx;
52797    struct cvmx_pciercx_cfg074_s         cn52xxp1;
52798    struct cvmx_pciercx_cfg074_s         cn56xx;
52799    struct cvmx_pciercx_cfg074_s         cn56xxp1;
52800} cvmx_pciercx_cfg074_t;
52801
52802
52803/**
52804 * cvmx_pcierc#_cfg075
52805 *
52806 * PCIE_CFG075 = Seventy-sixth 32-bits of PCIE type 1 config space
52807 * (Root Error Command Register)
52808 */
52809typedef union
52810{
52811    uint32_t u32;
52812    struct cvmx_pciercx_cfg075_s
52813    {
52814#if __BYTE_ORDER == __BIG_ENDIAN
52815        uint32_t reserved_3_31           : 29;
52816        uint32_t fere                    : 1;       /**< Fatal Error Reporting Enable */
52817        uint32_t nfere                   : 1;       /**< Non-Fatal Error Reporting Enable */
52818        uint32_t cere                    : 1;       /**< Correctable Error Reporting Enable */
52819#else
52820        uint32_t cere                    : 1;
52821        uint32_t nfere                   : 1;
52822        uint32_t fere                    : 1;
52823        uint32_t reserved_3_31           : 29;
52824#endif
52825    } s;
52826    struct cvmx_pciercx_cfg075_s         cn52xx;
52827    struct cvmx_pciercx_cfg075_s         cn52xxp1;
52828    struct cvmx_pciercx_cfg075_s         cn56xx;
52829    struct cvmx_pciercx_cfg075_s         cn56xxp1;
52830} cvmx_pciercx_cfg075_t;
52831
52832
52833/**
52834 * cvmx_pcierc#_cfg076
52835 *
52836 * PCIE_CFG076 = Seventy-seventh 32-bits of PCIE type 1 config space
52837 * (Root Error Status Register)
52838 */
52839typedef union
52840{
52841    uint32_t u32;
52842    struct cvmx_pciercx_cfg076_s
52843    {
52844#if __BYTE_ORDER == __BIG_ENDIAN
52845        uint32_t aeimn                   : 5;       /**< Advanced Error Interrupt Message Number,
52846                                                         writable through the DBI */
52847        uint32_t reserved_7_26           : 20;
52848        uint32_t femr                    : 1;       /**< Fatal Error Messages Received */
52849        uint32_t nfemr                   : 1;       /**< Non-Fatal Error Messages Received */
52850        uint32_t fuf                     : 1;       /**< First Uncorrectable Fatal */
52851        uint32_t multi_efnfr             : 1;       /**< Multiple ERR_FATAL/NONFATAL Received */
52852        uint32_t efnfr                   : 1;       /**< ERR_FATAL/NONFATAL Received */
52853        uint32_t multi_ecr               : 1;       /**< Multiple ERR_COR Received */
52854        uint32_t ecr                     : 1;       /**< ERR_COR Received */
52855#else
52856        uint32_t ecr                     : 1;
52857        uint32_t multi_ecr               : 1;
52858        uint32_t efnfr                   : 1;
52859        uint32_t multi_efnfr             : 1;
52860        uint32_t fuf                     : 1;
52861        uint32_t nfemr                   : 1;
52862        uint32_t femr                    : 1;
52863        uint32_t reserved_7_26           : 20;
52864        uint32_t aeimn                   : 5;
52865#endif
52866    } s;
52867    struct cvmx_pciercx_cfg076_s         cn52xx;
52868    struct cvmx_pciercx_cfg076_s         cn52xxp1;
52869    struct cvmx_pciercx_cfg076_s         cn56xx;
52870    struct cvmx_pciercx_cfg076_s         cn56xxp1;
52871} cvmx_pciercx_cfg076_t;
52872
52873
52874/**
52875 * cvmx_pcierc#_cfg077
52876 *
52877 * PCIE_CFG077 = Seventy-eighth 32-bits of PCIE type 1 config space
52878 * (Error Source Identification Register)
52879 */
52880typedef union
52881{
52882    uint32_t u32;
52883    struct cvmx_pciercx_cfg077_s
52884    {
52885#if __BYTE_ORDER == __BIG_ENDIAN
52886        uint32_t efnfsi                  : 16;      /**< ERR_FATAL/NONFATAL Source Identification */
52887        uint32_t ecsi                    : 16;      /**< ERR_COR Source Identification */
52888#else
52889        uint32_t ecsi                    : 16;
52890        uint32_t efnfsi                  : 16;
52891#endif
52892    } s;
52893    struct cvmx_pciercx_cfg077_s         cn52xx;
52894    struct cvmx_pciercx_cfg077_s         cn52xxp1;
52895    struct cvmx_pciercx_cfg077_s         cn56xx;
52896    struct cvmx_pciercx_cfg077_s         cn56xxp1;
52897} cvmx_pciercx_cfg077_t;
52898
52899
52900/**
52901 * cvmx_pcierc#_cfg448
52902 *
52903 * PCIE_CFG448 = Four hundred forty-ninth 32-bits of PCIE type 1 config space
52904 * (Ack Latency Timer and Replay Timer Register)
52905 */
52906typedef union
52907{
52908    uint32_t u32;
52909    struct cvmx_pciercx_cfg448_s
52910    {
52911#if __BYTE_ORDER == __BIG_ENDIAN
52912        uint32_t rtl                     : 16;      /**< Replay Time Limit
52913                                                         The replay timer expires when it reaches this limit. The PCI
52914                                                         Express bus initiates a replay upon reception of a Nak or when
52915                                                         the replay timer expires.
52916                                                         The default is then updated based on the Negotiated Link Width
52917                                                         and Max_Payload_Size. */
52918        uint32_t rtltl                   : 16;      /**< Round Trip Latency Time Limit
52919                                                         The Ack/Nak latency timer expires when it reaches this limit.
52920                                                         The default is then updated based on the Negotiated Link Width
52921                                                         and Max_Payload_Size. */
52922#else
52923        uint32_t rtltl                   : 16;
52924        uint32_t rtl                     : 16;
52925#endif
52926    } s;
52927    struct cvmx_pciercx_cfg448_s         cn52xx;
52928    struct cvmx_pciercx_cfg448_s         cn52xxp1;
52929    struct cvmx_pciercx_cfg448_s         cn56xx;
52930    struct cvmx_pciercx_cfg448_s         cn56xxp1;
52931} cvmx_pciercx_cfg448_t;
52932
52933
52934/**
52935 * cvmx_pcierc#_cfg449
52936 *
52937 * PCIE_CFG449 = Four hundred fiftieth 32-bits of PCIE type 1 config space
52938 * (Other Message Register)
52939 */
52940typedef union
52941{
52942    uint32_t u32;
52943    struct cvmx_pciercx_cfg449_s
52944    {
52945#if __BYTE_ORDER == __BIG_ENDIAN
52946        uint32_t omr                     : 32;      /**< Other Message Register
52947                                                         This register can be used for either of the following purposes:
52948                                                         o To send a specific PCI Express Message, the application
52949                                                           writes the payload of the Message into this register, then
52950                                                           sets bit 0 of the Port Link Control Register to send the
52951                                                           Message.
52952                                                         o To store a corruption pattern for corrupting the LCRC on all
52953                                                           TLPs, the application places a 32-bit corruption pattern into
52954                                                           this register and enables this function by setting bit 25 of
52955                                                           the Port Link Control Register. When enabled, the transmit
52956                                                           LCRC result is XOR'd with this pattern before inserting
52957                                                           it into the packet. */
52958#else
52959        uint32_t omr                     : 32;
52960#endif
52961    } s;
52962    struct cvmx_pciercx_cfg449_s         cn52xx;
52963    struct cvmx_pciercx_cfg449_s         cn52xxp1;
52964    struct cvmx_pciercx_cfg449_s         cn56xx;
52965    struct cvmx_pciercx_cfg449_s         cn56xxp1;
52966} cvmx_pciercx_cfg449_t;
52967
52968
52969/**
52970 * cvmx_pcierc#_cfg450
52971 *
52972 * PCIE_CFG450 = Four hundred fifty-first 32-bits of PCIE type 1 config space
52973 * (Port Force Link Register)
52974 */
52975typedef union
52976{
52977    uint32_t u32;
52978    struct cvmx_pciercx_cfg450_s
52979    {
52980#if __BYTE_ORDER == __BIG_ENDIAN
52981        uint32_t lpec                    : 8;       /**< Low Power Entrance Count
52982                                                         The Power Management state will wait for this many clock cycles
52983                                                         for the associated completion of a CfgWr to PCIE_CFG017 register
52984                                                         Power State (PS) field register to go low-power. This register
52985                                                         is intended for applications that do not let the PCI Express
52986                                                         bus handle a completion for configuration request to the
52987                                                         Power Management Control and Status (PCIE_CFG017) register. */
52988        uint32_t reserved_22_23          : 2;
52989        uint32_t link_state              : 6;       /**< Link State
52990                                                         The Link state that the PCI Express Bus will be forced to
52991                                                         when bit 15 (Force Link) is set.
52992                                                         State encoding:
52993                                                         o DETECT_QUIET              00h
52994                                                         o DETECT_ACT                01h
52995                                                         o POLL_ACTIVE               02h
52996                                                         o POLL_COMPLIANCE           03h
52997                                                         o POLL_CONFIG               04h
52998                                                         o PRE_DETECT_QUIET          05h
52999                                                         o DETECT_WAIT               06h
53000                                                         o CFG_LINKWD_START          07h
53001                                                         o CFG_LINKWD_ACEPT          08h
53002                                                         o CFG_LANENUM_WAIT          09h
53003                                                         o CFG_LANENUM_ACEPT         0Ah
53004                                                         o CFG_COMPLETE              0Bh
53005                                                         o CFG_IDLE                  0Ch
53006                                                         o RCVRY_LOCK                0Dh
53007                                                         o RCVRY_SPEED               0Eh
53008                                                         o RCVRY_RCVRCFG             0Fh
53009                                                         o RCVRY_IDLE                10h
53010                                                         o L0                        11h
53011                                                         o L0S                       12h
53012                                                         o L123_SEND_EIDLE           13h
53013                                                         o L1_IDLE                   14h
53014                                                         o L2_IDLE                   15h
53015                                                         o L2_WAKE                   16h
53016                                                         o DISABLED_ENTRY            17h
53017                                                         o DISABLED_IDLE             18h
53018                                                         o DISABLED                  19h
53019                                                         o LPBK_ENTRY                1Ah
53020                                                         o LPBK_ACTIVE               1Bh
53021                                                         o LPBK_EXIT                 1Ch
53022                                                         o LPBK_EXIT_TIMEOUT         1Dh
53023                                                         o HOT_RESET_ENTRY           1Eh
53024                                                         o HOT_RESET                 1Fh */
53025        uint32_t force_link              : 1;       /**< Force Link
53026                                                         Forces the Link to the state specified by the Link State field.
53027                                                         The Force Link pulse will trigger Link re-negotiation.
53028                                                         * As the The Force Link is a pulse, writing a 1 to it does
53029                                                           trigger the forced link state event, even thought reading it
53030                                                           always returns a 0. */
53031        uint32_t reserved_8_14           : 7;
53032        uint32_t link_num                : 8;       /**< Link Number */
53033#else
53034        uint32_t link_num                : 8;
53035        uint32_t reserved_8_14           : 7;
53036        uint32_t force_link              : 1;
53037        uint32_t link_state              : 6;
53038        uint32_t reserved_22_23          : 2;
53039        uint32_t lpec                    : 8;
53040#endif
53041    } s;
53042    struct cvmx_pciercx_cfg450_s         cn52xx;
53043    struct cvmx_pciercx_cfg450_s         cn52xxp1;
53044    struct cvmx_pciercx_cfg450_s         cn56xx;
53045    struct cvmx_pciercx_cfg450_s         cn56xxp1;
53046} cvmx_pciercx_cfg450_t;
53047
53048
53049/**
53050 * cvmx_pcierc#_cfg451
53051 *
53052 * PCIE_CFG451 = Four hundred fifty-second 32-bits of PCIE type 1 config space
53053 * (Ack Frequency Register)
53054 */
53055typedef union
53056{
53057    uint32_t u32;
53058    struct cvmx_pciercx_cfg451_s
53059    {
53060#if __BYTE_ORDER == __BIG_ENDIAN
53061        uint32_t reserved_30_31          : 2;
53062        uint32_t l1el                    : 3;       /**< L1 Entrance Latency
53063                                                         Values correspond to:
53064                                                         o 000: 1 ms
53065                                                         o 001: 2 ms
53066                                                         o 010: 4 ms
53067                                                         o 011: 8 ms
53068                                                         o 100: 16 ms
53069                                                         o 101: 32 ms
53070                                                         o 110 or 111: 64 ms */
53071        uint32_t l0el                    : 3;       /**< L0s Entrance Latency
53072                                                         Values correspond to:
53073                                                         o 000: 1 ms
53074                                                         o 001: 2 ms
53075                                                         o 010: 3 ms
53076                                                         o 011: 4 ms
53077                                                         o 100: 5 ms
53078                                                         o 101: 6 ms
53079                                                         o 110 or 111: 7 ms */
53080        uint32_t n_fts_cc                : 8;       /**< N_FTS when common clock is used.
53081                                                         The number of Fast Training Sequence ordered sets to be
53082                                                         transmitted when transitioning from L0s to L0. The maximum
53083                                                         number of FTS ordered-sets that a component can request is 255.
53084                                                          Note: The core does not support a value of zero; a value of
53085                                                                zero can cause the LTSSM to go into the recovery state
53086                                                                when exiting from L0s. */
53087        uint32_t n_fts                   : 8;       /**< N_FTS
53088                                                         The number of Fast Training Sequence ordered sets to be
53089                                                         transmitted when transitioning from L0s to L0. The maximum
53090                                                         number of FTS ordered-sets that a component can request is 255.
53091                                                         Note: The core does not support a value of zero; a value of
53092                                                               zero can cause the LTSSM to go into the recovery state
53093                                                               when exiting from L0s. */
53094        uint32_t ack_freq                : 8;       /**< Ack Frequency
53095                                                         The number of pending Ack's specified here (up to 255) before
53096                                                         sending an Ack. */
53097#else
53098        uint32_t ack_freq                : 8;
53099        uint32_t n_fts                   : 8;
53100        uint32_t n_fts_cc                : 8;
53101        uint32_t l0el                    : 3;
53102        uint32_t l1el                    : 3;
53103        uint32_t reserved_30_31          : 2;
53104#endif
53105    } s;
53106    struct cvmx_pciercx_cfg451_s         cn52xx;
53107    struct cvmx_pciercx_cfg451_s         cn52xxp1;
53108    struct cvmx_pciercx_cfg451_s         cn56xx;
53109    struct cvmx_pciercx_cfg451_s         cn56xxp1;
53110} cvmx_pciercx_cfg451_t;
53111
53112
53113/**
53114 * cvmx_pcierc#_cfg452
53115 *
53116 * PCIE_CFG452 = Four hundred fifty-third 32-bits of PCIE type 1 config space
53117 * (Port Link Control Register)
53118 */
53119typedef union
53120{
53121    uint32_t u32;
53122    struct cvmx_pciercx_cfg452_s
53123    {
53124#if __BYTE_ORDER == __BIG_ENDIAN
53125        uint32_t reserved_26_31          : 6;
53126        uint32_t eccrc                   : 1;       /**< Enable Corrupted CRC
53127                                                         Causes corrupt LCRC for TLPs when set,
53128                                                         using the pattern contained in the Other Message register.
53129                                                         This is a test feature, not to be used in normal operation. */
53130        uint32_t reserved_22_24          : 3;
53131        uint32_t lme                     : 6;       /**< Link Mode Enable
53132                                                         o 000001: x1
53133                                                         o 000011: x2
53134                                                         o 000111: x4
53135                                                         o 001111: x8
53136                                                         o 011111: x16 (not supported)
53137                                                         o 111111: x32 (not supported)
53138                                                         This field indicates the MAXIMUM number of lanes supported
53139                                                         by the PCIe port. It is normally set to 0xF or 0x7 depending
53140                                                         on the value of the QLM_CFG bits (0xF when QLM_CFG == 0
53141                                                         otherwise 0x7). The value can be set less than 0xF or 0x7
53142                                                         to limit the number of lanes the PCIe will attempt to use.
53143                                                         The programming of this field needs to be done by SW BEFORE
53144                                                         enabling the link. See also MLW.
53145                                                         (Note: The value of this field does NOT indicate the number
53146                                                          of lanes in use by the PCIe. LME sets the max number of lanes
53147                                                          in the PCIe core that COULD be used. As per the PCIe specs,
53148                                                          the PCIe core can negotiate a smaller link width, so all
53149                                                          of x8, x4, x2, and x1 are supported when LME=0xF,
53150                                                          for example.) */
53151        uint32_t reserved_8_15           : 8;
53152        uint32_t flm                     : 1;       /**< Fast Link Mode
53153                                                         Sets all internal timers to fast mode for simulation purposes. */
53154        uint32_t reserved_6_6            : 1;
53155        uint32_t dllle                   : 1;       /**< DLL Link Enable
53156                                                         Enables Link initialization. If DLL Link Enable = 0, the PCI
53157                                                         Express bus does not transmit InitFC DLLPs and does not
53158                                                         establish a Link. */
53159        uint32_t reserved_4_4            : 1;
53160        uint32_t ra                      : 1;       /**< Reset Assert
53161                                                         Triggers a recovery and forces the LTSSM to the Hot Reset
53162                                                         state (downstream port only). */
53163        uint32_t le                      : 1;       /**< Loopback Enable
53164                                                         Turns on loopback. */
53165        uint32_t sd                      : 1;       /**< Scramble Disable
53166                                                         Turns off data scrambling. */
53167        uint32_t omr                     : 1;       /**< Other Message Request
53168                                                         When software writes a `1' to this bit, the PCI Express bus
53169                                                         transmits the Message contained in the Other Message register. */
53170#else
53171        uint32_t omr                     : 1;
53172        uint32_t sd                      : 1;
53173        uint32_t le                      : 1;
53174        uint32_t ra                      : 1;
53175        uint32_t reserved_4_4            : 1;
53176        uint32_t dllle                   : 1;
53177        uint32_t reserved_6_6            : 1;
53178        uint32_t flm                     : 1;
53179        uint32_t reserved_8_15           : 8;
53180        uint32_t lme                     : 6;
53181        uint32_t reserved_22_24          : 3;
53182        uint32_t eccrc                   : 1;
53183        uint32_t reserved_26_31          : 6;
53184#endif
53185    } s;
53186    struct cvmx_pciercx_cfg452_s         cn52xx;
53187    struct cvmx_pciercx_cfg452_s         cn52xxp1;
53188    struct cvmx_pciercx_cfg452_s         cn56xx;
53189    struct cvmx_pciercx_cfg452_s         cn56xxp1;
53190} cvmx_pciercx_cfg452_t;
53191
53192
53193/**
53194 * cvmx_pcierc#_cfg453
53195 *
53196 * PCIE_CFG453 = Four hundred fifty-fourth 32-bits of PCIE type 1 config space
53197 * (Lane Skew Register)
53198 */
53199typedef union
53200{
53201    uint32_t u32;
53202    struct cvmx_pciercx_cfg453_s
53203    {
53204#if __BYTE_ORDER == __BIG_ENDIAN
53205        uint32_t dlld                    : 1;       /**< Disable Lane-to-Lane Deskew
53206                                                         Disables the internal Lane-to-Lane deskew logic. */
53207        uint32_t reserved_26_30          : 5;
53208        uint32_t ack_nak                 : 1;       /**< Ack/Nak Disable
53209                                                         Prevents the PCI Express bus from sending Ack and Nak DLLPs. */
53210        uint32_t fcd                     : 1;       /**< Flow Control Disable
53211                                                         Prevents the PCI Express bus from sending FC DLLPs. */
53212        uint32_t ilst                    : 24;      /**< Insert Lane Skew for Transmit (not supported for x16)
53213                                                         Causes skew between lanes for test purposes. There are three
53214                                                         bits per Lane. The value is in units of one symbol time. For
53215                                                         example, the value 010b for a Lane forces a skew of two symbol
53216                                                         times for that Lane. The maximum skew value for any Lane is 5
53217                                                         symbol times. */
53218#else
53219        uint32_t ilst                    : 24;
53220        uint32_t fcd                     : 1;
53221        uint32_t ack_nak                 : 1;
53222        uint32_t reserved_26_30          : 5;
53223        uint32_t dlld                    : 1;
53224#endif
53225    } s;
53226    struct cvmx_pciercx_cfg453_s         cn52xx;
53227    struct cvmx_pciercx_cfg453_s         cn52xxp1;
53228    struct cvmx_pciercx_cfg453_s         cn56xx;
53229    struct cvmx_pciercx_cfg453_s         cn56xxp1;
53230} cvmx_pciercx_cfg453_t;
53231
53232
53233/**
53234 * cvmx_pcierc#_cfg454
53235 *
53236 * PCIE_CFG454 = Four hundred fifty-fifth 32-bits of PCIE type 1 config space
53237 * (Symbol Number Register)
53238 */
53239typedef union
53240{
53241    uint32_t u32;
53242    struct cvmx_pciercx_cfg454_s
53243    {
53244#if __BYTE_ORDER == __BIG_ENDIAN
53245        uint32_t reserved_29_31          : 3;
53246        uint32_t tmfcwt                  : 5;       /**< Timer Modifier for Flow Control Watchdog Timer
53247                                                         Increases the timer value for the Flow Control watchdog timer,
53248                                                         in increments of 16 clock cycles. */
53249        uint32_t tmanlt                  : 5;       /**< Timer Modifier for Ack/Nak Latency Timer
53250                                                         Increases the timer value for the Ack/Nak latency timer, in
53251                                                         increments of 64 clock cycles. */
53252        uint32_t tmrt                    : 5;       /**< Timer Modifier for Replay Timer
53253                                                         Increases the timer value for the replay timer, in increments
53254                                                         of 64 clock cycles. */
53255        uint32_t reserved_11_13          : 3;
53256        uint32_t nskps                   : 3;       /**< Number of SKP Symbols */
53257        uint32_t reserved_4_7            : 4;
53258        uint32_t ntss                    : 4;       /**< Number of TS Symbols
53259                                                         Sets the number of TS identifier symbols that are sent in TS1
53260                                                         and TS2 ordered sets. */
53261#else
53262        uint32_t ntss                    : 4;
53263        uint32_t reserved_4_7            : 4;
53264        uint32_t nskps                   : 3;
53265        uint32_t reserved_11_13          : 3;
53266        uint32_t tmrt                    : 5;
53267        uint32_t tmanlt                  : 5;
53268        uint32_t tmfcwt                  : 5;
53269        uint32_t reserved_29_31          : 3;
53270#endif
53271    } s;
53272    struct cvmx_pciercx_cfg454_s         cn52xx;
53273    struct cvmx_pciercx_cfg454_s         cn52xxp1;
53274    struct cvmx_pciercx_cfg454_s         cn56xx;
53275    struct cvmx_pciercx_cfg454_s         cn56xxp1;
53276} cvmx_pciercx_cfg454_t;
53277
53278
53279/**
53280 * cvmx_pcierc#_cfg455
53281 *
53282 * PCIE_CFG455 = Four hundred fifty-sixth 32-bits of PCIE type 1 config space
53283 * (Symbol Timer Register/Filter Mask Register 1)
53284 */
53285typedef union
53286{
53287    uint32_t u32;
53288    struct cvmx_pciercx_cfg455_s
53289    {
53290#if __BYTE_ORDER == __BIG_ENDIAN
53291        uint32_t m_cfg0_filt             : 1;       /**< Mask filtering of received Configuration Requests (RC mode only) */
53292        uint32_t m_io_filt               : 1;       /**< Mask filtering of received I/O Requests (RC mode only) */
53293        uint32_t msg_ctrl                : 1;       /**< Message Control
53294                                                         The application must not change this field. */
53295        uint32_t m_cpl_ecrc_filt         : 1;       /**< Mask ECRC error filtering for Completions */
53296        uint32_t m_ecrc_filt             : 1;       /**< Mask ECRC error filtering */
53297        uint32_t m_cpl_len_err           : 1;       /**< Mask Length mismatch error for received Completions */
53298        uint32_t m_cpl_attr_err          : 1;       /**< Mask Attributes mismatch error for received Completions */
53299        uint32_t m_cpl_tc_err            : 1;       /**< Mask Traffic Class mismatch error for received Completions */
53300        uint32_t m_cpl_fun_err           : 1;       /**< Mask function mismatch error for received Completions */
53301        uint32_t m_cpl_rid_err           : 1;       /**< Mask Requester ID mismatch error for received Completions */
53302        uint32_t m_cpl_tag_err           : 1;       /**< Mask Tag error rules for received Completions */
53303        uint32_t m_lk_filt               : 1;       /**< Mask Locked Request filtering */
53304        uint32_t m_cfg1_filt             : 1;       /**< Mask Type 1 Configuration Request filtering */
53305        uint32_t m_bar_match             : 1;       /**< Mask BAR match filtering */
53306        uint32_t m_pois_filt             : 1;       /**< Mask poisoned TLP filtering */
53307        uint32_t m_fun                   : 1;       /**< Mask function */
53308        uint32_t dfcwt                   : 1;       /**< Disable FC Watchdog Timer */
53309        uint32_t reserved_11_14          : 4;
53310        uint32_t skpiv                   : 11;      /**< SKP Interval Value */
53311#else
53312        uint32_t skpiv                   : 11;
53313        uint32_t reserved_11_14          : 4;
53314        uint32_t dfcwt                   : 1;
53315        uint32_t m_fun                   : 1;
53316        uint32_t m_pois_filt             : 1;
53317        uint32_t m_bar_match             : 1;
53318        uint32_t m_cfg1_filt             : 1;
53319        uint32_t m_lk_filt               : 1;
53320        uint32_t m_cpl_tag_err           : 1;
53321        uint32_t m_cpl_rid_err           : 1;
53322        uint32_t m_cpl_fun_err           : 1;
53323        uint32_t m_cpl_tc_err            : 1;
53324        uint32_t m_cpl_attr_err          : 1;
53325        uint32_t m_cpl_len_err           : 1;
53326        uint32_t m_ecrc_filt             : 1;
53327        uint32_t m_cpl_ecrc_filt         : 1;
53328        uint32_t msg_ctrl                : 1;
53329        uint32_t m_io_filt               : 1;
53330        uint32_t m_cfg0_filt             : 1;
53331#endif
53332    } s;
53333    struct cvmx_pciercx_cfg455_s         cn52xx;
53334    struct cvmx_pciercx_cfg455_s         cn52xxp1;
53335    struct cvmx_pciercx_cfg455_s         cn56xx;
53336    struct cvmx_pciercx_cfg455_s         cn56xxp1;
53337} cvmx_pciercx_cfg455_t;
53338
53339
53340/**
53341 * cvmx_pcierc#_cfg456
53342 *
53343 * PCIE_CFG456 = Four hundred fifty-seventh 32-bits of PCIE type 1 config space
53344 * (Filter Mask Register 2)
53345 */
53346typedef union
53347{
53348    uint32_t u32;
53349    struct cvmx_pciercx_cfg456_s
53350    {
53351#if __BYTE_ORDER == __BIG_ENDIAN
53352        uint32_t reserved_2_31           : 30;
53353        uint32_t m_vend1_drp             : 1;       /**< Mask Vendor MSG Type 1 dropped silently */
53354        uint32_t m_vend0_drp             : 1;       /**< Mask Vendor MSG Type 0 dropped with UR error reporting. */
53355#else
53356        uint32_t m_vend0_drp             : 1;
53357        uint32_t m_vend1_drp             : 1;
53358        uint32_t reserved_2_31           : 30;
53359#endif
53360    } s;
53361    struct cvmx_pciercx_cfg456_s         cn52xx;
53362    struct cvmx_pciercx_cfg456_s         cn52xxp1;
53363    struct cvmx_pciercx_cfg456_s         cn56xx;
53364    struct cvmx_pciercx_cfg456_s         cn56xxp1;
53365} cvmx_pciercx_cfg456_t;
53366
53367
53368/**
53369 * cvmx_pcierc#_cfg458
53370 *
53371 * PCIE_CFG458 = Four hundred fifty-ninth 32-bits of PCIE type 1 config space
53372 * (Debug Register 0)
53373 */
53374typedef union
53375{
53376    uint32_t u32;
53377    struct cvmx_pciercx_cfg458_s
53378    {
53379#if __BYTE_ORDER == __BIG_ENDIAN
53380        uint32_t dbg_info_l32            : 32;      /**< The value on cxpl_debug_info[31:0]. */
53381#else
53382        uint32_t dbg_info_l32            : 32;
53383#endif
53384    } s;
53385    struct cvmx_pciercx_cfg458_s         cn52xx;
53386    struct cvmx_pciercx_cfg458_s         cn52xxp1;
53387    struct cvmx_pciercx_cfg458_s         cn56xx;
53388    struct cvmx_pciercx_cfg458_s         cn56xxp1;
53389} cvmx_pciercx_cfg458_t;
53390
53391
53392/**
53393 * cvmx_pcierc#_cfg459
53394 *
53395 * PCIE_CFG459 = Four hundred sixtieth 32-bits of PCIE type 1 config space
53396 * (Debug Register 1)
53397 */
53398typedef union
53399{
53400    uint32_t u32;
53401    struct cvmx_pciercx_cfg459_s
53402    {
53403#if __BYTE_ORDER == __BIG_ENDIAN
53404        uint32_t dbg_info_u32            : 32;      /**< The value on cxpl_debug_info[63:32]. */
53405#else
53406        uint32_t dbg_info_u32            : 32;
53407#endif
53408    } s;
53409    struct cvmx_pciercx_cfg459_s         cn52xx;
53410    struct cvmx_pciercx_cfg459_s         cn52xxp1;
53411    struct cvmx_pciercx_cfg459_s         cn56xx;
53412    struct cvmx_pciercx_cfg459_s         cn56xxp1;
53413} cvmx_pciercx_cfg459_t;
53414
53415
53416/**
53417 * cvmx_pcierc#_cfg460
53418 *
53419 * PCIE_CFG460 = Four hundred sixty-first 32-bits of PCIE type 1 config space
53420 * (Transmit Posted FC Credit Status)
53421 */
53422typedef union
53423{
53424    uint32_t u32;
53425    struct cvmx_pciercx_cfg460_s
53426    {
53427#if __BYTE_ORDER == __BIG_ENDIAN
53428        uint32_t reserved_20_31          : 12;
53429        uint32_t tphfcc                  : 8;       /**< Transmit Posted Header FC Credits
53430                                                         The Posted Header credits advertised by the receiver at the
53431                                                         other end of the Link, updated with each UpdateFC DLLP. */
53432        uint32_t tpdfcc                  : 12;      /**< Transmit Posted Data FC Credits
53433                                                         The Posted Data credits advertised by the receiver at the other
53434                                                         end of the Link, updated with each UpdateFC DLLP. */
53435#else
53436        uint32_t tpdfcc                  : 12;
53437        uint32_t tphfcc                  : 8;
53438        uint32_t reserved_20_31          : 12;
53439#endif
53440    } s;
53441    struct cvmx_pciercx_cfg460_s         cn52xx;
53442    struct cvmx_pciercx_cfg460_s         cn52xxp1;
53443    struct cvmx_pciercx_cfg460_s         cn56xx;
53444    struct cvmx_pciercx_cfg460_s         cn56xxp1;
53445} cvmx_pciercx_cfg460_t;
53446
53447
53448/**
53449 * cvmx_pcierc#_cfg461
53450 *
53451 * PCIE_CFG461 = Four hundred sixty-second 32-bits of PCIE type 1 config space
53452 * (Transmit Non-Posted FC Credit Status)
53453 */
53454typedef union
53455{
53456    uint32_t u32;
53457    struct cvmx_pciercx_cfg461_s
53458    {
53459#if __BYTE_ORDER == __BIG_ENDIAN
53460        uint32_t reserved_20_31          : 12;
53461        uint32_t tchfcc                  : 8;       /**< Transmit Non-Posted Header FC Credits
53462                                                         The Non-Posted Header credits advertised by the receiver at the
53463                                                         other end of the Link, updated with each UpdateFC DLLP. */
53464        uint32_t tcdfcc                  : 12;      /**< Transmit Non-Posted Data FC Credits
53465                                                         The Non-Posted Data credits advertised by the receiver at the
53466                                                         other end of the Link, updated with each UpdateFC DLLP. */
53467#else
53468        uint32_t tcdfcc                  : 12;
53469        uint32_t tchfcc                  : 8;
53470        uint32_t reserved_20_31          : 12;
53471#endif
53472    } s;
53473    struct cvmx_pciercx_cfg461_s         cn52xx;
53474    struct cvmx_pciercx_cfg461_s         cn52xxp1;
53475    struct cvmx_pciercx_cfg461_s         cn56xx;
53476    struct cvmx_pciercx_cfg461_s         cn56xxp1;
53477} cvmx_pciercx_cfg461_t;
53478
53479
53480/**
53481 * cvmx_pcierc#_cfg462
53482 *
53483 * PCIE_CFG462 = Four hundred sixty-third 32-bits of PCIE type 1 config space
53484 * (Transmit Completion FC Credit Status )
53485 */
53486typedef union
53487{
53488    uint32_t u32;
53489    struct cvmx_pciercx_cfg462_s
53490    {
53491#if __BYTE_ORDER == __BIG_ENDIAN
53492        uint32_t reserved_20_31          : 12;
53493        uint32_t tchfcc                  : 8;       /**< Transmit Completion Header FC Credits
53494                                                         The Completion Header credits advertised by the receiver at the
53495                                                         other end of the Link, updated with each UpdateFC DLLP. */
53496        uint32_t tcdfcc                  : 12;      /**< Transmit Completion Data FC Credits
53497                                                         The Completion Data credits advertised by the receiver at the
53498                                                         other end of the Link, updated with each UpdateFC DLLP. */
53499#else
53500        uint32_t tcdfcc                  : 12;
53501        uint32_t tchfcc                  : 8;
53502        uint32_t reserved_20_31          : 12;
53503#endif
53504    } s;
53505    struct cvmx_pciercx_cfg462_s         cn52xx;
53506    struct cvmx_pciercx_cfg462_s         cn52xxp1;
53507    struct cvmx_pciercx_cfg462_s         cn56xx;
53508    struct cvmx_pciercx_cfg462_s         cn56xxp1;
53509} cvmx_pciercx_cfg462_t;
53510
53511
53512/**
53513 * cvmx_pcierc#_cfg463
53514 *
53515 * PCIE_CFG463 = Four hundred sixty-fourth 32-bits of PCIE type 1 config space
53516 * (Queue Status)
53517 */
53518typedef union
53519{
53520    uint32_t u32;
53521    struct cvmx_pciercx_cfg463_s
53522    {
53523#if __BYTE_ORDER == __BIG_ENDIAN
53524        uint32_t reserved_3_31           : 29;
53525        uint32_t rqne                    : 1;       /**< Received Queue Not Empty
53526                                                         Indicates there is data in one or more of the receive buffers. */
53527        uint32_t trbne                   : 1;       /**< Transmit Retry Buffer Not Empty
53528                                                         Indicates that there is data in the transmit retry buffer. */
53529        uint32_t rtlpfccnr               : 1;       /**< Received TLP FC Credits Not Returned
53530                                                         Indicates that the PCI Express bus has sent a TLP but has not
53531                                                         yet received an UpdateFC DLLP indicating that the credits for
53532                                                         that TLP have been restored by the receiver at the other end of
53533                                                         the Link. */
53534#else
53535        uint32_t rtlpfccnr               : 1;
53536        uint32_t trbne                   : 1;
53537        uint32_t rqne                    : 1;
53538        uint32_t reserved_3_31           : 29;
53539#endif
53540    } s;
53541    struct cvmx_pciercx_cfg463_s         cn52xx;
53542    struct cvmx_pciercx_cfg463_s         cn52xxp1;
53543    struct cvmx_pciercx_cfg463_s         cn56xx;
53544    struct cvmx_pciercx_cfg463_s         cn56xxp1;
53545} cvmx_pciercx_cfg463_t;
53546
53547
53548/**
53549 * cvmx_pcierc#_cfg464
53550 *
53551 * PCIE_CFG464 = Four hundred sixty-fifth 32-bits of PCIE type 1 config space
53552 * (VC Transmit Arbitration Register 1)
53553 */
53554typedef union
53555{
53556    uint32_t u32;
53557    struct cvmx_pciercx_cfg464_s
53558    {
53559#if __BYTE_ORDER == __BIG_ENDIAN
53560        uint32_t wrr_vc3                 : 8;       /**< WRR Weight for VC3 */
53561        uint32_t wrr_vc2                 : 8;       /**< WRR Weight for VC2 */
53562        uint32_t wrr_vc1                 : 8;       /**< WRR Weight for VC1 */
53563        uint32_t wrr_vc0                 : 8;       /**< WRR Weight for VC0 */
53564#else
53565        uint32_t wrr_vc0                 : 8;
53566        uint32_t wrr_vc1                 : 8;
53567        uint32_t wrr_vc2                 : 8;
53568        uint32_t wrr_vc3                 : 8;
53569#endif
53570    } s;
53571    struct cvmx_pciercx_cfg464_s         cn52xx;
53572    struct cvmx_pciercx_cfg464_s         cn52xxp1;
53573    struct cvmx_pciercx_cfg464_s         cn56xx;
53574    struct cvmx_pciercx_cfg464_s         cn56xxp1;
53575} cvmx_pciercx_cfg464_t;
53576
53577
53578/**
53579 * cvmx_pcierc#_cfg465
53580 *
53581 * PCIE_CFG465 = Four hundred sixty-sixth 32-bits of config space
53582 * (VC Transmit Arbitration Register 2)
53583 */
53584typedef union
53585{
53586    uint32_t u32;
53587    struct cvmx_pciercx_cfg465_s
53588    {
53589#if __BYTE_ORDER == __BIG_ENDIAN
53590        uint32_t wrr_vc7                 : 8;       /**< WRR Weight for VC7 */
53591        uint32_t wrr_vc6                 : 8;       /**< WRR Weight for VC6 */
53592        uint32_t wrr_vc5                 : 8;       /**< WRR Weight for VC5 */
53593        uint32_t wrr_vc4                 : 8;       /**< WRR Weight for VC4 */
53594#else
53595        uint32_t wrr_vc4                 : 8;
53596        uint32_t wrr_vc5                 : 8;
53597        uint32_t wrr_vc6                 : 8;
53598        uint32_t wrr_vc7                 : 8;
53599#endif
53600    } s;
53601    struct cvmx_pciercx_cfg465_s         cn52xx;
53602    struct cvmx_pciercx_cfg465_s         cn52xxp1;
53603    struct cvmx_pciercx_cfg465_s         cn56xx;
53604    struct cvmx_pciercx_cfg465_s         cn56xxp1;
53605} cvmx_pciercx_cfg465_t;
53606
53607
53608/**
53609 * cvmx_pcierc#_cfg466
53610 *
53611 * PCIE_CFG466 = Four hundred sixty-seventh 32-bits of PCIE type 1 config space
53612 * (VC0 Posted Receive Queue Control)
53613 */
53614typedef union
53615{
53616    uint32_t u32;
53617    struct cvmx_pciercx_cfg466_s
53618    {
53619#if __BYTE_ORDER == __BIG_ENDIAN
53620        uint32_t rx_queue_order          : 1;       /**< VC Ordering for Receive Queues
53621                                                         Determines the VC ordering rule for the receive queues, used
53622                                                         only in the segmented-buffer configuration,
53623                                                         writable through the DBI:
53624                                                         o 1: Strict ordering, higher numbered VCs have higher priority
53625                                                         o 0: Round robin
53626                                                         However, the application must not change this field. */
53627        uint32_t type_ordering           : 1;       /**< TLP Type Ordering for VC0
53628                                                         Determines the TLP type ordering rule for VC0 receive queues,
53629                                                         used only in the segmented-buffer configuration, writable
53630                                                         through the DBI:
53631                                                         o 1: Ordering of received TLPs follows the rules in
53632                                                              PCI Express Base Specification, Revision 1.1
53633                                                         o 0: Strict ordering for received TLPs: Posted, then
53634                                                              Completion, then Non-Posted
53635                                                         However, the application must not change this field. */
53636        uint32_t reserved_24_29          : 6;
53637        uint32_t queue_mode              : 3;       /**< VC0 Posted TLP Queue Mode
53638                                                         The operating mode of the Posted receive queue for VC0, used
53639                                                         only in the segmented-buffer configuration, writable through
53640                                                         the DBI. However, the application must not change this field.
53641                                                         Only one bit can be set at a time:
53642                                                         o Bit 23: Bypass
53643                                                         o Bit 22: Cut-through
53644                                                         o Bit 21: Store-and-forward */
53645        uint32_t reserved_20_20          : 1;
53646        uint32_t header_credits          : 8;       /**< VC0 Posted Header Credits
53647                                                         The number of initial Posted header credits for VC0, used for
53648                                                         all receive queue buffer configurations.
53649                                                         This field is writable through the DBI.
53650                                                         However, the application must not change this field. */
53651        uint32_t data_credits            : 12;      /**< VC0 Posted Data Credits
53652                                                         The number of initial Posted data credits for VC0, used for all
53653                                                         receive queue buffer configurations.
53654                                                         This field is writable through the DBI.
53655                                                         However, the application must not change this field. */
53656#else
53657        uint32_t data_credits            : 12;
53658        uint32_t header_credits          : 8;
53659        uint32_t reserved_20_20          : 1;
53660        uint32_t queue_mode              : 3;
53661        uint32_t reserved_24_29          : 6;
53662        uint32_t type_ordering           : 1;
53663        uint32_t rx_queue_order          : 1;
53664#endif
53665    } s;
53666    struct cvmx_pciercx_cfg466_s         cn52xx;
53667    struct cvmx_pciercx_cfg466_s         cn52xxp1;
53668    struct cvmx_pciercx_cfg466_s         cn56xx;
53669    struct cvmx_pciercx_cfg466_s         cn56xxp1;
53670} cvmx_pciercx_cfg466_t;
53671
53672
53673/**
53674 * cvmx_pcierc#_cfg467
53675 *
53676 * PCIE_CFG467 = Four hundred sixty-eighth 32-bits of PCIE type 1 config space
53677 * (VC0 Non-Posted Receive Queue Control)
53678 */
53679typedef union
53680{
53681    uint32_t u32;
53682    struct cvmx_pciercx_cfg467_s
53683    {
53684#if __BYTE_ORDER == __BIG_ENDIAN
53685        uint32_t reserved_24_31          : 8;
53686        uint32_t queue_mode              : 3;       /**< VC0 Non-Posted TLP Queue Mode
53687                                                         The operating mode of the Non-Posted receive queue for VC0,
53688                                                         used only in the segmented-buffer configuration, writable
53689                                                         through the DBI. Only one bit can be set at a time:
53690                                                         o Bit 23: Bypass
53691                                                         o Bit 22: Cut-through
53692                                                         o Bit 21: Store-and-forward
53693                                                         However, the application must not change this field. */
53694        uint32_t reserved_20_20          : 1;
53695        uint32_t header_credits          : 8;       /**< VC0 Non-Posted Header Credits
53696                                                         The number of initial Non-Posted header credits for VC0, used
53697                                                         for all receive queue buffer configurations.
53698                                                         This field is writable through the DBI.
53699                                                         However, the application must not change this field. */
53700        uint32_t data_credits            : 12;      /**< VC0 Non-Posted Data Credits
53701                                                         The number of initial Non-Posted data credits for VC0, used for
53702                                                         all receive queue buffer configurations.
53703                                                         This field is writable through the DBI.
53704                                                         However, the application must not change this field. */
53705#else
53706        uint32_t data_credits            : 12;
53707        uint32_t header_credits          : 8;
53708        uint32_t reserved_20_20          : 1;
53709        uint32_t queue_mode              : 3;
53710        uint32_t reserved_24_31          : 8;
53711#endif
53712    } s;
53713    struct cvmx_pciercx_cfg467_s         cn52xx;
53714    struct cvmx_pciercx_cfg467_s         cn52xxp1;
53715    struct cvmx_pciercx_cfg467_s         cn56xx;
53716    struct cvmx_pciercx_cfg467_s         cn56xxp1;
53717} cvmx_pciercx_cfg467_t;
53718
53719
53720/**
53721 * cvmx_pcierc#_cfg468
53722 *
53723 * PCIE_CFG468 = Four hundred sixty-ninth 32-bits of PCIE type 1 config space
53724 * (VC0 Completion Receive Queue Control)
53725 */
53726typedef union
53727{
53728    uint32_t u32;
53729    struct cvmx_pciercx_cfg468_s
53730    {
53731#if __BYTE_ORDER == __BIG_ENDIAN
53732        uint32_t reserved_24_31          : 8;
53733        uint32_t queue_mode              : 3;       /**< VC0 Completion TLP Queue Mode
53734                                                         The operating mode of the Completion receive queue for VC0,
53735                                                         used only in the segmented-buffer configuration, writable
53736                                                         through the DBI. Only one bit can be set at a time:
53737                                                         o Bit 23: Bypass
53738                                                         o Bit 22: Cut-through
53739                                                         o Bit 21: Store-and-forward
53740                                                         However, the application must not change this field. */
53741        uint32_t reserved_20_20          : 1;
53742        uint32_t header_credits          : 8;       /**< VC0 Completion Header Credits
53743                                                         The number of initial Completion header credits for VC0, used
53744                                                         for all receive queue buffer configurations.
53745                                                         This field is writable through the DBI.
53746                                                         However, the application must not change this field. */
53747        uint32_t data_credits            : 12;      /**< VC0 Completion Data Credits
53748                                                         The number of initial Completion data credits for VC0, used for
53749                                                         all receive queue buffer configurations.
53750                                                         This field is writable through the DBI.
53751                                                         However, the application must not change this field. */
53752#else
53753        uint32_t data_credits            : 12;
53754        uint32_t header_credits          : 8;
53755        uint32_t reserved_20_20          : 1;
53756        uint32_t queue_mode              : 3;
53757        uint32_t reserved_24_31          : 8;
53758#endif
53759    } s;
53760    struct cvmx_pciercx_cfg468_s         cn52xx;
53761    struct cvmx_pciercx_cfg468_s         cn52xxp1;
53762    struct cvmx_pciercx_cfg468_s         cn56xx;
53763    struct cvmx_pciercx_cfg468_s         cn56xxp1;
53764} cvmx_pciercx_cfg468_t;
53765
53766
53767/**
53768 * cvmx_pcierc#_cfg490
53769 *
53770 * PCIE_CFG490 = Four hundred ninety-first 32-bits of PCIE type 1 config space
53771 * (VC0 Posted Buffer Depth)
53772 */
53773typedef union
53774{
53775    uint32_t u32;
53776    struct cvmx_pciercx_cfg490_s
53777    {
53778#if __BYTE_ORDER == __BIG_ENDIAN
53779        uint32_t reserved_26_31          : 6;
53780        uint32_t header_depth            : 10;      /**< VC0 Posted Header Queue Depth
53781                                                         Sets the number of entries in the Posted header queue for VC0
53782                                                         when using the segmented-buffer configuration, writable through
53783                                                         the DBI.
53784                                                         However, the application must not change this field. */
53785        uint32_t reserved_14_15          : 2;
53786        uint32_t data_depth              : 14;      /**< VC0 Posted Data Queue Depth
53787                                                         Sets the number of entries in the Posted data queue for VC0
53788                                                         when using the segmented-buffer configuration, writable
53789                                                         through the DBI.
53790                                                         However, the application must not change this field. */
53791#else
53792        uint32_t data_depth              : 14;
53793        uint32_t reserved_14_15          : 2;
53794        uint32_t header_depth            : 10;
53795        uint32_t reserved_26_31          : 6;
53796#endif
53797    } s;
53798    struct cvmx_pciercx_cfg490_s         cn52xx;
53799    struct cvmx_pciercx_cfg490_s         cn52xxp1;
53800    struct cvmx_pciercx_cfg490_s         cn56xx;
53801    struct cvmx_pciercx_cfg490_s         cn56xxp1;
53802} cvmx_pciercx_cfg490_t;
53803
53804
53805/**
53806 * cvmx_pcierc#_cfg491
53807 *
53808 * PCIE_CFG491 = Four hundred ninety-second 32-bits of PCIE type 1 config space
53809 * (VC0 Non-Posted Buffer Depth)
53810 */
53811typedef union
53812{
53813    uint32_t u32;
53814    struct cvmx_pciercx_cfg491_s
53815    {
53816#if __BYTE_ORDER == __BIG_ENDIAN
53817        uint32_t reserved_26_31          : 6;
53818        uint32_t header_depth            : 10;      /**< VC0 Non-Posted Header Queue Depth
53819                                                         Sets the number of entries in the Non-Posted header queue for
53820                                                         VC0 when using the segmented-buffer configuration, writable
53821                                                         through the DBI.
53822                                                         However, the application must not change this field. */
53823        uint32_t reserved_14_15          : 2;
53824        uint32_t data_depth              : 14;      /**< VC0 Non-Posted Data Queue Depth
53825                                                         Sets the number of entries in the Non-Posted data queue for VC0
53826                                                         when using the segmented-buffer configuration, writable
53827                                                         through the DBI.
53828                                                         However, the application must not change this field. */
53829#else
53830        uint32_t data_depth              : 14;
53831        uint32_t reserved_14_15          : 2;
53832        uint32_t header_depth            : 10;
53833        uint32_t reserved_26_31          : 6;
53834#endif
53835    } s;
53836    struct cvmx_pciercx_cfg491_s         cn52xx;
53837    struct cvmx_pciercx_cfg491_s         cn52xxp1;
53838    struct cvmx_pciercx_cfg491_s         cn56xx;
53839    struct cvmx_pciercx_cfg491_s         cn56xxp1;
53840} cvmx_pciercx_cfg491_t;
53841
53842
53843/**
53844 * cvmx_pcierc#_cfg492
53845 *
53846 * PCIE_CFG492 = Four hundred ninety-third 32-bits of PCIE type 1 config space
53847 * (VC0 Completion Buffer Depth)
53848 */
53849typedef union
53850{
53851    uint32_t u32;
53852    struct cvmx_pciercx_cfg492_s
53853    {
53854#if __BYTE_ORDER == __BIG_ENDIAN
53855        uint32_t reserved_26_31          : 6;
53856        uint32_t header_depth            : 10;      /**< VC0 Completion Header Queue Depth
53857                                                         Sets the number of entries in the Completion header queue for
53858                                                         VC0 when using the segmented-buffer configuration, writable
53859                                                         through the DBI.
53860                                                         However, the application must not change this field. */
53861        uint32_t reserved_14_15          : 2;
53862        uint32_t data_depth              : 14;      /**< VC0 Completion Data Queue Depth
53863                                                         Sets the number of entries in the Completion data queue for VC0
53864                                                         when using the segmented-buffer configuration, writable
53865                                                         through the DBI.
53866                                                         However, the application must not change this field. */
53867#else
53868        uint32_t data_depth              : 14;
53869        uint32_t reserved_14_15          : 2;
53870        uint32_t header_depth            : 10;
53871        uint32_t reserved_26_31          : 6;
53872#endif
53873    } s;
53874    struct cvmx_pciercx_cfg492_s         cn52xx;
53875    struct cvmx_pciercx_cfg492_s         cn52xxp1;
53876    struct cvmx_pciercx_cfg492_s         cn56xx;
53877    struct cvmx_pciercx_cfg492_s         cn56xxp1;
53878} cvmx_pciercx_cfg492_t;
53879
53880
53881/**
53882 * cvmx_pcierc#_cfg516
53883 *
53884 * PCIE_CFG516 = Five hundred seventeenth 32-bits of PCIE type 1 config space
53885 * (PHY Status Register)
53886 */
53887typedef union
53888{
53889    uint32_t u32;
53890    struct cvmx_pciercx_cfg516_s
53891    {
53892#if __BYTE_ORDER == __BIG_ENDIAN
53893        uint32_t phy_stat                : 32;      /**< PHY Status */
53894#else
53895        uint32_t phy_stat                : 32;
53896#endif
53897    } s;
53898    struct cvmx_pciercx_cfg516_s         cn52xx;
53899    struct cvmx_pciercx_cfg516_s         cn52xxp1;
53900    struct cvmx_pciercx_cfg516_s         cn56xx;
53901    struct cvmx_pciercx_cfg516_s         cn56xxp1;
53902} cvmx_pciercx_cfg516_t;
53903
53904
53905/**
53906 * cvmx_pcierc#_cfg517
53907 *
53908 * PCIE_CFG517 = Five hundred eighteenth 32-bits of PCIE type 1 config space
53909 * (PHY Control Register)
53910 */
53911typedef union
53912{
53913    uint32_t u32;
53914    struct cvmx_pciercx_cfg517_s
53915    {
53916#if __BYTE_ORDER == __BIG_ENDIAN
53917        uint32_t phy_ctrl                : 32;      /**< PHY Control */
53918#else
53919        uint32_t phy_ctrl                : 32;
53920#endif
53921    } s;
53922    struct cvmx_pciercx_cfg517_s         cn52xx;
53923    struct cvmx_pciercx_cfg517_s         cn52xxp1;
53924    struct cvmx_pciercx_cfg517_s         cn56xx;
53925    struct cvmx_pciercx_cfg517_s         cn56xxp1;
53926} cvmx_pciercx_cfg517_t;
53927
53928
53929/**
53930 * cvmx_pcm#_dma_cfg
53931 */
53932typedef union
53933{
53934    uint64_t u64;
53935    struct cvmx_pcmx_dma_cfg_s
53936    {
53937#if __BYTE_ORDER == __BIG_ENDIAN
53938        uint64_t rdpend                  : 1;       /**< If 0, no L2C read responses pending
53939                                                            1, L2C read responses are outstanding
53940                                                         NOTE: When restarting after stopping a running TDM
53941                                                         engine, software must wait for RDPEND to read 0
53942                                                         before writing PCMn_TDM_CFG[ENABLE] to a 1 */
53943        uint64_t reserved_54_62          : 9;
53944        uint64_t rxslots                 : 10;      /**< Number of 8-bit slots to receive per frame
53945                                                         (number of slots in a receive superframe) */
53946        uint64_t reserved_42_43          : 2;
53947        uint64_t txslots                 : 10;      /**< Number of 8-bit slots to transmit per frame
53948                                                         (number of slots in a transmit superframe) */
53949        uint64_t reserved_30_31          : 2;
53950        uint64_t rxst                    : 10;      /**< Number of frame writes for interrupt */
53951        uint64_t reserved_19_19          : 1;
53952        uint64_t useldt                  : 1;       /**< If 0, use LDI command to read from L2C
53953                                                         1, use LDT command to read from L2C */
53954        uint64_t txrd                    : 10;      /**< Number of frame reads for interrupt */
53955        uint64_t fetchsiz                : 4;       /**< FETCHSIZ+1 timeslots are read when threshold is
53956                                                         reached. */
53957        uint64_t thresh                  : 4;       /**< If number of bytes remaining in the DMA fifo is <=
53958                                                         THRESH, initiate a fetch of timeslot data from the
53959                                                         transmit memory region.
53960                                                         NOTE: there are only 16B of buffer for each engine
53961                                                         so the seetings for FETCHSIZ and THRESH must be
53962                                                         such that the buffer will not be overrun:
53963
53964                                                         THRESH + min(FETCHSIZ + 1,TXSLOTS) MUST BE <= 16 */
53965#else
53966        uint64_t thresh                  : 4;
53967        uint64_t fetchsiz                : 4;
53968        uint64_t txrd                    : 10;
53969        uint64_t useldt                  : 1;
53970        uint64_t reserved_19_19          : 1;
53971        uint64_t rxst                    : 10;
53972        uint64_t reserved_30_31          : 2;
53973        uint64_t txslots                 : 10;
53974        uint64_t reserved_42_43          : 2;
53975        uint64_t rxslots                 : 10;
53976        uint64_t reserved_54_62          : 9;
53977        uint64_t rdpend                  : 1;
53978#endif
53979    } s;
53980    struct cvmx_pcmx_dma_cfg_s           cn30xx;
53981    struct cvmx_pcmx_dma_cfg_s           cn31xx;
53982    struct cvmx_pcmx_dma_cfg_s           cn50xx;
53983} cvmx_pcmx_dma_cfg_t;
53984
53985
53986/**
53987 * cvmx_pcm#_int_ena
53988 */
53989typedef union
53990{
53991    uint64_t u64;
53992    struct cvmx_pcmx_int_ena_s
53993    {
53994#if __BYTE_ORDER == __BIG_ENDIAN
53995        uint64_t reserved_8_63           : 56;
53996        uint64_t rxovf                   : 1;       /**< Enable interrupt if RX byte overflows */
53997        uint64_t txempty                 : 1;       /**< Enable interrupt on TX byte empty */
53998        uint64_t txrd                    : 1;       /**< Enable DMA engine frame read interrupts */
53999        uint64_t txwrap                  : 1;       /**< Enable TX region wrap interrupts */
54000        uint64_t rxst                    : 1;       /**< Enable DMA engine frame store interrupts */
54001        uint64_t rxwrap                  : 1;       /**< Enable RX region wrap interrupts */
54002        uint64_t fsyncextra              : 1;       /**< Enable FSYNC extra interrupts
54003                                                         NOTE: FSYNCEXTRA errors are defined as an FSYNC
54004                                                         found in the "wrong" spot of a frame given the
54005                                                         programming of PCMn_CLK_CFG[NUMSLOTS] and
54006                                                         PCMn_CLK_CFG[EXTRABIT]. */
54007        uint64_t fsyncmissed             : 1;       /**< Enable FSYNC missed interrupts
54008                                                         NOTE: FSYNCMISSED errors are defined as an FSYNC
54009                                                         missing from the correct spot in a frame given
54010                                                         the programming of PCMn_CLK_CFG[NUMSLOTS] and
54011                                                         PCMn_CLK_CFG[EXTRABIT]. */
54012#else
54013        uint64_t fsyncmissed             : 1;
54014        uint64_t fsyncextra              : 1;
54015        uint64_t rxwrap                  : 1;
54016        uint64_t rxst                    : 1;
54017        uint64_t txwrap                  : 1;
54018        uint64_t txrd                    : 1;
54019        uint64_t txempty                 : 1;
54020        uint64_t rxovf                   : 1;
54021        uint64_t reserved_8_63           : 56;
54022#endif
54023    } s;
54024    struct cvmx_pcmx_int_ena_s           cn30xx;
54025    struct cvmx_pcmx_int_ena_s           cn31xx;
54026    struct cvmx_pcmx_int_ena_s           cn50xx;
54027} cvmx_pcmx_int_ena_t;
54028
54029
54030/**
54031 * cvmx_pcm#_int_sum
54032 */
54033typedef union
54034{
54035    uint64_t u64;
54036    struct cvmx_pcmx_int_sum_s
54037    {
54038#if __BYTE_ORDER == __BIG_ENDIAN
54039        uint64_t reserved_8_63           : 56;
54040        uint64_t rxovf                   : 1;       /**< RX byte overflowed */
54041        uint64_t txempty                 : 1;       /**< TX byte was empty when sampled */
54042        uint64_t txrd                    : 1;       /**< DMA engine frame read interrupt occurred */
54043        uint64_t txwrap                  : 1;       /**< TX region wrap interrupt occurred */
54044        uint64_t rxst                    : 1;       /**< DMA engine frame store interrupt occurred */
54045        uint64_t rxwrap                  : 1;       /**< RX region wrap interrupt occurred */
54046        uint64_t fsyncextra              : 1;       /**< FSYNC extra interrupt occurred */
54047        uint64_t fsyncmissed             : 1;       /**< FSYNC missed interrupt occurred */
54048#else
54049        uint64_t fsyncmissed             : 1;
54050        uint64_t fsyncextra              : 1;
54051        uint64_t rxwrap                  : 1;
54052        uint64_t rxst                    : 1;
54053        uint64_t txwrap                  : 1;
54054        uint64_t txrd                    : 1;
54055        uint64_t txempty                 : 1;
54056        uint64_t rxovf                   : 1;
54057        uint64_t reserved_8_63           : 56;
54058#endif
54059    } s;
54060    struct cvmx_pcmx_int_sum_s           cn30xx;
54061    struct cvmx_pcmx_int_sum_s           cn31xx;
54062    struct cvmx_pcmx_int_sum_s           cn50xx;
54063} cvmx_pcmx_int_sum_t;
54064
54065
54066/**
54067 * cvmx_pcm#_rxaddr
54068 */
54069typedef union
54070{
54071    uint64_t u64;
54072    struct cvmx_pcmx_rxaddr_s
54073    {
54074#if __BYTE_ORDER == __BIG_ENDIAN
54075        uint64_t reserved_36_63          : 28;
54076        uint64_t addr                    : 36;      /**< Address of the next write to the receive memory
54077                                                         region */
54078#else
54079        uint64_t addr                    : 36;
54080        uint64_t reserved_36_63          : 28;
54081#endif
54082    } s;
54083    struct cvmx_pcmx_rxaddr_s            cn30xx;
54084    struct cvmx_pcmx_rxaddr_s            cn31xx;
54085    struct cvmx_pcmx_rxaddr_s            cn50xx;
54086} cvmx_pcmx_rxaddr_t;
54087
54088
54089/**
54090 * cvmx_pcm#_rxcnt
54091 */
54092typedef union
54093{
54094    uint64_t u64;
54095    struct cvmx_pcmx_rxcnt_s
54096    {
54097#if __BYTE_ORDER == __BIG_ENDIAN
54098        uint64_t reserved_16_63          : 48;
54099        uint64_t cnt                     : 16;      /**< Number of superframes in receive memory region */
54100#else
54101        uint64_t cnt                     : 16;
54102        uint64_t reserved_16_63          : 48;
54103#endif
54104    } s;
54105    struct cvmx_pcmx_rxcnt_s             cn30xx;
54106    struct cvmx_pcmx_rxcnt_s             cn31xx;
54107    struct cvmx_pcmx_rxcnt_s             cn50xx;
54108} cvmx_pcmx_rxcnt_t;
54109
54110
54111/**
54112 * cvmx_pcm#_rxmsk0
54113 */
54114typedef union
54115{
54116    uint64_t u64;
54117    struct cvmx_pcmx_rxmsk0_s
54118    {
54119#if __BYTE_ORDER == __BIG_ENDIAN
54120        uint64_t mask                    : 64;      /**< Receive mask bits for slots 63 to 0
54121                                                         (1 means transmit, 0 means don't transmit) */
54122#else
54123        uint64_t mask                    : 64;
54124#endif
54125    } s;
54126    struct cvmx_pcmx_rxmsk0_s            cn30xx;
54127    struct cvmx_pcmx_rxmsk0_s            cn31xx;
54128    struct cvmx_pcmx_rxmsk0_s            cn50xx;
54129} cvmx_pcmx_rxmsk0_t;
54130
54131
54132/**
54133 * cvmx_pcm#_rxmsk1
54134 */
54135typedef union
54136{
54137    uint64_t u64;
54138    struct cvmx_pcmx_rxmsk1_s
54139    {
54140#if __BYTE_ORDER == __BIG_ENDIAN
54141        uint64_t mask                    : 64;      /**< Receive mask bits for slots 127 to 64
54142                                                         (1 means transmit, 0 means don't transmit) */
54143#else
54144        uint64_t mask                    : 64;
54145#endif
54146    } s;
54147    struct cvmx_pcmx_rxmsk1_s            cn30xx;
54148    struct cvmx_pcmx_rxmsk1_s            cn31xx;
54149    struct cvmx_pcmx_rxmsk1_s            cn50xx;
54150} cvmx_pcmx_rxmsk1_t;
54151
54152
54153/**
54154 * cvmx_pcm#_rxmsk2
54155 */
54156typedef union
54157{
54158    uint64_t u64;
54159    struct cvmx_pcmx_rxmsk2_s
54160    {
54161#if __BYTE_ORDER == __BIG_ENDIAN
54162        uint64_t mask                    : 64;      /**< Receive mask bits for slots 191 to 128
54163                                                         (1 means transmit, 0 means don't transmit) */
54164#else
54165        uint64_t mask                    : 64;
54166#endif
54167    } s;
54168    struct cvmx_pcmx_rxmsk2_s            cn30xx;
54169    struct cvmx_pcmx_rxmsk2_s            cn31xx;
54170    struct cvmx_pcmx_rxmsk2_s            cn50xx;
54171} cvmx_pcmx_rxmsk2_t;
54172
54173
54174/**
54175 * cvmx_pcm#_rxmsk3
54176 */
54177typedef union
54178{
54179    uint64_t u64;
54180    struct cvmx_pcmx_rxmsk3_s
54181    {
54182#if __BYTE_ORDER == __BIG_ENDIAN
54183        uint64_t mask                    : 64;      /**< Receive mask bits for slots 255 to 192
54184                                                         (1 means transmit, 0 means don't transmit) */
54185#else
54186        uint64_t mask                    : 64;
54187#endif
54188    } s;
54189    struct cvmx_pcmx_rxmsk3_s            cn30xx;
54190    struct cvmx_pcmx_rxmsk3_s            cn31xx;
54191    struct cvmx_pcmx_rxmsk3_s            cn50xx;
54192} cvmx_pcmx_rxmsk3_t;
54193
54194
54195/**
54196 * cvmx_pcm#_rxmsk4
54197 */
54198typedef union
54199{
54200    uint64_t u64;
54201    struct cvmx_pcmx_rxmsk4_s
54202    {
54203#if __BYTE_ORDER == __BIG_ENDIAN
54204        uint64_t mask                    : 64;      /**< Receive mask bits for slots 319 to 256
54205                                                         (1 means transmit, 0 means don't transmit) */
54206#else
54207        uint64_t mask                    : 64;
54208#endif
54209    } s;
54210    struct cvmx_pcmx_rxmsk4_s            cn30xx;
54211    struct cvmx_pcmx_rxmsk4_s            cn31xx;
54212    struct cvmx_pcmx_rxmsk4_s            cn50xx;
54213} cvmx_pcmx_rxmsk4_t;
54214
54215
54216/**
54217 * cvmx_pcm#_rxmsk5
54218 */
54219typedef union
54220{
54221    uint64_t u64;
54222    struct cvmx_pcmx_rxmsk5_s
54223    {
54224#if __BYTE_ORDER == __BIG_ENDIAN
54225        uint64_t mask                    : 64;      /**< Receive mask bits for slots 383 to 320
54226                                                         (1 means transmit, 0 means don't transmit) */
54227#else
54228        uint64_t mask                    : 64;
54229#endif
54230    } s;
54231    struct cvmx_pcmx_rxmsk5_s            cn30xx;
54232    struct cvmx_pcmx_rxmsk5_s            cn31xx;
54233    struct cvmx_pcmx_rxmsk5_s            cn50xx;
54234} cvmx_pcmx_rxmsk5_t;
54235
54236
54237/**
54238 * cvmx_pcm#_rxmsk6
54239 */
54240typedef union
54241{
54242    uint64_t u64;
54243    struct cvmx_pcmx_rxmsk6_s
54244    {
54245#if __BYTE_ORDER == __BIG_ENDIAN
54246        uint64_t mask                    : 64;      /**< Receive mask bits for slots 447 to 384
54247                                                         (1 means transmit, 0 means don't transmit) */
54248#else
54249        uint64_t mask                    : 64;
54250#endif
54251    } s;
54252    struct cvmx_pcmx_rxmsk6_s            cn30xx;
54253    struct cvmx_pcmx_rxmsk6_s            cn31xx;
54254    struct cvmx_pcmx_rxmsk6_s            cn50xx;
54255} cvmx_pcmx_rxmsk6_t;
54256
54257
54258/**
54259 * cvmx_pcm#_rxmsk7
54260 */
54261typedef union
54262{
54263    uint64_t u64;
54264    struct cvmx_pcmx_rxmsk7_s
54265    {
54266#if __BYTE_ORDER == __BIG_ENDIAN
54267        uint64_t mask                    : 64;      /**< Receive mask bits for slots 511 to 448
54268                                                         (1 means transmit, 0 means don't transmit) */
54269#else
54270        uint64_t mask                    : 64;
54271#endif
54272    } s;
54273    struct cvmx_pcmx_rxmsk7_s            cn30xx;
54274    struct cvmx_pcmx_rxmsk7_s            cn31xx;
54275    struct cvmx_pcmx_rxmsk7_s            cn50xx;
54276} cvmx_pcmx_rxmsk7_t;
54277
54278
54279/**
54280 * cvmx_pcm#_rxstart
54281 */
54282typedef union
54283{
54284    uint64_t u64;
54285    struct cvmx_pcmx_rxstart_s
54286    {
54287#if __BYTE_ORDER == __BIG_ENDIAN
54288        uint64_t reserved_36_63          : 28;
54289        uint64_t addr                    : 33;      /**< Starting address for the receive memory region */
54290        uint64_t reserved_0_2            : 3;
54291#else
54292        uint64_t reserved_0_2            : 3;
54293        uint64_t addr                    : 33;
54294        uint64_t reserved_36_63          : 28;
54295#endif
54296    } s;
54297    struct cvmx_pcmx_rxstart_s           cn30xx;
54298    struct cvmx_pcmx_rxstart_s           cn31xx;
54299    struct cvmx_pcmx_rxstart_s           cn50xx;
54300} cvmx_pcmx_rxstart_t;
54301
54302
54303/**
54304 * cvmx_pcm#_tdm_cfg
54305 */
54306typedef union
54307{
54308    uint64_t u64;
54309    struct cvmx_pcmx_tdm_cfg_s
54310    {
54311#if __BYTE_ORDER == __BIG_ENDIAN
54312        uint64_t drvtim                  : 16;      /**< Number of ECLKs from start of bit time to stop
54313                                                         driving last bit of timeslot (if not driving next
54314                                                         timeslot) */
54315        uint64_t samppt                  : 16;      /**< Number of ECLKs from start of bit time to sample
54316                                                         data bit. */
54317        uint64_t reserved_3_31           : 29;
54318        uint64_t lsbfirst                : 1;       /**< If 0, shift/receive MSB first
54319                                                         1, shift/receive LSB first */
54320        uint64_t useclk1                 : 1;       /**< If 0, this PCM is based on BCLK/FSYNC0
54321                                                         1, this PCM is based on BCLK/FSYNC1 */
54322        uint64_t enable                  : 1;       /**< If 1, PCM is enabled, otherwise pins are GPIOs
54323                                                         NOTE: when TDM is disabled by detection of an
54324                                                         FSYNC error all transmission and reception is
54325                                                         halted.  In addition, PCMn_TX/RXADDR are updated
54326                                                         to point to the position at which the error was
54327                                                         detected. */
54328#else
54329        uint64_t enable                  : 1;
54330        uint64_t useclk1                 : 1;
54331        uint64_t lsbfirst                : 1;
54332        uint64_t reserved_3_31           : 29;
54333        uint64_t samppt                  : 16;
54334        uint64_t drvtim                  : 16;
54335#endif
54336    } s;
54337    struct cvmx_pcmx_tdm_cfg_s           cn30xx;
54338    struct cvmx_pcmx_tdm_cfg_s           cn31xx;
54339    struct cvmx_pcmx_tdm_cfg_s           cn50xx;
54340} cvmx_pcmx_tdm_cfg_t;
54341
54342
54343/**
54344 * cvmx_pcm#_tdm_dbg
54345 */
54346typedef union
54347{
54348    uint64_t u64;
54349    struct cvmx_pcmx_tdm_dbg_s
54350    {
54351#if __BYTE_ORDER == __BIG_ENDIAN
54352        uint64_t debuginfo               : 64;      /**< Miscellaneous debug information */
54353#else
54354        uint64_t debuginfo               : 64;
54355#endif
54356    } s;
54357    struct cvmx_pcmx_tdm_dbg_s           cn30xx;
54358    struct cvmx_pcmx_tdm_dbg_s           cn31xx;
54359    struct cvmx_pcmx_tdm_dbg_s           cn50xx;
54360} cvmx_pcmx_tdm_dbg_t;
54361
54362
54363/**
54364 * cvmx_pcm#_txaddr
54365 */
54366typedef union
54367{
54368    uint64_t u64;
54369    struct cvmx_pcmx_txaddr_s
54370    {
54371#if __BYTE_ORDER == __BIG_ENDIAN
54372        uint64_t reserved_36_63          : 28;
54373        uint64_t addr                    : 33;      /**< Address of the next read from the transmit memory
54374                                                         region */
54375        uint64_t fram                    : 3;       /**< Frame offset
54376                                                         NOTE: this is used to extract the correct byte from
54377                                                         each 64b word read from the transmit memory region */
54378#else
54379        uint64_t fram                    : 3;
54380        uint64_t addr                    : 33;
54381        uint64_t reserved_36_63          : 28;
54382#endif
54383    } s;
54384    struct cvmx_pcmx_txaddr_s            cn30xx;
54385    struct cvmx_pcmx_txaddr_s            cn31xx;
54386    struct cvmx_pcmx_txaddr_s            cn50xx;
54387} cvmx_pcmx_txaddr_t;
54388
54389
54390/**
54391 * cvmx_pcm#_txcnt
54392 */
54393typedef union
54394{
54395    uint64_t u64;
54396    struct cvmx_pcmx_txcnt_s
54397    {
54398#if __BYTE_ORDER == __BIG_ENDIAN
54399        uint64_t reserved_16_63          : 48;
54400        uint64_t cnt                     : 16;      /**< Number of superframes in transmit memory region */
54401#else
54402        uint64_t cnt                     : 16;
54403        uint64_t reserved_16_63          : 48;
54404#endif
54405    } s;
54406    struct cvmx_pcmx_txcnt_s             cn30xx;
54407    struct cvmx_pcmx_txcnt_s             cn31xx;
54408    struct cvmx_pcmx_txcnt_s             cn50xx;
54409} cvmx_pcmx_txcnt_t;
54410
54411
54412/**
54413 * cvmx_pcm#_txmsk0
54414 */
54415typedef union
54416{
54417    uint64_t u64;
54418    struct cvmx_pcmx_txmsk0_s
54419    {
54420#if __BYTE_ORDER == __BIG_ENDIAN
54421        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 63 to 0
54422                                                         (1 means transmit, 0 means don't transmit) */
54423#else
54424        uint64_t mask                    : 64;
54425#endif
54426    } s;
54427    struct cvmx_pcmx_txmsk0_s            cn30xx;
54428    struct cvmx_pcmx_txmsk0_s            cn31xx;
54429    struct cvmx_pcmx_txmsk0_s            cn50xx;
54430} cvmx_pcmx_txmsk0_t;
54431
54432
54433/**
54434 * cvmx_pcm#_txmsk1
54435 */
54436typedef union
54437{
54438    uint64_t u64;
54439    struct cvmx_pcmx_txmsk1_s
54440    {
54441#if __BYTE_ORDER == __BIG_ENDIAN
54442        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 127 to 64
54443                                                         (1 means transmit, 0 means don't transmit) */
54444#else
54445        uint64_t mask                    : 64;
54446#endif
54447    } s;
54448    struct cvmx_pcmx_txmsk1_s            cn30xx;
54449    struct cvmx_pcmx_txmsk1_s            cn31xx;
54450    struct cvmx_pcmx_txmsk1_s            cn50xx;
54451} cvmx_pcmx_txmsk1_t;
54452
54453
54454/**
54455 * cvmx_pcm#_txmsk2
54456 */
54457typedef union
54458{
54459    uint64_t u64;
54460    struct cvmx_pcmx_txmsk2_s
54461    {
54462#if __BYTE_ORDER == __BIG_ENDIAN
54463        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 191 to 128
54464                                                         (1 means transmit, 0 means don't transmit) */
54465#else
54466        uint64_t mask                    : 64;
54467#endif
54468    } s;
54469    struct cvmx_pcmx_txmsk2_s            cn30xx;
54470    struct cvmx_pcmx_txmsk2_s            cn31xx;
54471    struct cvmx_pcmx_txmsk2_s            cn50xx;
54472} cvmx_pcmx_txmsk2_t;
54473
54474
54475/**
54476 * cvmx_pcm#_txmsk3
54477 */
54478typedef union
54479{
54480    uint64_t u64;
54481    struct cvmx_pcmx_txmsk3_s
54482    {
54483#if __BYTE_ORDER == __BIG_ENDIAN
54484        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 255 to 192
54485                                                         (1 means transmit, 0 means don't transmit) */
54486#else
54487        uint64_t mask                    : 64;
54488#endif
54489    } s;
54490    struct cvmx_pcmx_txmsk3_s            cn30xx;
54491    struct cvmx_pcmx_txmsk3_s            cn31xx;
54492    struct cvmx_pcmx_txmsk3_s            cn50xx;
54493} cvmx_pcmx_txmsk3_t;
54494
54495
54496/**
54497 * cvmx_pcm#_txmsk4
54498 */
54499typedef union
54500{
54501    uint64_t u64;
54502    struct cvmx_pcmx_txmsk4_s
54503    {
54504#if __BYTE_ORDER == __BIG_ENDIAN
54505        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 319 to 256
54506                                                         (1 means transmit, 0 means don't transmit) */
54507#else
54508        uint64_t mask                    : 64;
54509#endif
54510    } s;
54511    struct cvmx_pcmx_txmsk4_s            cn30xx;
54512    struct cvmx_pcmx_txmsk4_s            cn31xx;
54513    struct cvmx_pcmx_txmsk4_s            cn50xx;
54514} cvmx_pcmx_txmsk4_t;
54515
54516
54517/**
54518 * cvmx_pcm#_txmsk5
54519 */
54520typedef union
54521{
54522    uint64_t u64;
54523    struct cvmx_pcmx_txmsk5_s
54524    {
54525#if __BYTE_ORDER == __BIG_ENDIAN
54526        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 383 to 320
54527                                                         (1 means transmit, 0 means don't transmit) */
54528#else
54529        uint64_t mask                    : 64;
54530#endif
54531    } s;
54532    struct cvmx_pcmx_txmsk5_s            cn30xx;
54533    struct cvmx_pcmx_txmsk5_s            cn31xx;
54534    struct cvmx_pcmx_txmsk5_s            cn50xx;
54535} cvmx_pcmx_txmsk5_t;
54536
54537
54538/**
54539 * cvmx_pcm#_txmsk6
54540 */
54541typedef union
54542{
54543    uint64_t u64;
54544    struct cvmx_pcmx_txmsk6_s
54545    {
54546#if __BYTE_ORDER == __BIG_ENDIAN
54547        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 447 to 384
54548                                                         (1 means transmit, 0 means don't transmit) */
54549#else
54550        uint64_t mask                    : 64;
54551#endif
54552    } s;
54553    struct cvmx_pcmx_txmsk6_s            cn30xx;
54554    struct cvmx_pcmx_txmsk6_s            cn31xx;
54555    struct cvmx_pcmx_txmsk6_s            cn50xx;
54556} cvmx_pcmx_txmsk6_t;
54557
54558
54559/**
54560 * cvmx_pcm#_txmsk7
54561 */
54562typedef union
54563{
54564    uint64_t u64;
54565    struct cvmx_pcmx_txmsk7_s
54566    {
54567#if __BYTE_ORDER == __BIG_ENDIAN
54568        uint64_t mask                    : 64;      /**< Transmit mask bits for slots 511 to 448
54569                                                         (1 means transmit, 0 means don't transmit) */
54570#else
54571        uint64_t mask                    : 64;
54572#endif
54573    } s;
54574    struct cvmx_pcmx_txmsk7_s            cn30xx;
54575    struct cvmx_pcmx_txmsk7_s            cn31xx;
54576    struct cvmx_pcmx_txmsk7_s            cn50xx;
54577} cvmx_pcmx_txmsk7_t;
54578
54579
54580/**
54581 * cvmx_pcm#_txstart
54582 */
54583typedef union
54584{
54585    uint64_t u64;
54586    struct cvmx_pcmx_txstart_s
54587    {
54588#if __BYTE_ORDER == __BIG_ENDIAN
54589        uint64_t reserved_36_63          : 28;
54590        uint64_t addr                    : 33;      /**< Starting address for the transmit memory region */
54591        uint64_t reserved_0_2            : 3;
54592#else
54593        uint64_t reserved_0_2            : 3;
54594        uint64_t addr                    : 33;
54595        uint64_t reserved_36_63          : 28;
54596#endif
54597    } s;
54598    struct cvmx_pcmx_txstart_s           cn30xx;
54599    struct cvmx_pcmx_txstart_s           cn31xx;
54600    struct cvmx_pcmx_txstart_s           cn50xx;
54601} cvmx_pcmx_txstart_t;
54602
54603
54604/**
54605 * cvmx_pcm_clk#_cfg
54606 */
54607typedef union
54608{
54609    uint64_t u64;
54610    struct cvmx_pcm_clkx_cfg_s
54611    {
54612#if __BYTE_ORDER == __BIG_ENDIAN
54613        uint64_t fsyncgood               : 1;       /**< FSYNC status
54614                                                         If 1, the last frame had a correctly positioned
54615                                                               fsync pulse
54616                                                         If 0, none/extra fsync pulse seen on most recent
54617                                                               frame
54618                                                         NOTE: this is intended for startup. the FSYNCEXTRA
54619                                                         and FSYNCMISSING interrupts are intended for
54620                                                         detecting loss of sync during normal operation. */
54621        uint64_t reserved_48_62          : 15;
54622        uint64_t fsyncsamp               : 16;      /**< Number of ECLKs from internal BCLK edge to
54623                                                         sample FSYNC
54624                                                         NOTE: used to sync to the start of a frame and to
54625                                                         check for FSYNC errors. */
54626        uint64_t reserved_26_31          : 6;
54627        uint64_t fsynclen                : 5;       /**< Number of 1/2 BCLKs FSYNC is asserted for
54628                                                         NOTE: only used when GEN==1 */
54629        uint64_t fsyncloc                : 5;       /**< FSYNC location, in 1/2 BCLKS before timeslot 0,
54630                                                         bit 0.
54631                                                         NOTE: also used to detect framing errors and
54632                                                         therefore must have a correct value even if GEN==0 */
54633        uint64_t numslots                : 10;      /**< Number of 8-bit slots in a frame
54634                                                         NOTE: this, along with EXTRABIT and Fbclk
54635                                                         determines FSYNC frequency when GEN == 1
54636                                                         NOTE: also used to detect framing errors and
54637                                                         therefore must have a correct value even if GEN==0 */
54638        uint64_t extrabit                : 1;       /**< If 0, no frame bit
54639                                                         If 1, add one extra bit time for frame bit
54640                                                         NOTE: if GEN == 1, then FSYNC will be delayed one
54641                                                         extra bit time.
54642                                                         NOTE: also used to detect framing errors and
54643                                                         therefore must have a correct value even if GEN==0
54644                                                         NOTE: the extra bit comes from the LSB/MSB of the
54645                                                         first byte of the frame in the transmit memory
54646                                                         region.  LSB vs MSB is determined from the setting
54647                                                         of PCMn_TDM_CFG[LSBFIRST]. */
54648        uint64_t bitlen                  : 2;       /**< Number of BCLKs in a bit time.
54649                                                         0 : 1 BCLK
54650                                                         1 : 2 BCLKs
54651                                                         2 : 4 BCLKs
54652                                                         3 : operation undefined */
54653        uint64_t bclkpol                 : 1;       /**< If 0, BCLK rise edge is start of bit time
54654                                                         If 1, BCLK fall edge is start of bit time
54655                                                         NOTE: also used to detect framing errors and
54656                                                         therefore must have a correct value even if GEN==0 */
54657        uint64_t fsyncpol                : 1;       /**< If 0, FSYNC idles low, asserts high
54658                                                         If 1, FSYNC idles high, asserts low
54659                                                         NOTE: also used to detect framing errors and
54660                                                         therefore must have a correct value even if GEN==0 */
54661        uint64_t ena                     : 1;       /**< If 0, Clock receiving logic is doing nothing
54662                                                         1, Clock receiving logic is looking for sync */
54663#else
54664        uint64_t ena                     : 1;
54665        uint64_t fsyncpol                : 1;
54666        uint64_t bclkpol                 : 1;
54667        uint64_t bitlen                  : 2;
54668        uint64_t extrabit                : 1;
54669        uint64_t numslots                : 10;
54670        uint64_t fsyncloc                : 5;
54671        uint64_t fsynclen                : 5;
54672        uint64_t reserved_26_31          : 6;
54673        uint64_t fsyncsamp               : 16;
54674        uint64_t reserved_48_62          : 15;
54675        uint64_t fsyncgood               : 1;
54676#endif
54677    } s;
54678    struct cvmx_pcm_clkx_cfg_s           cn30xx;
54679    struct cvmx_pcm_clkx_cfg_s           cn31xx;
54680    struct cvmx_pcm_clkx_cfg_s           cn50xx;
54681} cvmx_pcm_clkx_cfg_t;
54682
54683
54684/**
54685 * cvmx_pcm_clk#_dbg
54686 */
54687typedef union
54688{
54689    uint64_t u64;
54690    struct cvmx_pcm_clkx_dbg_s
54691    {
54692#if __BYTE_ORDER == __BIG_ENDIAN
54693        uint64_t debuginfo               : 64;      /**< Miscellaneous debug information */
54694#else
54695        uint64_t debuginfo               : 64;
54696#endif
54697    } s;
54698    struct cvmx_pcm_clkx_dbg_s           cn30xx;
54699    struct cvmx_pcm_clkx_dbg_s           cn31xx;
54700    struct cvmx_pcm_clkx_dbg_s           cn50xx;
54701} cvmx_pcm_clkx_dbg_t;
54702
54703
54704/**
54705 * cvmx_pcm_clk#_gen
54706 */
54707typedef union
54708{
54709    uint64_t u64;
54710    struct cvmx_pcm_clkx_gen_s
54711    {
54712#if __BYTE_ORDER == __BIG_ENDIAN
54713        uint64_t deltasamp               : 16;      /**< Signed number of ECLKs to move sampled BCLK edge
54714                                                         NOTE: the complete number of ECLKs to move is:
54715                                                                   NUMSAMP + 2 + 1 + DELTASAMP
54716                                                               NUMSAMP to compensate for sampling delay
54717                                                               + 2 to compensate for dual-rank synchronizer
54718                                                               + 1 for uncertainity
54719                                                               + DELTASAMP to CMA/debugging */
54720        uint64_t numsamp                 : 16;      /**< Number of ECLK samples to detect BCLK change when
54721                                                         receiving clock. */
54722        uint64_t n                       : 32;      /**< Determines BCLK frequency when generating clock
54723                                                         NOTE: Fbclk = Feclk * N / 2^32
54724                                                               N = (Fbclk / Feclk) * 2^32
54725                                                         NOTE: writing N == 0 stops the clock generator, and
54726                                                               causes bclk and fsync to be RECEIVED */
54727#else
54728        uint64_t n                       : 32;
54729        uint64_t numsamp                 : 16;
54730        uint64_t deltasamp               : 16;
54731#endif
54732    } s;
54733    struct cvmx_pcm_clkx_gen_s           cn30xx;
54734    struct cvmx_pcm_clkx_gen_s           cn31xx;
54735    struct cvmx_pcm_clkx_gen_s           cn50xx;
54736} cvmx_pcm_clkx_gen_t;
54737
54738
54739/**
54740 * cvmx_pcs#_an#_adv_reg
54741 *
54742 * Bits [15:9] in the Status Register indicate ability to operate as per those signalling specification,
54743 * when misc ctl reg MAC_PHY bit is set to MAC mode. Bits [15:9] will all, always read 1'b0, indicating
54744 * that the chip cannot operate in the corresponding modes.
54745 *
54746 * Bit [4] RM_FLT is a don't care when the selected mode is SGMII.
54747 *
54748 *
54749 *
54750 * PCS_AN_ADV_REG = AN Advertisement Register4
54751 */
54752typedef union
54753{
54754    uint64_t u64;
54755    struct cvmx_pcsx_anx_adv_reg_s
54756    {
54757#if __BYTE_ORDER == __BIG_ENDIAN
54758        uint64_t reserved_16_63          : 48;
54759        uint64_t np                      : 1;       /**< Always 0, no next page capability supported */
54760        uint64_t reserved_14_14          : 1;
54761        uint64_t rem_flt                 : 2;       /**< [<13>,<12>]
54762                                                         0    0  Link OK  XMIT=DATA
54763                                                         0    1  Link failure (loss of sync, XMIT!= DATA)
54764                                                         1    0  local device Offline
54765                                                         1    1  AN Error failure to complete AN
54766                                                                 AN Error is set if resolution function
54767                                                                 precludes operation with link partner */
54768        uint64_t reserved_9_11           : 3;
54769        uint64_t pause                   : 2;       /**< [<8>, <7>] Pause frame flow capability across link
54770                                                                  Exchanged during Auto Negotiation
54771                                                         0    0  No Pause
54772                                                         0    1  Symmetric pause
54773                                                         1    0  Asymmetric Pause
54774                                                         1    1  Both symm and asymm pause to local device */
54775        uint64_t hfd                     : 1;       /**< 1 means local device Half Duplex capable */
54776        uint64_t fd                      : 1;       /**< 1 means local device Full Duplex capable */
54777        uint64_t reserved_0_4            : 5;
54778#else
54779        uint64_t reserved_0_4            : 5;
54780        uint64_t fd                      : 1;
54781        uint64_t hfd                     : 1;
54782        uint64_t pause                   : 2;
54783        uint64_t reserved_9_11           : 3;
54784        uint64_t rem_flt                 : 2;
54785        uint64_t reserved_14_14          : 1;
54786        uint64_t np                      : 1;
54787        uint64_t reserved_16_63          : 48;
54788#endif
54789    } s;
54790    struct cvmx_pcsx_anx_adv_reg_s       cn52xx;
54791    struct cvmx_pcsx_anx_adv_reg_s       cn52xxp1;
54792    struct cvmx_pcsx_anx_adv_reg_s       cn56xx;
54793    struct cvmx_pcsx_anx_adv_reg_s       cn56xxp1;
54794} cvmx_pcsx_anx_adv_reg_t;
54795
54796
54797/**
54798 * cvmx_pcs#_an#_ext_st_reg
54799 *
54800 * NOTE:
54801 * an_results_reg is don't care when AN_OVRD is set to 1. If AN_OVRD=0 and AN_CPT=1
54802 * the an_results_reg is valid.
54803 *
54804 *
54805 * PCS_AN_EXT_ST_REG = AN Extended Status Register15
54806 * as per IEEE802.3 Clause 22
54807 */
54808typedef union
54809{
54810    uint64_t u64;
54811    struct cvmx_pcsx_anx_ext_st_reg_s
54812    {
54813#if __BYTE_ORDER == __BIG_ENDIAN
54814        uint64_t reserved_16_63          : 48;
54815        uint64_t thou_xfd                : 1;       /**< 1 means PHY is 1000BASE-X Full Dup capable */
54816        uint64_t thou_xhd                : 1;       /**< 1 means PHY is 1000BASE-X Half Dup capable */
54817        uint64_t thou_tfd                : 1;       /**< 1 means PHY is 1000BASE-T Full Dup capable */
54818        uint64_t thou_thd                : 1;       /**< 1 means PHY is 1000BASE-T Half Dup capable */
54819        uint64_t reserved_0_11           : 12;
54820#else
54821        uint64_t reserved_0_11           : 12;
54822        uint64_t thou_thd                : 1;
54823        uint64_t thou_tfd                : 1;
54824        uint64_t thou_xhd                : 1;
54825        uint64_t thou_xfd                : 1;
54826        uint64_t reserved_16_63          : 48;
54827#endif
54828    } s;
54829    struct cvmx_pcsx_anx_ext_st_reg_s    cn52xx;
54830    struct cvmx_pcsx_anx_ext_st_reg_s    cn52xxp1;
54831    struct cvmx_pcsx_anx_ext_st_reg_s    cn56xx;
54832    struct cvmx_pcsx_anx_ext_st_reg_s    cn56xxp1;
54833} cvmx_pcsx_anx_ext_st_reg_t;
54834
54835
54836/**
54837 * cvmx_pcs#_an#_lp_abil_reg
54838 *
54839 * PCS_AN_LP_ABIL_REG = AN link Partner Ability Register5
54840 * as per IEEE802.3 Clause 37
54841 */
54842typedef union
54843{
54844    uint64_t u64;
54845    struct cvmx_pcsx_anx_lp_abil_reg_s
54846    {
54847#if __BYTE_ORDER == __BIG_ENDIAN
54848        uint64_t reserved_16_63          : 48;
54849        uint64_t np                      : 1;       /**< 1=lp next page capable, 0=lp not next page capable */
54850        uint64_t ack                     : 1;       /**< 1=Acknowledgement received */
54851        uint64_t rem_flt                 : 2;       /**< [<13>,<12>] Link Partner's link status
54852                                                         0    0  Link OK
54853                                                         0    1  Offline
54854                                                         1    0  Link failure
54855                                                         1    1  AN Error */
54856        uint64_t reserved_9_11           : 3;
54857        uint64_t pause                   : 2;       /**< [<8>, <7>] Link Partner Pause setting
54858                                                         0    0  No Pause
54859                                                         0    1  Symmetric pause
54860                                                         1    0  Asymmetric Pause
54861                                                         1    1  Both symm and asymm pause to local device */
54862        uint64_t hfd                     : 1;       /**< 1 means link partner Half Duplex capable */
54863        uint64_t fd                      : 1;       /**< 1 means link partner Full Duplex capable */
54864        uint64_t reserved_0_4            : 5;
54865#else
54866        uint64_t reserved_0_4            : 5;
54867        uint64_t fd                      : 1;
54868        uint64_t hfd                     : 1;
54869        uint64_t pause                   : 2;
54870        uint64_t reserved_9_11           : 3;
54871        uint64_t rem_flt                 : 2;
54872        uint64_t ack                     : 1;
54873        uint64_t np                      : 1;
54874        uint64_t reserved_16_63          : 48;
54875#endif
54876    } s;
54877    struct cvmx_pcsx_anx_lp_abil_reg_s   cn52xx;
54878    struct cvmx_pcsx_anx_lp_abil_reg_s   cn52xxp1;
54879    struct cvmx_pcsx_anx_lp_abil_reg_s   cn56xx;
54880    struct cvmx_pcsx_anx_lp_abil_reg_s   cn56xxp1;
54881} cvmx_pcsx_anx_lp_abil_reg_t;
54882
54883
54884/**
54885 * cvmx_pcs#_an#_results_reg
54886 *
54887 * PCS_AN_RESULTS_REG = AN Results Register
54888 *
54889 */
54890typedef union
54891{
54892    uint64_t u64;
54893    struct cvmx_pcsx_anx_results_reg_s
54894    {
54895#if __BYTE_ORDER == __BIG_ENDIAN
54896        uint64_t reserved_7_63           : 57;
54897        uint64_t pause                   : 2;       /**< [<6>, <5>] PAUSE Selection (Don't care for SGMII)
54898                                                         0    0  Disable Pause, TX and RX
54899                                                         0    1  Enable pause frames RX only
54900                                                         1    0  Enable Pause frames TX only
54901                                                         1    1  Enable pause frames TX and RX */
54902        uint64_t spd                     : 2;       /**< [<4>, <3>] Link Speed Selection
54903                                                         0    0  10Mb/s
54904                                                         0    1  100Mb/s
54905                                                         1    0  1000Mb/s
54906                                                         1    1  RSVD */
54907        uint64_t an_cpt                  : 1;       /**< 1=AN Completed, 0=AN not completed or failed */
54908        uint64_t dup                     : 1;       /**< 1=Full Duplex, 0=Half Duplex */
54909        uint64_t link_ok                 : 1;       /**< 1=Link up(OK), 0=Link down */
54910#else
54911        uint64_t link_ok                 : 1;
54912        uint64_t dup                     : 1;
54913        uint64_t an_cpt                  : 1;
54914        uint64_t spd                     : 2;
54915        uint64_t pause                   : 2;
54916        uint64_t reserved_7_63           : 57;
54917#endif
54918    } s;
54919    struct cvmx_pcsx_anx_results_reg_s   cn52xx;
54920    struct cvmx_pcsx_anx_results_reg_s   cn52xxp1;
54921    struct cvmx_pcsx_anx_results_reg_s   cn56xx;
54922    struct cvmx_pcsx_anx_results_reg_s   cn56xxp1;
54923} cvmx_pcsx_anx_results_reg_t;
54924
54925
54926/**
54927 * cvmx_pcs#_int#_en_reg
54928 *
54929 * NOTE: RXERR and TXERR conditions to be discussed with Dan before finalising
54930 *
54931 *
54932 * PCS Interrupt Enable Register
54933 */
54934typedef union
54935{
54936    uint64_t u64;
54937    struct cvmx_pcsx_intx_en_reg_s
54938    {
54939#if __BYTE_ORDER == __BIG_ENDIAN
54940        uint64_t reserved_12_63          : 52;
54941        uint64_t dup                     : 1;       /**< Enable duplex mode changed interrupt */
54942        uint64_t sync_bad_en             : 1;       /**< Enable rx sync st machine in bad state interrupt */
54943        uint64_t an_bad_en               : 1;       /**< Enable AN state machine bad state interrupt */
54944        uint64_t rxlock_en               : 1;       /**< Enable rx code group sync/bit lock failure interrupt */
54945        uint64_t rxbad_en                : 1;       /**< Enable rx state machine in bad state interrupt */
54946        uint64_t rxerr_en                : 1;       /**< Enable RX error condition interrupt */
54947        uint64_t txbad_en                : 1;       /**< Enable tx state machine in bad state interrupt */
54948        uint64_t txfifo_en               : 1;       /**< Enable tx fifo overflow condition interrupt */
54949        uint64_t txfifu_en               : 1;       /**< Enable tx fifo underflow condition intrrupt */
54950        uint64_t an_err_en               : 1;       /**< Enable AN Error condition interrupt */
54951        uint64_t xmit_en                 : 1;       /**< Enable XMIT variable state change interrupt */
54952        uint64_t lnkspd_en               : 1;       /**< Enable Link Speed has changed interrupt */
54953#else
54954        uint64_t lnkspd_en               : 1;
54955        uint64_t xmit_en                 : 1;
54956        uint64_t an_err_en               : 1;
54957        uint64_t txfifu_en               : 1;
54958        uint64_t txfifo_en               : 1;
54959        uint64_t txbad_en                : 1;
54960        uint64_t rxerr_en                : 1;
54961        uint64_t rxbad_en                : 1;
54962        uint64_t rxlock_en               : 1;
54963        uint64_t an_bad_en               : 1;
54964        uint64_t sync_bad_en             : 1;
54965        uint64_t dup                     : 1;
54966        uint64_t reserved_12_63          : 52;
54967#endif
54968    } s;
54969    struct cvmx_pcsx_intx_en_reg_s       cn52xx;
54970    struct cvmx_pcsx_intx_en_reg_s       cn52xxp1;
54971    struct cvmx_pcsx_intx_en_reg_s       cn56xx;
54972    struct cvmx_pcsx_intx_en_reg_s       cn56xxp1;
54973} cvmx_pcsx_intx_en_reg_t;
54974
54975
54976/**
54977 * cvmx_pcs#_int#_reg
54978 *
54979 * SGMII bit [12] is really a misnomer, it is a decode  of pi_qlm_cfg pins to indicate SGMII or 1000Base-X modes.
54980 *
54981 * Note: MODE bit
54982 * When MODE=1,  1000Base-X mode is selected. Auto negotiation will follow IEEE 802.3 clause 37.
54983 * When MODE=0,  SGMII mode is selected and the following note will apply.
54984 * Repeat note from SGM_AN_ADV register
54985 * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the MAC_PHY mode bit in misc_ctl_reg
54986 * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit and [0] is always 1.
54987 * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
54988 *
54989 * PCS Interrupt Register
54990 */
54991typedef union
54992{
54993    uint64_t u64;
54994    struct cvmx_pcsx_intx_reg_s
54995    {
54996#if __BYTE_ORDER == __BIG_ENDIAN
54997        uint64_t reserved_12_63          : 52;
54998        uint64_t dup                     : 1;       /**< Set whenever Duplex mode changes on the link */
54999        uint64_t sync_bad                : 1;       /**< Set by HW whenever rx sync st machine reaches a bad
55000                                                         state. Should never be set during normal operation */
55001        uint64_t an_bad                  : 1;       /**< Set by HW whenever AN st machine reaches a bad
55002                                                         state. Should never be set during normal operation */
55003        uint64_t rxlock                  : 1;       /**< Set by HW whenever code group Sync or bit lock
55004                                                         failure occurs
55005                                                         Cannot fire in loopback1 mode */
55006        uint64_t rxbad                   : 1;       /**< Set by HW whenever rx st machine reaches a  bad
55007                                                         state. Should never be set during normal operation */
55008        uint64_t rxerr                   : 1;       /**< Set whenever RX receives a code group error in
55009                                                         10 bit to 8 bit decode logic
55010                                                         Cannot fire in loopback1 mode */
55011        uint64_t txbad                   : 1;       /**< Set by HW whenever tx st machine reaches a bad
55012                                                         state. Should never be set during normal operation */
55013        uint64_t txfifo                  : 1;       /**< Set whenever HW detects a TX fifo overflow
55014                                                         condition */
55015        uint64_t txfifu                  : 1;       /**< Set whenever HW detects a TX fifo underflowflow
55016                                                         condition */
55017        uint64_t an_err                  : 1;       /**< AN Error, AN resolution function failed */
55018        uint64_t xmit                    : 1;       /**< Set whenever HW detects a change in the XMIT
55019                                                         variable. XMIT variable states are IDLE, CONFIG and
55020                                                         DATA */
55021        uint64_t lnkspd                  : 1;       /**< Set by HW whenever Link Speed has changed */
55022#else
55023        uint64_t lnkspd                  : 1;
55024        uint64_t xmit                    : 1;
55025        uint64_t an_err                  : 1;
55026        uint64_t txfifu                  : 1;
55027        uint64_t txfifo                  : 1;
55028        uint64_t txbad                   : 1;
55029        uint64_t rxerr                   : 1;
55030        uint64_t rxbad                   : 1;
55031        uint64_t rxlock                  : 1;
55032        uint64_t an_bad                  : 1;
55033        uint64_t sync_bad                : 1;
55034        uint64_t dup                     : 1;
55035        uint64_t reserved_12_63          : 52;
55036#endif
55037    } s;
55038    struct cvmx_pcsx_intx_reg_s          cn52xx;
55039    struct cvmx_pcsx_intx_reg_s          cn52xxp1;
55040    struct cvmx_pcsx_intx_reg_s          cn56xx;
55041    struct cvmx_pcsx_intx_reg_s          cn56xxp1;
55042} cvmx_pcsx_intx_reg_t;
55043
55044
55045/**
55046 * cvmx_pcs#_link#_timer_count_reg
55047 *
55048 * PCS_LINK_TIMER_COUNT_REG = 1.6ms nominal link timer register
55049 *
55050 */
55051typedef union
55052{
55053    uint64_t u64;
55054    struct cvmx_pcsx_linkx_timer_count_reg_s
55055    {
55056#if __BYTE_ORDER == __BIG_ENDIAN
55057        uint64_t reserved_16_63          : 48;
55058        uint64_t count                   : 16;      /**< (core clock period times 1024) times "COUNT" should
55059                                                         be 1.6ms(SGMII)/10ms(otherwise) which is the link
55060                                                         timer used in auto negotiation.
55061                                                         Reset assums a 700MHz eclk for 1.6ms link timer */
55062#else
55063        uint64_t count                   : 16;
55064        uint64_t reserved_16_63          : 48;
55065#endif
55066    } s;
55067    struct cvmx_pcsx_linkx_timer_count_reg_s cn52xx;
55068    struct cvmx_pcsx_linkx_timer_count_reg_s cn52xxp1;
55069    struct cvmx_pcsx_linkx_timer_count_reg_s cn56xx;
55070    struct cvmx_pcsx_linkx_timer_count_reg_s cn56xxp1;
55071} cvmx_pcsx_linkx_timer_count_reg_t;
55072
55073
55074/**
55075 * cvmx_pcs#_log_anl#_reg
55076 *
55077 * PCS Logic Analyzer Register
55078 *
55079 */
55080typedef union
55081{
55082    uint64_t u64;
55083    struct cvmx_pcsx_log_anlx_reg_s
55084    {
55085#if __BYTE_ORDER == __BIG_ENDIAN
55086        uint64_t reserved_4_63           : 60;
55087        uint64_t lafifovfl               : 1;       /**< 1=logic analyser fif overflowed during packetization
55088                                                         Write 1 to clear this bit */
55089        uint64_t la_en                   : 1;       /**< 1= Logic Analyzer enabled, 0=Logic Analyzer disabled */
55090        uint64_t pkt_sz                  : 2;       /**< [<1>, <0>]  Logic Analyzer Packet Size
55091                                                         0    0   Packet size 1k bytes
55092                                                         0    1   Packet size 4k bytes
55093                                                         1    0   Packet size 8k bytes
55094                                                         1    1   Packet size 16k bytes */
55095#else
55096        uint64_t pkt_sz                  : 2;
55097        uint64_t la_en                   : 1;
55098        uint64_t lafifovfl               : 1;
55099        uint64_t reserved_4_63           : 60;
55100#endif
55101    } s;
55102    struct cvmx_pcsx_log_anlx_reg_s      cn52xx;
55103    struct cvmx_pcsx_log_anlx_reg_s      cn52xxp1;
55104    struct cvmx_pcsx_log_anlx_reg_s      cn56xx;
55105    struct cvmx_pcsx_log_anlx_reg_s      cn56xxp1;
55106} cvmx_pcsx_log_anlx_reg_t;
55107
55108
55109/**
55110 * cvmx_pcs#_misc#_ctl_reg
55111 *
55112 * SGMII Misc Control Register
55113 *
55114 */
55115typedef union
55116{
55117    uint64_t u64;
55118    struct cvmx_pcsx_miscx_ctl_reg_s
55119    {
55120#if __BYTE_ORDER == __BIG_ENDIAN
55121        uint64_t reserved_13_63          : 51;
55122        uint64_t sgmii                   : 1;       /**< 1=SGMII or 1000Base-X mode selected,
55123                                                         0=XAUI or PCIE mode selected
55124                                                         This bit represents pi_qlm1/3_cfg[1:0] pin status */
55125        uint64_t gmxeno                  : 1;       /**< GMX Enable override. When set to 1, forces GMX to
55126                                                         appear disabled. The enable/disable status of GMX
55127                                                         is checked only at SOP of every packet. */
55128        uint64_t loopbck2                : 1;       /**< Sets external loopback mode to return rx data back
55129                                                         out via tx data path. 0=no loopback, 1=loopback */
55130        uint64_t mac_phy                 : 1;       /**< 0=MAC, 1=PHY decides the tx_config_reg value to be
55131                                                         sent during auto negotiation.
55132                                                         See SGMII spec ENG-46158 from CISCO */
55133        uint64_t mode                    : 1;       /**< 0=SGMII or 1= 1000 Base X */
55134        uint64_t an_ovrd                 : 1;       /**< 0=disable, 1= enable over ride AN results
55135                                                         Auto negotiation is allowed to happen but the
55136                                                         results are ignored when set. Duplex and Link speed
55137                                                         values are set from the pcs_mr_ctrl reg */
55138        uint64_t samp_pt                 : 7;       /**< Byte# in elongated frames for 10/100Mb/s operation
55139                                                         for data sampling on RX side in PCS.
55140                                                         Recommended values are 0x5 for 100Mb/s operation
55141                                                         and 0x32 for 10Mb/s operation.
55142                                                         For 10Mb/s operaton this field should be set to a
55143                                                         value less than 99 and greater than 0. If set out
55144                                                         of this range a value of 50 will be used for actual
55145                                                         sampling internally without affecting the CSR field
55146                                                         For 100Mb/s operation this field should be set to a
55147                                                         value less than 9 and greater than 0. If set out of
55148                                                         this range a value of 5 will be used for actual
55149                                                         sampling internally without affecting the CSR field */
55150#else
55151        uint64_t samp_pt                 : 7;
55152        uint64_t an_ovrd                 : 1;
55153        uint64_t mode                    : 1;
55154        uint64_t mac_phy                 : 1;
55155        uint64_t loopbck2                : 1;
55156        uint64_t gmxeno                  : 1;
55157        uint64_t sgmii                   : 1;
55158        uint64_t reserved_13_63          : 51;
55159#endif
55160    } s;
55161    struct cvmx_pcsx_miscx_ctl_reg_s     cn52xx;
55162    struct cvmx_pcsx_miscx_ctl_reg_s     cn52xxp1;
55163    struct cvmx_pcsx_miscx_ctl_reg_s     cn56xx;
55164    struct cvmx_pcsx_miscx_ctl_reg_s     cn56xxp1;
55165} cvmx_pcsx_miscx_ctl_reg_t;
55166
55167
55168/**
55169 * cvmx_pcs#_mr#_control_reg
55170 *
55171 * PCS_MR_CONTROL_REG = Control Register0
55172 *
55173 */
55174typedef union
55175{
55176    uint64_t u64;
55177    struct cvmx_pcsx_mrx_control_reg_s
55178    {
55179#if __BYTE_ORDER == __BIG_ENDIAN
55180        uint64_t reserved_16_63          : 48;
55181        uint64_t reset                   : 1;       /**< 1=SW Reset, the bit will return to 0 after pcs has
55182                                                         been reset. Takes 32 eclk cycles to reset pcs */
55183        uint64_t loopbck1                : 1;       /**< 0=normal operation, 1=loopback. The loopback mode
55184                                                         will return(loopback) tx data from GMII tx back to
55185                                                         GMII rx interface. The loopback happens in the pcs
55186                                                         module. Auto Negotiation will be disabled even if
55187                                                         the AN_EN bit is set, during loopback */
55188        uint64_t spdlsb                  : 1;       /**< See bit 6 description */
55189        uint64_t an_en                   : 1;       /**< 1=AN Enable, 0=AN Disable */
55190        uint64_t pwr_dn                  : 1;       /**< 1=Power Down(HW reset), 0=Normal operation */
55191        uint64_t reserved_10_10          : 1;
55192        uint64_t rst_an                  : 1;       /**< If bit 12 is set and bit 3 of status reg is 1
55193                                                         Auto Negotiation begins. Else,SW writes are ignored
55194                                                         and this bit remians at 0. This bit clears itself
55195                                                         to 0, when AN starts. */
55196        uint64_t dup                     : 1;       /**< 1=full duplex, 0=half duplex; effective only if AN
55197                                                         disabled. If status register bits [15:9] and and
55198                                                         extended status reg bits [15:12] allow only one
55199                                                         duplex mode|, this bit will correspond to that
55200                                                         value and any attempt to write will be ignored. */
55201        uint64_t coltst                  : 1;       /**< 1=enable COL signal test, 0=disable test
55202                                                         During COL test, the COL signal will reflect the
55203                                                         GMII TX_EN signal with less than 16BT delay */
55204        uint64_t spdmsb                  : 1;       /**< [<6>, <13>]Link Speed effective only if AN disabled
55205                                                         0    0  10Mb/s
55206                                                         0    1  100Mb/s
55207                                                         1    0  1000Mb/s
55208                                                         1    1  RSVD */
55209        uint64_t uni                     : 1;       /**< Unidirectional (Std 802.3-2005, Clause 66.2)
55210                                                         This bit will override the AN_EN bit and disable
55211                                                         auto-negotiation variable mr_an_enable, when set
55212                                                         Used in both 1000Base-X and SGMII modes */
55213        uint64_t reserved_0_4            : 5;
55214#else
55215        uint64_t reserved_0_4            : 5;
55216        uint64_t uni                     : 1;
55217        uint64_t spdmsb                  : 1;
55218        uint64_t coltst                  : 1;
55219        uint64_t dup                     : 1;
55220        uint64_t rst_an                  : 1;
55221        uint64_t reserved_10_10          : 1;
55222        uint64_t pwr_dn                  : 1;
55223        uint64_t an_en                   : 1;
55224        uint64_t spdlsb                  : 1;
55225        uint64_t loopbck1                : 1;
55226        uint64_t reset                   : 1;
55227        uint64_t reserved_16_63          : 48;
55228#endif
55229    } s;
55230    struct cvmx_pcsx_mrx_control_reg_s   cn52xx;
55231    struct cvmx_pcsx_mrx_control_reg_s   cn52xxp1;
55232    struct cvmx_pcsx_mrx_control_reg_s   cn56xx;
55233    struct cvmx_pcsx_mrx_control_reg_s   cn56xxp1;
55234} cvmx_pcsx_mrx_control_reg_t;
55235
55236
55237/**
55238 * cvmx_pcs#_mr#_status_reg
55239 *
55240 * NOTE:
55241 * Whenever AN_EN bit[12] is set, Auto negotiation is allowed to happen. The results
55242 * of the auto negotiation process set the fields in the AN_RESULTS reg. When AN_EN is not set,
55243 * AN_RESULTS reg is don't care. The effective SPD, DUP etc.. get their values
55244 * from the pcs_mr_ctrl reg.
55245 *
55246 *  PCS_MR_STATUS_REG = Status Register1
55247 */
55248typedef union
55249{
55250    uint64_t u64;
55251    struct cvmx_pcsx_mrx_status_reg_s
55252    {
55253#if __BYTE_ORDER == __BIG_ENDIAN
55254        uint64_t reserved_16_63          : 48;
55255        uint64_t hun_t4                  : 1;       /**< 1 means 100Base-T4 capable */
55256        uint64_t hun_xfd                 : 1;       /**< 1 means 100Base-X Full Duplex */
55257        uint64_t hun_xhd                 : 1;       /**< 1 means 100Base-X Half Duplex */
55258        uint64_t ten_fd                  : 1;       /**< 1 means 10Mb/s Full Duplex */
55259        uint64_t ten_hd                  : 1;       /**< 1 means 10Mb/s Half Duplex */
55260        uint64_t hun_t2fd                : 1;       /**< 1 means 100Base-T2 Full Duplex */
55261        uint64_t hun_t2hd                : 1;       /**< 1 means 100Base-T2 Half Duplex */
55262        uint64_t ext_st                  : 1;       /**< 1 means extended status info in reg15 */
55263        uint64_t reserved_7_7            : 1;
55264        uint64_t prb_sup                 : 1;       /**< 1 means able to work without preamble bytes at the
55265                                                         beginning of frames. 0 means not able to accept
55266                                                         frames without preamble bytes preceding them. */
55267        uint64_t an_cpt                  : 1;       /**< 1 means Auto Negotiation is complete and the
55268                                                         contents of the an_results_reg are valid. */
55269        uint64_t rm_flt                  : 1;       /**< Set to 1 when remote flt condition occurs. This bit
55270                                                         implements a latching Hi behavior. It is cleared by
55271                                                         SW read of this reg or when reset bit [15] in
55272                                                         Control Reg is asserted.
55273                                                         See an adv reg[13:12] for flt conditions */
55274        uint64_t an_abil                 : 1;       /**< 1 means Auto Negotiation capable */
55275        uint64_t lnk_st                  : 1;       /**< 1=link up, 0=link down. Set during AN process
55276                                                         Set whenever XMIT=DATA. Latching Lo behavior when
55277                                                         link goes down. Link down value of the bit stays
55278                                                         low until SW reads the reg. */
55279        uint64_t reserved_1_1            : 1;
55280        uint64_t extnd                   : 1;       /**< Always 0, no extended capability regs present */
55281#else
55282        uint64_t extnd                   : 1;
55283        uint64_t reserved_1_1            : 1;
55284        uint64_t lnk_st                  : 1;
55285        uint64_t an_abil                 : 1;
55286        uint64_t rm_flt                  : 1;
55287        uint64_t an_cpt                  : 1;
55288        uint64_t prb_sup                 : 1;
55289        uint64_t reserved_7_7            : 1;
55290        uint64_t ext_st                  : 1;
55291        uint64_t hun_t2hd                : 1;
55292        uint64_t hun_t2fd                : 1;
55293        uint64_t ten_hd                  : 1;
55294        uint64_t ten_fd                  : 1;
55295        uint64_t hun_xhd                 : 1;
55296        uint64_t hun_xfd                 : 1;
55297        uint64_t hun_t4                  : 1;
55298        uint64_t reserved_16_63          : 48;
55299#endif
55300    } s;
55301    struct cvmx_pcsx_mrx_status_reg_s    cn52xx;
55302    struct cvmx_pcsx_mrx_status_reg_s    cn52xxp1;
55303    struct cvmx_pcsx_mrx_status_reg_s    cn56xx;
55304    struct cvmx_pcsx_mrx_status_reg_s    cn56xxp1;
55305} cvmx_pcsx_mrx_status_reg_t;
55306
55307
55308/**
55309 * cvmx_pcs#_rx#_states_reg
55310 *
55311 * PCS_RX_STATES_REG = RX State Machines states register
55312 *
55313 */
55314typedef union
55315{
55316    uint64_t u64;
55317    struct cvmx_pcsx_rxx_states_reg_s
55318    {
55319#if __BYTE_ORDER == __BIG_ENDIAN
55320        uint64_t reserved_16_63          : 48;
55321        uint64_t rx_bad                  : 1;       /**< Receive state machine in an illegal state */
55322        uint64_t rx_st                   : 5;       /**< Receive state machine state */
55323        uint64_t sync_bad                : 1;       /**< Receive synchronization SM in an illegal state */
55324        uint64_t sync                    : 4;       /**< Receive synchronization SM state */
55325        uint64_t an_bad                  : 1;       /**< Auto Negotiation state machine in an illegal state */
55326        uint64_t an_st                   : 4;       /**< Auto Negotiation state machine state */
55327#else
55328        uint64_t an_st                   : 4;
55329        uint64_t an_bad                  : 1;
55330        uint64_t sync                    : 4;
55331        uint64_t sync_bad                : 1;
55332        uint64_t rx_st                   : 5;
55333        uint64_t rx_bad                  : 1;
55334        uint64_t reserved_16_63          : 48;
55335#endif
55336    } s;
55337    struct cvmx_pcsx_rxx_states_reg_s    cn52xx;
55338    struct cvmx_pcsx_rxx_states_reg_s    cn52xxp1;
55339    struct cvmx_pcsx_rxx_states_reg_s    cn56xx;
55340    struct cvmx_pcsx_rxx_states_reg_s    cn56xxp1;
55341} cvmx_pcsx_rxx_states_reg_t;
55342
55343
55344/**
55345 * cvmx_pcs#_rx#_sync_reg
55346 *
55347 * Note:
55348 * r_tx_rx_polarity_reg bit [2] will show correct polarity needed on the link receive path after code grp synchronization is achieved.
55349 *
55350 *
55351 *  PCS_RX_SYNC_REG = Code Group synchronization reg
55352 */
55353typedef union
55354{
55355    uint64_t u64;
55356    struct cvmx_pcsx_rxx_sync_reg_s
55357    {
55358#if __BYTE_ORDER == __BIG_ENDIAN
55359        uint64_t reserved_2_63           : 62;
55360        uint64_t sync                    : 1;       /**< 1 means code group synchronization achieved */
55361        uint64_t bit_lock                : 1;       /**< 1 means bit lock achieved */
55362#else
55363        uint64_t bit_lock                : 1;
55364        uint64_t sync                    : 1;
55365        uint64_t reserved_2_63           : 62;
55366#endif
55367    } s;
55368    struct cvmx_pcsx_rxx_sync_reg_s      cn52xx;
55369    struct cvmx_pcsx_rxx_sync_reg_s      cn52xxp1;
55370    struct cvmx_pcsx_rxx_sync_reg_s      cn56xx;
55371    struct cvmx_pcsx_rxx_sync_reg_s      cn56xxp1;
55372} cvmx_pcsx_rxx_sync_reg_t;
55373
55374
55375/**
55376 * cvmx_pcs#_sgm#_an_adv_reg
55377 *
55378 * SGMII AN Advertisement Register (sent out as tx_config_reg)
55379 *
55380 */
55381typedef union
55382{
55383    uint64_t u64;
55384    struct cvmx_pcsx_sgmx_an_adv_reg_s
55385    {
55386#if __BYTE_ORDER == __BIG_ENDIAN
55387        uint64_t reserved_16_63          : 48;
55388        uint64_t link                    : 1;       /**< Link status 1 Link Up, 0 Link Down */
55389        uint64_t ack                     : 1;       /**< Auto negotiation ack */
55390        uint64_t reserved_13_13          : 1;
55391        uint64_t dup                     : 1;       /**< Duplex mode 1=full duplex, 0=half duplex */
55392        uint64_t speed                   : 2;       /**< Link Speed
55393                                                         0    0  10Mb/s
55394                                                         0    1  100Mb/s
55395                                                         1    0  1000Mb/s
55396                                                         1    1  RSVD */
55397        uint64_t reserved_1_9            : 9;
55398        uint64_t one                     : 1;       /**< Always set to match tx_config_reg<0> */
55399#else
55400        uint64_t one                     : 1;
55401        uint64_t reserved_1_9            : 9;
55402        uint64_t speed                   : 2;
55403        uint64_t dup                     : 1;
55404        uint64_t reserved_13_13          : 1;
55405        uint64_t ack                     : 1;
55406        uint64_t link                    : 1;
55407        uint64_t reserved_16_63          : 48;
55408#endif
55409    } s;
55410    struct cvmx_pcsx_sgmx_an_adv_reg_s   cn52xx;
55411    struct cvmx_pcsx_sgmx_an_adv_reg_s   cn52xxp1;
55412    struct cvmx_pcsx_sgmx_an_adv_reg_s   cn56xx;
55413    struct cvmx_pcsx_sgmx_an_adv_reg_s   cn56xxp1;
55414} cvmx_pcsx_sgmx_an_adv_reg_t;
55415
55416
55417/**
55418 * cvmx_pcs#_sgm#_lp_adv_reg
55419 *
55420 * NOTE: The SGMII AN Advertisement Register above will be sent during Auto Negotiation if the MAC_PHY mode bit in misc_ctl_reg
55421 * is set (1=PHY mode). If the bit is not set (0=MAC mode), the tx_config_reg[14] becomes ACK bit and [0] is always 1.
55422 * All other bits in tx_config_reg sent will be 0. The PHY dictates the Auto Negotiation results.
55423 *
55424 * SGMII LP Advertisement Register (received as rx_config_reg)
55425 */
55426typedef union
55427{
55428    uint64_t u64;
55429    struct cvmx_pcsx_sgmx_lp_adv_reg_s
55430    {
55431#if __BYTE_ORDER == __BIG_ENDIAN
55432        uint64_t reserved_16_63          : 48;
55433        uint64_t link                    : 1;       /**< Link status 1 Link Up, 0 Link Down */
55434        uint64_t reserved_13_14          : 2;
55435        uint64_t dup                     : 1;       /**< Duplex mode 1=full duplex, 0=half duplex */
55436        uint64_t speed                   : 2;       /**< Link Speed
55437                                                         0    0  10Mb/s
55438                                                         0    1  100Mb/s
55439                                                         1    0  1000Mb/s
55440                                                         1    1  RSVD */
55441        uint64_t reserved_1_9            : 9;
55442        uint64_t one                     : 1;       /**< Always set to match tx_config_reg<0> */
55443#else
55444        uint64_t one                     : 1;
55445        uint64_t reserved_1_9            : 9;
55446        uint64_t speed                   : 2;
55447        uint64_t dup                     : 1;
55448        uint64_t reserved_13_14          : 2;
55449        uint64_t link                    : 1;
55450        uint64_t reserved_16_63          : 48;
55451#endif
55452    } s;
55453    struct cvmx_pcsx_sgmx_lp_adv_reg_s   cn52xx;
55454    struct cvmx_pcsx_sgmx_lp_adv_reg_s   cn52xxp1;
55455    struct cvmx_pcsx_sgmx_lp_adv_reg_s   cn56xx;
55456    struct cvmx_pcsx_sgmx_lp_adv_reg_s   cn56xxp1;
55457} cvmx_pcsx_sgmx_lp_adv_reg_t;
55458
55459
55460/**
55461 * cvmx_pcs#_tx#_states_reg
55462 *
55463 * PCS_TX_STATES_REG = TX State Machines states register
55464 *
55465 */
55466typedef union
55467{
55468    uint64_t u64;
55469    struct cvmx_pcsx_txx_states_reg_s
55470    {
55471#if __BYTE_ORDER == __BIG_ENDIAN
55472        uint64_t reserved_7_63           : 57;
55473        uint64_t xmit                    : 2;       /**< 0=undefined, 1=config, 2=idle, 3=data */
55474        uint64_t tx_bad                  : 1;       /**< Xmit state machine in a bad state */
55475        uint64_t ord_st                  : 4;       /**< Xmit ordered set state machine state */
55476#else
55477        uint64_t ord_st                  : 4;
55478        uint64_t tx_bad                  : 1;
55479        uint64_t xmit                    : 2;
55480        uint64_t reserved_7_63           : 57;
55481#endif
55482    } s;
55483    struct cvmx_pcsx_txx_states_reg_s    cn52xx;
55484    struct cvmx_pcsx_txx_states_reg_s    cn52xxp1;
55485    struct cvmx_pcsx_txx_states_reg_s    cn56xx;
55486    struct cvmx_pcsx_txx_states_reg_s    cn56xxp1;
55487} cvmx_pcsx_txx_states_reg_t;
55488
55489
55490/**
55491 * cvmx_pcs#_tx_rx#_polarity_reg
55492 *
55493 * PCS_POLARITY_REG = TX_RX polarity reg
55494 *
55495 */
55496typedef union
55497{
55498    uint64_t u64;
55499    struct cvmx_pcsx_tx_rxx_polarity_reg_s
55500    {
55501#if __BYTE_ORDER == __BIG_ENDIAN
55502        uint64_t reserved_4_63           : 60;
55503        uint64_t rxovrd                  : 1;       /**< When 0, <2> determines polarity
55504                                                         when 1, <1> determines polarity */
55505        uint64_t autorxpl                : 1;       /**< Auto RX polarity detected. 1=inverted, 0=normal
55506                                                         This bit always represents the correct rx polarity
55507                                                         setting needed for successful rx path operartion,
55508                                                         once a successful code group sync is obtained */
55509        uint64_t rxplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
55510        uint64_t txplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
55511#else
55512        uint64_t txplrt                  : 1;
55513        uint64_t rxplrt                  : 1;
55514        uint64_t autorxpl                : 1;
55515        uint64_t rxovrd                  : 1;
55516        uint64_t reserved_4_63           : 60;
55517#endif
55518    } s;
55519    struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xx;
55520    struct cvmx_pcsx_tx_rxx_polarity_reg_s cn52xxp1;
55521    struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xx;
55522    struct cvmx_pcsx_tx_rxx_polarity_reg_s cn56xxp1;
55523} cvmx_pcsx_tx_rxx_polarity_reg_t;
55524
55525
55526/**
55527 * cvmx_pcsx#_10gbx_status_reg
55528 *
55529 * PCSX_10GBX_STATUS_REG = 10gbx_status_reg
55530 *
55531 */
55532typedef union
55533{
55534    uint64_t u64;
55535    struct cvmx_pcsxx_10gbx_status_reg_s
55536    {
55537#if __BYTE_ORDER == __BIG_ENDIAN
55538        uint64_t reserved_13_63          : 51;
55539        uint64_t alignd                  : 1;       /**< 1=Lane alignment achieved, 0=Lanes not aligned */
55540        uint64_t pattst                  : 1;       /**< Always at 0, no pattern testing capability */
55541        uint64_t reserved_4_10           : 7;
55542        uint64_t l3sync                  : 1;       /**< 1=Rcv lane 3 code grp synchronized, 0=not sync'ed */
55543        uint64_t l2sync                  : 1;       /**< 1=Rcv lane 2 code grp synchronized, 0=not sync'ed */
55544        uint64_t l1sync                  : 1;       /**< 1=Rcv lane 1 code grp synchronized, 0=not sync'ed */
55545        uint64_t l0sync                  : 1;       /**< 1=Rcv lane 0 code grp synchronized, 0=not sync'ed */
55546#else
55547        uint64_t l0sync                  : 1;
55548        uint64_t l1sync                  : 1;
55549        uint64_t l2sync                  : 1;
55550        uint64_t l3sync                  : 1;
55551        uint64_t reserved_4_10           : 7;
55552        uint64_t pattst                  : 1;
55553        uint64_t alignd                  : 1;
55554        uint64_t reserved_13_63          : 51;
55555#endif
55556    } s;
55557    struct cvmx_pcsxx_10gbx_status_reg_s cn52xx;
55558    struct cvmx_pcsxx_10gbx_status_reg_s cn52xxp1;
55559    struct cvmx_pcsxx_10gbx_status_reg_s cn56xx;
55560    struct cvmx_pcsxx_10gbx_status_reg_s cn56xxp1;
55561} cvmx_pcsxx_10gbx_status_reg_t;
55562
55563
55564/**
55565 * cvmx_pcsx#_bist_status_reg
55566 *
55567 * NOTE: Logic Analyzer is enabled with LA_EN for xaui only. PKT_SZ is effective only when LA_EN=1
55568 * For normal operation(xaui), this bit must be 0. The dropped lane is used to send rxc[3:0].
55569 * See pcs.csr  for sgmii/1000Base-X logic analyzer mode.
55570 * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt
55571 *
55572 *
55573 *  PCSX Bist Status Register
55574 */
55575typedef union
55576{
55577    uint64_t u64;
55578    struct cvmx_pcsxx_bist_status_reg_s
55579    {
55580#if __BYTE_ORDER == __BIG_ENDIAN
55581        uint64_t reserved_1_63           : 63;
55582        uint64_t bist_status             : 1;       /**< 1=bist failure, 0=bisted memory ok or bist in progress
55583                                                         pcsx.tx_sm.drf8x36m1_async_bist */
55584#else
55585        uint64_t bist_status             : 1;
55586        uint64_t reserved_1_63           : 63;
55587#endif
55588    } s;
55589    struct cvmx_pcsxx_bist_status_reg_s  cn52xx;
55590    struct cvmx_pcsxx_bist_status_reg_s  cn52xxp1;
55591    struct cvmx_pcsxx_bist_status_reg_s  cn56xx;
55592    struct cvmx_pcsxx_bist_status_reg_s  cn56xxp1;
55593} cvmx_pcsxx_bist_status_reg_t;
55594
55595
55596/**
55597 * cvmx_pcsx#_bit_lock_status_reg
55598 *
55599 * LN_SWAP for XAUI is to simplify interconnection layout between devices
55600 *
55601 *
55602 * PCSX Bit Lock Status Register
55603 */
55604typedef union
55605{
55606    uint64_t u64;
55607    struct cvmx_pcsxx_bit_lock_status_reg_s
55608    {
55609#if __BYTE_ORDER == __BIG_ENDIAN
55610        uint64_t reserved_4_63           : 60;
55611        uint64_t bitlck3                 : 1;       /**< Receive Lane 3 bit lock status */
55612        uint64_t bitlck2                 : 1;       /**< Receive Lane 2 bit lock status */
55613        uint64_t bitlck1                 : 1;       /**< Receive Lane 1 bit lock status */
55614        uint64_t bitlck0                 : 1;       /**< Receive Lane 0 bit lock status */
55615#else
55616        uint64_t bitlck0                 : 1;
55617        uint64_t bitlck1                 : 1;
55618        uint64_t bitlck2                 : 1;
55619        uint64_t bitlck3                 : 1;
55620        uint64_t reserved_4_63           : 60;
55621#endif
55622    } s;
55623    struct cvmx_pcsxx_bit_lock_status_reg_s cn52xx;
55624    struct cvmx_pcsxx_bit_lock_status_reg_s cn52xxp1;
55625    struct cvmx_pcsxx_bit_lock_status_reg_s cn56xx;
55626    struct cvmx_pcsxx_bit_lock_status_reg_s cn56xxp1;
55627} cvmx_pcsxx_bit_lock_status_reg_t;
55628
55629
55630/**
55631 * cvmx_pcsx#_control1_reg
55632 *
55633 * NOTE: Logic Analyzer is enabled with LA_EN for the specified PCS lane only. PKT_SZ is effective only when LA_EN=1
55634 * For normal operation(sgmii or 1000Base-X), this bit must be 0.
55635 * See pcsx.csr for xaui logic analyzer mode.
55636 * For full description see document at .../rtl/pcs/readme_logic_analyzer.txt
55637 *
55638 *
55639 *  PCSX regs follow IEEE Std 802.3-2005, Section: 45.2.3
55640 *
55641 *
55642 *  PCSX_CONTROL1_REG = Control Register1
55643 */
55644typedef union
55645{
55646    uint64_t u64;
55647    struct cvmx_pcsxx_control1_reg_s
55648    {
55649#if __BYTE_ORDER == __BIG_ENDIAN
55650        uint64_t reserved_16_63          : 48;
55651        uint64_t reset                   : 1;       /**< 1=SW PCSX Reset, the bit will return to 0 after pcs
55652                                                         has been reset. Takes 32 eclk cycles to reset pcs
55653                                                         0=Normal operation */
55654        uint64_t loopbck1                : 1;       /**< 0=normal operation, 1=internal loopback mode
55655                                                         xgmii tx data received from gmx tx port is returned
55656                                                         back into gmx, xgmii rx port. */
55657        uint64_t spdsel1                 : 1;       /**< See bit 6 description */
55658        uint64_t reserved_12_12          : 1;
55659        uint64_t lo_pwr                  : 1;       /**< The status of this bit has no effect on operation
55660                                                         of the PCS sublayer. */
55661        uint64_t reserved_7_10           : 4;
55662        uint64_t spdsel0                 : 1;       /**< SPDSEL1 and SPDSEL0 are always at 1'b1. Write has
55663                                                         no effect.
55664                                                         [<6>, <13>]Link Speed selection
55665                                                           1    1   Bits 5:2 select speed */
55666        uint64_t spd                     : 4;       /**< Always select 10Gb/s, writes have no effect */
55667        uint64_t reserved_0_1            : 2;
55668#else
55669        uint64_t reserved_0_1            : 2;
55670        uint64_t spd                     : 4;
55671        uint64_t spdsel0                 : 1;
55672        uint64_t reserved_7_10           : 4;
55673        uint64_t lo_pwr                  : 1;
55674        uint64_t reserved_12_12          : 1;
55675        uint64_t spdsel1                 : 1;
55676        uint64_t loopbck1                : 1;
55677        uint64_t reset                   : 1;
55678        uint64_t reserved_16_63          : 48;
55679#endif
55680    } s;
55681    struct cvmx_pcsxx_control1_reg_s     cn52xx;
55682    struct cvmx_pcsxx_control1_reg_s     cn52xxp1;
55683    struct cvmx_pcsxx_control1_reg_s     cn56xx;
55684    struct cvmx_pcsxx_control1_reg_s     cn56xxp1;
55685} cvmx_pcsxx_control1_reg_t;
55686
55687
55688/**
55689 * cvmx_pcsx#_control2_reg
55690 *
55691 * PCSX_CONTROL2_REG = Control Register2
55692 *
55693 */
55694typedef union
55695{
55696    uint64_t u64;
55697    struct cvmx_pcsxx_control2_reg_s
55698    {
55699#if __BYTE_ORDER == __BIG_ENDIAN
55700        uint64_t reserved_2_63           : 62;
55701        uint64_t type                    : 2;       /**< Always 2'b01, 10GBASE-X only supported */
55702#else
55703        uint64_t type                    : 2;
55704        uint64_t reserved_2_63           : 62;
55705#endif
55706    } s;
55707    struct cvmx_pcsxx_control2_reg_s     cn52xx;
55708    struct cvmx_pcsxx_control2_reg_s     cn52xxp1;
55709    struct cvmx_pcsxx_control2_reg_s     cn56xx;
55710    struct cvmx_pcsxx_control2_reg_s     cn56xxp1;
55711} cvmx_pcsxx_control2_reg_t;
55712
55713
55714/**
55715 * cvmx_pcsx#_int_en_reg
55716 *
55717 * PCSX Interrupt Enable Register
55718 *
55719 */
55720typedef union
55721{
55722    uint64_t u64;
55723    struct cvmx_pcsxx_int_en_reg_s
55724    {
55725#if __BYTE_ORDER == __BIG_ENDIAN
55726        uint64_t reserved_6_63           : 58;
55727        uint64_t algnlos_en              : 1;       /**< Enable ALGNLOS interrupt */
55728        uint64_t synlos_en               : 1;       /**< Enable SYNLOS interrupt */
55729        uint64_t bitlckls_en             : 1;       /**< Enable BITLCKLS interrupt */
55730        uint64_t rxsynbad_en             : 1;       /**< Enable RXSYNBAD  interrupt */
55731        uint64_t rxbad_en                : 1;       /**< Enable RXBAD  interrupt */
55732        uint64_t txflt_en                : 1;       /**< Enable TXFLT   interrupt */
55733#else
55734        uint64_t txflt_en                : 1;
55735        uint64_t rxbad_en                : 1;
55736        uint64_t rxsynbad_en             : 1;
55737        uint64_t bitlckls_en             : 1;
55738        uint64_t synlos_en               : 1;
55739        uint64_t algnlos_en              : 1;
55740        uint64_t reserved_6_63           : 58;
55741#endif
55742    } s;
55743    struct cvmx_pcsxx_int_en_reg_s       cn52xx;
55744    struct cvmx_pcsxx_int_en_reg_s       cn52xxp1;
55745    struct cvmx_pcsxx_int_en_reg_s       cn56xx;
55746    struct cvmx_pcsxx_int_en_reg_s       cn56xxp1;
55747} cvmx_pcsxx_int_en_reg_t;
55748
55749
55750/**
55751 * cvmx_pcsx#_int_reg
55752 *
55753 * PCSX Interrupt Register
55754 *
55755 */
55756typedef union
55757{
55758    uint64_t u64;
55759    struct cvmx_pcsxx_int_reg_s
55760    {
55761#if __BYTE_ORDER == __BIG_ENDIAN
55762        uint64_t reserved_6_63           : 58;
55763        uint64_t algnlos                 : 1;       /**< Set when XAUI lanes lose alignment */
55764        uint64_t synlos                  : 1;       /**< Set when Code group sync lost on 1 or more  lanes */
55765        uint64_t bitlckls                : 1;       /**< Set when Bit lock lost on 1 or more xaui lanes */
55766        uint64_t rxsynbad                : 1;       /**< Set when RX code grp sync st machine in bad state
55767                                                         in one of the 4 xaui lanes */
55768        uint64_t rxbad                   : 1;       /**< Set when RX state machine in bad state */
55769        uint64_t txflt                   : 1;       /**< None defined at this time, always 0x0 */
55770#else
55771        uint64_t txflt                   : 1;
55772        uint64_t rxbad                   : 1;
55773        uint64_t rxsynbad                : 1;
55774        uint64_t bitlckls                : 1;
55775        uint64_t synlos                  : 1;
55776        uint64_t algnlos                 : 1;
55777        uint64_t reserved_6_63           : 58;
55778#endif
55779    } s;
55780    struct cvmx_pcsxx_int_reg_s          cn52xx;
55781    struct cvmx_pcsxx_int_reg_s          cn52xxp1;
55782    struct cvmx_pcsxx_int_reg_s          cn56xx;
55783    struct cvmx_pcsxx_int_reg_s          cn56xxp1;
55784} cvmx_pcsxx_int_reg_t;
55785
55786
55787/**
55788 * cvmx_pcsx#_log_anl_reg
55789 *
55790 * PCSX Logic Analyzer Register
55791 *
55792 */
55793typedef union
55794{
55795    uint64_t u64;
55796    struct cvmx_pcsxx_log_anl_reg_s
55797    {
55798#if __BYTE_ORDER == __BIG_ENDIAN
55799        uint64_t reserved_7_63           : 57;
55800        uint64_t enc_mode                : 1;       /**< 1=send xaui encoded data, 0=send xaui raw data to GMX
55801                                                         See .../rtl/pcs/readme_logic_analyzer.txt for details */
55802        uint64_t drop_ln                 : 2;       /**< xaui lane# to drop from logic analyzer packets
55803                                                         [<5>, <4>]  Drop lane \#
55804                                                          0    0   Drop lane 0 data
55805                                                          0    1   Drop lane 1 data
55806                                                          1    0   Drop lane 2 data
55807                                                          1    1   Drop lane 3 data */
55808        uint64_t lafifovfl               : 1;       /**< 1=logic analyser fif overflowed one or more times
55809                                                         during packetization.
55810                                                         Write 1 to clear this bit */
55811        uint64_t la_en                   : 1;       /**< 1= Logic Analyzer enabled, 0=Logic Analyzer disabled */
55812        uint64_t pkt_sz                  : 2;       /**< [<1>, <0>]  Logic Analyzer Packet Size
55813                                                         0    0   Packet size 1k bytes
55814                                                         0    1   Packet size 4k bytes
55815                                                         1    0   Packet size 8k bytes
55816                                                         1    1   Packet size 16k bytes */
55817#else
55818        uint64_t pkt_sz                  : 2;
55819        uint64_t la_en                   : 1;
55820        uint64_t lafifovfl               : 1;
55821        uint64_t drop_ln                 : 2;
55822        uint64_t enc_mode                : 1;
55823        uint64_t reserved_7_63           : 57;
55824#endif
55825    } s;
55826    struct cvmx_pcsxx_log_anl_reg_s      cn52xx;
55827    struct cvmx_pcsxx_log_anl_reg_s      cn52xxp1;
55828    struct cvmx_pcsxx_log_anl_reg_s      cn56xx;
55829    struct cvmx_pcsxx_log_anl_reg_s      cn56xxp1;
55830} cvmx_pcsxx_log_anl_reg_t;
55831
55832
55833/**
55834 * cvmx_pcsx#_misc_ctl_reg
55835 *
55836 * RX lane polarity vector [3:0] = XOR_RXPLRT<9:6>  ^  [4[RXPLRT<1>]];
55837 *
55838 * TX lane polarity vector [3:0] = XOR_TXPLRT<5:2>  ^  [4[TXPLRT<0>]];
55839 *
55840 * In short keep <1:0> to 2'b00, and use <5:2> and <9:6> fields to define per lane polarities
55841 *
55842 *
55843 *
55844 * PCSX Misc Control Register
55845 */
55846typedef union
55847{
55848    uint64_t u64;
55849    struct cvmx_pcsxx_misc_ctl_reg_s
55850    {
55851#if __BYTE_ORDER == __BIG_ENDIAN
55852        uint64_t reserved_4_63           : 60;
55853        uint64_t tx_swap                 : 1;       /**< 0=do not swap xaui lanes going out to qlm's
55854                                                         1=swap lanes 3 <-> 0   and   2 <-> 1 */
55855        uint64_t rx_swap                 : 1;       /**< 0=do not swap xaui lanes coming in from qlm's
55856                                                         1=swap lanes 3 <-> 0   and   2 <-> 1 */
55857        uint64_t xaui                    : 1;       /**< 1=XAUI mode selected, 0=not XAUI mode selected
55858                                                         This bit represents pi_qlm1/3_cfg[1:0] pin status */
55859        uint64_t gmxeno                  : 1;       /**< GMX port enable override, GMX en/dis status is held
55860                                                         during data packet reception. */
55861#else
55862        uint64_t gmxeno                  : 1;
55863        uint64_t xaui                    : 1;
55864        uint64_t rx_swap                 : 1;
55865        uint64_t tx_swap                 : 1;
55866        uint64_t reserved_4_63           : 60;
55867#endif
55868    } s;
55869    struct cvmx_pcsxx_misc_ctl_reg_s     cn52xx;
55870    struct cvmx_pcsxx_misc_ctl_reg_s     cn52xxp1;
55871    struct cvmx_pcsxx_misc_ctl_reg_s     cn56xx;
55872    struct cvmx_pcsxx_misc_ctl_reg_s     cn56xxp1;
55873} cvmx_pcsxx_misc_ctl_reg_t;
55874
55875
55876/**
55877 * cvmx_pcsx#_rx_sync_states_reg
55878 *
55879 * PCSX_RX_SYNC_STATES_REG = Receive Sync States Register
55880 *
55881 */
55882typedef union
55883{
55884    uint64_t u64;
55885    struct cvmx_pcsxx_rx_sync_states_reg_s
55886    {
55887#if __BYTE_ORDER == __BIG_ENDIAN
55888        uint64_t reserved_16_63          : 48;
55889        uint64_t sync3st                 : 4;       /**< Receive lane 3 code grp sync state machine state */
55890        uint64_t sync2st                 : 4;       /**< Receive lane 2 code grp sync state machine state */
55891        uint64_t sync1st                 : 4;       /**< Receive lane 1 code grp sync state machine state */
55892        uint64_t sync0st                 : 4;       /**< Receive lane 0 code grp sync state machine state */
55893#else
55894        uint64_t sync0st                 : 4;
55895        uint64_t sync1st                 : 4;
55896        uint64_t sync2st                 : 4;
55897        uint64_t sync3st                 : 4;
55898        uint64_t reserved_16_63          : 48;
55899#endif
55900    } s;
55901    struct cvmx_pcsxx_rx_sync_states_reg_s cn52xx;
55902    struct cvmx_pcsxx_rx_sync_states_reg_s cn52xxp1;
55903    struct cvmx_pcsxx_rx_sync_states_reg_s cn56xx;
55904    struct cvmx_pcsxx_rx_sync_states_reg_s cn56xxp1;
55905} cvmx_pcsxx_rx_sync_states_reg_t;
55906
55907
55908/**
55909 * cvmx_pcsx#_spd_abil_reg
55910 *
55911 * PCSX_SPD_ABIL_REG = Speed ability register
55912 *
55913 */
55914typedef union
55915{
55916    uint64_t u64;
55917    struct cvmx_pcsxx_spd_abil_reg_s
55918    {
55919#if __BYTE_ORDER == __BIG_ENDIAN
55920        uint64_t reserved_2_63           : 62;
55921        uint64_t tenpasst                : 1;       /**< Always 0, no 10PASS-TS/2BASE-TL capability support */
55922        uint64_t tengb                   : 1;       /**< Always 1, 10Gb/s supported */
55923#else
55924        uint64_t tengb                   : 1;
55925        uint64_t tenpasst                : 1;
55926        uint64_t reserved_2_63           : 62;
55927#endif
55928    } s;
55929    struct cvmx_pcsxx_spd_abil_reg_s     cn52xx;
55930    struct cvmx_pcsxx_spd_abil_reg_s     cn52xxp1;
55931    struct cvmx_pcsxx_spd_abil_reg_s     cn56xx;
55932    struct cvmx_pcsxx_spd_abil_reg_s     cn56xxp1;
55933} cvmx_pcsxx_spd_abil_reg_t;
55934
55935
55936/**
55937 * cvmx_pcsx#_status1_reg
55938 *
55939 * PCSX_STATUS1_REG = Status Register1
55940 *
55941 */
55942typedef union
55943{
55944    uint64_t u64;
55945    struct cvmx_pcsxx_status1_reg_s
55946    {
55947#if __BYTE_ORDER == __BIG_ENDIAN
55948        uint64_t reserved_8_63           : 56;
55949        uint64_t flt                     : 1;       /**< 1=Fault condition detected, 0=No fault condition
55950                                                         This bit is a logical OR of Status2 reg bits 11,10 */
55951        uint64_t reserved_3_6            : 4;
55952        uint64_t rcv_lnk                 : 1;       /**< 1=Receive Link up, 0=Receive Link down
55953                                                         Latching Low version of r_10gbx_status_reg[12],
55954                                                         Link down status continues until SW read. */
55955        uint64_t lpable                  : 1;       /**< Always set to 1 for Low Power ablility indication */
55956        uint64_t reserved_0_0            : 1;
55957#else
55958        uint64_t reserved_0_0            : 1;
55959        uint64_t lpable                  : 1;
55960        uint64_t rcv_lnk                 : 1;
55961        uint64_t reserved_3_6            : 4;
55962        uint64_t flt                     : 1;
55963        uint64_t reserved_8_63           : 56;
55964#endif
55965    } s;
55966    struct cvmx_pcsxx_status1_reg_s      cn52xx;
55967    struct cvmx_pcsxx_status1_reg_s      cn52xxp1;
55968    struct cvmx_pcsxx_status1_reg_s      cn56xx;
55969    struct cvmx_pcsxx_status1_reg_s      cn56xxp1;
55970} cvmx_pcsxx_status1_reg_t;
55971
55972
55973/**
55974 * cvmx_pcsx#_status2_reg
55975 *
55976 * PCSX_STATUS2_REG = Status Register2
55977 *
55978 */
55979typedef union
55980{
55981    uint64_t u64;
55982    struct cvmx_pcsxx_status2_reg_s
55983    {
55984#if __BYTE_ORDER == __BIG_ENDIAN
55985        uint64_t reserved_16_63          : 48;
55986        uint64_t dev                     : 2;       /**< Always at 2'b10, means a Device present at the addr */
55987        uint64_t reserved_12_13          : 2;
55988        uint64_t xmtflt                  : 1;       /**< 0=No xmit fault, 1=xmit fault. Implements latching
55989                                                         High function until SW read. */
55990        uint64_t rcvflt                  : 1;       /**< 0=No rcv fault, 1=rcv fault. Implements latching
55991                                                         High function until SW read */
55992        uint64_t reserved_3_9            : 7;
55993        uint64_t tengb_w                 : 1;       /**< Always 0, no 10GBASE-W capability */
55994        uint64_t tengb_x                 : 1;       /**< Always 1, 10GBASE-X capable */
55995        uint64_t tengb_r                 : 1;       /**< Always 0, no 10GBASE-R capability */
55996#else
55997        uint64_t tengb_r                 : 1;
55998        uint64_t tengb_x                 : 1;
55999        uint64_t tengb_w                 : 1;
56000        uint64_t reserved_3_9            : 7;
56001        uint64_t rcvflt                  : 1;
56002        uint64_t xmtflt                  : 1;
56003        uint64_t reserved_12_13          : 2;
56004        uint64_t dev                     : 2;
56005        uint64_t reserved_16_63          : 48;
56006#endif
56007    } s;
56008    struct cvmx_pcsxx_status2_reg_s      cn52xx;
56009    struct cvmx_pcsxx_status2_reg_s      cn52xxp1;
56010    struct cvmx_pcsxx_status2_reg_s      cn56xx;
56011    struct cvmx_pcsxx_status2_reg_s      cn56xxp1;
56012} cvmx_pcsxx_status2_reg_t;
56013
56014
56015/**
56016 * cvmx_pcsx#_tx_rx_polarity_reg
56017 *
56018 * PCSX_POLARITY_REG = TX_RX polarity reg
56019 *
56020 */
56021typedef union
56022{
56023    uint64_t u64;
56024    struct cvmx_pcsxx_tx_rx_polarity_reg_s
56025    {
56026#if __BYTE_ORDER == __BIG_ENDIAN
56027        uint64_t reserved_10_63          : 54;
56028        uint64_t xor_rxplrt              : 4;       /**< Per lane RX polarity control */
56029        uint64_t xor_txplrt              : 4;       /**< Per lane TX polarity control */
56030        uint64_t rxplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
56031        uint64_t txplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
56032#else
56033        uint64_t txplrt                  : 1;
56034        uint64_t rxplrt                  : 1;
56035        uint64_t xor_txplrt              : 4;
56036        uint64_t xor_rxplrt              : 4;
56037        uint64_t reserved_10_63          : 54;
56038#endif
56039    } s;
56040    struct cvmx_pcsxx_tx_rx_polarity_reg_s cn52xx;
56041    struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1
56042    {
56043#if __BYTE_ORDER == __BIG_ENDIAN
56044        uint64_t reserved_2_63           : 62;
56045        uint64_t rxplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
56046        uint64_t txplrt                  : 1;       /**< 1 is inverted polarity, 0 is normal polarity */
56047#else
56048        uint64_t txplrt                  : 1;
56049        uint64_t rxplrt                  : 1;
56050        uint64_t reserved_2_63           : 62;
56051#endif
56052    } cn52xxp1;
56053    struct cvmx_pcsxx_tx_rx_polarity_reg_s cn56xx;
56054    struct cvmx_pcsxx_tx_rx_polarity_reg_cn52xxp1 cn56xxp1;
56055} cvmx_pcsxx_tx_rx_polarity_reg_t;
56056
56057
56058/**
56059 * cvmx_pcsx#_tx_rx_states_reg
56060 *
56061 * PCSX_TX_RX_STATES_REG = Transmit Receive States Register
56062 *
56063 */
56064typedef union
56065{
56066    uint64_t u64;
56067    struct cvmx_pcsxx_tx_rx_states_reg_s
56068    {
56069#if __BYTE_ORDER == __BIG_ENDIAN
56070        uint64_t reserved_14_63          : 50;
56071        uint64_t term_err                : 1;       /**< 1=Check end function detected error in packet
56072                                                         terminate ||T|| column or the one after it */
56073        uint64_t syn3bad                 : 1;       /**< 1=lane 3 code grp sync state machine in bad state */
56074        uint64_t syn2bad                 : 1;       /**< 1=lane 2 code grp sync state machine in bad state */
56075        uint64_t syn1bad                 : 1;       /**< 1=lane 1 code grp sync state machine in bad state */
56076        uint64_t syn0bad                 : 1;       /**< 1=lane 0 code grp sync state machine in bad state */
56077        uint64_t rxbad                   : 1;       /**< 1=Rcv state machine in a bad state, HW malfunction */
56078        uint64_t algn_st                 : 3;       /**< Lane alignment state machine state state */
56079        uint64_t rx_st                   : 2;       /**< Receive state machine state state */
56080        uint64_t tx_st                   : 3;       /**< Transmit state machine state state */
56081#else
56082        uint64_t tx_st                   : 3;
56083        uint64_t rx_st                   : 2;
56084        uint64_t algn_st                 : 3;
56085        uint64_t rxbad                   : 1;
56086        uint64_t syn0bad                 : 1;
56087        uint64_t syn1bad                 : 1;
56088        uint64_t syn2bad                 : 1;
56089        uint64_t syn3bad                 : 1;
56090        uint64_t term_err                : 1;
56091        uint64_t reserved_14_63          : 50;
56092#endif
56093    } s;
56094    struct cvmx_pcsxx_tx_rx_states_reg_s cn52xx;
56095    struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1
56096    {
56097#if __BYTE_ORDER == __BIG_ENDIAN
56098        uint64_t reserved_13_63          : 51;
56099        uint64_t syn3bad                 : 1;       /**< 1=lane 3 code grp sync state machine in bad state */
56100        uint64_t syn2bad                 : 1;       /**< 1=lane 2 code grp sync state machine in bad state */
56101        uint64_t syn1bad                 : 1;       /**< 1=lane 1 code grp sync state machine in bad state */
56102        uint64_t syn0bad                 : 1;       /**< 1=lane 0 code grp sync state machine in bad state */
56103        uint64_t rxbad                   : 1;       /**< 1=Rcv state machine in a bad state, HW malfunction */
56104        uint64_t algn_st                 : 3;       /**< Lane alignment state machine state state */
56105        uint64_t rx_st                   : 2;       /**< Receive state machine state state */
56106        uint64_t tx_st                   : 3;       /**< Transmit state machine state state */
56107#else
56108        uint64_t tx_st                   : 3;
56109        uint64_t rx_st                   : 2;
56110        uint64_t algn_st                 : 3;
56111        uint64_t rxbad                   : 1;
56112        uint64_t syn0bad                 : 1;
56113        uint64_t syn1bad                 : 1;
56114        uint64_t syn2bad                 : 1;
56115        uint64_t syn3bad                 : 1;
56116        uint64_t reserved_13_63          : 51;
56117#endif
56118    } cn52xxp1;
56119    struct cvmx_pcsxx_tx_rx_states_reg_s cn56xx;
56120    struct cvmx_pcsxx_tx_rx_states_reg_cn52xxp1 cn56xxp1;
56121} cvmx_pcsxx_tx_rx_states_reg_t;
56122
56123
56124/**
56125 * cvmx_pesc#_bist_status
56126 *
56127 * PESC_BIST_STATUS = PESC Bist Status
56128 *
56129 * Contains the diffrent interrupt summary bits of the PESC.
56130 */
56131typedef union
56132{
56133    uint64_t u64;
56134    struct cvmx_pescx_bist_status_s
56135    {
56136#if __BYTE_ORDER == __BIG_ENDIAN
56137        uint64_t reserved_13_63          : 51;
56138        uint64_t rqdata5                 : 1;       /**< Rx Queue Data Memory5. */
56139        uint64_t ctlp_or                 : 1;       /**< C-TLP Order Fifo. */
56140        uint64_t ntlp_or                 : 1;       /**< N-TLP Order Fifo. */
56141        uint64_t ptlp_or                 : 1;       /**< P-TLP Order Fifo. */
56142        uint64_t retry                   : 1;       /**< Retry Buffer. */
56143        uint64_t rqdata0                 : 1;       /**< Rx Queue Data Memory0. */
56144        uint64_t rqdata1                 : 1;       /**< Rx Queue Data Memory1. */
56145        uint64_t rqdata2                 : 1;       /**< Rx Queue Data Memory2. */
56146        uint64_t rqdata3                 : 1;       /**< Rx Queue Data Memory3. */
56147        uint64_t rqdata4                 : 1;       /**< Rx Queue Data Memory4. */
56148        uint64_t rqhdr1                  : 1;       /**< Rx Queue Header1. */
56149        uint64_t rqhdr0                  : 1;       /**< Rx Queue Header0. */
56150        uint64_t sot                     : 1;       /**< SOT Buffer. */
56151#else
56152        uint64_t sot                     : 1;
56153        uint64_t rqhdr0                  : 1;
56154        uint64_t rqhdr1                  : 1;
56155        uint64_t rqdata4                 : 1;
56156        uint64_t rqdata3                 : 1;
56157        uint64_t rqdata2                 : 1;
56158        uint64_t rqdata1                 : 1;
56159        uint64_t rqdata0                 : 1;
56160        uint64_t retry                   : 1;
56161        uint64_t ptlp_or                 : 1;
56162        uint64_t ntlp_or                 : 1;
56163        uint64_t ctlp_or                 : 1;
56164        uint64_t rqdata5                 : 1;
56165        uint64_t reserved_13_63          : 51;
56166#endif
56167    } s;
56168    struct cvmx_pescx_bist_status_s      cn52xx;
56169    struct cvmx_pescx_bist_status_cn52xxp1
56170    {
56171#if __BYTE_ORDER == __BIG_ENDIAN
56172        uint64_t reserved_12_63          : 52;
56173        uint64_t ctlp_or                 : 1;       /**< C-TLP Order Fifo. */
56174        uint64_t ntlp_or                 : 1;       /**< N-TLP Order Fifo. */
56175        uint64_t ptlp_or                 : 1;       /**< P-TLP Order Fifo. */
56176        uint64_t retry                   : 1;       /**< Retry Buffer. */
56177        uint64_t rqdata0                 : 1;       /**< Rx Queue Data Memory0. */
56178        uint64_t rqdata1                 : 1;       /**< Rx Queue Data Memory1. */
56179        uint64_t rqdata2                 : 1;       /**< Rx Queue Data Memory2. */
56180        uint64_t rqdata3                 : 1;       /**< Rx Queue Data Memory3. */
56181        uint64_t rqdata4                 : 1;       /**< Rx Queue Data Memory4. */
56182        uint64_t rqhdr1                  : 1;       /**< Rx Queue Header1. */
56183        uint64_t rqhdr0                  : 1;       /**< Rx Queue Header0. */
56184        uint64_t sot                     : 1;       /**< SOT Buffer. */
56185#else
56186        uint64_t sot                     : 1;
56187        uint64_t rqhdr0                  : 1;
56188        uint64_t rqhdr1                  : 1;
56189        uint64_t rqdata4                 : 1;
56190        uint64_t rqdata3                 : 1;
56191        uint64_t rqdata2                 : 1;
56192        uint64_t rqdata1                 : 1;
56193        uint64_t rqdata0                 : 1;
56194        uint64_t retry                   : 1;
56195        uint64_t ptlp_or                 : 1;
56196        uint64_t ntlp_or                 : 1;
56197        uint64_t ctlp_or                 : 1;
56198        uint64_t reserved_12_63          : 52;
56199#endif
56200    } cn52xxp1;
56201    struct cvmx_pescx_bist_status_s      cn56xx;
56202    struct cvmx_pescx_bist_status_cn52xxp1 cn56xxp1;
56203} cvmx_pescx_bist_status_t;
56204
56205
56206/**
56207 * cvmx_pesc#_bist_status2
56208 *
56209 * PESC(0..1)_BIST_STATUS2 = PESC BIST Status Register
56210 *
56211 * Results from BIST runs of PESC's memories.
56212 */
56213typedef union
56214{
56215    uint64_t u64;
56216    struct cvmx_pescx_bist_status2_s
56217    {
56218#if __BYTE_ORDER == __BIG_ENDIAN
56219        uint64_t reserved_14_63          : 50;
56220        uint64_t cto_p2e                 : 1;       /**< BIST Status for the cto_p2e_fifo */
56221        uint64_t e2p_cpl                 : 1;       /**< BIST Status for the e2p_cpl_fifo */
56222        uint64_t e2p_n                   : 1;       /**< BIST Status for the e2p_n_fifo */
56223        uint64_t e2p_p                   : 1;       /**< BIST Status for the e2p_p_fifo */
56224        uint64_t e2p_rsl                 : 1;       /**< BIST Status for the e2p_rsl__fifo */
56225        uint64_t dbg_p2e                 : 1;       /**< BIST Status for the dbg_p2e_fifo */
56226        uint64_t peai_p2e                : 1;       /**< BIST Status for the peai__pesc_fifo */
56227        uint64_t rsl_p2e                 : 1;       /**< BIST Status for the rsl_p2e_fifo */
56228        uint64_t pef_tpf1                : 1;       /**< BIST Status for the pef_tlp_p_fifo1 */
56229        uint64_t pef_tpf0                : 1;       /**< BIST Status for the pef_tlp_p_fifo0 */
56230        uint64_t pef_tnf                 : 1;       /**< BIST Status for the pef_tlp_n_fifo */
56231        uint64_t pef_tcf1                : 1;       /**< BIST Status for the pef_tlp_cpl_fifo1 */
56232        uint64_t pef_tc0                 : 1;       /**< BIST Status for the pef_tlp_cpl_fifo0 */
56233        uint64_t ppf                     : 1;       /**< BIST Status for the ppf_fifo */
56234#else
56235        uint64_t ppf                     : 1;
56236        uint64_t pef_tc0                 : 1;
56237        uint64_t pef_tcf1                : 1;
56238        uint64_t pef_tnf                 : 1;
56239        uint64_t pef_tpf0                : 1;
56240        uint64_t pef_tpf1                : 1;
56241        uint64_t rsl_p2e                 : 1;
56242        uint64_t peai_p2e                : 1;
56243        uint64_t dbg_p2e                 : 1;
56244        uint64_t e2p_rsl                 : 1;
56245        uint64_t e2p_p                   : 1;
56246        uint64_t e2p_n                   : 1;
56247        uint64_t e2p_cpl                 : 1;
56248        uint64_t cto_p2e                 : 1;
56249        uint64_t reserved_14_63          : 50;
56250#endif
56251    } s;
56252    struct cvmx_pescx_bist_status2_s     cn52xx;
56253    struct cvmx_pescx_bist_status2_s     cn52xxp1;
56254    struct cvmx_pescx_bist_status2_s     cn56xx;
56255    struct cvmx_pescx_bist_status2_s     cn56xxp1;
56256} cvmx_pescx_bist_status2_t;
56257
56258
56259/**
56260 * cvmx_pesc#_cfg_rd
56261 *
56262 * PESC_CFG_RD = PESC Configuration Read
56263 *
56264 * Allows read access to the configuration in the PCIe Core.
56265 */
56266typedef union
56267{
56268    uint64_t u64;
56269    struct cvmx_pescx_cfg_rd_s
56270    {
56271#if __BYTE_ORDER == __BIG_ENDIAN
56272        uint64_t data                    : 32;      /**< Data. */
56273        uint64_t addr                    : 32;      /**< Address to read. A write to this register
56274                                                         starts a read operation. */
56275#else
56276        uint64_t addr                    : 32;
56277        uint64_t data                    : 32;
56278#endif
56279    } s;
56280    struct cvmx_pescx_cfg_rd_s           cn52xx;
56281    struct cvmx_pescx_cfg_rd_s           cn52xxp1;
56282    struct cvmx_pescx_cfg_rd_s           cn56xx;
56283    struct cvmx_pescx_cfg_rd_s           cn56xxp1;
56284} cvmx_pescx_cfg_rd_t;
56285
56286
56287/**
56288 * cvmx_pesc#_cfg_wr
56289 *
56290 * PESC_CFG_WR = PESC Configuration Write
56291 *
56292 * Allows write access to the configuration in the PCIe Core.
56293 */
56294typedef union
56295{
56296    uint64_t u64;
56297    struct cvmx_pescx_cfg_wr_s
56298    {
56299#if __BYTE_ORDER == __BIG_ENDIAN
56300        uint64_t data                    : 32;      /**< Data to write. A write to this register starts
56301                                                         a write operation. */
56302        uint64_t addr                    : 32;      /**< Address to write. A write to this register starts
56303                                                         a write operation. */
56304#else
56305        uint64_t addr                    : 32;
56306        uint64_t data                    : 32;
56307#endif
56308    } s;
56309    struct cvmx_pescx_cfg_wr_s           cn52xx;
56310    struct cvmx_pescx_cfg_wr_s           cn52xxp1;
56311    struct cvmx_pescx_cfg_wr_s           cn56xx;
56312    struct cvmx_pescx_cfg_wr_s           cn56xxp1;
56313} cvmx_pescx_cfg_wr_t;
56314
56315
56316/**
56317 * cvmx_pesc#_cpl_lut_valid
56318 *
56319 * PESC_CPL_LUT_VALID = PESC Cmpletion Lookup Table Valid
56320 *
56321 * Bit set for outstanding tag read.
56322 */
56323typedef union
56324{
56325    uint64_t u64;
56326    struct cvmx_pescx_cpl_lut_valid_s
56327    {
56328#if __BYTE_ORDER == __BIG_ENDIAN
56329        uint64_t reserved_32_63          : 32;
56330        uint64_t tag                     : 32;      /**< Bit vector set cooresponds to an outstanding tag
56331                                                         expecting a completion. */
56332#else
56333        uint64_t tag                     : 32;
56334        uint64_t reserved_32_63          : 32;
56335#endif
56336    } s;
56337    struct cvmx_pescx_cpl_lut_valid_s    cn52xx;
56338    struct cvmx_pescx_cpl_lut_valid_s    cn52xxp1;
56339    struct cvmx_pescx_cpl_lut_valid_s    cn56xx;
56340    struct cvmx_pescx_cpl_lut_valid_s    cn56xxp1;
56341} cvmx_pescx_cpl_lut_valid_t;
56342
56343
56344/**
56345 * cvmx_pesc#_ctl_status
56346 *
56347 * PESC_CTL_STATUS = PESC Control Status
56348 *
56349 * General control and status of the PESC.
56350 */
56351typedef union
56352{
56353    uint64_t u64;
56354    struct cvmx_pescx_ctl_status_s
56355    {
56356#if __BYTE_ORDER == __BIG_ENDIAN
56357        uint64_t reserved_28_63          : 36;
56358        uint64_t dnum                    : 5;       /**< Primary bus device number. */
56359        uint64_t pbus                    : 8;       /**< Primary bus number. */
56360        uint64_t qlm_cfg                 : 2;       /**< The QLM configuration pad bits. */
56361        uint64_t lane_swp                : 1;       /**< Lane Swap. For PEDC1, when 0 NO LANE SWAP when '1'
56362                                                         enables LANE SWAP. THis bit has no effect on PEDC0.
56363                                                         This bit should be set before enabling PEDC1. */
56364        uint64_t pm_xtoff                : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56365                                                         to the PCIe core pm_xmt_turnoff port. RC mode. */
56366        uint64_t pm_xpme                 : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56367                                                         to the PCIe core pm_xmt_pme port. EP mode. */
56368        uint64_t ob_p_cmd                : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56369                                                         to the PCIe core outband_pwrup_cmd port. EP mode. */
56370        uint64_t reserved_7_8            : 2;
56371        uint64_t nf_ecrc                 : 1;       /**< Do not forward peer-to-peer ECRC TLPs. */
56372        uint64_t dly_one                 : 1;       /**< When set the output client state machines will
56373                                                         wait one cycle before starting a new TLP out. */
56374        uint64_t lnk_enb                 : 1;       /**< When set '1' the link is enabled when '0' the
56375                                                         link is disabled. This bit only is active when in
56376                                                         RC mode. */
56377        uint64_t ro_ctlp                 : 1;       /**< When set '1' C-TLPs that have the RO bit set will
56378                                                         not wait for P-TLPs that normaly would be sent
56379                                                         first. */
56380        uint64_t reserved_2_2            : 1;
56381        uint64_t inv_ecrc                : 1;       /**< When '1' causes the LSB of the ECRC to be inverted. */
56382        uint64_t inv_lcrc                : 1;       /**< When '1' causes the LSB of the LCRC to be inverted. */
56383#else
56384        uint64_t inv_lcrc                : 1;
56385        uint64_t inv_ecrc                : 1;
56386        uint64_t reserved_2_2            : 1;
56387        uint64_t ro_ctlp                 : 1;
56388        uint64_t lnk_enb                 : 1;
56389        uint64_t dly_one                 : 1;
56390        uint64_t nf_ecrc                 : 1;
56391        uint64_t reserved_7_8            : 2;
56392        uint64_t ob_p_cmd                : 1;
56393        uint64_t pm_xpme                 : 1;
56394        uint64_t pm_xtoff                : 1;
56395        uint64_t lane_swp                : 1;
56396        uint64_t qlm_cfg                 : 2;
56397        uint64_t pbus                    : 8;
56398        uint64_t dnum                    : 5;
56399        uint64_t reserved_28_63          : 36;
56400#endif
56401    } s;
56402    struct cvmx_pescx_ctl_status_s       cn52xx;
56403    struct cvmx_pescx_ctl_status_s       cn52xxp1;
56404    struct cvmx_pescx_ctl_status_cn56xx
56405    {
56406#if __BYTE_ORDER == __BIG_ENDIAN
56407        uint64_t reserved_28_63          : 36;
56408        uint64_t dnum                    : 5;       /**< Primary bus device number. */
56409        uint64_t pbus                    : 8;       /**< Primary bus number. */
56410        uint64_t qlm_cfg                 : 2;       /**< The QLM configuration pad bits. */
56411        uint64_t reserved_12_12          : 1;
56412        uint64_t pm_xtoff                : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56413                                                         to the PCIe core pm_xmt_turnoff port. RC mode. */
56414        uint64_t pm_xpme                 : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56415                                                         to the PCIe core pm_xmt_pme port. EP mode. */
56416        uint64_t ob_p_cmd                : 1;       /**< When WRITTEN with a '1' a single cycle pulse is
56417                                                         to the PCIe core outband_pwrup_cmd port. EP mode. */
56418        uint64_t reserved_7_8            : 2;
56419        uint64_t nf_ecrc                 : 1;       /**< Do not forward peer-to-peer ECRC TLPs. */
56420        uint64_t dly_one                 : 1;       /**< When set the output client state machines will
56421                                                         wait one cycle before starting a new TLP out. */
56422        uint64_t lnk_enb                 : 1;       /**< When set '1' the link is enabled when '0' the
56423                                                         link is disabled. This bit only is active when in
56424                                                         RC mode. */
56425        uint64_t ro_ctlp                 : 1;       /**< When set '1' C-TLPs that have the RO bit set will
56426                                                         not wait for P-TLPs that normaly would be sent
56427                                                         first. */
56428        uint64_t reserved_2_2            : 1;
56429        uint64_t inv_ecrc                : 1;       /**< When '1' causes the LSB of the ECRC to be inverted. */
56430        uint64_t inv_lcrc                : 1;       /**< When '1' causes the LSB of the LCRC to be inverted. */
56431#else
56432        uint64_t inv_lcrc                : 1;
56433        uint64_t inv_ecrc                : 1;
56434        uint64_t reserved_2_2            : 1;
56435        uint64_t ro_ctlp                 : 1;
56436        uint64_t lnk_enb                 : 1;
56437        uint64_t dly_one                 : 1;
56438        uint64_t nf_ecrc                 : 1;
56439        uint64_t reserved_7_8            : 2;
56440        uint64_t ob_p_cmd                : 1;
56441        uint64_t pm_xpme                 : 1;
56442        uint64_t pm_xtoff                : 1;
56443        uint64_t reserved_12_12          : 1;
56444        uint64_t qlm_cfg                 : 2;
56445        uint64_t pbus                    : 8;
56446        uint64_t dnum                    : 5;
56447        uint64_t reserved_28_63          : 36;
56448#endif
56449    } cn56xx;
56450    struct cvmx_pescx_ctl_status_cn56xx  cn56xxp1;
56451} cvmx_pescx_ctl_status_t;
56452
56453
56454/**
56455 * cvmx_pesc#_ctl_status2
56456 *
56457 * Below are in PESC
56458 *
56459 *                  PESC(0..1)_BIST_STATUS2 = PESC BIST Status Register
56460 *
56461 * Results from BIST runs of PESC's memories.
56462 */
56463typedef union
56464{
56465    uint64_t u64;
56466    struct cvmx_pescx_ctl_status2_s
56467    {
56468#if __BYTE_ORDER == __BIG_ENDIAN
56469        uint64_t reserved_2_63           : 62;
56470        uint64_t pclk_run                : 1;       /**< When the pce_clk is running this bit will be '1'.
56471                                                         Writing a '1' to this location will cause the
56472                                                         bit to be cleared, but if the pce_clk is running
56473                                                         this bit will be re-set. */
56474        uint64_t pcierst                 : 1;       /**< Set to '1' when PCIe is in reset. */
56475#else
56476        uint64_t pcierst                 : 1;
56477        uint64_t pclk_run                : 1;
56478        uint64_t reserved_2_63           : 62;
56479#endif
56480    } s;
56481    struct cvmx_pescx_ctl_status2_s      cn52xx;
56482    struct cvmx_pescx_ctl_status2_cn52xxp1
56483    {
56484#if __BYTE_ORDER == __BIG_ENDIAN
56485        uint64_t reserved_1_63           : 63;
56486        uint64_t pcierst                 : 1;       /**< Set to '1' when PCIe is in reset. */
56487#else
56488        uint64_t pcierst                 : 1;
56489        uint64_t reserved_1_63           : 63;
56490#endif
56491    } cn52xxp1;
56492    struct cvmx_pescx_ctl_status2_s      cn56xx;
56493    struct cvmx_pescx_ctl_status2_cn52xxp1 cn56xxp1;
56494} cvmx_pescx_ctl_status2_t;
56495
56496
56497/**
56498 * cvmx_pesc#_dbg_info
56499 *
56500 * PESC(0..1)_DBG_INFO = PESC Debug Information
56501 *
56502 * General debug info.
56503 */
56504typedef union
56505{
56506    uint64_t u64;
56507    struct cvmx_pescx_dbg_info_s
56508    {
56509#if __BYTE_ORDER == __BIG_ENDIAN
56510        uint64_t reserved_31_63          : 33;
56511        uint64_t ecrc_e                  : 1;       /**< Received a ECRC error.
56512                                                         radm_ecrc_err */
56513        uint64_t rawwpp                  : 1;       /**< Received a write with poisoned payload
56514                                                         radm_rcvd_wreq_poisoned */
56515        uint64_t racpp                   : 1;       /**< Received a completion with poisoned payload
56516                                                         radm_rcvd_cpl_poisoned */
56517        uint64_t ramtlp                  : 1;       /**< Received a malformed TLP
56518                                                         radm_mlf_tlp_err */
56519        uint64_t rarwdns                 : 1;       /**< Recieved a request which device does not support
56520                                                         radm_rcvd_ur_req */
56521        uint64_t caar                    : 1;       /**< Completer aborted a request
56522                                                         radm_rcvd_ca_req
56523                                                         This bit will never be set because Octeon does
56524                                                         not generate Completer Aborts. */
56525        uint64_t racca                   : 1;       /**< Received a completion with CA status
56526                                                         radm_rcvd_cpl_ca */
56527        uint64_t racur                   : 1;       /**< Received a completion with UR status
56528                                                         radm_rcvd_cpl_ur */
56529        uint64_t rauc                    : 1;       /**< Received an unexpected completion
56530                                                         radm_unexp_cpl_err */
56531        uint64_t rqo                     : 1;       /**< Receive queue overflow. Normally happens only when
56532                                                         flow control advertisements are ignored
56533                                                         radm_qoverflow */
56534        uint64_t fcuv                    : 1;       /**< Flow Control Update Violation (opt. checks)
56535                                                         int_xadm_fc_prot_err */
56536        uint64_t rpe                     : 1;       /**< When the PHY reports 8B/10B decode error
56537                                                         (RxStatus = 3b100) or disparity error
56538                                                         (RxStatus = 3b111), the signal rmlh_rcvd_err will
56539                                                         be asserted.
56540                                                         rmlh_rcvd_err */
56541        uint64_t fcpvwt                  : 1;       /**< Flow Control Protocol Violation (Watchdog Timer)
56542                                                         rtlh_fc_prot_err */
56543        uint64_t dpeoosd                 : 1;       /**< DLLP protocol error (out of sequence DLLP)
56544                                                         rdlh_prot_err */
56545        uint64_t rtwdle                  : 1;       /**< Received TLP with DataLink Layer Error
56546                                                         rdlh_bad_tlp_err */
56547        uint64_t rdwdle                  : 1;       /**< Received DLLP with DataLink Layer Error
56548                                                         rdlh_bad_dllp_err */
56549        uint64_t mre                     : 1;       /**< Max Retries Exceeded
56550                                                         xdlh_replay_num_rlover_err */
56551        uint64_t rte                     : 1;       /**< Replay Timer Expired
56552                                                         xdlh_replay_timeout_err
56553                                                         This bit is set when the REPLAY_TIMER expires in
56554                                                         the PCIE core. The probability of this bit being
56555                                                         set will increase with the traffic load. */
56556        uint64_t acto                    : 1;       /**< A Completion Timeout Occured
56557                                                         pedc_radm_cpl_timeout */
56558        uint64_t rvdm                    : 1;       /**< Received Vendor-Defined Message
56559                                                         pedc_radm_vendor_msg */
56560        uint64_t rumep                   : 1;       /**< Received Unlock Message (EP Mode Only)
56561                                                         pedc_radm_msg_unlock */
56562        uint64_t rptamrc                 : 1;       /**< Received PME Turnoff Acknowledge Message
56563                                                         (RC Mode only)
56564                                                         pedc_radm_pm_to_ack */
56565        uint64_t rpmerc                  : 1;       /**< Received PME Message (RC Mode only)
56566                                                         pedc_radm_pm_pme */
56567        uint64_t rfemrc                  : 1;       /**< Received Fatal Error Message (RC Mode only)
56568                                                         pedc_radm_fatal_err
56569                                                         Bit set when a message with ERR_FATAL is set. */
56570        uint64_t rnfemrc                 : 1;       /**< Received Non-Fatal Error Message (RC Mode only)
56571                                                         pedc_radm_nonfatal_err */
56572        uint64_t rcemrc                  : 1;       /**< Received Correctable Error Message (RC Mode only)
56573                                                         pedc_radm_correctable_err */
56574        uint64_t rpoison                 : 1;       /**< Received Poisoned TLP
56575                                                         pedc__radm_trgt1_poisoned & pedc__radm_trgt1_hv */
56576        uint64_t recrce                  : 1;       /**< Received ECRC Error
56577                                                         pedc_radm_trgt1_ecrc_err & pedc__radm_trgt1_eot */
56578        uint64_t rtlplle                 : 1;       /**< Received TLP has link layer error
56579                                                         pedc_radm_trgt1_dllp_abort & pedc__radm_trgt1_eot */
56580        uint64_t rtlpmal                 : 1;       /**< Received TLP is malformed or a message.
56581                                                         pedc_radm_trgt1_tlp_abort & pedc__radm_trgt1_eot
56582                                                         If the core receives a MSG (or Vendor Message)
56583                                                         this bit will be set. */
56584        uint64_t spoison                 : 1;       /**< Poisoned TLP sent
56585                                                         peai__client0_tlp_ep & peai__client0_tlp_hv */
56586#else
56587        uint64_t spoison                 : 1;
56588        uint64_t rtlpmal                 : 1;
56589        uint64_t rtlplle                 : 1;
56590        uint64_t recrce                  : 1;
56591        uint64_t rpoison                 : 1;
56592        uint64_t rcemrc                  : 1;
56593        uint64_t rnfemrc                 : 1;
56594        uint64_t rfemrc                  : 1;
56595        uint64_t rpmerc                  : 1;
56596        uint64_t rptamrc                 : 1;
56597        uint64_t rumep                   : 1;
56598        uint64_t rvdm                    : 1;
56599        uint64_t acto                    : 1;
56600        uint64_t rte                     : 1;
56601        uint64_t mre                     : 1;
56602        uint64_t rdwdle                  : 1;
56603        uint64_t rtwdle                  : 1;
56604        uint64_t dpeoosd                 : 1;
56605        uint64_t fcpvwt                  : 1;
56606        uint64_t rpe                     : 1;
56607        uint64_t fcuv                    : 1;
56608        uint64_t rqo                     : 1;
56609        uint64_t rauc                    : 1;
56610        uint64_t racur                   : 1;
56611        uint64_t racca                   : 1;
56612        uint64_t caar                    : 1;
56613        uint64_t rarwdns                 : 1;
56614        uint64_t ramtlp                  : 1;
56615        uint64_t racpp                   : 1;
56616        uint64_t rawwpp                  : 1;
56617        uint64_t ecrc_e                  : 1;
56618        uint64_t reserved_31_63          : 33;
56619#endif
56620    } s;
56621    struct cvmx_pescx_dbg_info_s         cn52xx;
56622    struct cvmx_pescx_dbg_info_s         cn52xxp1;
56623    struct cvmx_pescx_dbg_info_s         cn56xx;
56624    struct cvmx_pescx_dbg_info_s         cn56xxp1;
56625} cvmx_pescx_dbg_info_t;
56626
56627
56628/**
56629 * cvmx_pesc#_dbg_info_en
56630 *
56631 * PESC(0..1)_DBG_INFO_EN = PESC Debug Information Enable
56632 *
56633 * Allows PESC_DBG_INFO to generate interrupts when cooresponding enable bit is set.
56634 */
56635typedef union
56636{
56637    uint64_t u64;
56638    struct cvmx_pescx_dbg_info_en_s
56639    {
56640#if __BYTE_ORDER == __BIG_ENDIAN
56641        uint64_t reserved_31_63          : 33;
56642        uint64_t ecrc_e                  : 1;       /**< Allows PESC_DBG_INFO[30] to generate an interrupt. */
56643        uint64_t rawwpp                  : 1;       /**< Allows PESC_DBG_INFO[29] to generate an interrupt. */
56644        uint64_t racpp                   : 1;       /**< Allows PESC_DBG_INFO[28] to generate an interrupt. */
56645        uint64_t ramtlp                  : 1;       /**< Allows PESC_DBG_INFO[27] to generate an interrupt. */
56646        uint64_t rarwdns                 : 1;       /**< Allows PESC_DBG_INFO[26] to generate an interrupt. */
56647        uint64_t caar                    : 1;       /**< Allows PESC_DBG_INFO[25] to generate an interrupt. */
56648        uint64_t racca                   : 1;       /**< Allows PESC_DBG_INFO[24] to generate an interrupt. */
56649        uint64_t racur                   : 1;       /**< Allows PESC_DBG_INFO[23] to generate an interrupt. */
56650        uint64_t rauc                    : 1;       /**< Allows PESC_DBG_INFO[22] to generate an interrupt. */
56651        uint64_t rqo                     : 1;       /**< Allows PESC_DBG_INFO[21] to generate an interrupt. */
56652        uint64_t fcuv                    : 1;       /**< Allows PESC_DBG_INFO[20] to generate an interrupt. */
56653        uint64_t rpe                     : 1;       /**< Allows PESC_DBG_INFO[19] to generate an interrupt. */
56654        uint64_t fcpvwt                  : 1;       /**< Allows PESC_DBG_INFO[18] to generate an interrupt. */
56655        uint64_t dpeoosd                 : 1;       /**< Allows PESC_DBG_INFO[17] to generate an interrupt. */
56656        uint64_t rtwdle                  : 1;       /**< Allows PESC_DBG_INFO[16] to generate an interrupt. */
56657        uint64_t rdwdle                  : 1;       /**< Allows PESC_DBG_INFO[15] to generate an interrupt. */
56658        uint64_t mre                     : 1;       /**< Allows PESC_DBG_INFO[14] to generate an interrupt. */
56659        uint64_t rte                     : 1;       /**< Allows PESC_DBG_INFO[13] to generate an interrupt. */
56660        uint64_t acto                    : 1;       /**< Allows PESC_DBG_INFO[12] to generate an interrupt. */
56661        uint64_t rvdm                    : 1;       /**< Allows PESC_DBG_INFO[11] to generate an interrupt. */
56662        uint64_t rumep                   : 1;       /**< Allows PESC_DBG_INFO[10] to generate an interrupt. */
56663        uint64_t rptamrc                 : 1;       /**< Allows PESC_DBG_INFO[9] to generate an interrupt. */
56664        uint64_t rpmerc                  : 1;       /**< Allows PESC_DBG_INFO[8] to generate an interrupt. */
56665        uint64_t rfemrc                  : 1;       /**< Allows PESC_DBG_INFO[7] to generate an interrupt. */
56666        uint64_t rnfemrc                 : 1;       /**< Allows PESC_DBG_INFO[6] to generate an interrupt. */
56667        uint64_t rcemrc                  : 1;       /**< Allows PESC_DBG_INFO[5] to generate an interrupt. */
56668        uint64_t rpoison                 : 1;       /**< Allows PESC_DBG_INFO[4] to generate an interrupt. */
56669        uint64_t recrce                  : 1;       /**< Allows PESC_DBG_INFO[3] to generate an interrupt. */
56670        uint64_t rtlplle                 : 1;       /**< Allows PESC_DBG_INFO[2] to generate an interrupt. */
56671        uint64_t rtlpmal                 : 1;       /**< Allows PESC_DBG_INFO[1] to generate an interrupt. */
56672        uint64_t spoison                 : 1;       /**< Allows PESC_DBG_INFO[0] to generate an interrupt. */
56673#else
56674        uint64_t spoison                 : 1;
56675        uint64_t rtlpmal                 : 1;
56676        uint64_t rtlplle                 : 1;
56677        uint64_t recrce                  : 1;
56678        uint64_t rpoison                 : 1;
56679        uint64_t rcemrc                  : 1;
56680        uint64_t rnfemrc                 : 1;
56681        uint64_t rfemrc                  : 1;
56682        uint64_t rpmerc                  : 1;
56683        uint64_t rptamrc                 : 1;
56684        uint64_t rumep                   : 1;
56685        uint64_t rvdm                    : 1;
56686        uint64_t acto                    : 1;
56687        uint64_t rte                     : 1;
56688        uint64_t mre                     : 1;
56689        uint64_t rdwdle                  : 1;
56690        uint64_t rtwdle                  : 1;
56691        uint64_t dpeoosd                 : 1;
56692        uint64_t fcpvwt                  : 1;
56693        uint64_t rpe                     : 1;
56694        uint64_t fcuv                    : 1;
56695        uint64_t rqo                     : 1;
56696        uint64_t rauc                    : 1;
56697        uint64_t racur                   : 1;
56698        uint64_t racca                   : 1;
56699        uint64_t caar                    : 1;
56700        uint64_t rarwdns                 : 1;
56701        uint64_t ramtlp                  : 1;
56702        uint64_t racpp                   : 1;
56703        uint64_t rawwpp                  : 1;
56704        uint64_t ecrc_e                  : 1;
56705        uint64_t reserved_31_63          : 33;
56706#endif
56707    } s;
56708    struct cvmx_pescx_dbg_info_en_s      cn52xx;
56709    struct cvmx_pescx_dbg_info_en_s      cn52xxp1;
56710    struct cvmx_pescx_dbg_info_en_s      cn56xx;
56711    struct cvmx_pescx_dbg_info_en_s      cn56xxp1;
56712} cvmx_pescx_dbg_info_en_t;
56713
56714
56715/**
56716 * cvmx_pesc#_diag_status
56717 *
56718 * PESC_DIAG_STATUS = PESC Diagnostic Status
56719 *
56720 * Selection control for the cores diagnostic bus.
56721 */
56722typedef union
56723{
56724    uint64_t u64;
56725    struct cvmx_pescx_diag_status_s
56726    {
56727#if __BYTE_ORDER == __BIG_ENDIAN
56728        uint64_t reserved_4_63           : 60;
56729        uint64_t pm_dst                  : 1;       /**< Current power management DSTATE. */
56730        uint64_t pm_stat                 : 1;       /**< Power Management Status. */
56731        uint64_t pm_en                   : 1;       /**< Power Management Event Enable. */
56732        uint64_t aux_en                  : 1;       /**< Auxilary Power Enable. */
56733#else
56734        uint64_t aux_en                  : 1;
56735        uint64_t pm_en                   : 1;
56736        uint64_t pm_stat                 : 1;
56737        uint64_t pm_dst                  : 1;
56738        uint64_t reserved_4_63           : 60;
56739#endif
56740    } s;
56741    struct cvmx_pescx_diag_status_s      cn52xx;
56742    struct cvmx_pescx_diag_status_s      cn52xxp1;
56743    struct cvmx_pescx_diag_status_s      cn56xx;
56744    struct cvmx_pescx_diag_status_s      cn56xxp1;
56745} cvmx_pescx_diag_status_t;
56746
56747
56748/**
56749 * cvmx_pesc#_p2n_bar0_start
56750 *
56751 * PESC_P2N_BAR0_START = PESC PCIe to Npei BAR0 Start
56752 *
56753 * The starting address for addresses to forwarded to the NPEI in RC Mode.
56754 */
56755typedef union
56756{
56757    uint64_t u64;
56758    struct cvmx_pescx_p2n_bar0_start_s
56759    {
56760#if __BYTE_ORDER == __BIG_ENDIAN
56761        uint64_t addr                    : 50;      /**< The starting address of the 16KB address space that
56762                                                         is the BAR0 address space. */
56763        uint64_t reserved_0_13           : 14;
56764#else
56765        uint64_t reserved_0_13           : 14;
56766        uint64_t addr                    : 50;
56767#endif
56768    } s;
56769    struct cvmx_pescx_p2n_bar0_start_s   cn52xx;
56770    struct cvmx_pescx_p2n_bar0_start_s   cn52xxp1;
56771    struct cvmx_pescx_p2n_bar0_start_s   cn56xx;
56772    struct cvmx_pescx_p2n_bar0_start_s   cn56xxp1;
56773} cvmx_pescx_p2n_bar0_start_t;
56774
56775
56776/**
56777 * cvmx_pesc#_p2n_bar1_start
56778 *
56779 * PESC_P2N_BAR1_START = PESC PCIe to Npei BAR1 Start
56780 *
56781 * The starting address for addresses to forwarded to the NPEI in RC Mode.
56782 */
56783typedef union
56784{
56785    uint64_t u64;
56786    struct cvmx_pescx_p2n_bar1_start_s
56787    {
56788#if __BYTE_ORDER == __BIG_ENDIAN
56789        uint64_t addr                    : 38;      /**< The starting address of the 64KB address space
56790                                                         that is the BAR1 address space. */
56791        uint64_t reserved_0_25           : 26;
56792#else
56793        uint64_t reserved_0_25           : 26;
56794        uint64_t addr                    : 38;
56795#endif
56796    } s;
56797    struct cvmx_pescx_p2n_bar1_start_s   cn52xx;
56798    struct cvmx_pescx_p2n_bar1_start_s   cn52xxp1;
56799    struct cvmx_pescx_p2n_bar1_start_s   cn56xx;
56800    struct cvmx_pescx_p2n_bar1_start_s   cn56xxp1;
56801} cvmx_pescx_p2n_bar1_start_t;
56802
56803
56804/**
56805 * cvmx_pesc#_p2n_bar2_start
56806 *
56807 * PESC_P2N_BAR2_START = PESC PCIe to Npei BAR2 Start
56808 *
56809 * The starting address for addresses to forwarded to the NPEI in RC Mode.
56810 */
56811typedef union
56812{
56813    uint64_t u64;
56814    struct cvmx_pescx_p2n_bar2_start_s
56815    {
56816#if __BYTE_ORDER == __BIG_ENDIAN
56817        uint64_t addr                    : 25;      /**< The starting address of the 2^39 address space
56818                                                         that is the BAR2 address space. */
56819        uint64_t reserved_0_38           : 39;
56820#else
56821        uint64_t reserved_0_38           : 39;
56822        uint64_t addr                    : 25;
56823#endif
56824    } s;
56825    struct cvmx_pescx_p2n_bar2_start_s   cn52xx;
56826    struct cvmx_pescx_p2n_bar2_start_s   cn52xxp1;
56827    struct cvmx_pescx_p2n_bar2_start_s   cn56xx;
56828    struct cvmx_pescx_p2n_bar2_start_s   cn56xxp1;
56829} cvmx_pescx_p2n_bar2_start_t;
56830
56831
56832/**
56833 * cvmx_pesc#_p2p_bar#_end
56834 *
56835 * PESC_P2P_BAR#_END = PESC Peer-To-Peer BAR0 End
56836 *
56837 * The ending address for addresses to forwarded to the PCIe peer port.
56838 */
56839typedef union
56840{
56841    uint64_t u64;
56842    struct cvmx_pescx_p2p_barx_end_s
56843    {
56844#if __BYTE_ORDER == __BIG_ENDIAN
56845        uint64_t addr                    : 52;      /**< The ending address of the address window created
56846                                                         this field and the PESC_P2P_BAR0_START[63:12]
56847                                                         field. The full 64-bits of address are created by:
56848                                                         [ADDR[63:12], 12'b0]. */
56849        uint64_t reserved_0_11           : 12;
56850#else
56851        uint64_t reserved_0_11           : 12;
56852        uint64_t addr                    : 52;
56853#endif
56854    } s;
56855    struct cvmx_pescx_p2p_barx_end_s     cn52xx;
56856    struct cvmx_pescx_p2p_barx_end_s     cn52xxp1;
56857    struct cvmx_pescx_p2p_barx_end_s     cn56xx;
56858    struct cvmx_pescx_p2p_barx_end_s     cn56xxp1;
56859} cvmx_pescx_p2p_barx_end_t;
56860
56861
56862/**
56863 * cvmx_pesc#_p2p_bar#_start
56864 *
56865 * PESC_P2P_BAR#_START = PESC Peer-To-Peer BAR0 Start
56866 *
56867 * The starting address and enable for addresses to forwarded to the PCIe peer port.
56868 */
56869typedef union
56870{
56871    uint64_t u64;
56872    struct cvmx_pescx_p2p_barx_start_s
56873    {
56874#if __BYTE_ORDER == __BIG_ENDIAN
56875        uint64_t addr                    : 52;      /**< The starting address of the address window created
56876                                                         this field and the PESC_P2P_BAR0_END[63:12] field.
56877                                                         The full 64-bits of address are created by:
56878                                                         [ADDR[63:12], 12'b0]. */
56879        uint64_t reserved_0_11           : 12;
56880#else
56881        uint64_t reserved_0_11           : 12;
56882        uint64_t addr                    : 52;
56883#endif
56884    } s;
56885    struct cvmx_pescx_p2p_barx_start_s   cn52xx;
56886    struct cvmx_pescx_p2p_barx_start_s   cn52xxp1;
56887    struct cvmx_pescx_p2p_barx_start_s   cn56xx;
56888    struct cvmx_pescx_p2p_barx_start_s   cn56xxp1;
56889} cvmx_pescx_p2p_barx_start_t;
56890
56891
56892/**
56893 * cvmx_pesc#_tlp_credits
56894 *
56895 * PESC_TLP_CREDITS = PESC TLP Credits
56896 *
56897 * Specifies the number of credits the PESC for use in moving TLPs. When this register is written the credit values are
56898 * reset to the register value. A write to this register should take place BEFORE traffic flow starts.
56899 */
56900typedef union
56901{
56902    uint64_t u64;
56903    struct cvmx_pescx_tlp_credits_s
56904    {
56905#if __BYTE_ORDER == __BIG_ENDIAN
56906        uint64_t reserved_0_63           : 64;
56907#else
56908        uint64_t reserved_0_63           : 64;
56909#endif
56910    } s;
56911    struct cvmx_pescx_tlp_credits_cn52xx
56912    {
56913#if __BYTE_ORDER == __BIG_ENDIAN
56914        uint64_t reserved_56_63          : 8;
56915        uint64_t peai_ppf                : 8;       /**< TLP credits for Completion TLPs in the Peer.
56916                                                         Legal values are 0x24 to 0x80. */
56917        uint64_t pesc_cpl                : 8;       /**< TLP credits for Completion TLPs in the Peer.
56918                                                         Legal values are 0x24 to 0x80. */
56919        uint64_t pesc_np                 : 8;       /**< TLP credits for Non-Posted TLPs in the Peer.
56920                                                         Legal values are 0x4 to 0x10. */
56921        uint64_t pesc_p                  : 8;       /**< TLP credits for Posted TLPs in the Peer.
56922                                                         Legal values are 0x24 to 0x80. */
56923        uint64_t npei_cpl                : 8;       /**< TLP credits for Completion TLPs in the NPEI.
56924                                                         Legal values are 0x24 to 0x80. */
56925        uint64_t npei_np                 : 8;       /**< TLP credits for Non-Posted TLPs in the NPEI.
56926                                                         Legal values are 0x4 to 0x10. */
56927        uint64_t npei_p                  : 8;       /**< TLP credits for Posted TLPs in the NPEI.
56928                                                         Legal values are 0x24 to 0x80. */
56929#else
56930        uint64_t npei_p                  : 8;
56931        uint64_t npei_np                 : 8;
56932        uint64_t npei_cpl                : 8;
56933        uint64_t pesc_p                  : 8;
56934        uint64_t pesc_np                 : 8;
56935        uint64_t pesc_cpl                : 8;
56936        uint64_t peai_ppf                : 8;
56937        uint64_t reserved_56_63          : 8;
56938#endif
56939    } cn52xx;
56940    struct cvmx_pescx_tlp_credits_cn52xxp1
56941    {
56942#if __BYTE_ORDER == __BIG_ENDIAN
56943        uint64_t reserved_38_63          : 26;
56944        uint64_t peai_ppf                : 8;       /**< TLP credits in core clk pre-buffer that holds TLPs
56945                                                         being sent from PCIe Core to NPEI or PEER. */
56946        uint64_t pesc_cpl                : 5;       /**< TLP credits for Completion TLPs in the Peer. */
56947        uint64_t pesc_np                 : 5;       /**< TLP credits for Non-Posted TLPs in the Peer. */
56948        uint64_t pesc_p                  : 5;       /**< TLP credits for Posted TLPs in the Peer. */
56949        uint64_t npei_cpl                : 5;       /**< TLP credits for Completion TLPs in the NPEI. */
56950        uint64_t npei_np                 : 5;       /**< TLP credits for Non-Posted TLPs in the NPEI. */
56951        uint64_t npei_p                  : 5;       /**< TLP credits for Posted TLPs in the NPEI. */
56952#else
56953        uint64_t npei_p                  : 5;
56954        uint64_t npei_np                 : 5;
56955        uint64_t npei_cpl                : 5;
56956        uint64_t pesc_p                  : 5;
56957        uint64_t pesc_np                 : 5;
56958        uint64_t pesc_cpl                : 5;
56959        uint64_t peai_ppf                : 8;
56960        uint64_t reserved_38_63          : 26;
56961#endif
56962    } cn52xxp1;
56963    struct cvmx_pescx_tlp_credits_cn52xx cn56xx;
56964    struct cvmx_pescx_tlp_credits_cn52xxp1 cn56xxp1;
56965} cvmx_pescx_tlp_credits_t;
56966
56967
56968/**
56969 * cvmx_pip_bck_prs
56970 *
56971 * PIP_BCK_PRS = PIP's Back Pressure Register
56972 *
56973 * When to assert backpressure based on the todo list filling up
56974 */
56975typedef union
56976{
56977    uint64_t u64;
56978    struct cvmx_pip_bck_prs_s
56979    {
56980#if __BYTE_ORDER == __BIG_ENDIAN
56981        uint64_t bckprs                  : 1;       /**< PIP is currently asserting backpressure to IOB
56982                                                         Backpressure from PIP will assert when the
56983                                                         entries to the todo list exceed HIWATER.
56984                                                         Backpressure will be held until the todo entries
56985                                                         is less than or equal to LOWATER. */
56986        uint64_t reserved_13_62          : 50;
56987        uint64_t hiwater                 : 5;       /**< Water mark in the todo list to assert backpressure
56988                                                         Legal values are 1-26.  A 0 value will deadlock
56989                                                         the machine.  A value > 26, will trash memory */
56990        uint64_t reserved_5_7            : 3;
56991        uint64_t lowater                 : 5;       /**< Water mark in the todo list to release backpressure
56992                                                         The LOWATER value should be < HIWATER. */
56993#else
56994        uint64_t lowater                 : 5;
56995        uint64_t reserved_5_7            : 3;
56996        uint64_t hiwater                 : 5;
56997        uint64_t reserved_13_62          : 50;
56998        uint64_t bckprs                  : 1;
56999#endif
57000    } s;
57001    struct cvmx_pip_bck_prs_s            cn38xx;
57002    struct cvmx_pip_bck_prs_s            cn38xxp2;
57003    struct cvmx_pip_bck_prs_s            cn56xx;
57004    struct cvmx_pip_bck_prs_s            cn56xxp1;
57005    struct cvmx_pip_bck_prs_s            cn58xx;
57006    struct cvmx_pip_bck_prs_s            cn58xxp1;
57007} cvmx_pip_bck_prs_t;
57008
57009
57010/**
57011 * cvmx_pip_bist_status
57012 *
57013 * PIP_BIST_STATUS = PIP's BIST Results
57014 *
57015 */
57016typedef union
57017{
57018    uint64_t u64;
57019    struct cvmx_pip_bist_status_s
57020    {
57021#if __BYTE_ORDER == __BIG_ENDIAN
57022        uint64_t reserved_18_63          : 46;
57023        uint64_t bist                    : 18;      /**< BIST Results.
57024                                                         HW sets a bit in BIST for for memory that fails
57025                                                         BIST. */
57026#else
57027        uint64_t bist                    : 18;
57028        uint64_t reserved_18_63          : 46;
57029#endif
57030    } s;
57031    struct cvmx_pip_bist_status_s        cn30xx;
57032    struct cvmx_pip_bist_status_s        cn31xx;
57033    struct cvmx_pip_bist_status_s        cn38xx;
57034    struct cvmx_pip_bist_status_s        cn38xxp2;
57035    struct cvmx_pip_bist_status_cn50xx
57036    {
57037#if __BYTE_ORDER == __BIG_ENDIAN
57038        uint64_t reserved_17_63          : 47;
57039        uint64_t bist                    : 17;      /**< BIST Results.
57040                                                         HW sets a bit in BIST for for memory that fails
57041                                                         BIST. */
57042#else
57043        uint64_t bist                    : 17;
57044        uint64_t reserved_17_63          : 47;
57045#endif
57046    } cn50xx;
57047    struct cvmx_pip_bist_status_s        cn52xx;
57048    struct cvmx_pip_bist_status_s        cn52xxp1;
57049    struct cvmx_pip_bist_status_s        cn56xx;
57050    struct cvmx_pip_bist_status_s        cn56xxp1;
57051    struct cvmx_pip_bist_status_s        cn58xx;
57052    struct cvmx_pip_bist_status_s        cn58xxp1;
57053} cvmx_pip_bist_status_t;
57054
57055
57056/**
57057 * cvmx_pip_crc_ctl#
57058 *
57059 * PIP_CRC_CTL = PIP CRC Control Register
57060 *
57061 * Controls datapath reflection when calculating CRC
57062 */
57063typedef union
57064{
57065    uint64_t u64;
57066    struct cvmx_pip_crc_ctlx_s
57067    {
57068#if __BYTE_ORDER == __BIG_ENDIAN
57069        uint64_t reserved_2_63           : 62;
57070        uint64_t invres                  : 1;       /**< Invert the result */
57071        uint64_t reflect                 : 1;       /**< Reflect the bits in each byte.
57072                                                          Byte order does not change.
57073                                                         - 0: CRC is calculated MSB to LSB
57074                                                         - 1: CRC is calculated LSB to MSB */
57075#else
57076        uint64_t reflect                 : 1;
57077        uint64_t invres                  : 1;
57078        uint64_t reserved_2_63           : 62;
57079#endif
57080    } s;
57081    struct cvmx_pip_crc_ctlx_s           cn38xx;
57082    struct cvmx_pip_crc_ctlx_s           cn38xxp2;
57083    struct cvmx_pip_crc_ctlx_s           cn58xx;
57084    struct cvmx_pip_crc_ctlx_s           cn58xxp1;
57085} cvmx_pip_crc_ctlx_t;
57086
57087
57088/**
57089 * cvmx_pip_crc_iv#
57090 *
57091 * PIP_CRC_IV = PIP CRC IV Register
57092 *
57093 * Determines the IV used by the CRC algorithm
57094 *
57095 * Notes:
57096 * * PIP_CRC_IV
57097 * PIP_CRC_IV controls the initial state of the CRC algorithm.  Octane can
57098 * support a wide range of CRC algorithms and as such, the IV must be
57099 * carefully constructed to meet the specific algorithm.  The code below
57100 * determines the value to program into Octane based on the algorthim's IV
57101 * and width.  In the case of Octane, the width should always be 32.
57102 *
57103 * PIP_CRC_IV0 sets the IV for ports 0-15 while PIP_CRC_IV1 sets the IV for
57104 * ports 16-31.
57105 *
57106 *  unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
57107 *  [
57108 *    int i;
57109 *    int doit;
57110 *    unsigned int current_val = algorithm_iv;
57111 *
57112 *    for(i = 0; i < w; i++) [
57113 *      doit = current_val & 0x1;
57114 *
57115 *      if(doit) current_val ^= poly;
57116 *      assert(!(current_val & 0x1));
57117 *
57118 *      current_val = (current_val >> 1) | (doit << (w-1));
57119 *    ]
57120 *
57121 *    return current_val;
57122 *  ]
57123 */
57124typedef union
57125{
57126    uint64_t u64;
57127    struct cvmx_pip_crc_ivx_s
57128    {
57129#if __BYTE_ORDER == __BIG_ENDIAN
57130        uint64_t reserved_32_63          : 32;
57131        uint64_t iv                      : 32;      /**< IV used by the CRC algorithm.  Default is FCS32. */
57132#else
57133        uint64_t iv                      : 32;
57134        uint64_t reserved_32_63          : 32;
57135#endif
57136    } s;
57137    struct cvmx_pip_crc_ivx_s            cn38xx;
57138    struct cvmx_pip_crc_ivx_s            cn38xxp2;
57139    struct cvmx_pip_crc_ivx_s            cn58xx;
57140    struct cvmx_pip_crc_ivx_s            cn58xxp1;
57141} cvmx_pip_crc_ivx_t;
57142
57143
57144/**
57145 * cvmx_pip_dec_ipsec#
57146 *
57147 * PIP_DEC_IPSEC = UDP or TCP ports to watch for DEC IPSEC
57148 *
57149 * PIP sets the dec_ipsec based on TCP or UDP destination port.
57150 */
57151typedef union
57152{
57153    uint64_t u64;
57154    struct cvmx_pip_dec_ipsecx_s
57155    {
57156#if __BYTE_ORDER == __BIG_ENDIAN
57157        uint64_t reserved_18_63          : 46;
57158        uint64_t tcp                     : 1;       /**< This DPRT should be used for TCP packets */
57159        uint64_t udp                     : 1;       /**< This DPRT should be used for UDP packets */
57160        uint64_t dprt                    : 16;      /**< UDP or TCP destination port to match on */
57161#else
57162        uint64_t dprt                    : 16;
57163        uint64_t udp                     : 1;
57164        uint64_t tcp                     : 1;
57165        uint64_t reserved_18_63          : 46;
57166#endif
57167    } s;
57168    struct cvmx_pip_dec_ipsecx_s         cn30xx;
57169    struct cvmx_pip_dec_ipsecx_s         cn31xx;
57170    struct cvmx_pip_dec_ipsecx_s         cn38xx;
57171    struct cvmx_pip_dec_ipsecx_s         cn38xxp2;
57172    struct cvmx_pip_dec_ipsecx_s         cn50xx;
57173    struct cvmx_pip_dec_ipsecx_s         cn52xx;
57174    struct cvmx_pip_dec_ipsecx_s         cn52xxp1;
57175    struct cvmx_pip_dec_ipsecx_s         cn56xx;
57176    struct cvmx_pip_dec_ipsecx_s         cn56xxp1;
57177    struct cvmx_pip_dec_ipsecx_s         cn58xx;
57178    struct cvmx_pip_dec_ipsecx_s         cn58xxp1;
57179} cvmx_pip_dec_ipsecx_t;
57180
57181
57182/**
57183 * cvmx_pip_dsa_src_grp
57184 */
57185typedef union
57186{
57187    uint64_t u64;
57188    struct cvmx_pip_dsa_src_grp_s
57189    {
57190#if __BYTE_ORDER == __BIG_ENDIAN
57191        uint64_t map15                   : 4;       /**< DSA Group Algorithm */
57192        uint64_t map14                   : 4;       /**< DSA Group Algorithm */
57193        uint64_t map13                   : 4;       /**< DSA Group Algorithm */
57194        uint64_t map12                   : 4;       /**< DSA Group Algorithm */
57195        uint64_t map11                   : 4;       /**< DSA Group Algorithm */
57196        uint64_t map10                   : 4;       /**< DSA Group Algorithm */
57197        uint64_t map9                    : 4;       /**< DSA Group Algorithm */
57198        uint64_t map8                    : 4;       /**< DSA Group Algorithm */
57199        uint64_t map7                    : 4;       /**< DSA Group Algorithm */
57200        uint64_t map6                    : 4;       /**< DSA Group Algorithm */
57201        uint64_t map5                    : 4;       /**< DSA Group Algorithm */
57202        uint64_t map4                    : 4;       /**< DSA Group Algorithm */
57203        uint64_t map3                    : 4;       /**< DSA Group Algorithm */
57204        uint64_t map2                    : 4;       /**< DSA Group Algorithm */
57205        uint64_t map1                    : 4;       /**< DSA Group Algorithm */
57206        uint64_t map0                    : 4;       /**< DSA Group Algorithm
57207                                                         Use the DSA source id to compute GRP
57208                                                         (56xx pass2 only) */
57209#else
57210        uint64_t map0                    : 4;
57211        uint64_t map1                    : 4;
57212        uint64_t map2                    : 4;
57213        uint64_t map3                    : 4;
57214        uint64_t map4                    : 4;
57215        uint64_t map5                    : 4;
57216        uint64_t map6                    : 4;
57217        uint64_t map7                    : 4;
57218        uint64_t map8                    : 4;
57219        uint64_t map9                    : 4;
57220        uint64_t map10                   : 4;
57221        uint64_t map11                   : 4;
57222        uint64_t map12                   : 4;
57223        uint64_t map13                   : 4;
57224        uint64_t map14                   : 4;
57225        uint64_t map15                   : 4;
57226#endif
57227    } s;
57228    struct cvmx_pip_dsa_src_grp_s        cn52xx;
57229    struct cvmx_pip_dsa_src_grp_s        cn52xxp1;
57230    struct cvmx_pip_dsa_src_grp_s        cn56xx;
57231} cvmx_pip_dsa_src_grp_t;
57232
57233
57234/**
57235 * cvmx_pip_dsa_vid_grp
57236 */
57237typedef union
57238{
57239    uint64_t u64;
57240    struct cvmx_pip_dsa_vid_grp_s
57241    {
57242#if __BYTE_ORDER == __BIG_ENDIAN
57243        uint64_t map15                   : 4;       /**< DSA Group Algorithm */
57244        uint64_t map14                   : 4;       /**< DSA Group Algorithm */
57245        uint64_t map13                   : 4;       /**< DSA Group Algorithm */
57246        uint64_t map12                   : 4;       /**< DSA Group Algorithm */
57247        uint64_t map11                   : 4;       /**< DSA Group Algorithm */
57248        uint64_t map10                   : 4;       /**< DSA Group Algorithm */
57249        uint64_t map9                    : 4;       /**< DSA Group Algorithm */
57250        uint64_t map8                    : 4;       /**< DSA Group Algorithm */
57251        uint64_t map7                    : 4;       /**< DSA Group Algorithm */
57252        uint64_t map6                    : 4;       /**< DSA Group Algorithm */
57253        uint64_t map5                    : 4;       /**< DSA Group Algorithm */
57254        uint64_t map4                    : 4;       /**< DSA Group Algorithm */
57255        uint64_t map3                    : 4;       /**< DSA Group Algorithm */
57256        uint64_t map2                    : 4;       /**< DSA Group Algorithm */
57257        uint64_t map1                    : 4;       /**< DSA Group Algorithm */
57258        uint64_t map0                    : 4;       /**< DSA Group Algorithm
57259                                                         Use the DSA source id to compute GRP
57260                                                         (56xx pass2 only) */
57261#else
57262        uint64_t map0                    : 4;
57263        uint64_t map1                    : 4;
57264        uint64_t map2                    : 4;
57265        uint64_t map3                    : 4;
57266        uint64_t map4                    : 4;
57267        uint64_t map5                    : 4;
57268        uint64_t map6                    : 4;
57269        uint64_t map7                    : 4;
57270        uint64_t map8                    : 4;
57271        uint64_t map9                    : 4;
57272        uint64_t map10                   : 4;
57273        uint64_t map11                   : 4;
57274        uint64_t map12                   : 4;
57275        uint64_t map13                   : 4;
57276        uint64_t map14                   : 4;
57277        uint64_t map15                   : 4;
57278#endif
57279    } s;
57280    struct cvmx_pip_dsa_vid_grp_s        cn52xx;
57281    struct cvmx_pip_dsa_vid_grp_s        cn52xxp1;
57282    struct cvmx_pip_dsa_vid_grp_s        cn56xx;
57283} cvmx_pip_dsa_vid_grp_t;
57284
57285
57286/**
57287 * cvmx_pip_frm_len_chk#
57288 *
57289 * Notes:
57290 * PIP_FRM_LEN_CHK0 is used for packets on packet interface0, PCI, and PKO loopback ports.
57291 * PIP_FRM_LEN_CHK1 is used for PCI RAW packets.
57292 */
57293typedef union
57294{
57295    uint64_t u64;
57296    struct cvmx_pip_frm_len_chkx_s
57297    {
57298#if __BYTE_ORDER == __BIG_ENDIAN
57299        uint64_t reserved_32_63          : 32;
57300        uint64_t maxlen                  : 16;      /**< Byte count for Max-sized frame check
57301                                                         Failing packets set the MAXERR interrupt and are
57302                                                         optionally sent with opcode==MAXERR
57303                                                         The effective MAXLEN used by HW is
57304                                                         PIP_FRM_LEN_CHK[MAXLEN] + 4*VV + 4*VS */
57305        uint64_t minlen                  : 16;      /**< Byte count for Min-sized frame check
57306                                                         Failing packets set the MINERR interrupt and are
57307                                                         optionally sent with opcode==MINERR */
57308#else
57309        uint64_t minlen                  : 16;
57310        uint64_t maxlen                  : 16;
57311        uint64_t reserved_32_63          : 32;
57312#endif
57313    } s;
57314    struct cvmx_pip_frm_len_chkx_s       cn50xx;
57315    struct cvmx_pip_frm_len_chkx_s       cn52xx;
57316    struct cvmx_pip_frm_len_chkx_s       cn52xxp1;
57317    struct cvmx_pip_frm_len_chkx_s       cn56xx;
57318    struct cvmx_pip_frm_len_chkx_s       cn56xxp1;
57319} cvmx_pip_frm_len_chkx_t;
57320
57321
57322/**
57323 * cvmx_pip_gbl_cfg
57324 *
57325 * PIP_GBL_CFG = PIP's Global Config Register
57326 *
57327 * Global config information that applies to all ports.
57328 *
57329 * Notes:
57330 * * IP6_UDP
57331 * IPv4 allows optional UDP checksum by sending the all 0's patterns.  IPv6
57332 * outlaws this and the spec says to always check UDP checksum.  This mode
57333 * bit allows the user to treat IPv6 as IPv4, meaning that the all 0's
57334 * pattern will cause a UDP checksum pass.
57335 */
57336typedef union
57337{
57338    uint64_t u64;
57339    struct cvmx_pip_gbl_cfg_s
57340    {
57341#if __BYTE_ORDER == __BIG_ENDIAN
57342        uint64_t reserved_19_63          : 45;
57343        uint64_t tag_syn                 : 1;       /**< Do not include src_crc for TCP/SYN&!ACK packets
57344                                                         0 = include src_crc
57345                                                         1 = tag hash is dst_crc for TCP/SYN&!ACK packets */
57346        uint64_t ip6_udp                 : 1;       /**< IPv6/UDP checksum is not optional
57347                                                         0 = Allow optional checksum code
57348                                                         1 = Do not allow optional checksum code */
57349        uint64_t max_l2                  : 1;       /**< Config bit to choose the largest L2 frame size
57350                                                         Chooses the value of the L2 Type/Length field
57351                                                         to classify the frame as length.
57352                                                         0 = 1500 / 0x5dc
57353                                                         1 = 1535 / 0x5ff */
57354        uint64_t reserved_11_15          : 5;
57355        uint64_t raw_shf                 : 3;       /**< RAW Packet shift amount
57356                                                         Number of bytes to pad a packet that has been
57357                                                         received on a PCI RAW port. */
57358        uint64_t reserved_3_7            : 5;
57359        uint64_t nip_shf                 : 3;       /**< Non-IP shift amount
57360                                                         Number of bytes to pad a packet that has been
57361                                                         classified as not IP. */
57362#else
57363        uint64_t nip_shf                 : 3;
57364        uint64_t reserved_3_7            : 5;
57365        uint64_t raw_shf                 : 3;
57366        uint64_t reserved_11_15          : 5;
57367        uint64_t max_l2                  : 1;
57368        uint64_t ip6_udp                 : 1;
57369        uint64_t tag_syn                 : 1;
57370        uint64_t reserved_19_63          : 45;
57371#endif
57372    } s;
57373    struct cvmx_pip_gbl_cfg_s            cn30xx;
57374    struct cvmx_pip_gbl_cfg_s            cn31xx;
57375    struct cvmx_pip_gbl_cfg_s            cn38xx;
57376    struct cvmx_pip_gbl_cfg_s            cn38xxp2;
57377    struct cvmx_pip_gbl_cfg_s            cn50xx;
57378    struct cvmx_pip_gbl_cfg_s            cn52xx;
57379    struct cvmx_pip_gbl_cfg_s            cn52xxp1;
57380    struct cvmx_pip_gbl_cfg_s            cn56xx;
57381    struct cvmx_pip_gbl_cfg_s            cn56xxp1;
57382    struct cvmx_pip_gbl_cfg_s            cn58xx;
57383    struct cvmx_pip_gbl_cfg_s            cn58xxp1;
57384} cvmx_pip_gbl_cfg_t;
57385
57386
57387/**
57388 * cvmx_pip_gbl_ctl
57389 *
57390 * PIP_GBL_CTL = PIP's Global Control Register
57391 *
57392 * Global control information.  These are the global checker enables for
57393 * IPv4/IPv6 and TCP/UDP parsing.  The enables effect all ports.
57394 *
57395 * Notes:
57396 * The following text describes the conditions in which each checker will
57397 * assert and flag an exception.  By disabling the checker, the exception will
57398 * not be flagged and the packet will be parsed as best it can.  Note, by
57399 * disabling conditions, packets can be parsed incorrectly (.i.e. IP_MAL and
57400 * L4_MAL could cause bits to be seen in the wrong place.  IP_CHK and L4_CHK
57401 * means that the packet was corrupted).
57402 *
57403 * * IP_CHK
57404 *   Indicates that an IPv4 packet contained an IPv4 header checksum
57405 *   violations.  Only applies to packets classified as IPv4.
57406 *
57407 * * IP_MAL
57408 *   Indicates that the packet was malformed.  Malformed packets are defined as
57409 *   packets that are not long enough to cover the IP header or not long enough
57410 *   to cover the length in the IP header.
57411 *
57412 * * IP_HOP
57413 *   Indicates that the IPv4 TTL field or IPv6 HOP field is zero.
57414 *
57415 * * IP4_OPTS
57416 *   Indicates the presence of IPv4 options.  It is set when the length != 5.
57417 *   This only applies to packets classified as IPv4.
57418 *
57419 * * IP6_EEXT
57420 *   Indicate the presence of IPv6 early extension headers.  These bits only
57421 *   apply to packets classified as IPv6.  Bit 0 will flag early extensions
57422 *   when next_header is any one of the following...
57423 *
57424 *         - hop-by-hop (0)
57425 *         - destination (60)
57426 *         - routing (43)
57427 *
57428 *   Bit 1 will flag early extentions when next_header is NOT any of the
57429 *   following...
57430 *
57431 *         - TCP (6)
57432 *         - UDP (17)
57433 *         - fragmentation (44)
57434 *         - ICMP (58)
57435 *         - IPSEC ESP (50)
57436 *         - IPSEC AH (51)
57437 *         - IPCOMP
57438 *
57439 * * L4_MAL
57440 *   Indicates that a TCP or UDP packet is not long enough to cover the TCP or
57441 *   UDP header.
57442 *
57443 * * L4_PRT
57444 *   Indicates that a TCP or UDP packet has an illegal port number - either the
57445 *   source or destination port is zero.
57446 *
57447 * * L4_CHK
57448 *   Indicates that a packet classified as either TCP or UDP contains an L4
57449 *   checksum failure
57450 *
57451 * * L4_LEN
57452 *   Indicates that the TCP or UDP length does not match the the IP length.
57453 *
57454 * * TCP_FLAG
57455 *   Indicates any of the following conditions...
57456 *
57457 *         [URG, ACK, PSH, RST, SYN, FIN] : tcp_flag
57458 *         6'b000001: (FIN only)
57459 *         6'b000000: (0)
57460 *         6'bxxx1x1: (RST+FIN+*)
57461 *         6'b1xxx1x: (URG+SYN+*)
57462 *         6'bxxx11x: (RST+SYN+*)
57463 *         6'bxxxx11: (SYN+FIN+*)
57464 */
57465typedef union
57466{
57467    uint64_t u64;
57468    struct cvmx_pip_gbl_ctl_s
57469    {
57470#if __BYTE_ORDER == __BIG_ENDIAN
57471        uint64_t reserved_27_63          : 37;
57472        uint64_t dsa_grp_tvid            : 1;       /**< DSA Group Algorithm
57473                                                         Use the DSA source id to compute GRP
57474                                                         (56xx pass2 only) */
57475        uint64_t dsa_grp_scmd            : 1;       /**< DSA Group Algorithm
57476                                                         Use the DSA source id to compute GRP when the
57477                                                         DSA tag command to TO_CPU
57478                                                         (56xx pass2 only) */
57479        uint64_t dsa_grp_sid             : 1;       /**< DSA Group Algorithm
57480                                                         Use the DSA VLAN id to compute GRP
57481                                                         (56xx pass2 only) */
57482        uint64_t reserved_21_23          : 3;
57483        uint64_t ring_en                 : 1;       /**< Enable PCIe ring information in WQE */
57484        uint64_t reserved_17_19          : 3;
57485        uint64_t ignrs                   : 1;       /**< Ignore the PKT_INST_HDR[RS] bit when set
57486                                                         Only applies to the packet interface prts (0-31)
57487                                                         (PASS2 only) */
57488        uint64_t vs_wqe                  : 1;       /**< Which VLAN CFI and ID to use when VLAN Stacking
57489                                                         0=use the 1st (network order) VLAN
57490                                                         1=use the 2nd (network order) VLAN
57491                                                         (PASS2 only) */
57492        uint64_t vs_qos                  : 1;       /**< Which VLAN priority to use when VLAN Stacking
57493                                                         0=use the 1st (network order) VLAN
57494                                                         1=use the 2nd (network order) VLAN
57495                                                         (PASS2 only) */
57496        uint64_t l2_mal                  : 1;       /**< Enable L2 malformed packet check */
57497        uint64_t tcp_flag                : 1;       /**< Enable TCP flags checks */
57498        uint64_t l4_len                  : 1;       /**< Enable TCP/UDP length check */
57499        uint64_t l4_chk                  : 1;       /**< Enable TCP/UDP checksum check */
57500        uint64_t l4_prt                  : 1;       /**< Enable TCP/UDP illegal port check */
57501        uint64_t l4_mal                  : 1;       /**< Enable TCP/UDP malformed packet check */
57502        uint64_t reserved_6_7            : 2;
57503        uint64_t ip6_eext                : 2;       /**< Enable IPv6 early extension headers */
57504        uint64_t ip4_opts                : 1;       /**< Enable IPv4 options check */
57505        uint64_t ip_hop                  : 1;       /**< Enable TTL (IPv4) / hop (IPv6) check */
57506        uint64_t ip_mal                  : 1;       /**< Enable malformed check */
57507        uint64_t ip_chk                  : 1;       /**< Enable IPv4 header checksum check */
57508#else
57509        uint64_t ip_chk                  : 1;
57510        uint64_t ip_mal                  : 1;
57511        uint64_t ip_hop                  : 1;
57512        uint64_t ip4_opts                : 1;
57513        uint64_t ip6_eext                : 2;
57514        uint64_t reserved_6_7            : 2;
57515        uint64_t l4_mal                  : 1;
57516        uint64_t l4_prt                  : 1;
57517        uint64_t l4_chk                  : 1;
57518        uint64_t l4_len                  : 1;
57519        uint64_t tcp_flag                : 1;
57520        uint64_t l2_mal                  : 1;
57521        uint64_t vs_qos                  : 1;
57522        uint64_t vs_wqe                  : 1;
57523        uint64_t ignrs                   : 1;
57524        uint64_t reserved_17_19          : 3;
57525        uint64_t ring_en                 : 1;
57526        uint64_t reserved_21_23          : 3;
57527        uint64_t dsa_grp_sid             : 1;
57528        uint64_t dsa_grp_scmd            : 1;
57529        uint64_t dsa_grp_tvid            : 1;
57530        uint64_t reserved_27_63          : 37;
57531#endif
57532    } s;
57533    struct cvmx_pip_gbl_ctl_cn30xx
57534    {
57535#if __BYTE_ORDER == __BIG_ENDIAN
57536        uint64_t reserved_17_63          : 47;
57537        uint64_t ignrs                   : 1;       /**< Ignore the PKT_INST_HDR[RS] bit when set
57538                                                         Only applies to the packet interface prts (0-31) */
57539        uint64_t vs_wqe                  : 1;       /**< Which VLAN CFI and ID to use when VLAN Stacking
57540                                                         0=use the 1st (network order) VLAN
57541                                                         1=use the 2nd (network order) VLAN */
57542        uint64_t vs_qos                  : 1;       /**< Which VLAN priority to use when VLAN Stacking
57543                                                         0=use the 1st (network order) VLAN
57544                                                         1=use the 2nd (network order) VLAN */
57545        uint64_t l2_mal                  : 1;       /**< Enable L2 malformed packet check */
57546        uint64_t tcp_flag                : 1;       /**< Enable TCP flags checks */
57547        uint64_t l4_len                  : 1;       /**< Enable TCP/UDP length check */
57548        uint64_t l4_chk                  : 1;       /**< Enable TCP/UDP checksum check */
57549        uint64_t l4_prt                  : 1;       /**< Enable TCP/UDP illegal port check */
57550        uint64_t l4_mal                  : 1;       /**< Enable TCP/UDP malformed packet check */
57551        uint64_t reserved_6_7            : 2;
57552        uint64_t ip6_eext                : 2;       /**< Enable IPv6 early extension headers */
57553        uint64_t ip4_opts                : 1;       /**< Enable IPv4 options check */
57554        uint64_t ip_hop                  : 1;       /**< Enable TTL (IPv4) / hop (IPv6) check */
57555        uint64_t ip_mal                  : 1;       /**< Enable malformed check */
57556        uint64_t ip_chk                  : 1;       /**< Enable IPv4 header checksum check */
57557#else
57558        uint64_t ip_chk                  : 1;
57559        uint64_t ip_mal                  : 1;
57560        uint64_t ip_hop                  : 1;
57561        uint64_t ip4_opts                : 1;
57562        uint64_t ip6_eext                : 2;
57563        uint64_t reserved_6_7            : 2;
57564        uint64_t l4_mal                  : 1;
57565        uint64_t l4_prt                  : 1;
57566        uint64_t l4_chk                  : 1;
57567        uint64_t l4_len                  : 1;
57568        uint64_t tcp_flag                : 1;
57569        uint64_t l2_mal                  : 1;
57570        uint64_t vs_qos                  : 1;
57571        uint64_t vs_wqe                  : 1;
57572        uint64_t ignrs                   : 1;
57573        uint64_t reserved_17_63          : 47;
57574#endif
57575    } cn30xx;
57576    struct cvmx_pip_gbl_ctl_cn30xx       cn31xx;
57577    struct cvmx_pip_gbl_ctl_cn30xx       cn38xx;
57578    struct cvmx_pip_gbl_ctl_cn30xx       cn38xxp2;
57579    struct cvmx_pip_gbl_ctl_cn30xx       cn50xx;
57580    struct cvmx_pip_gbl_ctl_s            cn52xx;
57581    struct cvmx_pip_gbl_ctl_s            cn52xxp1;
57582    struct cvmx_pip_gbl_ctl_s            cn56xx;
57583    struct cvmx_pip_gbl_ctl_cn56xxp1
57584    {
57585#if __BYTE_ORDER == __BIG_ENDIAN
57586        uint64_t reserved_21_63          : 43;
57587        uint64_t ring_en                 : 1;       /**< Enable PCIe ring information in WQE */
57588        uint64_t reserved_17_19          : 3;
57589        uint64_t ignrs                   : 1;       /**< Ignore the PKT_INST_HDR[RS] bit when set
57590                                                         Only applies to the packet interface prts (0-31) */
57591        uint64_t vs_wqe                  : 1;       /**< Which VLAN CFI and ID to use when VLAN Stacking
57592                                                         0=use the 1st (network order) VLAN
57593                                                         1=use the 2nd (network order) VLAN */
57594        uint64_t vs_qos                  : 1;       /**< Which VLAN priority to use when VLAN Stacking
57595                                                         0=use the 1st (network order) VLAN
57596                                                         1=use the 2nd (network order) VLAN */
57597        uint64_t l2_mal                  : 1;       /**< Enable L2 malformed packet check */
57598        uint64_t tcp_flag                : 1;       /**< Enable TCP flags checks */
57599        uint64_t l4_len                  : 1;       /**< Enable TCP/UDP length check */
57600        uint64_t l4_chk                  : 1;       /**< Enable TCP/UDP checksum check */
57601        uint64_t l4_prt                  : 1;       /**< Enable TCP/UDP illegal port check */
57602        uint64_t l4_mal                  : 1;       /**< Enable TCP/UDP malformed packet check */
57603        uint64_t reserved_6_7            : 2;
57604        uint64_t ip6_eext                : 2;       /**< Enable IPv6 early extension headers */
57605        uint64_t ip4_opts                : 1;       /**< Enable IPv4 options check */
57606        uint64_t ip_hop                  : 1;       /**< Enable TTL (IPv4) / hop (IPv6) check */
57607        uint64_t ip_mal                  : 1;       /**< Enable malformed check */
57608        uint64_t ip_chk                  : 1;       /**< Enable IPv4 header checksum check */
57609#else
57610        uint64_t ip_chk                  : 1;
57611        uint64_t ip_mal                  : 1;
57612        uint64_t ip_hop                  : 1;
57613        uint64_t ip4_opts                : 1;
57614        uint64_t ip6_eext                : 2;
57615        uint64_t reserved_6_7            : 2;
57616        uint64_t l4_mal                  : 1;
57617        uint64_t l4_prt                  : 1;
57618        uint64_t l4_chk                  : 1;
57619        uint64_t l4_len                  : 1;
57620        uint64_t tcp_flag                : 1;
57621        uint64_t l2_mal                  : 1;
57622        uint64_t vs_qos                  : 1;
57623        uint64_t vs_wqe                  : 1;
57624        uint64_t ignrs                   : 1;
57625        uint64_t reserved_17_19          : 3;
57626        uint64_t ring_en                 : 1;
57627        uint64_t reserved_21_63          : 43;
57628#endif
57629    } cn56xxp1;
57630    struct cvmx_pip_gbl_ctl_cn30xx       cn58xx;
57631    struct cvmx_pip_gbl_ctl_cn30xx       cn58xxp1;
57632} cvmx_pip_gbl_ctl_t;
57633
57634
57635/**
57636 * cvmx_pip_hg_pri_qos
57637 *
57638 * Notes:
57639 * This register controls accesses to the HG_QOS_TABLE.  To write an entry of
57640 * the table, write PIP_HG_PRI_QOS with PRI=table address, QOS=priority level,
57641 * UP_QOS=1.  To read an entry of the table, write PIP_HG_PRI_QOS with
57642 * PRI=table address, QOS=dont_carepriority level, UP_QOS=0 and then read
57643 * PIP_HG_PRI_QOS.  The table data will be in PIP_HG_PRI_QOS[QOS].
57644 */
57645typedef union
57646{
57647    uint64_t u64;
57648    struct cvmx_pip_hg_pri_qos_s
57649    {
57650#if __BYTE_ORDER == __BIG_ENDIAN
57651        uint64_t reserved_13_63          : 51;
57652        uint64_t up_qos                  : 1;       /**< When written to '1', updates the entry in the
57653                                                         HG_QOS_TABLE as specified by PRI to a value of
57654                                                         QOS as follows
57655                                                         HG_QOS_TABLE[PRI] = QOS */
57656        uint64_t reserved_11_11          : 1;
57657        uint64_t qos                     : 3;       /**< QOS Map level to priority
57658                                                         (56xx pass2 only) */
57659        uint64_t reserved_6_7            : 2;
57660        uint64_t pri                     : 6;       /**< The priority level from HiGig header
57661                                                         HiGig/HiGig+ PRI = [1'b0, CNG[1:0], COS[2:0]]
57662                                                         HiGig2       PRI = [DP[1:0], TC[3:0]]
57663                                                         (56xx pass2 only) */
57664#else
57665        uint64_t pri                     : 6;
57666        uint64_t reserved_6_7            : 2;
57667        uint64_t qos                     : 3;
57668        uint64_t reserved_11_11          : 1;
57669        uint64_t up_qos                  : 1;
57670        uint64_t reserved_13_63          : 51;
57671#endif
57672    } s;
57673    struct cvmx_pip_hg_pri_qos_s         cn52xx;
57674    struct cvmx_pip_hg_pri_qos_s         cn52xxp1;
57675    struct cvmx_pip_hg_pri_qos_s         cn56xx;
57676} cvmx_pip_hg_pri_qos_t;
57677
57678
57679/**
57680 * cvmx_pip_int_en
57681 *
57682 * PIP_INT_EN = PIP's Interrupt Enable Register
57683 *
57684 * Determines if hardward should raise an interrupt to software
57685 * when an exception event occurs.
57686 */
57687typedef union
57688{
57689    uint64_t u64;
57690    struct cvmx_pip_int_en_s
57691    {
57692#if __BYTE_ORDER == __BIG_ENDIAN
57693        uint64_t reserved_13_63          : 51;
57694        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
57695                                                         stripping in IPD is enable */
57696        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
57697        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
57698        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
57699        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57700        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57701        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
57702        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57703        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57704        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57705        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57706        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC */
57707        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57708#else
57709        uint64_t pktdrp                  : 1;
57710        uint64_t crcerr                  : 1;
57711        uint64_t bckprs                  : 1;
57712        uint64_t prtnxa                  : 1;
57713        uint64_t badtag                  : 1;
57714        uint64_t skprunt                 : 1;
57715        uint64_t todoovr                 : 1;
57716        uint64_t feperr                  : 1;
57717        uint64_t beperr                  : 1;
57718        uint64_t minerr                  : 1;
57719        uint64_t maxerr                  : 1;
57720        uint64_t lenerr                  : 1;
57721        uint64_t punyerr                 : 1;
57722        uint64_t reserved_13_63          : 51;
57723#endif
57724    } s;
57725    struct cvmx_pip_int_en_cn30xx
57726    {
57727#if __BYTE_ORDER == __BIG_ENDIAN
57728        uint64_t reserved_9_63           : 55;
57729        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57730        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57731        uint64_t todoovr                 : 1;       /**< Todo list overflow
57732                                                         (not used in O2P) */
57733        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57734        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57735        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57736        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure
57737                                                         (not used in O2P) */
57738        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC
57739                                                         (not used in O2P) */
57740        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57741#else
57742        uint64_t pktdrp                  : 1;
57743        uint64_t crcerr                  : 1;
57744        uint64_t bckprs                  : 1;
57745        uint64_t prtnxa                  : 1;
57746        uint64_t badtag                  : 1;
57747        uint64_t skprunt                 : 1;
57748        uint64_t todoovr                 : 1;
57749        uint64_t feperr                  : 1;
57750        uint64_t beperr                  : 1;
57751        uint64_t reserved_9_63           : 55;
57752#endif
57753    } cn30xx;
57754    struct cvmx_pip_int_en_cn30xx        cn31xx;
57755    struct cvmx_pip_int_en_cn30xx        cn38xx;
57756    struct cvmx_pip_int_en_cn30xx        cn38xxp2;
57757    struct cvmx_pip_int_en_cn50xx
57758    {
57759#if __BYTE_ORDER == __BIG_ENDIAN
57760        uint64_t reserved_12_63          : 52;
57761        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
57762        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
57763        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
57764        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57765        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57766        uint64_t todoovr                 : 1;       /**< Todo list overflow */
57767        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57768        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57769        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57770        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57771        uint64_t reserved_1_1            : 1;
57772        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57773#else
57774        uint64_t pktdrp                  : 1;
57775        uint64_t reserved_1_1            : 1;
57776        uint64_t bckprs                  : 1;
57777        uint64_t prtnxa                  : 1;
57778        uint64_t badtag                  : 1;
57779        uint64_t skprunt                 : 1;
57780        uint64_t todoovr                 : 1;
57781        uint64_t feperr                  : 1;
57782        uint64_t beperr                  : 1;
57783        uint64_t minerr                  : 1;
57784        uint64_t maxerr                  : 1;
57785        uint64_t lenerr                  : 1;
57786        uint64_t reserved_12_63          : 52;
57787#endif
57788    } cn50xx;
57789    struct cvmx_pip_int_en_cn52xx
57790    {
57791#if __BYTE_ORDER == __BIG_ENDIAN
57792        uint64_t reserved_13_63          : 51;
57793        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
57794                                                         stripping in IPD is enable */
57795        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
57796        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
57797        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
57798        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57799        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57800        uint64_t todoovr                 : 1;       /**< Todo list overflow */
57801        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57802        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57803        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57804        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57805        uint64_t reserved_1_1            : 1;
57806        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57807#else
57808        uint64_t pktdrp                  : 1;
57809        uint64_t reserved_1_1            : 1;
57810        uint64_t bckprs                  : 1;
57811        uint64_t prtnxa                  : 1;
57812        uint64_t badtag                  : 1;
57813        uint64_t skprunt                 : 1;
57814        uint64_t todoovr                 : 1;
57815        uint64_t feperr                  : 1;
57816        uint64_t beperr                  : 1;
57817        uint64_t minerr                  : 1;
57818        uint64_t maxerr                  : 1;
57819        uint64_t lenerr                  : 1;
57820        uint64_t punyerr                 : 1;
57821        uint64_t reserved_13_63          : 51;
57822#endif
57823    } cn52xx;
57824    struct cvmx_pip_int_en_cn52xx        cn52xxp1;
57825    struct cvmx_pip_int_en_s             cn56xx;
57826    struct cvmx_pip_int_en_cn56xxp1
57827    {
57828#if __BYTE_ORDER == __BIG_ENDIAN
57829        uint64_t reserved_12_63          : 52;
57830        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
57831        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
57832        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
57833        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57834        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57835        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
57836        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57837        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57838        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57839        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57840        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC
57841                                                         (Disabled in 56xx) */
57842        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57843#else
57844        uint64_t pktdrp                  : 1;
57845        uint64_t crcerr                  : 1;
57846        uint64_t bckprs                  : 1;
57847        uint64_t prtnxa                  : 1;
57848        uint64_t badtag                  : 1;
57849        uint64_t skprunt                 : 1;
57850        uint64_t todoovr                 : 1;
57851        uint64_t feperr                  : 1;
57852        uint64_t beperr                  : 1;
57853        uint64_t minerr                  : 1;
57854        uint64_t maxerr                  : 1;
57855        uint64_t lenerr                  : 1;
57856        uint64_t reserved_12_63          : 52;
57857#endif
57858    } cn56xxp1;
57859    struct cvmx_pip_int_en_cn58xx
57860    {
57861#if __BYTE_ORDER == __BIG_ENDIAN
57862        uint64_t reserved_13_63          : 51;
57863        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
57864                                                         stripping in IPD is enable */
57865        uint64_t reserved_9_11           : 3;
57866        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57867        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57868        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
57869        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper */
57870        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57871        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57872        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57873        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC */
57874        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57875#else
57876        uint64_t pktdrp                  : 1;
57877        uint64_t crcerr                  : 1;
57878        uint64_t bckprs                  : 1;
57879        uint64_t prtnxa                  : 1;
57880        uint64_t badtag                  : 1;
57881        uint64_t skprunt                 : 1;
57882        uint64_t todoovr                 : 1;
57883        uint64_t feperr                  : 1;
57884        uint64_t beperr                  : 1;
57885        uint64_t reserved_9_11           : 3;
57886        uint64_t punyerr                 : 1;
57887        uint64_t reserved_13_63          : 51;
57888#endif
57889    } cn58xx;
57890    struct cvmx_pip_int_en_cn30xx        cn58xxp1;
57891} cvmx_pip_int_en_t;
57892
57893
57894/**
57895 * cvmx_pip_int_reg
57896 *
57897 * PIP_INT_REG = PIP's Interrupt Register
57898 *
57899 * Any exception event that occurs is captured in the PIP_INT_REG.
57900 * PIP_INT_REG will set the exception bit regardless of the value
57901 * of PIP_INT_EN.  PIP_INT_EN only controls if an interrupt is
57902 * raised to software.
57903 *
57904 * Notes:
57905 * * TODOOVR
57906 *   The PIP Todo list stores packets that have been received and require work
57907 *   queue entry generation.
57908 *
57909 * * SKPRUNT
57910 *   If a packet size is less then the amount programmed in the per port
57911 *   skippers, then there will be nothing to parse and the entire packet will
57912 *   basically be skipped over.  This is probably not what the user desired, so
57913 *   there is an indication to software.
57914 *
57915 * * BADTAG
57916 *   A tag is considered bad when it is resued by a new packet before it was
57917 *   released by PIP.  PIP considers a tag released by one of two methods.
57918 *   . QOS dropped so that it is released over the pip__ipd_release bus.
57919 *   . WorkQ entry is validated by the pip__ipd_done signal
57920 *
57921 * * PRTNXA
57922 *   If PIP receives a packet that is not in the valid port range, the port
57923 *   processed will be mapped into the valid port space (the mapping is
57924 *   currently unpredictable) and the PRTNXA bit will be set.  PRTNXA will be
57925 *   set for packets received under the following conditions:
57926 *
57927 *   * packet ports (ports 0-31)
57928 *     - GMX_INF_MODE[TYPE]==0 (SGMII), received port is 4-31
57929 *     - GMX_INF_MODE[TYPE]==1 (XAUI),  received port is 1-31
57930 *   * upper ports (pci and loopback ports 32-63)
57931 *     - received port is 40-47 or 52-63
57932 *
57933 * * BCKPRS
57934 *   PIP can assert backpressure to the receive logic when the todo list
57935 *   exceeds a high-water mark.  When this
57936 *   occurs, PIP can raise an interrupt to software.
57937 *
57938 * * PKTDRP
57939 *   PIP can drop packets based on QOS results received from IPD.  If the QOS
57940 *   algorithm decides to drop a packet, PIP will assert an interrupt.
57941 */
57942typedef union
57943{
57944    uint64_t u64;
57945    struct cvmx_pip_int_reg_s
57946    {
57947#if __BYTE_ORDER == __BIG_ENDIAN
57948        uint64_t reserved_13_63          : 51;
57949        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
57950                                                         stripping in IPD is enable */
57951        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
57952        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
57953        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
57954        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57955        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57956        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
57957        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
57958                                                         This interrupt can occur with received PARTIAL
57959                                                         packets that are truncated to SKIP bytes or
57960                                                         smaller. */
57961        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57962        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57963        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
57964        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC */
57965        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
57966#else
57967        uint64_t pktdrp                  : 1;
57968        uint64_t crcerr                  : 1;
57969        uint64_t bckprs                  : 1;
57970        uint64_t prtnxa                  : 1;
57971        uint64_t badtag                  : 1;
57972        uint64_t skprunt                 : 1;
57973        uint64_t todoovr                 : 1;
57974        uint64_t feperr                  : 1;
57975        uint64_t beperr                  : 1;
57976        uint64_t minerr                  : 1;
57977        uint64_t maxerr                  : 1;
57978        uint64_t lenerr                  : 1;
57979        uint64_t punyerr                 : 1;
57980        uint64_t reserved_13_63          : 51;
57981#endif
57982    } s;
57983    struct cvmx_pip_int_reg_cn30xx
57984    {
57985#if __BYTE_ORDER == __BIG_ENDIAN
57986        uint64_t reserved_9_63           : 55;
57987        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
57988        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
57989        uint64_t todoovr                 : 1;       /**< Todo list overflow
57990                                                         (not used in O2P) */
57991        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
57992                                                         This interrupt can occur with received PARTIAL
57993                                                         packets that are truncated to SKIP bytes or
57994                                                         smaller. */
57995        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
57996        uint64_t prtnxa                  : 1;       /**< Non-existent port */
57997        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure
57998                                                         (not used in O2P) */
57999        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC
58000                                                         (not used in O2P) */
58001        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
58002#else
58003        uint64_t pktdrp                  : 1;
58004        uint64_t crcerr                  : 1;
58005        uint64_t bckprs                  : 1;
58006        uint64_t prtnxa                  : 1;
58007        uint64_t badtag                  : 1;
58008        uint64_t skprunt                 : 1;
58009        uint64_t todoovr                 : 1;
58010        uint64_t feperr                  : 1;
58011        uint64_t beperr                  : 1;
58012        uint64_t reserved_9_63           : 55;
58013#endif
58014    } cn30xx;
58015    struct cvmx_pip_int_reg_cn30xx       cn31xx;
58016    struct cvmx_pip_int_reg_cn30xx       cn38xx;
58017    struct cvmx_pip_int_reg_cn30xx       cn38xxp2;
58018    struct cvmx_pip_int_reg_cn50xx
58019    {
58020#if __BYTE_ORDER == __BIG_ENDIAN
58021        uint64_t reserved_12_63          : 52;
58022        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
58023        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
58024        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
58025        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
58026        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
58027        uint64_t todoovr                 : 1;       /**< Todo list overflow */
58028        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
58029                                                         This interrupt can occur with received PARTIAL
58030                                                         packets that are truncated to SKIP bytes or
58031                                                         smaller. */
58032        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
58033        uint64_t prtnxa                  : 1;       /**< Non-existent port */
58034        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
58035        uint64_t reserved_1_1            : 1;
58036        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
58037#else
58038        uint64_t pktdrp                  : 1;
58039        uint64_t reserved_1_1            : 1;
58040        uint64_t bckprs                  : 1;
58041        uint64_t prtnxa                  : 1;
58042        uint64_t badtag                  : 1;
58043        uint64_t skprunt                 : 1;
58044        uint64_t todoovr                 : 1;
58045        uint64_t feperr                  : 1;
58046        uint64_t beperr                  : 1;
58047        uint64_t minerr                  : 1;
58048        uint64_t maxerr                  : 1;
58049        uint64_t lenerr                  : 1;
58050        uint64_t reserved_12_63          : 52;
58051#endif
58052    } cn50xx;
58053    struct cvmx_pip_int_reg_cn52xx
58054    {
58055#if __BYTE_ORDER == __BIG_ENDIAN
58056        uint64_t reserved_13_63          : 51;
58057        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
58058                                                         stripping in IPD is enable */
58059        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
58060        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
58061        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
58062        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
58063        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
58064        uint64_t todoovr                 : 1;       /**< Todo list overflow */
58065        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
58066                                                         This interrupt can occur with received PARTIAL
58067                                                         packets that are truncated to SKIP bytes or
58068                                                         smaller. */
58069        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
58070        uint64_t prtnxa                  : 1;       /**< Non-existent port */
58071        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
58072        uint64_t reserved_1_1            : 1;
58073        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
58074#else
58075        uint64_t pktdrp                  : 1;
58076        uint64_t reserved_1_1            : 1;
58077        uint64_t bckprs                  : 1;
58078        uint64_t prtnxa                  : 1;
58079        uint64_t badtag                  : 1;
58080        uint64_t skprunt                 : 1;
58081        uint64_t todoovr                 : 1;
58082        uint64_t feperr                  : 1;
58083        uint64_t beperr                  : 1;
58084        uint64_t minerr                  : 1;
58085        uint64_t maxerr                  : 1;
58086        uint64_t lenerr                  : 1;
58087        uint64_t punyerr                 : 1;
58088        uint64_t reserved_13_63          : 51;
58089#endif
58090    } cn52xx;
58091    struct cvmx_pip_int_reg_cn52xx       cn52xxp1;
58092    struct cvmx_pip_int_reg_s            cn56xx;
58093    struct cvmx_pip_int_reg_cn56xxp1
58094    {
58095#if __BYTE_ORDER == __BIG_ENDIAN
58096        uint64_t reserved_12_63          : 52;
58097        uint64_t lenerr                  : 1;       /**< Frame was received with length error */
58098        uint64_t maxerr                  : 1;       /**< Frame was received with length > max_length */
58099        uint64_t minerr                  : 1;       /**< Frame was received with length < min_length */
58100        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
58101        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
58102        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
58103        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
58104                                                         This interrupt can occur with received PARTIAL
58105                                                         packets that are truncated to SKIP bytes or
58106                                                         smaller. */
58107        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
58108        uint64_t prtnxa                  : 1;       /**< Non-existent port */
58109        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
58110        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC
58111                                                         (Disabled in 56xx) */
58112        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
58113#else
58114        uint64_t pktdrp                  : 1;
58115        uint64_t crcerr                  : 1;
58116        uint64_t bckprs                  : 1;
58117        uint64_t prtnxa                  : 1;
58118        uint64_t badtag                  : 1;
58119        uint64_t skprunt                 : 1;
58120        uint64_t todoovr                 : 1;
58121        uint64_t feperr                  : 1;
58122        uint64_t beperr                  : 1;
58123        uint64_t minerr                  : 1;
58124        uint64_t maxerr                  : 1;
58125        uint64_t lenerr                  : 1;
58126        uint64_t reserved_12_63          : 52;
58127#endif
58128    } cn56xxp1;
58129    struct cvmx_pip_int_reg_cn58xx
58130    {
58131#if __BYTE_ORDER == __BIG_ENDIAN
58132        uint64_t reserved_13_63          : 51;
58133        uint64_t punyerr                 : 1;       /**< Frame was received with length <=4B when CRC
58134                                                         stripping in IPD is enable */
58135        uint64_t reserved_9_11           : 3;
58136        uint64_t beperr                  : 1;       /**< Parity Error in back end memory */
58137        uint64_t feperr                  : 1;       /**< Parity Error in front end memory */
58138        uint64_t todoovr                 : 1;       /**< Todo list overflow (see PIP_BCK_PRS[HIWATER]) */
58139        uint64_t skprunt                 : 1;       /**< Packet was engulfed by skipper
58140                                                         This interrupt can occur with received PARTIAL
58141                                                         packets that are truncated to SKIP bytes or
58142                                                         smaller. */
58143        uint64_t badtag                  : 1;       /**< A bad tag was sent from IPD */
58144        uint64_t prtnxa                  : 1;       /**< Non-existent port */
58145        uint64_t bckprs                  : 1;       /**< PIP asserted backpressure */
58146        uint64_t crcerr                  : 1;       /**< PIP calculated bad CRC */
58147        uint64_t pktdrp                  : 1;       /**< Packet Dropped due to QOS */
58148#else
58149        uint64_t pktdrp                  : 1;
58150        uint64_t crcerr                  : 1;
58151        uint64_t bckprs                  : 1;
58152        uint64_t prtnxa                  : 1;
58153        uint64_t badtag                  : 1;
58154        uint64_t skprunt                 : 1;
58155        uint64_t todoovr                 : 1;
58156        uint64_t feperr                  : 1;
58157        uint64_t beperr                  : 1;
58158        uint64_t reserved_9_11           : 3;
58159        uint64_t punyerr                 : 1;
58160        uint64_t reserved_13_63          : 51;
58161#endif
58162    } cn58xx;
58163    struct cvmx_pip_int_reg_cn30xx       cn58xxp1;
58164} cvmx_pip_int_reg_t;
58165
58166
58167/**
58168 * cvmx_pip_ip_offset
58169 *
58170 * PIP_IP_OFFSET = Location of the IP in the workQ entry
58171 *
58172 * An 8-byte offset to find the start of the IP header in the data portion of IP workQ entires
58173 *
58174 * Notes:
58175 * In normal configurations, OFFSET must be set in the 0..4 range to allow the
58176 * entire IP and TCP/UDP headers to be buffered in HW and calculate the L4
58177 * checksum for TCP/UDP packets.
58178 *
58179 * The MAX value of OFFSET is determined by the the types of packets that can
58180 * be sent to PIP as follows...
58181 *
58182 * Packet Type              MAX OFFSET
58183 * IPv4/TCP/UDP             7
58184 * IPv6/TCP/UDP             5
58185 * IPv6/without L4 parsing  6
58186 *
58187 * If the L4 can be ignored, then the MAX OFFSET for IPv6 packets can increase
58188 * to 6.  Here are the following programming restrictions for IPv6 packets and
58189 * OFFSET==6:
58190 *
58191 *  . PIP_GBL_CTL[TCP_FLAG] == 0
58192 *  . PIP_GBL_CTL[L4_LEN]   == 0
58193 *  . PIP_GBL_CTL[L4_CHK]   == 0
58194 *  . PIP_GBL_CTL[L4_PRT]   == 0
58195 *  . PIP_GBL_CTL[L4_MAL]   == 0
58196 *  . PIP_DEC_IPSEC[TCP]    == 0
58197 *  . PIP_DEC_IPSEC[UDP]    == 0
58198 *  . PIP_PRT_TAG[IP6_DPRT] == 0
58199 *  . PIP_PRT_TAG[IP6_SPRT] == 0
58200 *  . PIP_PRT_TAG[TCP6_TAG] == 0
58201 *  . PIP_GBL_CFG[TAG_SYN]  == 0
58202 */
58203typedef union
58204{
58205    uint64_t u64;
58206    struct cvmx_pip_ip_offset_s
58207    {
58208#if __BYTE_ORDER == __BIG_ENDIAN
58209        uint64_t reserved_3_63           : 61;
58210        uint64_t offset                  : 3;       /**< Number of 8B ticks to include in workQ entry
58211                                                          prior to IP data
58212                                                         - 0:  0 Bytes / IP start at WORD4 of workQ entry
58213                                                         - 1:  8 Bytes / IP start at WORD5 of workQ entry
58214                                                         - 2: 16 Bytes / IP start at WORD6 of workQ entry
58215                                                         - 3: 24 Bytes / IP start at WORD7 of workQ entry
58216                                                         - 4: 32 Bytes / IP start at WORD8 of workQ entry
58217                                                         - 5: 40 Bytes / IP start at WORD9 of workQ entry
58218                                                         - 6: 48 Bytes / IP start at WORD10 of workQ entry
58219                                                         - 7: 56 Bytes / IP start at WORD11 of workQ entry */
58220#else
58221        uint64_t offset                  : 3;
58222        uint64_t reserved_3_63           : 61;
58223#endif
58224    } s;
58225    struct cvmx_pip_ip_offset_s          cn30xx;
58226    struct cvmx_pip_ip_offset_s          cn31xx;
58227    struct cvmx_pip_ip_offset_s          cn38xx;
58228    struct cvmx_pip_ip_offset_s          cn38xxp2;
58229    struct cvmx_pip_ip_offset_s          cn50xx;
58230    struct cvmx_pip_ip_offset_s          cn52xx;
58231    struct cvmx_pip_ip_offset_s          cn52xxp1;
58232    struct cvmx_pip_ip_offset_s          cn56xx;
58233    struct cvmx_pip_ip_offset_s          cn56xxp1;
58234    struct cvmx_pip_ip_offset_s          cn58xx;
58235    struct cvmx_pip_ip_offset_s          cn58xxp1;
58236} cvmx_pip_ip_offset_t;
58237
58238
58239/**
58240 * cvmx_pip_prt_cfg#
58241 *
58242 * PIP_PRT_CFGX = Per port config information
58243 *
58244 */
58245typedef union
58246{
58247    uint64_t u64;
58248    struct cvmx_pip_prt_cfgx_s
58249    {
58250#if __BYTE_ORDER == __BIG_ENDIAN
58251        uint64_t reserved_53_63          : 11;
58252        uint64_t pad_len                 : 1;       /**< When set, disables the length check for pkts with
58253                                                         padding in the client data */
58254        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts */
58255        uint64_t lenerr_en               : 1;       /**< L2 length error check enable
58256                                                         Frame was received with length error */
58257        uint64_t maxerr_en               : 1;       /**< Max frame error check enable
58258                                                         Frame was received with length > max_length */
58259        uint64_t minerr_en               : 1;       /**< Min frame error check enable
58260                                                         Frame was received with length < min_length */
58261        uint64_t grp_wat_47              : 4;       /**< GRP Watcher enable
58262                                                         (Watchers 4-7) */
58263        uint64_t qos_wat_47              : 4;       /**< QOS Watcher enable
58264                                                         (Watchers 4-7) */
58265        uint64_t reserved_37_39          : 3;
58266        uint64_t rawdrp                  : 1;       /**< Allow the IPD to RED drop a packet.
58267                                                         Normally, IPD will never drop a packet that PIP
58268                                                         indicates is RAW.
58269                                                         0=never drop RAW packets based on RED algorithm
58270                                                         1=allow RAW packet drops based on RED algorithm
58271                                                         (PASS2 only) */
58272        uint64_t tag_inc                 : 2;       /**< Which of the 4 PIP_TAG_INC to use when
58273                                                         calculating mask tag hash
58274                                                         (PASS2 only) */
58275        uint64_t dyn_rs                  : 1;       /**< Dynamically calculate RS based on pkt size
58276                                                         (PASS2 only) */
58277        uint64_t inst_hdr                : 1;       /**< 8-byte INST_HDR is present on all packets
58278                                                         (not for PCI prts, 32-35)
58279                                                         (PASS2 only) */
58280        uint64_t grp_wat                 : 4;       /**< GRP Watcher enable
58281                                                         (PASS2 only) */
58282        uint64_t hg_qos                  : 1;       /**< When set, uses the HiGig priority bits as a
58283                                                         lookup into the HG_QOS_TABLE (PIP_HG_PRI_QOS)
58284                                                         to determine the QOS value
58285                                                         HG_QOS must not be set when HIGIG_EN=0
58286                                                         (56xx pass2 only) */
58287        uint64_t qos                     : 3;       /**< Default QOS level of the port */
58288        uint64_t qos_wat                 : 4;       /**< QOS Watcher enable */
58289        uint64_t qos_vsel                : 1;       /**< Which QOS in PIP_QOS_VLAN to use
58290                                                         0 = PIP_QOS_VLAN[QOS]
58291                                                         1 = PIP_QOS_VLAN[QOS1]
58292                                                         (56xx pass2 only) */
58293        uint64_t qos_vod                 : 1;       /**< QOS VLAN over Diffserv
58294                                                         if VLAN exists, it is used
58295                                                         else if IP exists, Diffserv is used
58296                                                         else the per port default is used
58297                                                         Watchers are still highest priority */
58298        uint64_t qos_diff                : 1;       /**< QOS Diffserv */
58299        uint64_t qos_vlan                : 1;       /**< QOS VLAN */
58300        uint64_t reserved_13_15          : 3;
58301        uint64_t crc_en                  : 1;       /**< CRC Checking enabled (for ports 0-31 only) */
58302        uint64_t higig_en                : 1;       /**< Enable HiGig parsing
58303                                                         Should not be set for PCIe ports (ports 32-35)
58304                                                         When HIGIG_EN=1:
58305                                                          DSA_EN field below must be zero
58306                                                          SKIP field below is both Skip I size and the
58307                                                            size of the HiGig* header (12 or 16 bytes)
58308                                                         (56xx pass2 only) */
58309        uint64_t dsa_en                  : 1;       /**< Enable DSA tag parsing
58310                                                         When DSA_EN=1:
58311                                                          HIGIG_EN field above must be zero
58312                                                          SKIP field below is size of DSA tag (4, 8, or
58313                                                            12 bytes) rather than the size of Skip I
58314                                                          total SKIP (Skip I + header + Skip II
58315                                                            must be zero
58316                                                          INST_HDR field above must be zero (non-PCIe
58317                                                            ports)
58318                                                          For PCIe ports, NPEI_PKT*_INSTR_HDR[USE_IHDR]
58319                                                            and PCIE_INST_HDR[R] should be clear
58320                                                          MODE field below must be "skip to L2"
58321                                                         (56xx pass2 only) */
58322        cvmx_pip_port_parse_mode_t mode  : 2;       /**< Parse Mode
58323                                                         0 = no packet inspection (Uninterpreted)
58324                                                         1 = L2 parsing / skip to L2
58325                                                         2 = IP parsing / skip to L3
58326                                                         3 = PCI Raw (illegal for software to set) */
58327        uint64_t reserved_7_7            : 1;
58328        uint64_t skip                    : 7;       /**< Optional Skip I amount for packets.  Does not
58329                                                         apply to packets on PCI ports when a PKT_INST_HDR
58330                                                         is present.  See section 7.2.7 - Legal Skip
58331                                                         Values for further details. */
58332#else
58333        uint64_t skip                    : 7;
58334        uint64_t reserved_7_7            : 1;
58335        cvmx_pip_port_parse_mode_t mode  : 2;
58336        uint64_t dsa_en                  : 1;
58337        uint64_t higig_en                : 1;
58338        uint64_t crc_en                  : 1;
58339        uint64_t reserved_13_15          : 3;
58340        uint64_t qos_vlan                : 1;
58341        uint64_t qos_diff                : 1;
58342        uint64_t qos_vod                 : 1;
58343        uint64_t qos_vsel                : 1;
58344        uint64_t qos_wat                 : 4;
58345        uint64_t qos                     : 3;
58346        uint64_t hg_qos                  : 1;
58347        uint64_t grp_wat                 : 4;
58348        uint64_t inst_hdr                : 1;
58349        uint64_t dyn_rs                  : 1;
58350        uint64_t tag_inc                 : 2;
58351        uint64_t rawdrp                  : 1;
58352        uint64_t reserved_37_39          : 3;
58353        uint64_t qos_wat_47              : 4;
58354        uint64_t grp_wat_47              : 4;
58355        uint64_t minerr_en               : 1;
58356        uint64_t maxerr_en               : 1;
58357        uint64_t lenerr_en               : 1;
58358        uint64_t vlan_len                : 1;
58359        uint64_t pad_len                 : 1;
58360        uint64_t reserved_53_63          : 11;
58361#endif
58362    } s;
58363    struct cvmx_pip_prt_cfgx_cn30xx
58364    {
58365#if __BYTE_ORDER == __BIG_ENDIAN
58366        uint64_t reserved_37_63          : 27;
58367        uint64_t rawdrp                  : 1;       /**< Allow the IPD to RED drop a packet.
58368                                                         Normally, IPD will never drop a packet that PIP
58369                                                         indicates is RAW.
58370                                                         0=never drop RAW packets based on RED algorithm
58371                                                         1=allow RAW packet drops based on RED algorithm */
58372        uint64_t tag_inc                 : 2;       /**< Which of the 4 PIP_TAG_INC to use when
58373                                                         calculating mask tag hash */
58374        uint64_t dyn_rs                  : 1;       /**< Dynamically calculate RS based on pkt size */
58375        uint64_t inst_hdr                : 1;       /**< 8-byte INST_HDR is present on all packets
58376                                                         (not for PCI prts, 32-35) */
58377        uint64_t grp_wat                 : 4;       /**< GRP Watcher enable */
58378        uint64_t reserved_27_27          : 1;
58379        uint64_t qos                     : 3;       /**< Default QOS level of the port */
58380        uint64_t qos_wat                 : 4;       /**< QOS Watcher enable */
58381        uint64_t reserved_18_19          : 2;
58382        uint64_t qos_diff                : 1;       /**< QOS Diffserv */
58383        uint64_t qos_vlan                : 1;       /**< QOS VLAN */
58384        uint64_t reserved_10_15          : 6;
58385        cvmx_pip_port_parse_mode_t mode  : 2;       /**< Parse Mode
58386                                                         0 = no packet inspection (Uninterpreted)
58387                                                         1 = L2 parsing / skip to L2
58388                                                         2 = IP parsing / skip to L3
58389                                                         3 = PCI Raw (illegal for software to set) */
58390        uint64_t reserved_7_7            : 1;
58391        uint64_t skip                    : 7;       /**< Optional Skip I amount for packets.  Does not
58392                                                         apply to packets on PCI ports when a PKT_INST_HDR
58393                                                         is present.  See section 7.2.7 - Legal Skip
58394                                                         Values for further details. */
58395#else
58396        uint64_t skip                    : 7;
58397        uint64_t reserved_7_7            : 1;
58398        cvmx_pip_port_parse_mode_t mode  : 2;
58399        uint64_t reserved_10_15          : 6;
58400        uint64_t qos_vlan                : 1;
58401        uint64_t qos_diff                : 1;
58402        uint64_t reserved_18_19          : 2;
58403        uint64_t qos_wat                 : 4;
58404        uint64_t qos                     : 3;
58405        uint64_t reserved_27_27          : 1;
58406        uint64_t grp_wat                 : 4;
58407        uint64_t inst_hdr                : 1;
58408        uint64_t dyn_rs                  : 1;
58409        uint64_t tag_inc                 : 2;
58410        uint64_t rawdrp                  : 1;
58411        uint64_t reserved_37_63          : 27;
58412#endif
58413    } cn30xx;
58414    struct cvmx_pip_prt_cfgx_cn30xx      cn31xx;
58415    struct cvmx_pip_prt_cfgx_cn38xx
58416    {
58417#if __BYTE_ORDER == __BIG_ENDIAN
58418        uint64_t reserved_37_63          : 27;
58419        uint64_t rawdrp                  : 1;       /**< Allow the IPD to RED drop a packet.
58420                                                         Normally, IPD will never drop a packet that PIP
58421                                                         indicates is RAW.
58422                                                         0=never drop RAW packets based on RED algorithm
58423                                                         1=allow RAW packet drops based on RED algorithm
58424                                                         (PASS2 only) */
58425        uint64_t tag_inc                 : 2;       /**< Which of the 4 PIP_TAG_INC to use when
58426                                                         calculating mask tag hash
58427                                                         (PASS2 only) */
58428        uint64_t dyn_rs                  : 1;       /**< Dynamically calculate RS based on pkt size
58429                                                         (PASS2 only) */
58430        uint64_t inst_hdr                : 1;       /**< 8-byte INST_HDR is present on all packets
58431                                                         (not for PCI prts, 32-35)
58432                                                         (PASS2 only) */
58433        uint64_t grp_wat                 : 4;       /**< GRP Watcher enable
58434                                                         (PASS2 only) */
58435        uint64_t reserved_27_27          : 1;
58436        uint64_t qos                     : 3;       /**< Default QOS level of the port */
58437        uint64_t qos_wat                 : 4;       /**< QOS Watcher enable */
58438        uint64_t reserved_18_19          : 2;
58439        uint64_t qos_diff                : 1;       /**< QOS Diffserv */
58440        uint64_t qos_vlan                : 1;       /**< QOS VLAN */
58441        uint64_t reserved_13_15          : 3;
58442        uint64_t crc_en                  : 1;       /**< CRC Checking enabled (for ports 0-31 only) */
58443        uint64_t reserved_10_11          : 2;
58444        cvmx_pip_port_parse_mode_t mode  : 2;       /**< Parse Mode
58445                                                         0 = no packet inspection (Uninterpreted)
58446                                                         1 = L2 parsing / skip to L2
58447                                                         2 = IP parsing / skip to L3
58448                                                         3 = PCI Raw (illegal for software to set) */
58449        uint64_t reserved_7_7            : 1;
58450        uint64_t skip                    : 7;       /**< Optional Skip I amount for packets.  Does not
58451                                                         apply to packets on PCI ports when a PKT_INST_HDR
58452                                                         is present.  See section 7.2.7 - Legal Skip
58453                                                         Values for further details. */
58454#else
58455        uint64_t skip                    : 7;
58456        uint64_t reserved_7_7            : 1;
58457        cvmx_pip_port_parse_mode_t mode  : 2;
58458        uint64_t reserved_10_11          : 2;
58459        uint64_t crc_en                  : 1;
58460        uint64_t reserved_13_15          : 3;
58461        uint64_t qos_vlan                : 1;
58462        uint64_t qos_diff                : 1;
58463        uint64_t reserved_18_19          : 2;
58464        uint64_t qos_wat                 : 4;
58465        uint64_t qos                     : 3;
58466        uint64_t reserved_27_27          : 1;
58467        uint64_t grp_wat                 : 4;
58468        uint64_t inst_hdr                : 1;
58469        uint64_t dyn_rs                  : 1;
58470        uint64_t tag_inc                 : 2;
58471        uint64_t rawdrp                  : 1;
58472        uint64_t reserved_37_63          : 27;
58473#endif
58474    } cn38xx;
58475    struct cvmx_pip_prt_cfgx_cn38xx      cn38xxp2;
58476    struct cvmx_pip_prt_cfgx_cn50xx
58477    {
58478#if __BYTE_ORDER == __BIG_ENDIAN
58479        uint64_t reserved_53_63          : 11;
58480        uint64_t pad_len                 : 1;       /**< When set, disables the length check for pkts with
58481                                                         padding in the client data */
58482        uint64_t vlan_len                : 1;       /**< When set, disables the length check for VLAN pkts */
58483        uint64_t lenerr_en               : 1;       /**< L2 length error check enable
58484                                                         Frame was received with length error */
58485        uint64_t maxerr_en               : 1;       /**< Max frame error check enable
58486                                                         Frame was received with length > max_length */
58487        uint64_t minerr_en               : 1;       /**< Min frame error check enable
58488                                                         Frame was received with length < min_length */
58489        uint64_t grp_wat_47              : 4;       /**< GRP Watcher enable
58490                                                         (Watchers 4-7) */
58491        uint64_t qos_wat_47              : 4;       /**< QOS Watcher enable
58492                                                         (Watchers 4-7) */
58493        uint64_t reserved_37_39          : 3;
58494        uint64_t rawdrp                  : 1;       /**< Allow the IPD to RED drop a packet.
58495                                                         Normally, IPD will never drop a packet that PIP
58496                                                         indicates is RAW.
58497                                                         0=never drop RAW packets based on RED algorithm
58498                                                         1=allow RAW packet drops based on RED algorithm */
58499        uint64_t tag_inc                 : 2;       /**< Which of the 4 PIP_TAG_INC to use when
58500                                                         calculating mask tag hash */
58501        uint64_t dyn_rs                  : 1;       /**< Dynamically calculate RS based on pkt size */
58502        uint64_t inst_hdr                : 1;       /**< 8-byte INST_HDR is present on all packets
58503                                                         (not for PCI prts, 32-35) */
58504        uint64_t grp_wat                 : 4;       /**< GRP Watcher enable */
58505        uint64_t reserved_27_27          : 1;
58506        uint64_t qos                     : 3;       /**< Default QOS level of the port */
58507        uint64_t qos_wat                 : 4;       /**< QOS Watcher enable
58508                                                         (Watchers 0-3) */
58509        uint64_t reserved_19_19          : 1;
58510        uint64_t qos_vod                 : 1;       /**< QOS VLAN over Diffserv
58511                                                         if VLAN exists, it is used
58512                                                         else if IP exists, Diffserv is used
58513                                                         else the per port default is used
58514                                                         Watchers are still highest priority */
58515        uint64_t qos_diff                : 1;       /**< QOS Diffserv */
58516        uint64_t qos_vlan                : 1;       /**< QOS VLAN */
58517        uint64_t reserved_13_15          : 3;
58518        uint64_t crc_en                  : 1;       /**< CRC Checking enabled
58519                                                         (Disabled in 5020) */
58520        uint64_t reserved_10_11          : 2;
58521        cvmx_pip_port_parse_mode_t mode  : 2;       /**< Parse Mode
58522                                                         0 = no packet inspection (Uninterpreted)
58523                                                         1 = L2 parsing / skip to L2
58524                                                         2 = IP parsing / skip to L3
58525                                                         3 = PCI Raw (illegal for software to set) */
58526        uint64_t reserved_7_7            : 1;
58527        uint64_t skip                    : 7;       /**< Optional Skip I amount for packets.  Does not
58528                                                         apply to packets on PCI ports when a PKT_INST_HDR
58529                                                         is present.  See section 7.2.7 - Legal Skip
58530                                                         Values for further details. */
58531#else
58532        uint64_t skip                    : 7;
58533        uint64_t reserved_7_7            : 1;
58534        cvmx_pip_port_parse_mode_t mode  : 2;
58535        uint64_t reserved_10_11          : 2;
58536        uint64_t crc_en                  : 1;
58537        uint64_t reserved_13_15          : 3;
58538        uint64_t qos_vlan                : 1;
58539        uint64_t qos_diff                : 1;
58540        uint64_t qos_vod                 : 1;
58541        uint64_t reserved_19_19          : 1;
58542        uint64_t qos_wat                 : 4;
58543        uint64_t qos                     : 3;
58544        uint64_t reserved_27_27          : 1;
58545        uint64_t grp_wat                 : 4;
58546        uint64_t inst_hdr                : 1;
58547        uint64_t dyn_rs                  : 1;
58548        uint64_t tag_inc                 : 2;
58549        uint64_t rawdrp                  : 1;
58550        uint64_t reserved_37_39          : 3;
58551        uint64_t qos_wat_47              : 4;
58552        uint64_t grp_wat_47              : 4;
58553        uint64_t minerr_en               : 1;
58554        uint64_t maxerr_en               : 1;
58555        uint64_t lenerr_en               : 1;
58556        uint64_t vlan_len                : 1;
58557        uint64_t pad_len                 : 1;
58558        uint64_t reserved_53_63          : 11;
58559#endif
58560    } cn50xx;
58561    struct cvmx_pip_prt_cfgx_s           cn52xx;
58562    struct cvmx_pip_prt_cfgx_s           cn52xxp1;
58563    struct cvmx_pip_prt_cfgx_s           cn56xx;
58564    struct cvmx_pip_prt_cfgx_cn50xx      cn56xxp1;
58565    struct cvmx_pip_prt_cfgx_cn58xx
58566    {
58567#if __BYTE_ORDER == __BIG_ENDIAN
58568        uint64_t reserved_37_63          : 27;
58569        uint64_t rawdrp                  : 1;       /**< Allow the IPD to RED drop a packet.
58570                                                         Normally, IPD will never drop a packet that PIP
58571                                                         indicates is RAW.
58572                                                         0=never drop RAW packets based on RED algorithm
58573                                                         1=allow RAW packet drops based on RED algorithm
58574                                                         (PASS2 only) */
58575        uint64_t tag_inc                 : 2;       /**< Which of the 4 PIP_TAG_INC to use when
58576                                                         calculating mask tag hash
58577                                                         (PASS2 only) */
58578        uint64_t dyn_rs                  : 1;       /**< Dynamically calculate RS based on pkt size
58579                                                         (PASS2 only) */
58580        uint64_t inst_hdr                : 1;       /**< 8-byte INST_HDR is present on all packets
58581                                                         (not for PCI prts, 32-35)
58582                                                         (PASS2 only) */
58583        uint64_t grp_wat                 : 4;       /**< GRP Watcher enable
58584                                                         (PASS2 only) */
58585        uint64_t reserved_27_27          : 1;
58586        uint64_t qos                     : 3;       /**< Default QOS level of the port */
58587        uint64_t qos_wat                 : 4;       /**< QOS Watcher enable */
58588        uint64_t reserved_19_19          : 1;
58589        uint64_t qos_vod                 : 1;       /**< QOS VLAN over Diffserv
58590                                                         if VLAN exists, it is used
58591                                                         else if IP exists, Diffserv is used
58592                                                         else the per port default is used
58593                                                         Watchers are still highest priority */
58594        uint64_t qos_diff                : 1;       /**< QOS Diffserv */
58595        uint64_t qos_vlan                : 1;       /**< QOS VLAN */
58596        uint64_t reserved_13_15          : 3;
58597        uint64_t crc_en                  : 1;       /**< CRC Checking enabled (for ports 0-31 only) */
58598        uint64_t reserved_10_11          : 2;
58599        cvmx_pip_port_parse_mode_t mode  : 2;       /**< Parse Mode
58600                                                         0 = no packet inspection (Uninterpreted)
58601                                                         1 = L2 parsing / skip to L2
58602                                                         2 = IP parsing / skip to L3
58603                                                         3 = PCI Raw (illegal for software to set) */
58604        uint64_t reserved_7_7            : 1;
58605        uint64_t skip                    : 7;       /**< Optional Skip I amount for packets.  Does not
58606                                                         apply to packets on PCI ports when a PKT_INST_HDR
58607                                                         is present.  See section 7.2.7 - Legal Skip
58608                                                         Values for further details. */
58609#else
58610        uint64_t skip                    : 7;
58611        uint64_t reserved_7_7            : 1;
58612        cvmx_pip_port_parse_mode_t mode  : 2;
58613        uint64_t reserved_10_11          : 2;
58614        uint64_t crc_en                  : 1;
58615        uint64_t reserved_13_15          : 3;
58616        uint64_t qos_vlan                : 1;
58617        uint64_t qos_diff                : 1;
58618        uint64_t qos_vod                 : 1;
58619        uint64_t reserved_19_19          : 1;
58620        uint64_t qos_wat                 : 4;
58621        uint64_t qos                     : 3;
58622        uint64_t reserved_27_27          : 1;
58623        uint64_t grp_wat                 : 4;
58624        uint64_t inst_hdr                : 1;
58625        uint64_t dyn_rs                  : 1;
58626        uint64_t tag_inc                 : 2;
58627        uint64_t rawdrp                  : 1;
58628        uint64_t reserved_37_63          : 27;
58629#endif
58630    } cn58xx;
58631    struct cvmx_pip_prt_cfgx_cn58xx      cn58xxp1;
58632} cvmx_pip_prt_cfgx_t;
58633
58634
58635/**
58636 * cvmx_pip_prt_tag#
58637 *
58638 * PIP_PRT_TAGX = Per port config information
58639 *
58640 */
58641typedef union
58642{
58643    uint64_t u64;
58644    struct cvmx_pip_prt_tagx_s
58645    {
58646#if __BYTE_ORDER == __BIG_ENDIAN
58647        uint64_t reserved_40_63          : 24;
58648        uint64_t grptagbase              : 4;       /**< Offset to use when computing group from tag bits
58649                                                         when GRPTAG is set.
58650                                                         (PASS2 only) */
58651        uint64_t grptagmask              : 4;       /**< Which bits of the tag to exclude when computing
58652                                                         group when GRPTAG is set.
58653                                                         (PASS2 only) */
58654        uint64_t grptag                  : 1;       /**< When set, use the lower bit of the tag to compute
58655                                                         the group in the work queue entry
58656                                                         GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE
58657                                                         (PASS2 only) */
58658        uint64_t grptag_mskip            : 1;       /**< When set, GRPTAG will be used regardless if the
58659                                                         packet IS_IP. */
58660        uint64_t tag_mode                : 2;       /**< Which tag algorithm to use
58661                                                         0 = always use tuple tag algorithm
58662                                                         1 = always use mask tag algorithm
58663                                                         2 = if packet is IP, use tuple else use mask
58664                                                         3 = tuple XOR mask
58665                                                         (PASS2 only) */
58666        uint64_t inc_vs                  : 2;       /**< determines the VLAN ID (VID) to be included in
58667                                                         tuple tag when VLAN stacking is detected
58668                                                         0 = do not include VID in tuple tag generation
58669                                                         1 = include VID (VLAN0) in hash
58670                                                         2 = include VID (VLAN1) in hash
58671                                                         3 = include VID ([VLAN0,VLAN1]) in hash
58672                                                         (PASS2 only) */
58673        uint64_t inc_vlan                : 1;       /**< when set, the VLAN ID is included in tuple tag
58674                                                         when VLAN stacking is not detected
58675                                                         0 = do not include VID in tuple tag generation
58676                                                         1 = include VID in hash
58677                                                         (PASS2 only) */
58678        uint64_t inc_prt_flag            : 1;       /**< sets whether the port is included in tuple tag */
58679        uint64_t ip6_dprt_flag           : 1;       /**< sets whether the TCP/UDP dst port is
58680                                                         included in tuple tag for IPv6 packets */
58681        uint64_t ip4_dprt_flag           : 1;       /**< sets whether the TCP/UDP dst port is
58682                                                         included in tuple tag for IPv4 */
58683        uint64_t ip6_sprt_flag           : 1;       /**< sets whether the TCP/UDP src port is
58684                                                         included in tuple tag for IPv6 packets */
58685        uint64_t ip4_sprt_flag           : 1;       /**< sets whether the TCP/UDP src port is
58686                                                         included in tuple tag for IPv4 */
58687        uint64_t ip6_nxth_flag           : 1;       /**< sets whether ipv6 includes next header in tuple
58688                                                         tag hash */
58689        uint64_t ip4_pctl_flag           : 1;       /**< sets whether ipv4 includes protocol in tuple
58690                                                         tag hash */
58691        uint64_t ip6_dst_flag            : 1;       /**< sets whether ipv6 includes dst address in tuple
58692                                                         tag hash */
58693        uint64_t ip4_dst_flag            : 1;       /**< sets whether ipv4 includes dst address in tuple
58694                                                         tag hash */
58695        uint64_t ip6_src_flag            : 1;       /**< sets whether ipv6 includes src address in tuple
58696                                                         tag hash */
58697        uint64_t ip4_src_flag            : 1;       /**< sets whether ipv4 includes src address in tuple
58698                                                         tag hash */
58699        cvmx_pow_tag_type_t tcp6_tag_type : 2;      /**< sets the tag_type of a TCP packet (IPv6)
58700                                                         0 = ordered tags
58701                                                         1 = atomic tags
58702                                                         2 = Null tags */
58703        cvmx_pow_tag_type_t tcp4_tag_type : 2;      /**< sets the tag_type of a TCP packet (IPv4)
58704                                                         0 = ordered tags
58705                                                         1 = atomic tags
58706                                                         2 = Null tags */
58707        cvmx_pow_tag_type_t ip6_tag_type : 2;       /**< sets whether IPv6 packet tag type
58708                                                         0 = ordered tags
58709                                                         1 = atomic tags
58710                                                         2 = Null tags */
58711        cvmx_pow_tag_type_t ip4_tag_type : 2;       /**< sets whether IPv4 packet tag type
58712                                                         0 = ordered tags
58713                                                         1 = atomic tags
58714                                                         2 = Null tags */
58715        cvmx_pow_tag_type_t non_tag_type : 2;       /**< sets whether non-IP packet tag type
58716                                                         0 = ordered tags
58717                                                         1 = atomic tags
58718                                                         2 = Null tags */
58719        uint64_t grp                     : 4;       /**< 4-bit value indicating the group to schedule to */
58720#else
58721        uint64_t grp                     : 4;
58722        cvmx_pow_tag_type_t non_tag_type : 2;
58723        cvmx_pow_tag_type_t ip4_tag_type : 2;
58724        cvmx_pow_tag_type_t ip6_tag_type : 2;
58725        cvmx_pow_tag_type_t tcp4_tag_type : 2;
58726        cvmx_pow_tag_type_t tcp6_tag_type : 2;
58727        uint64_t ip4_src_flag            : 1;
58728        uint64_t ip6_src_flag            : 1;
58729        uint64_t ip4_dst_flag            : 1;
58730        uint64_t ip6_dst_flag            : 1;
58731        uint64_t ip4_pctl_flag           : 1;
58732        uint64_t ip6_nxth_flag           : 1;
58733        uint64_t ip4_sprt_flag           : 1;
58734        uint64_t ip6_sprt_flag           : 1;
58735        uint64_t ip4_dprt_flag           : 1;
58736        uint64_t ip6_dprt_flag           : 1;
58737        uint64_t inc_prt_flag            : 1;
58738        uint64_t inc_vlan                : 1;
58739        uint64_t inc_vs                  : 2;
58740        uint64_t tag_mode                : 2;
58741        uint64_t grptag_mskip            : 1;
58742        uint64_t grptag                  : 1;
58743        uint64_t grptagmask              : 4;
58744        uint64_t grptagbase              : 4;
58745        uint64_t reserved_40_63          : 24;
58746#endif
58747    } s;
58748    struct cvmx_pip_prt_tagx_cn30xx
58749    {
58750#if __BYTE_ORDER == __BIG_ENDIAN
58751        uint64_t reserved_40_63          : 24;
58752        uint64_t grptagbase              : 4;       /**< Offset to use when computing group from tag bits
58753                                                         when GRPTAG is set. */
58754        uint64_t grptagmask              : 4;       /**< Which bits of the tag to exclude when computing
58755                                                         group when GRPTAG is set. */
58756        uint64_t grptag                  : 1;       /**< When set, use the lower bit of the tag to compute
58757                                                         the group in the work queue entry
58758                                                         GRP = WQE[TAG[3:0]] & ~GRPTAGMASK + GRPTAGBASE */
58759        uint64_t reserved_30_30          : 1;
58760        uint64_t tag_mode                : 2;       /**< Which tag algorithm to use
58761                                                         0 = always use tuple tag algorithm
58762                                                         1 = always use mask tag algorithm
58763                                                         2 = if packet is IP, use tuple else use mask
58764                                                         3 = tuple XOR mask */
58765        uint64_t inc_vs                  : 2;       /**< determines the VLAN ID (VID) to be included in
58766                                                         tuple tag when VLAN stacking is detected
58767                                                         0 = do not include VID in tuple tag generation
58768                                                         1 = include VID (VLAN0) in hash
58769                                                         2 = include VID (VLAN1) in hash
58770                                                         3 = include VID ([VLAN0,VLAN1]) in hash */
58771        uint64_t inc_vlan                : 1;       /**< when set, the VLAN ID is included in tuple tag
58772                                                         when VLAN stacking is not detected
58773                                                         0 = do not include VID in tuple tag generation
58774                                                         1 = include VID in hash */
58775        uint64_t inc_prt_flag            : 1;       /**< sets whether the port is included in tuple tag */
58776        uint64_t ip6_dprt_flag           : 1;       /**< sets whether the TCP/UDP dst port is
58777                                                         included in tuple tag for IPv6 packets */
58778        uint64_t ip4_dprt_flag           : 1;       /**< sets whether the TCP/UDP dst port is
58779                                                         included in tuple tag for IPv4 */
58780        uint64_t ip6_sprt_flag           : 1;       /**< sets whether the TCP/UDP src port is
58781                                                         included in tuple tag for IPv6 packets */
58782        uint64_t ip4_sprt_flag           : 1;       /**< sets whether the TCP/UDP src port is
58783                                                         included in tuple tag for IPv4 */
58784        uint64_t ip6_nxth_flag           : 1;       /**< sets whether ipv6 includes next header in tuple
58785                                                         tag hash */
58786        uint64_t ip4_pctl_flag           : 1;       /**< sets whether ipv4 includes protocol in tuple
58787                                                         tag hash */
58788        uint64_t ip6_dst_flag            : 1;       /**< sets whether ipv6 includes dst address in tuple
58789                                                         tag hash */
58790        uint64_t ip4_dst_flag            : 1;       /**< sets whether ipv4 includes dst address in tuple
58791                                                         tag hash */
58792        uint64_t ip6_src_flag            : 1;       /**< sets whether ipv6 includes src address in tuple
58793                                                         tag hash */
58794        uint64_t ip4_src_flag            : 1;       /**< sets whether ipv4 includes src address in tuple
58795                                                         tag hash */
58796        cvmx_pow_tag_type_t tcp6_tag_type : 2;      /**< sets the tag_type of a TCP packet (IPv6)
58797                                                         0 = ordered tags
58798                                                         1 = atomic tags
58799                                                         2 = Null tags */
58800        cvmx_pow_tag_type_t tcp4_tag_type : 2;      /**< sets the tag_type of a TCP packet (IPv4)
58801                                                         0 = ordered tags
58802                                                         1 = atomic tags
58803                                                         2 = Null tags */
58804        cvmx_pow_tag_type_t ip6_tag_type : 2;       /**< sets whether IPv6 packet tag type
58805                                                         0 = ordered tags
58806                                                         1 = atomic tags
58807                                                         2 = Null tags */
58808        cvmx_pow_tag_type_t ip4_tag_type : 2;       /**< sets whether IPv4 packet tag type
58809                                                         0 = ordered tags
58810                                                         1 = atomic tags
58811                                                         2 = Null tags */
58812        cvmx_pow_tag_type_t non_tag_type : 2;       /**< sets whether non-IP packet tag type
58813                                                         0 = ordered tags
58814                                                         1 = atomic tags
58815                                                         2 = Null tags */
58816        uint64_t grp                     : 4;       /**< 4-bit value indicating the group to schedule to */
58817#else
58818        uint64_t grp                     : 4;
58819        cvmx_pow_tag_type_t non_tag_type : 2;
58820        cvmx_pow_tag_type_t ip4_tag_type : 2;
58821        cvmx_pow_tag_type_t ip6_tag_type : 2;
58822        cvmx_pow_tag_type_t tcp4_tag_type : 2;
58823        cvmx_pow_tag_type_t tcp6_tag_type : 2;
58824        uint64_t ip4_src_flag            : 1;
58825        uint64_t ip6_src_flag            : 1;
58826        uint64_t ip4_dst_flag            : 1;
58827        uint64_t ip6_dst_flag            : 1;
58828        uint64_t ip4_pctl_flag           : 1;
58829        uint64_t ip6_nxth_flag           : 1;
58830        uint64_t ip4_sprt_flag           : 1;
58831        uint64_t ip6_sprt_flag           : 1;
58832        uint64_t ip4_dprt_flag           : 1;
58833        uint64_t ip6_dprt_flag           : 1;
58834        uint64_t inc_prt_flag            : 1;
58835        uint64_t inc_vlan                : 1;
58836        uint64_t inc_vs                  : 2;
58837        uint64_t tag_mode                : 2;
58838        uint64_t reserved_30_30          : 1;
58839        uint64_t grptag                  : 1;
58840        uint64_t grptagmask              : 4;
58841        uint64_t grptagbase              : 4;
58842        uint64_t reserved_40_63          : 24;
58843#endif
58844    } cn30xx;
58845    struct cvmx_pip_prt_tagx_cn30xx      cn31xx;
58846    struct cvmx_pip_prt_tagx_cn30xx      cn38xx;
58847    struct cvmx_pip_prt_tagx_cn30xx      cn38xxp2;
58848    struct cvmx_pip_prt_tagx_s           cn50xx;
58849    struct cvmx_pip_prt_tagx_s           cn52xx;
58850    struct cvmx_pip_prt_tagx_s           cn52xxp1;
58851    struct cvmx_pip_prt_tagx_s           cn56xx;
58852    struct cvmx_pip_prt_tagx_s           cn56xxp1;
58853    struct cvmx_pip_prt_tagx_s           cn58xx;
58854    struct cvmx_pip_prt_tagx_s           cn58xxp1;
58855} cvmx_pip_prt_tagx_t;
58856
58857
58858/**
58859 * cvmx_pip_qos_diff#
58860 *
58861 * PIP_QOS_DIFFX = QOS Diffserv Tables
58862 *
58863 */
58864typedef union
58865{
58866    uint64_t u64;
58867    struct cvmx_pip_qos_diffx_s
58868    {
58869#if __BYTE_ORDER == __BIG_ENDIAN
58870        uint64_t reserved_3_63           : 61;
58871        uint64_t qos                     : 3;       /**< Diffserv QOS level */
58872#else
58873        uint64_t qos                     : 3;
58874        uint64_t reserved_3_63           : 61;
58875#endif
58876    } s;
58877    struct cvmx_pip_qos_diffx_s          cn30xx;
58878    struct cvmx_pip_qos_diffx_s          cn31xx;
58879    struct cvmx_pip_qos_diffx_s          cn38xx;
58880    struct cvmx_pip_qos_diffx_s          cn38xxp2;
58881    struct cvmx_pip_qos_diffx_s          cn50xx;
58882    struct cvmx_pip_qos_diffx_s          cn52xx;
58883    struct cvmx_pip_qos_diffx_s          cn52xxp1;
58884    struct cvmx_pip_qos_diffx_s          cn56xx;
58885    struct cvmx_pip_qos_diffx_s          cn56xxp1;
58886    struct cvmx_pip_qos_diffx_s          cn58xx;
58887    struct cvmx_pip_qos_diffx_s          cn58xxp1;
58888} cvmx_pip_qos_diffx_t;
58889
58890
58891/**
58892 * cvmx_pip_qos_vlan#
58893 *
58894 * PIP_QOS_VLANX = QOS VLAN Tables
58895 *
58896 * If the PIP indentifies a packet to be DSA/VLAN tagged, then the QOS
58897 * can be set based on the DSA/VLAN user priority.  These eight register
58898 * comprise the QOS values for all DSA/VLAN user priority values.
58899 */
58900typedef union
58901{
58902    uint64_t u64;
58903    struct cvmx_pip_qos_vlanx_s
58904    {
58905#if __BYTE_ORDER == __BIG_ENDIAN
58906        uint64_t reserved_7_63           : 57;
58907        uint64_t qos1                    : 3;       /**< DSA/VLAN QOS level
58908                                                         Selected when PIP_PRT_CFGx[QOS_VSEL] = 1
58909                                                         (56xx pass2 only) */
58910        uint64_t reserved_3_3            : 1;
58911        uint64_t qos                     : 3;       /**< VLAN QOS level */
58912#else
58913        uint64_t qos                     : 3;
58914        uint64_t reserved_3_3            : 1;
58915        uint64_t qos1                    : 3;
58916        uint64_t reserved_7_63           : 57;
58917#endif
58918    } s;
58919    struct cvmx_pip_qos_vlanx_cn30xx
58920    {
58921#if __BYTE_ORDER == __BIG_ENDIAN
58922        uint64_t reserved_3_63           : 61;
58923        uint64_t qos                     : 3;       /**< VLAN QOS level */
58924#else
58925        uint64_t qos                     : 3;
58926        uint64_t reserved_3_63           : 61;
58927#endif
58928    } cn30xx;
58929    struct cvmx_pip_qos_vlanx_cn30xx     cn31xx;
58930    struct cvmx_pip_qos_vlanx_cn30xx     cn38xx;
58931    struct cvmx_pip_qos_vlanx_cn30xx     cn38xxp2;
58932    struct cvmx_pip_qos_vlanx_cn30xx     cn50xx;
58933    struct cvmx_pip_qos_vlanx_s          cn52xx;
58934    struct cvmx_pip_qos_vlanx_s          cn52xxp1;
58935    struct cvmx_pip_qos_vlanx_s          cn56xx;
58936    struct cvmx_pip_qos_vlanx_cn30xx     cn56xxp1;
58937    struct cvmx_pip_qos_vlanx_cn30xx     cn58xx;
58938    struct cvmx_pip_qos_vlanx_cn30xx     cn58xxp1;
58939} cvmx_pip_qos_vlanx_t;
58940
58941
58942/**
58943 * cvmx_pip_qos_watch#
58944 *
58945 * PIP_QOS_WATCHX = QOS Watcher Tables
58946 *
58947 * Sets up the Configuration CSRs for the four QOS Watchers.
58948 * Each Watcher can be set to look for a specific protocol,
58949 * TCP/UDP destination port, or Ethertype to override the
58950 * default QOS value.
58951 */
58952typedef union
58953{
58954    uint64_t u64;
58955    struct cvmx_pip_qos_watchx_s
58956    {
58957#if __BYTE_ORDER == __BIG_ENDIAN
58958        uint64_t reserved_48_63          : 16;
58959        uint64_t mask                    : 16;      /**< Mask off a range of values (PASS2 only) */
58960        uint64_t reserved_28_31          : 4;
58961        uint64_t grp                     : 4;       /**< The GRP number of the watcher (PASS2 only) */
58962        uint64_t reserved_23_23          : 1;
58963        uint64_t qos                     : 3;       /**< The QOS level of the watcher */
58964        uint64_t reserved_19_19          : 1;
58965        cvmx_pip_qos_watch_types match_type : 3;    /**< The field for the watcher match against
58966                                                         0 = disable across all ports
58967                                                         1 = protocol (ipv4)
58968                                                           = next_header (ipv6)
58969                                                         2 = TCP destination port
58970                                                         3 = UDP destination port */
58971        uint64_t match_value             : 16;      /**< The value to watch for */
58972#else
58973        uint64_t match_value             : 16;
58974        cvmx_pip_qos_watch_types match_type : 3;
58975        uint64_t reserved_19_19          : 1;
58976        uint64_t qos                     : 3;
58977        uint64_t reserved_23_23          : 1;
58978        uint64_t grp                     : 4;
58979        uint64_t reserved_28_31          : 4;
58980        uint64_t mask                    : 16;
58981        uint64_t reserved_48_63          : 16;
58982#endif
58983    } s;
58984    struct cvmx_pip_qos_watchx_cn30xx
58985    {
58986#if __BYTE_ORDER == __BIG_ENDIAN
58987        uint64_t reserved_48_63          : 16;
58988        uint64_t mask                    : 16;      /**< Mask off a range of values */
58989        uint64_t reserved_28_31          : 4;
58990        uint64_t grp                     : 4;       /**< The GRP number of the watcher */
58991        uint64_t reserved_23_23          : 1;
58992        uint64_t qos                     : 3;       /**< The QOS level of the watcher */
58993        uint64_t reserved_18_19          : 2;
58994        cvmx_pip_qos_watch_types match_type : 2;    /**< The field for the watcher match against
58995                                                         0 = disable across all ports
58996                                                         1 = protocol (ipv4)
58997                                                           = next_header (ipv6)
58998                                                         2 = TCP destination port
58999                                                         3 = UDP destination port */
59000        uint64_t match_value             : 16;      /**< The value to watch for */
59001#else
59002        uint64_t match_value             : 16;
59003        cvmx_pip_qos_watch_types match_type : 2;
59004        uint64_t reserved_18_19          : 2;
59005        uint64_t qos                     : 3;
59006        uint64_t reserved_23_23          : 1;
59007        uint64_t grp                     : 4;
59008        uint64_t reserved_28_31          : 4;
59009        uint64_t mask                    : 16;
59010        uint64_t reserved_48_63          : 16;
59011#endif
59012    } cn30xx;
59013    struct cvmx_pip_qos_watchx_cn30xx    cn31xx;
59014    struct cvmx_pip_qos_watchx_cn30xx    cn38xx;
59015    struct cvmx_pip_qos_watchx_cn30xx    cn38xxp2;
59016    struct cvmx_pip_qos_watchx_s         cn50xx;
59017    struct cvmx_pip_qos_watchx_s         cn52xx;
59018    struct cvmx_pip_qos_watchx_s         cn52xxp1;
59019    struct cvmx_pip_qos_watchx_s         cn56xx;
59020    struct cvmx_pip_qos_watchx_s         cn56xxp1;
59021    struct cvmx_pip_qos_watchx_cn30xx    cn58xx;
59022    struct cvmx_pip_qos_watchx_cn30xx    cn58xxp1;
59023} cvmx_pip_qos_watchx_t;
59024
59025
59026/**
59027 * cvmx_pip_raw_word
59028 *
59029 * PIP_RAW_WORD = The RAW Word2 of the workQ entry.
59030 *
59031 * The RAW Word2 to be inserted into the workQ entry of RAWFULL packets.
59032 */
59033typedef union
59034{
59035    uint64_t u64;
59036    struct cvmx_pip_raw_word_s
59037    {
59038#if __BYTE_ORDER == __BIG_ENDIAN
59039        uint64_t reserved_56_63          : 8;
59040        uint64_t word                    : 56;      /**< Word2 of the workQ entry
59041                                                         The 8-bit bufs field is still set by HW (IPD) */
59042#else
59043        uint64_t word                    : 56;
59044        uint64_t reserved_56_63          : 8;
59045#endif
59046    } s;
59047    struct cvmx_pip_raw_word_s           cn30xx;
59048    struct cvmx_pip_raw_word_s           cn31xx;
59049    struct cvmx_pip_raw_word_s           cn38xx;
59050    struct cvmx_pip_raw_word_s           cn38xxp2;
59051    struct cvmx_pip_raw_word_s           cn50xx;
59052    struct cvmx_pip_raw_word_s           cn52xx;
59053    struct cvmx_pip_raw_word_s           cn52xxp1;
59054    struct cvmx_pip_raw_word_s           cn56xx;
59055    struct cvmx_pip_raw_word_s           cn56xxp1;
59056    struct cvmx_pip_raw_word_s           cn58xx;
59057    struct cvmx_pip_raw_word_s           cn58xxp1;
59058} cvmx_pip_raw_word_t;
59059
59060
59061/**
59062 * cvmx_pip_sft_rst
59063 *
59064 * PIP_SFT_RST = PIP Soft Reset
59065 *
59066 * When written to a '1', resets the pip block
59067 *
59068 * Notes:
59069 * When RST is set to a '1' by SW, PIP will get a short reset pulse (3 cycles
59070 * in duration).  Although this will reset much of PIP's internal state, some
59071 * CSRs will not reset.
59072 *
59073 * . PIP_BIST_STATUS
59074 * . PIP_STAT0_PRT*
59075 * . PIP_STAT1_PRT*
59076 * . PIP_STAT2_PRT*
59077 * . PIP_STAT3_PRT*
59078 * . PIP_STAT4_PRT*
59079 * . PIP_STAT5_PRT*
59080 * . PIP_STAT6_PRT*
59081 * . PIP_STAT7_PRT*
59082 * . PIP_STAT8_PRT*
59083 * . PIP_STAT9_PRT*
59084 * . PIP_STAT_INB_PKTS*
59085 * . PIP_STAT_INB_OCTS*
59086 * . PIP_STAT_INB_ERRS*
59087 * . PIP_TAG_INC*
59088 */
59089typedef union
59090{
59091    uint64_t u64;
59092    struct cvmx_pip_sft_rst_s
59093    {
59094#if __BYTE_ORDER == __BIG_ENDIAN
59095        uint64_t reserved_1_63           : 63;
59096        uint64_t rst                     : 1;       /**< Soft Reset */
59097#else
59098        uint64_t rst                     : 1;
59099        uint64_t reserved_1_63           : 63;
59100#endif
59101    } s;
59102    struct cvmx_pip_sft_rst_s            cn30xx;
59103    struct cvmx_pip_sft_rst_s            cn31xx;
59104    struct cvmx_pip_sft_rst_s            cn38xx;
59105    struct cvmx_pip_sft_rst_s            cn50xx;
59106    struct cvmx_pip_sft_rst_s            cn52xx;
59107    struct cvmx_pip_sft_rst_s            cn52xxp1;
59108    struct cvmx_pip_sft_rst_s            cn56xx;
59109    struct cvmx_pip_sft_rst_s            cn56xxp1;
59110    struct cvmx_pip_sft_rst_s            cn58xx;
59111    struct cvmx_pip_sft_rst_s            cn58xxp1;
59112} cvmx_pip_sft_rst_t;
59113
59114
59115/**
59116 * cvmx_pip_stat0_prt#
59117 *
59118 * PIP Statistics Counters
59119 *
59120 * Note: special stat counter behavior
59121 *
59122 * 1) Read and write operations must arbitrate for the statistics resources
59123 *     along with the packet engines which are incrementing the counters.
59124 *     In order to not drop packet information, the packet HW is always a
59125 *     higher priority and the CSR requests will only be satisified when
59126 *     there are idle cycles.  This can potentially cause long delays if the
59127 *     system becomes full.
59128 *
59129 * 2) stat counters can be cleared in two ways.  If PIP_STAT_CTL[RDCLR] is
59130 *     set, then all read accesses will clear the register.  In addition,
59131 *     any write to a stats register will also reset the register to zero.
59132 *     Please note that the clearing operations must obey rule \#1 above.
59133 *
59134 * 3) all counters are wrapping - software must ensure they are read periodically
59135 * PIP_STAT0_PRT = PIP_STAT_DRP_PKTS / PIP_STAT_DRP_OCTS
59136 */
59137typedef union
59138{
59139    uint64_t u64;
59140    struct cvmx_pip_stat0_prtx_s
59141    {
59142#if __BYTE_ORDER == __BIG_ENDIAN
59143        uint64_t drp_pkts                : 32;      /**< Inbound packets marked to be dropped by the IPD
59144                                                         QOS widget per port */
59145        uint64_t drp_octs                : 32;      /**< Inbound octets marked to be dropped by the IPD
59146                                                         QOS widget per port */
59147#else
59148        uint64_t drp_octs                : 32;
59149        uint64_t drp_pkts                : 32;
59150#endif
59151    } s;
59152    struct cvmx_pip_stat0_prtx_s         cn30xx;
59153    struct cvmx_pip_stat0_prtx_s         cn31xx;
59154    struct cvmx_pip_stat0_prtx_s         cn38xx;
59155    struct cvmx_pip_stat0_prtx_s         cn38xxp2;
59156    struct cvmx_pip_stat0_prtx_s         cn50xx;
59157    struct cvmx_pip_stat0_prtx_s         cn52xx;
59158    struct cvmx_pip_stat0_prtx_s         cn52xxp1;
59159    struct cvmx_pip_stat0_prtx_s         cn56xx;
59160    struct cvmx_pip_stat0_prtx_s         cn56xxp1;
59161    struct cvmx_pip_stat0_prtx_s         cn58xx;
59162    struct cvmx_pip_stat0_prtx_s         cn58xxp1;
59163} cvmx_pip_stat0_prtx_t;
59164
59165
59166/**
59167 * cvmx_pip_stat1_prt#
59168 *
59169 * PIP_STAT1_PRTX = PIP_STAT_OCTS
59170 *
59171 */
59172typedef union
59173{
59174    uint64_t u64;
59175    struct cvmx_pip_stat1_prtx_s
59176    {
59177#if __BYTE_ORDER == __BIG_ENDIAN
59178        uint64_t reserved_48_63          : 16;
59179        uint64_t octs                    : 48;      /**< Number of octets received by PIP (good and bad) */
59180#else
59181        uint64_t octs                    : 48;
59182        uint64_t reserved_48_63          : 16;
59183#endif
59184    } s;
59185    struct cvmx_pip_stat1_prtx_s         cn30xx;
59186    struct cvmx_pip_stat1_prtx_s         cn31xx;
59187    struct cvmx_pip_stat1_prtx_s         cn38xx;
59188    struct cvmx_pip_stat1_prtx_s         cn38xxp2;
59189    struct cvmx_pip_stat1_prtx_s         cn50xx;
59190    struct cvmx_pip_stat1_prtx_s         cn52xx;
59191    struct cvmx_pip_stat1_prtx_s         cn52xxp1;
59192    struct cvmx_pip_stat1_prtx_s         cn56xx;
59193    struct cvmx_pip_stat1_prtx_s         cn56xxp1;
59194    struct cvmx_pip_stat1_prtx_s         cn58xx;
59195    struct cvmx_pip_stat1_prtx_s         cn58xxp1;
59196} cvmx_pip_stat1_prtx_t;
59197
59198
59199/**
59200 * cvmx_pip_stat2_prt#
59201 *
59202 * PIP_STAT2_PRTX = PIP_STAT_PKTS     / PIP_STAT_RAW
59203 *
59204 */
59205typedef union
59206{
59207    uint64_t u64;
59208    struct cvmx_pip_stat2_prtx_s
59209    {
59210#if __BYTE_ORDER == __BIG_ENDIAN
59211        uint64_t pkts                    : 32;      /**< Number of packets processed by PIP */
59212        uint64_t raw                     : 32;      /**< RAWFULL + RAWSCH Packets without an L1/L2 error
59213                                                         received by PIP per port */
59214#else
59215        uint64_t raw                     : 32;
59216        uint64_t pkts                    : 32;
59217#endif
59218    } s;
59219    struct cvmx_pip_stat2_prtx_s         cn30xx;
59220    struct cvmx_pip_stat2_prtx_s         cn31xx;
59221    struct cvmx_pip_stat2_prtx_s         cn38xx;
59222    struct cvmx_pip_stat2_prtx_s         cn38xxp2;
59223    struct cvmx_pip_stat2_prtx_s         cn50xx;
59224    struct cvmx_pip_stat2_prtx_s         cn52xx;
59225    struct cvmx_pip_stat2_prtx_s         cn52xxp1;
59226    struct cvmx_pip_stat2_prtx_s         cn56xx;
59227    struct cvmx_pip_stat2_prtx_s         cn56xxp1;
59228    struct cvmx_pip_stat2_prtx_s         cn58xx;
59229    struct cvmx_pip_stat2_prtx_s         cn58xxp1;
59230} cvmx_pip_stat2_prtx_t;
59231
59232
59233/**
59234 * cvmx_pip_stat3_prt#
59235 *
59236 * PIP_STAT3_PRTX = PIP_STAT_BCST     / PIP_STAT_MCST
59237 *
59238 */
59239typedef union
59240{
59241    uint64_t u64;
59242    struct cvmx_pip_stat3_prtx_s
59243    {
59244#if __BYTE_ORDER == __BIG_ENDIAN
59245        uint64_t bcst                    : 32;      /**< Number of indentified L2 broadcast packets
59246                                                         Does not include multicast packets
59247                                                         Only includes packets whose parse mode is
59248                                                         SKIP_TO_L2. */
59249        uint64_t mcst                    : 32;      /**< Number of indentified L2 multicast packets
59250                                                         Does not include broadcast packets
59251                                                         Only includes packets whose parse mode is
59252                                                         SKIP_TO_L2. */
59253#else
59254        uint64_t mcst                    : 32;
59255        uint64_t bcst                    : 32;
59256#endif
59257    } s;
59258    struct cvmx_pip_stat3_prtx_s         cn30xx;
59259    struct cvmx_pip_stat3_prtx_s         cn31xx;
59260    struct cvmx_pip_stat3_prtx_s         cn38xx;
59261    struct cvmx_pip_stat3_prtx_s         cn38xxp2;
59262    struct cvmx_pip_stat3_prtx_s         cn50xx;
59263    struct cvmx_pip_stat3_prtx_s         cn52xx;
59264    struct cvmx_pip_stat3_prtx_s         cn52xxp1;
59265    struct cvmx_pip_stat3_prtx_s         cn56xx;
59266    struct cvmx_pip_stat3_prtx_s         cn56xxp1;
59267    struct cvmx_pip_stat3_prtx_s         cn58xx;
59268    struct cvmx_pip_stat3_prtx_s         cn58xxp1;
59269} cvmx_pip_stat3_prtx_t;
59270
59271
59272/**
59273 * cvmx_pip_stat4_prt#
59274 *
59275 * PIP_STAT4_PRTX = PIP_STAT_HIST1    / PIP_STAT_HIST0
59276 *
59277 */
59278typedef union
59279{
59280    uint64_t u64;
59281    struct cvmx_pip_stat4_prtx_s
59282    {
59283#if __BYTE_ORDER == __BIG_ENDIAN
59284        uint64_t h65to127                : 32;      /**< Number of 65-127B packets */
59285        uint64_t h64                     : 32;      /**< Number of 1-64B packets */
59286#else
59287        uint64_t h64                     : 32;
59288        uint64_t h65to127                : 32;
59289#endif
59290    } s;
59291    struct cvmx_pip_stat4_prtx_s         cn30xx;
59292    struct cvmx_pip_stat4_prtx_s         cn31xx;
59293    struct cvmx_pip_stat4_prtx_s         cn38xx;
59294    struct cvmx_pip_stat4_prtx_s         cn38xxp2;
59295    struct cvmx_pip_stat4_prtx_s         cn50xx;
59296    struct cvmx_pip_stat4_prtx_s         cn52xx;
59297    struct cvmx_pip_stat4_prtx_s         cn52xxp1;
59298    struct cvmx_pip_stat4_prtx_s         cn56xx;
59299    struct cvmx_pip_stat4_prtx_s         cn56xxp1;
59300    struct cvmx_pip_stat4_prtx_s         cn58xx;
59301    struct cvmx_pip_stat4_prtx_s         cn58xxp1;
59302} cvmx_pip_stat4_prtx_t;
59303
59304
59305/**
59306 * cvmx_pip_stat5_prt#
59307 *
59308 * PIP_STAT5_PRTX = PIP_STAT_HIST3    / PIP_STAT_HIST2
59309 *
59310 */
59311typedef union
59312{
59313    uint64_t u64;
59314    struct cvmx_pip_stat5_prtx_s
59315    {
59316#if __BYTE_ORDER == __BIG_ENDIAN
59317        uint64_t h256to511               : 32;      /**< Number of 256-511B packets */
59318        uint64_t h128to255               : 32;      /**< Number of 128-255B packets */
59319#else
59320        uint64_t h128to255               : 32;
59321        uint64_t h256to511               : 32;
59322#endif
59323    } s;
59324    struct cvmx_pip_stat5_prtx_s         cn30xx;
59325    struct cvmx_pip_stat5_prtx_s         cn31xx;
59326    struct cvmx_pip_stat5_prtx_s         cn38xx;
59327    struct cvmx_pip_stat5_prtx_s         cn38xxp2;
59328    struct cvmx_pip_stat5_prtx_s         cn50xx;
59329    struct cvmx_pip_stat5_prtx_s         cn52xx;
59330    struct cvmx_pip_stat5_prtx_s         cn52xxp1;
59331    struct cvmx_pip_stat5_prtx_s         cn56xx;
59332    struct cvmx_pip_stat5_prtx_s         cn56xxp1;
59333    struct cvmx_pip_stat5_prtx_s         cn58xx;
59334    struct cvmx_pip_stat5_prtx_s         cn58xxp1;
59335} cvmx_pip_stat5_prtx_t;
59336
59337
59338/**
59339 * cvmx_pip_stat6_prt#
59340 *
59341 * PIP_STAT6_PRTX = PIP_STAT_HIST5    / PIP_STAT_HIST4
59342 *
59343 */
59344typedef union
59345{
59346    uint64_t u64;
59347    struct cvmx_pip_stat6_prtx_s
59348    {
59349#if __BYTE_ORDER == __BIG_ENDIAN
59350        uint64_t h1024to1518             : 32;      /**< Number of 1024-1518B packets */
59351        uint64_t h512to1023              : 32;      /**< Number of 512-1023B packets */
59352#else
59353        uint64_t h512to1023              : 32;
59354        uint64_t h1024to1518             : 32;
59355#endif
59356    } s;
59357    struct cvmx_pip_stat6_prtx_s         cn30xx;
59358    struct cvmx_pip_stat6_prtx_s         cn31xx;
59359    struct cvmx_pip_stat6_prtx_s         cn38xx;
59360    struct cvmx_pip_stat6_prtx_s         cn38xxp2;
59361    struct cvmx_pip_stat6_prtx_s         cn50xx;
59362    struct cvmx_pip_stat6_prtx_s         cn52xx;
59363    struct cvmx_pip_stat6_prtx_s         cn52xxp1;
59364    struct cvmx_pip_stat6_prtx_s         cn56xx;
59365    struct cvmx_pip_stat6_prtx_s         cn56xxp1;
59366    struct cvmx_pip_stat6_prtx_s         cn58xx;
59367    struct cvmx_pip_stat6_prtx_s         cn58xxp1;
59368} cvmx_pip_stat6_prtx_t;
59369
59370
59371/**
59372 * cvmx_pip_stat7_prt#
59373 *
59374 * PIP_STAT7_PRTX = PIP_STAT_FCS      / PIP_STAT_HIST6
59375 *
59376 *
59377 * Notes:
59378 * FCS is not checked on the PCI ports 32..35.
59379 *
59380 */
59381typedef union
59382{
59383    uint64_t u64;
59384    struct cvmx_pip_stat7_prtx_s
59385    {
59386#if __BYTE_ORDER == __BIG_ENDIAN
59387        uint64_t fcs                     : 32;      /**< Number of packets with FCS or Align opcode errors */
59388        uint64_t h1519                   : 32;      /**< Number of 1519-max packets */
59389#else
59390        uint64_t h1519                   : 32;
59391        uint64_t fcs                     : 32;
59392#endif
59393    } s;
59394    struct cvmx_pip_stat7_prtx_s         cn30xx;
59395    struct cvmx_pip_stat7_prtx_s         cn31xx;
59396    struct cvmx_pip_stat7_prtx_s         cn38xx;
59397    struct cvmx_pip_stat7_prtx_s         cn38xxp2;
59398    struct cvmx_pip_stat7_prtx_s         cn50xx;
59399    struct cvmx_pip_stat7_prtx_s         cn52xx;
59400    struct cvmx_pip_stat7_prtx_s         cn52xxp1;
59401    struct cvmx_pip_stat7_prtx_s         cn56xx;
59402    struct cvmx_pip_stat7_prtx_s         cn56xxp1;
59403    struct cvmx_pip_stat7_prtx_s         cn58xx;
59404    struct cvmx_pip_stat7_prtx_s         cn58xxp1;
59405} cvmx_pip_stat7_prtx_t;
59406
59407
59408/**
59409 * cvmx_pip_stat8_prt#
59410 *
59411 * PIP_STAT8_PRTX = PIP_STAT_FRAG     / PIP_STAT_UNDER
59412 *
59413 *
59414 * Notes:
59415 * FCS is not checked on the PCI ports 32..35.
59416 *
59417 */
59418typedef union
59419{
59420    uint64_t u64;
59421    struct cvmx_pip_stat8_prtx_s
59422    {
59423#if __BYTE_ORDER == __BIG_ENDIAN
59424        uint64_t frag                    : 32;      /**< Number of packets with length < min and FCS error */
59425        uint64_t undersz                 : 32;      /**< Number of packets with length < min */
59426#else
59427        uint64_t undersz                 : 32;
59428        uint64_t frag                    : 32;
59429#endif
59430    } s;
59431    struct cvmx_pip_stat8_prtx_s         cn30xx;
59432    struct cvmx_pip_stat8_prtx_s         cn31xx;
59433    struct cvmx_pip_stat8_prtx_s         cn38xx;
59434    struct cvmx_pip_stat8_prtx_s         cn38xxp2;
59435    struct cvmx_pip_stat8_prtx_s         cn50xx;
59436    struct cvmx_pip_stat8_prtx_s         cn52xx;
59437    struct cvmx_pip_stat8_prtx_s         cn52xxp1;
59438    struct cvmx_pip_stat8_prtx_s         cn56xx;
59439    struct cvmx_pip_stat8_prtx_s         cn56xxp1;
59440    struct cvmx_pip_stat8_prtx_s         cn58xx;
59441    struct cvmx_pip_stat8_prtx_s         cn58xxp1;
59442} cvmx_pip_stat8_prtx_t;
59443
59444
59445/**
59446 * cvmx_pip_stat9_prt#
59447 *
59448 * PIP_STAT9_PRTX = PIP_STAT_JABBER   / PIP_STAT_OVER
59449 *
59450 *
59451 * Notes:
59452 * FCS is not checked on the PCI ports 32..35.
59453 *
59454 */
59455typedef union
59456{
59457    uint64_t u64;
59458    struct cvmx_pip_stat9_prtx_s
59459    {
59460#if __BYTE_ORDER == __BIG_ENDIAN
59461        uint64_t jabber                  : 32;      /**< Number of packets with length > max and FCS error */
59462        uint64_t oversz                  : 32;      /**< Number of packets with length > max */
59463#else
59464        uint64_t oversz                  : 32;
59465        uint64_t jabber                  : 32;
59466#endif
59467    } s;
59468    struct cvmx_pip_stat9_prtx_s         cn30xx;
59469    struct cvmx_pip_stat9_prtx_s         cn31xx;
59470    struct cvmx_pip_stat9_prtx_s         cn38xx;
59471    struct cvmx_pip_stat9_prtx_s         cn38xxp2;
59472    struct cvmx_pip_stat9_prtx_s         cn50xx;
59473    struct cvmx_pip_stat9_prtx_s         cn52xx;
59474    struct cvmx_pip_stat9_prtx_s         cn52xxp1;
59475    struct cvmx_pip_stat9_prtx_s         cn56xx;
59476    struct cvmx_pip_stat9_prtx_s         cn56xxp1;
59477    struct cvmx_pip_stat9_prtx_s         cn58xx;
59478    struct cvmx_pip_stat9_prtx_s         cn58xxp1;
59479} cvmx_pip_stat9_prtx_t;
59480
59481
59482/**
59483 * cvmx_pip_stat_ctl
59484 *
59485 * PIP_STAT_CTL = PIP's Stat Control Register
59486 *
59487 * Controls how the PIP statistics counters are handled.
59488 */
59489typedef union
59490{
59491    uint64_t u64;
59492    struct cvmx_pip_stat_ctl_s
59493    {
59494#if __BYTE_ORDER == __BIG_ENDIAN
59495        uint64_t reserved_1_63           : 63;
59496        uint64_t rdclr                   : 1;       /**< Stat registers are read and clear
59497                                                         0 = stat registers hold value when read
59498                                                         1 = stat registers are cleared when read */
59499#else
59500        uint64_t rdclr                   : 1;
59501        uint64_t reserved_1_63           : 63;
59502#endif
59503    } s;
59504    struct cvmx_pip_stat_ctl_s           cn30xx;
59505    struct cvmx_pip_stat_ctl_s           cn31xx;
59506    struct cvmx_pip_stat_ctl_s           cn38xx;
59507    struct cvmx_pip_stat_ctl_s           cn38xxp2;
59508    struct cvmx_pip_stat_ctl_s           cn50xx;
59509    struct cvmx_pip_stat_ctl_s           cn52xx;
59510    struct cvmx_pip_stat_ctl_s           cn52xxp1;
59511    struct cvmx_pip_stat_ctl_s           cn56xx;
59512    struct cvmx_pip_stat_ctl_s           cn56xxp1;
59513    struct cvmx_pip_stat_ctl_s           cn58xx;
59514    struct cvmx_pip_stat_ctl_s           cn58xxp1;
59515} cvmx_pip_stat_ctl_t;
59516
59517
59518/**
59519 * cvmx_pip_stat_inb_errs#
59520 *
59521 * PIP_STAT_INB_ERRSX = Inbound error packets received by PIP per port
59522 *
59523 * Inbound stats collect all data sent to PIP from all packet interfaces.
59524 * Its the raw counts of everything that comes into the block.  The counts
59525 * will reflect all error packets and packets dropped by the PKI RED engine.
59526 * These counts are intended for system debug, but could convey useful
59527 * information in production systems.
59528 */
59529typedef union
59530{
59531    uint64_t u64;
59532    struct cvmx_pip_stat_inb_errsx_s
59533    {
59534#if __BYTE_ORDER == __BIG_ENDIAN
59535        uint64_t reserved_16_63          : 48;
59536        uint64_t errs                    : 16;      /**< Number of packets with GMX/SPX/PCI errors
59537                                                         received by PIP */
59538#else
59539        uint64_t errs                    : 16;
59540        uint64_t reserved_16_63          : 48;
59541#endif
59542    } s;
59543    struct cvmx_pip_stat_inb_errsx_s     cn30xx;
59544    struct cvmx_pip_stat_inb_errsx_s     cn31xx;
59545    struct cvmx_pip_stat_inb_errsx_s     cn38xx;
59546    struct cvmx_pip_stat_inb_errsx_s     cn38xxp2;
59547    struct cvmx_pip_stat_inb_errsx_s     cn50xx;
59548    struct cvmx_pip_stat_inb_errsx_s     cn52xx;
59549    struct cvmx_pip_stat_inb_errsx_s     cn52xxp1;
59550    struct cvmx_pip_stat_inb_errsx_s     cn56xx;
59551    struct cvmx_pip_stat_inb_errsx_s     cn56xxp1;
59552    struct cvmx_pip_stat_inb_errsx_s     cn58xx;
59553    struct cvmx_pip_stat_inb_errsx_s     cn58xxp1;
59554} cvmx_pip_stat_inb_errsx_t;
59555
59556
59557/**
59558 * cvmx_pip_stat_inb_octs#
59559 *
59560 * PIP_STAT_INB_OCTSX = Inbound octets received by PIP per port
59561 *
59562 * Inbound stats collect all data sent to PIP from all packet interfaces.
59563 * Its the raw counts of everything that comes into the block.  The counts
59564 * will reflect all error packets and packets dropped by the PKI RED engine.
59565 * These counts are intended for system debug, but could convey useful
59566 * information in production systems.
59567 */
59568typedef union
59569{
59570    uint64_t u64;
59571    struct cvmx_pip_stat_inb_octsx_s
59572    {
59573#if __BYTE_ORDER == __BIG_ENDIAN
59574        uint64_t reserved_48_63          : 16;
59575        uint64_t octs                    : 48;      /**< Total number of octets from all packets received
59576                                                         by PIP */
59577#else
59578        uint64_t octs                    : 48;
59579        uint64_t reserved_48_63          : 16;
59580#endif
59581    } s;
59582    struct cvmx_pip_stat_inb_octsx_s     cn30xx;
59583    struct cvmx_pip_stat_inb_octsx_s     cn31xx;
59584    struct cvmx_pip_stat_inb_octsx_s     cn38xx;
59585    struct cvmx_pip_stat_inb_octsx_s     cn38xxp2;
59586    struct cvmx_pip_stat_inb_octsx_s     cn50xx;
59587    struct cvmx_pip_stat_inb_octsx_s     cn52xx;
59588    struct cvmx_pip_stat_inb_octsx_s     cn52xxp1;
59589    struct cvmx_pip_stat_inb_octsx_s     cn56xx;
59590    struct cvmx_pip_stat_inb_octsx_s     cn56xxp1;
59591    struct cvmx_pip_stat_inb_octsx_s     cn58xx;
59592    struct cvmx_pip_stat_inb_octsx_s     cn58xxp1;
59593} cvmx_pip_stat_inb_octsx_t;
59594
59595
59596/**
59597 * cvmx_pip_stat_inb_pkts#
59598 *
59599 * PIP_STAT_INB_PKTSX = Inbound packets received by PIP per port
59600 *
59601 * Inbound stats collect all data sent to PIP from all packet interfaces.
59602 * Its the raw counts of everything that comes into the block.  The counts
59603 * will reflect all error packets and packets dropped by the PKI RED engine.
59604 * These counts are intended for system debug, but could convey useful
59605 * information in production systems.
59606 */
59607typedef union
59608{
59609    uint64_t u64;
59610    struct cvmx_pip_stat_inb_pktsx_s
59611    {
59612#if __BYTE_ORDER == __BIG_ENDIAN
59613        uint64_t reserved_32_63          : 32;
59614        uint64_t pkts                    : 32;      /**< Number of packets without GMX/SPX/PCI errors
59615                                                         received by PIP */
59616#else
59617        uint64_t pkts                    : 32;
59618        uint64_t reserved_32_63          : 32;
59619#endif
59620    } s;
59621    struct cvmx_pip_stat_inb_pktsx_s     cn30xx;
59622    struct cvmx_pip_stat_inb_pktsx_s     cn31xx;
59623    struct cvmx_pip_stat_inb_pktsx_s     cn38xx;
59624    struct cvmx_pip_stat_inb_pktsx_s     cn38xxp2;
59625    struct cvmx_pip_stat_inb_pktsx_s     cn50xx;
59626    struct cvmx_pip_stat_inb_pktsx_s     cn52xx;
59627    struct cvmx_pip_stat_inb_pktsx_s     cn52xxp1;
59628    struct cvmx_pip_stat_inb_pktsx_s     cn56xx;
59629    struct cvmx_pip_stat_inb_pktsx_s     cn56xxp1;
59630    struct cvmx_pip_stat_inb_pktsx_s     cn58xx;
59631    struct cvmx_pip_stat_inb_pktsx_s     cn58xxp1;
59632} cvmx_pip_stat_inb_pktsx_t;
59633
59634
59635/**
59636 * cvmx_pip_tag_inc#
59637 *
59638 * PIP_TAG_INC = Which bytes to include in the new tag hash algorithm
59639 *
59640 * # $PIP_TAG_INCX = 0x300+X X=(0..63) RegType=(RSL) RtlReg=(pip_tag_inc_csr_direct_TestbuilderTask)
59641 */
59642typedef union
59643{
59644    uint64_t u64;
59645    struct cvmx_pip_tag_incx_s
59646    {
59647#if __BYTE_ORDER == __BIG_ENDIAN
59648        uint64_t reserved_8_63           : 56;
59649        uint64_t en                      : 8;       /**< Which bytes to include in mask tag algorithm
59650                                                         Broken into 4, 16-entry masks to cover 128B
59651                                                         PIP_PRT_CFG[TAG_INC] selects 1 of 4 to use
59652                                                         registers  0-15 map to PIP_PRT_CFG[TAG_INC] == 0
59653                                                         registers 16-31 map to PIP_PRT_CFG[TAG_INC] == 1
59654                                                         registers 32-47 map to PIP_PRT_CFG[TAG_INC] == 2
59655                                                         registers 48-63 map to PIP_PRT_CFG[TAG_INC] == 3
59656                                                         [7] coresponds to the MSB of the 8B word
59657                                                         [0] coresponds to the LSB of the 8B word
59658                                                         (PASS2 only) */
59659#else
59660        uint64_t en                      : 8;
59661        uint64_t reserved_8_63           : 56;
59662#endif
59663    } s;
59664    struct cvmx_pip_tag_incx_s           cn30xx;
59665    struct cvmx_pip_tag_incx_s           cn31xx;
59666    struct cvmx_pip_tag_incx_s           cn38xx;
59667    struct cvmx_pip_tag_incx_s           cn38xxp2;
59668    struct cvmx_pip_tag_incx_s           cn50xx;
59669    struct cvmx_pip_tag_incx_s           cn52xx;
59670    struct cvmx_pip_tag_incx_s           cn52xxp1;
59671    struct cvmx_pip_tag_incx_s           cn56xx;
59672    struct cvmx_pip_tag_incx_s           cn56xxp1;
59673    struct cvmx_pip_tag_incx_s           cn58xx;
59674    struct cvmx_pip_tag_incx_s           cn58xxp1;
59675} cvmx_pip_tag_incx_t;
59676
59677
59678/**
59679 * cvmx_pip_tag_mask
59680 *
59681 * PIP_TAG_MASK = Mask bit in the tag generation
59682 *
59683 */
59684typedef union
59685{
59686    uint64_t u64;
59687    struct cvmx_pip_tag_mask_s
59688    {
59689#if __BYTE_ORDER == __BIG_ENDIAN
59690        uint64_t reserved_16_63          : 48;
59691        uint64_t mask                    : 16;      /**< When set, MASK clears individual bits of lower 16
59692                                                         bits of the computed tag.  Does not effect RAW
59693                                                         or INSTR HDR packets. */
59694#else
59695        uint64_t mask                    : 16;
59696        uint64_t reserved_16_63          : 48;
59697#endif
59698    } s;
59699    struct cvmx_pip_tag_mask_s           cn30xx;
59700    struct cvmx_pip_tag_mask_s           cn31xx;
59701    struct cvmx_pip_tag_mask_s           cn38xx;
59702    struct cvmx_pip_tag_mask_s           cn38xxp2;
59703    struct cvmx_pip_tag_mask_s           cn50xx;
59704    struct cvmx_pip_tag_mask_s           cn52xx;
59705    struct cvmx_pip_tag_mask_s           cn52xxp1;
59706    struct cvmx_pip_tag_mask_s           cn56xx;
59707    struct cvmx_pip_tag_mask_s           cn56xxp1;
59708    struct cvmx_pip_tag_mask_s           cn58xx;
59709    struct cvmx_pip_tag_mask_s           cn58xxp1;
59710} cvmx_pip_tag_mask_t;
59711
59712
59713/**
59714 * cvmx_pip_tag_secret
59715 *
59716 * PIP_TAG_SECRET = Initial value in tag generation
59717 *
59718 * The source and destination IV's provide a mechanism for each Octeon to be unique.
59719 */
59720typedef union
59721{
59722    uint64_t u64;
59723    struct cvmx_pip_tag_secret_s
59724    {
59725#if __BYTE_ORDER == __BIG_ENDIAN
59726        uint64_t reserved_32_63          : 32;
59727        uint64_t dst                     : 16;      /**< Secret for the destination tuple tag CRC calc */
59728        uint64_t src                     : 16;      /**< Secret for the source tuple tag CRC calc */
59729#else
59730        uint64_t src                     : 16;
59731        uint64_t dst                     : 16;
59732        uint64_t reserved_32_63          : 32;
59733#endif
59734    } s;
59735    struct cvmx_pip_tag_secret_s         cn30xx;
59736    struct cvmx_pip_tag_secret_s         cn31xx;
59737    struct cvmx_pip_tag_secret_s         cn38xx;
59738    struct cvmx_pip_tag_secret_s         cn38xxp2;
59739    struct cvmx_pip_tag_secret_s         cn50xx;
59740    struct cvmx_pip_tag_secret_s         cn52xx;
59741    struct cvmx_pip_tag_secret_s         cn52xxp1;
59742    struct cvmx_pip_tag_secret_s         cn56xx;
59743    struct cvmx_pip_tag_secret_s         cn56xxp1;
59744    struct cvmx_pip_tag_secret_s         cn58xx;
59745    struct cvmx_pip_tag_secret_s         cn58xxp1;
59746} cvmx_pip_tag_secret_t;
59747
59748
59749/**
59750 * cvmx_pip_todo_entry
59751 *
59752 * PIP_TODO_ENTRY = Head entry of the Todo list (debug only)
59753 *
59754 * Summary of the current packet that has completed and waiting to be processed
59755 */
59756typedef union
59757{
59758    uint64_t u64;
59759    struct cvmx_pip_todo_entry_s
59760    {
59761#if __BYTE_ORDER == __BIG_ENDIAN
59762        uint64_t val                     : 1;       /**< Entry is valid */
59763        uint64_t reserved_62_62          : 1;
59764        uint64_t entry                   : 62;      /**< Todo list entry summary */
59765#else
59766        uint64_t entry                   : 62;
59767        uint64_t reserved_62_62          : 1;
59768        uint64_t val                     : 1;
59769#endif
59770    } s;
59771    struct cvmx_pip_todo_entry_s         cn30xx;
59772    struct cvmx_pip_todo_entry_s         cn31xx;
59773    struct cvmx_pip_todo_entry_s         cn38xx;
59774    struct cvmx_pip_todo_entry_s         cn38xxp2;
59775    struct cvmx_pip_todo_entry_s         cn50xx;
59776    struct cvmx_pip_todo_entry_s         cn52xx;
59777    struct cvmx_pip_todo_entry_s         cn52xxp1;
59778    struct cvmx_pip_todo_entry_s         cn56xx;
59779    struct cvmx_pip_todo_entry_s         cn56xxp1;
59780    struct cvmx_pip_todo_entry_s         cn58xx;
59781    struct cvmx_pip_todo_entry_s         cn58xxp1;
59782} cvmx_pip_todo_entry_t;
59783
59784
59785/**
59786 * cvmx_pko_mem_count0
59787 *
59788 * Notes:
59789 * Total number of packets seen by PKO, per port
59790 * A write to this address will clear the entry whose index is specified as COUNT[5:0].
59791 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
59792 * CSR read operations to this address can be performed.  A read of any entry that has not been
59793 * previously written is illegal and will result in unpredictable CSR read data.
59794 */
59795typedef union
59796{
59797    uint64_t u64;
59798    struct cvmx_pko_mem_count0_s
59799    {
59800#if __BYTE_ORDER == __BIG_ENDIAN
59801        uint64_t reserved_32_63          : 32;
59802        uint64_t count                   : 32;      /**< Total number of packets seen by PKO */
59803#else
59804        uint64_t count                   : 32;
59805        uint64_t reserved_32_63          : 32;
59806#endif
59807    } s;
59808    struct cvmx_pko_mem_count0_s         cn30xx;
59809    struct cvmx_pko_mem_count0_s         cn31xx;
59810    struct cvmx_pko_mem_count0_s         cn38xx;
59811    struct cvmx_pko_mem_count0_s         cn38xxp2;
59812    struct cvmx_pko_mem_count0_s         cn50xx;
59813    struct cvmx_pko_mem_count0_s         cn52xx;
59814    struct cvmx_pko_mem_count0_s         cn52xxp1;
59815    struct cvmx_pko_mem_count0_s         cn56xx;
59816    struct cvmx_pko_mem_count0_s         cn56xxp1;
59817    struct cvmx_pko_mem_count0_s         cn58xx;
59818    struct cvmx_pko_mem_count0_s         cn58xxp1;
59819} cvmx_pko_mem_count0_t;
59820
59821
59822/**
59823 * cvmx_pko_mem_count1
59824 *
59825 * Notes:
59826 * Total number of bytes seen by PKO, per port
59827 * A write to this address will clear the entry whose index is specified as COUNT[5:0].
59828 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
59829 * CSR read operations to this address can be performed.  A read of any entry that has not been
59830 * previously written is illegal and will result in unpredictable CSR read data.
59831 */
59832typedef union
59833{
59834    uint64_t u64;
59835    struct cvmx_pko_mem_count1_s
59836    {
59837#if __BYTE_ORDER == __BIG_ENDIAN
59838        uint64_t reserved_48_63          : 16;
59839        uint64_t count                   : 48;      /**< Total number of bytes seen by PKO */
59840#else
59841        uint64_t count                   : 48;
59842        uint64_t reserved_48_63          : 16;
59843#endif
59844    } s;
59845    struct cvmx_pko_mem_count1_s         cn30xx;
59846    struct cvmx_pko_mem_count1_s         cn31xx;
59847    struct cvmx_pko_mem_count1_s         cn38xx;
59848    struct cvmx_pko_mem_count1_s         cn38xxp2;
59849    struct cvmx_pko_mem_count1_s         cn50xx;
59850    struct cvmx_pko_mem_count1_s         cn52xx;
59851    struct cvmx_pko_mem_count1_s         cn52xxp1;
59852    struct cvmx_pko_mem_count1_s         cn56xx;
59853    struct cvmx_pko_mem_count1_s         cn56xxp1;
59854    struct cvmx_pko_mem_count1_s         cn58xx;
59855    struct cvmx_pko_mem_count1_s         cn58xxp1;
59856} cvmx_pko_mem_count1_t;
59857
59858
59859/**
59860 * cvmx_pko_mem_debug0
59861 *
59862 * Notes:
59863 * Internal per-port state intended for debug use only - pko_prt_psb.cmnd[63:0]
59864 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
59865 * CSR read operations to this address can be performed.
59866 */
59867typedef union
59868{
59869    uint64_t u64;
59870    struct cvmx_pko_mem_debug0_s
59871    {
59872#if __BYTE_ORDER == __BIG_ENDIAN
59873        uint64_t fau                     : 28;      /**< Fetch and add command words */
59874        uint64_t cmd                     : 14;      /**< Command word */
59875        uint64_t segs                    : 6;       /**< Number of segments/gather size */
59876        uint64_t size                    : 16;      /**< Packet length in bytes */
59877#else
59878        uint64_t size                    : 16;
59879        uint64_t segs                    : 6;
59880        uint64_t cmd                     : 14;
59881        uint64_t fau                     : 28;
59882#endif
59883    } s;
59884    struct cvmx_pko_mem_debug0_s         cn30xx;
59885    struct cvmx_pko_mem_debug0_s         cn31xx;
59886    struct cvmx_pko_mem_debug0_s         cn38xx;
59887    struct cvmx_pko_mem_debug0_s         cn38xxp2;
59888    struct cvmx_pko_mem_debug0_s         cn50xx;
59889    struct cvmx_pko_mem_debug0_s         cn52xx;
59890    struct cvmx_pko_mem_debug0_s         cn52xxp1;
59891    struct cvmx_pko_mem_debug0_s         cn56xx;
59892    struct cvmx_pko_mem_debug0_s         cn56xxp1;
59893    struct cvmx_pko_mem_debug0_s         cn58xx;
59894    struct cvmx_pko_mem_debug0_s         cn58xxp1;
59895} cvmx_pko_mem_debug0_t;
59896
59897
59898/**
59899 * cvmx_pko_mem_debug1
59900 *
59901 * Notes:
59902 * Internal per-port state intended for debug use only - pko_prt_psb.curr[63:0]
59903 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
59904 * CSR read operations to this address can be performed.
59905 */
59906typedef union
59907{
59908    uint64_t u64;
59909    struct cvmx_pko_mem_debug1_s
59910    {
59911#if __BYTE_ORDER == __BIG_ENDIAN
59912        uint64_t i                       : 1;       /**< "I"  value used for free operation */
59913        uint64_t back                    : 4;       /**< Back value used for free operation */
59914        uint64_t pool                    : 3;       /**< Pool value used for free operation */
59915        uint64_t size                    : 16;      /**< Size in bytes */
59916        uint64_t ptr                     : 40;      /**< Data pointer */
59917#else
59918        uint64_t ptr                     : 40;
59919        uint64_t size                    : 16;
59920        uint64_t pool                    : 3;
59921        uint64_t back                    : 4;
59922        uint64_t i                       : 1;
59923#endif
59924    } s;
59925    struct cvmx_pko_mem_debug1_s         cn30xx;
59926    struct cvmx_pko_mem_debug1_s         cn31xx;
59927    struct cvmx_pko_mem_debug1_s         cn38xx;
59928    struct cvmx_pko_mem_debug1_s         cn38xxp2;
59929    struct cvmx_pko_mem_debug1_s         cn50xx;
59930    struct cvmx_pko_mem_debug1_s         cn52xx;
59931    struct cvmx_pko_mem_debug1_s         cn52xxp1;
59932    struct cvmx_pko_mem_debug1_s         cn56xx;
59933    struct cvmx_pko_mem_debug1_s         cn56xxp1;
59934    struct cvmx_pko_mem_debug1_s         cn58xx;
59935    struct cvmx_pko_mem_debug1_s         cn58xxp1;
59936} cvmx_pko_mem_debug1_t;
59937
59938
59939/**
59940 * cvmx_pko_mem_debug10
59941 *
59942 * Notes:
59943 * Internal per-port state intended for debug use only - pko.dat.ptr.ptrs1, pko.dat.ptr.ptrs2
59944 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
59945 * CSR read operations to this address can be performed.
59946 */
59947typedef union
59948{
59949    uint64_t u64;
59950    struct cvmx_pko_mem_debug10_s
59951    {
59952#if __BYTE_ORDER == __BIG_ENDIAN
59953        uint64_t reserved_0_63           : 64;
59954#else
59955        uint64_t reserved_0_63           : 64;
59956#endif
59957    } s;
59958    struct cvmx_pko_mem_debug10_cn30xx
59959    {
59960#if __BYTE_ORDER == __BIG_ENDIAN
59961        uint64_t fau                     : 28;      /**< Fetch and add command words */
59962        uint64_t cmd                     : 14;      /**< Command word */
59963        uint64_t segs                    : 6;       /**< Number of segments/gather size */
59964        uint64_t size                    : 16;      /**< Packet length in bytes */
59965#else
59966        uint64_t size                    : 16;
59967        uint64_t segs                    : 6;
59968        uint64_t cmd                     : 14;
59969        uint64_t fau                     : 28;
59970#endif
59971    } cn30xx;
59972    struct cvmx_pko_mem_debug10_cn30xx   cn31xx;
59973    struct cvmx_pko_mem_debug10_cn30xx   cn38xx;
59974    struct cvmx_pko_mem_debug10_cn30xx   cn38xxp2;
59975    struct cvmx_pko_mem_debug10_cn50xx
59976    {
59977#if __BYTE_ORDER == __BIG_ENDIAN
59978        uint64_t reserved_49_63          : 15;
59979        uint64_t ptrs1                   : 17;      /**< Internal state */
59980        uint64_t reserved_17_31          : 15;
59981        uint64_t ptrs2                   : 17;      /**< Internal state */
59982#else
59983        uint64_t ptrs2                   : 17;
59984        uint64_t reserved_17_31          : 15;
59985        uint64_t ptrs1                   : 17;
59986        uint64_t reserved_49_63          : 15;
59987#endif
59988    } cn50xx;
59989    struct cvmx_pko_mem_debug10_cn50xx   cn52xx;
59990    struct cvmx_pko_mem_debug10_cn50xx   cn52xxp1;
59991    struct cvmx_pko_mem_debug10_cn50xx   cn56xx;
59992    struct cvmx_pko_mem_debug10_cn50xx   cn56xxp1;
59993    struct cvmx_pko_mem_debug10_cn50xx   cn58xx;
59994    struct cvmx_pko_mem_debug10_cn50xx   cn58xxp1;
59995} cvmx_pko_mem_debug10_t;
59996
59997
59998/**
59999 * cvmx_pko_mem_debug11
60000 *
60001 * Notes:
60002 * Internal per-port state intended for debug use only - pko.out.sta.state[22:0]
60003 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60004 * CSR read operations to this address can be performed.
60005 */
60006typedef union
60007{
60008    uint64_t u64;
60009    struct cvmx_pko_mem_debug11_s
60010    {
60011#if __BYTE_ORDER == __BIG_ENDIAN
60012        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60013        uint64_t back                    : 4;       /**< Back value used for free operation */
60014        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60015        uint64_t size                    : 16;      /**< Size in bytes */
60016        uint64_t reserved_0_39           : 40;
60017#else
60018        uint64_t reserved_0_39           : 40;
60019        uint64_t size                    : 16;
60020        uint64_t pool                    : 3;
60021        uint64_t back                    : 4;
60022        uint64_t i                       : 1;
60023#endif
60024    } s;
60025    struct cvmx_pko_mem_debug11_cn30xx
60026    {
60027#if __BYTE_ORDER == __BIG_ENDIAN
60028        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60029        uint64_t back                    : 4;       /**< Back value used for free operation */
60030        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60031        uint64_t size                    : 16;      /**< Size in bytes */
60032        uint64_t ptr                     : 40;      /**< Data pointer */
60033#else
60034        uint64_t ptr                     : 40;
60035        uint64_t size                    : 16;
60036        uint64_t pool                    : 3;
60037        uint64_t back                    : 4;
60038        uint64_t i                       : 1;
60039#endif
60040    } cn30xx;
60041    struct cvmx_pko_mem_debug11_cn30xx   cn31xx;
60042    struct cvmx_pko_mem_debug11_cn30xx   cn38xx;
60043    struct cvmx_pko_mem_debug11_cn30xx   cn38xxp2;
60044    struct cvmx_pko_mem_debug11_cn50xx
60045    {
60046#if __BYTE_ORDER == __BIG_ENDIAN
60047        uint64_t reserved_23_63          : 41;
60048        uint64_t maj                     : 1;       /**< Internal state */
60049        uint64_t uid                     : 3;       /**< Internal state */
60050        uint64_t sop                     : 1;       /**< Internal state */
60051        uint64_t len                     : 1;       /**< Internal state */
60052        uint64_t chk                     : 1;       /**< Internal state */
60053        uint64_t cnt                     : 13;      /**< Internal state */
60054        uint64_t mod                     : 3;       /**< Internal state */
60055#else
60056        uint64_t mod                     : 3;
60057        uint64_t cnt                     : 13;
60058        uint64_t chk                     : 1;
60059        uint64_t len                     : 1;
60060        uint64_t sop                     : 1;
60061        uint64_t uid                     : 3;
60062        uint64_t maj                     : 1;
60063        uint64_t reserved_23_63          : 41;
60064#endif
60065    } cn50xx;
60066    struct cvmx_pko_mem_debug11_cn50xx   cn52xx;
60067    struct cvmx_pko_mem_debug11_cn50xx   cn52xxp1;
60068    struct cvmx_pko_mem_debug11_cn50xx   cn56xx;
60069    struct cvmx_pko_mem_debug11_cn50xx   cn56xxp1;
60070    struct cvmx_pko_mem_debug11_cn50xx   cn58xx;
60071    struct cvmx_pko_mem_debug11_cn50xx   cn58xxp1;
60072} cvmx_pko_mem_debug11_t;
60073
60074
60075/**
60076 * cvmx_pko_mem_debug12
60077 *
60078 * Notes:
60079 * Internal per-port state intended for debug use only - pko.out.ctl.cmnd[63:0]
60080 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60081 * CSR read operations to this address can be performed.
60082 */
60083typedef union
60084{
60085    uint64_t u64;
60086    struct cvmx_pko_mem_debug12_s
60087    {
60088#if __BYTE_ORDER == __BIG_ENDIAN
60089        uint64_t reserved_0_63           : 64;
60090#else
60091        uint64_t reserved_0_63           : 64;
60092#endif
60093    } s;
60094    struct cvmx_pko_mem_debug12_cn30xx
60095    {
60096#if __BYTE_ORDER == __BIG_ENDIAN
60097        uint64_t data                    : 64;      /**< WorkQ data or Store0 pointer */
60098#else
60099        uint64_t data                    : 64;
60100#endif
60101    } cn30xx;
60102    struct cvmx_pko_mem_debug12_cn30xx   cn31xx;
60103    struct cvmx_pko_mem_debug12_cn30xx   cn38xx;
60104    struct cvmx_pko_mem_debug12_cn30xx   cn38xxp2;
60105    struct cvmx_pko_mem_debug12_cn50xx
60106    {
60107#if __BYTE_ORDER == __BIG_ENDIAN
60108        uint64_t fau                     : 28;      /**< Fetch and add command words */
60109        uint64_t cmd                     : 14;      /**< Command word */
60110        uint64_t segs                    : 6;       /**< Number of segments/gather size */
60111        uint64_t size                    : 16;      /**< Packet length in bytes */
60112#else
60113        uint64_t size                    : 16;
60114        uint64_t segs                    : 6;
60115        uint64_t cmd                     : 14;
60116        uint64_t fau                     : 28;
60117#endif
60118    } cn50xx;
60119    struct cvmx_pko_mem_debug12_cn50xx   cn52xx;
60120    struct cvmx_pko_mem_debug12_cn50xx   cn52xxp1;
60121    struct cvmx_pko_mem_debug12_cn50xx   cn56xx;
60122    struct cvmx_pko_mem_debug12_cn50xx   cn56xxp1;
60123    struct cvmx_pko_mem_debug12_cn50xx   cn58xx;
60124    struct cvmx_pko_mem_debug12_cn50xx   cn58xxp1;
60125} cvmx_pko_mem_debug12_t;
60126
60127
60128/**
60129 * cvmx_pko_mem_debug13
60130 *
60131 * Notes:
60132 * Internal per-port state intended for debug use only - pko.out.ctl.head[63:0]
60133 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60134 * CSR read operations to this address can be performed.
60135 */
60136typedef union
60137{
60138    uint64_t u64;
60139    struct cvmx_pko_mem_debug13_s
60140    {
60141#if __BYTE_ORDER == __BIG_ENDIAN
60142        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60143        uint64_t back                    : 4;       /**< Back value used for free operation */
60144        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60145        uint64_t reserved_0_55           : 56;
60146#else
60147        uint64_t reserved_0_55           : 56;
60148        uint64_t pool                    : 3;
60149        uint64_t back                    : 4;
60150        uint64_t i                       : 1;
60151#endif
60152    } s;
60153    struct cvmx_pko_mem_debug13_cn30xx
60154    {
60155#if __BYTE_ORDER == __BIG_ENDIAN
60156        uint64_t reserved_51_63          : 13;
60157        uint64_t widx                    : 17;      /**< PDB widx */
60158        uint64_t ridx2                   : 17;      /**< PDB ridx2 */
60159        uint64_t widx2                   : 17;      /**< PDB widx2 */
60160#else
60161        uint64_t widx2                   : 17;
60162        uint64_t ridx2                   : 17;
60163        uint64_t widx                    : 17;
60164        uint64_t reserved_51_63          : 13;
60165#endif
60166    } cn30xx;
60167    struct cvmx_pko_mem_debug13_cn30xx   cn31xx;
60168    struct cvmx_pko_mem_debug13_cn30xx   cn38xx;
60169    struct cvmx_pko_mem_debug13_cn30xx   cn38xxp2;
60170    struct cvmx_pko_mem_debug13_cn50xx
60171    {
60172#if __BYTE_ORDER == __BIG_ENDIAN
60173        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60174        uint64_t back                    : 4;       /**< Back value used for free operation */
60175        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60176        uint64_t size                    : 16;      /**< Size in bytes */
60177        uint64_t ptr                     : 40;      /**< Data pointer */
60178#else
60179        uint64_t ptr                     : 40;
60180        uint64_t size                    : 16;
60181        uint64_t pool                    : 3;
60182        uint64_t back                    : 4;
60183        uint64_t i                       : 1;
60184#endif
60185    } cn50xx;
60186    struct cvmx_pko_mem_debug13_cn50xx   cn52xx;
60187    struct cvmx_pko_mem_debug13_cn50xx   cn52xxp1;
60188    struct cvmx_pko_mem_debug13_cn50xx   cn56xx;
60189    struct cvmx_pko_mem_debug13_cn50xx   cn56xxp1;
60190    struct cvmx_pko_mem_debug13_cn50xx   cn58xx;
60191    struct cvmx_pko_mem_debug13_cn50xx   cn58xxp1;
60192} cvmx_pko_mem_debug13_t;
60193
60194
60195/**
60196 * cvmx_pko_mem_debug14
60197 *
60198 * Notes:
60199 * Internal per-port state intended for debug use only - pko.prt.psb.save[63:0]
60200 * This CSR is a memory of 120 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60201 * CSR read operations to this address can be performed.
60202 */
60203typedef union
60204{
60205    uint64_t u64;
60206    struct cvmx_pko_mem_debug14_s
60207    {
60208#if __BYTE_ORDER == __BIG_ENDIAN
60209        uint64_t reserved_0_63           : 64;
60210#else
60211        uint64_t reserved_0_63           : 64;
60212#endif
60213    } s;
60214    struct cvmx_pko_mem_debug14_cn30xx
60215    {
60216#if __BYTE_ORDER == __BIG_ENDIAN
60217        uint64_t reserved_17_63          : 47;
60218        uint64_t ridx                    : 17;      /**< PDB ridx */
60219#else
60220        uint64_t ridx                    : 17;
60221        uint64_t reserved_17_63          : 47;
60222#endif
60223    } cn30xx;
60224    struct cvmx_pko_mem_debug14_cn30xx   cn31xx;
60225    struct cvmx_pko_mem_debug14_cn30xx   cn38xx;
60226    struct cvmx_pko_mem_debug14_cn30xx   cn38xxp2;
60227    struct cvmx_pko_mem_debug14_cn52xx
60228    {
60229#if __BYTE_ORDER == __BIG_ENDIAN
60230        uint64_t data                    : 64;      /**< Command words */
60231#else
60232        uint64_t data                    : 64;
60233#endif
60234    } cn52xx;
60235    struct cvmx_pko_mem_debug14_cn52xx   cn52xxp1;
60236    struct cvmx_pko_mem_debug14_cn52xx   cn56xx;
60237    struct cvmx_pko_mem_debug14_cn52xx   cn56xxp1;
60238} cvmx_pko_mem_debug14_t;
60239
60240
60241/**
60242 * cvmx_pko_mem_debug2
60243 *
60244 * Notes:
60245 * Internal per-port state intended for debug use only - pko_prt_psb.head[63:0]
60246 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60247 * CSR read operations to this address can be performed.
60248 */
60249typedef union
60250{
60251    uint64_t u64;
60252    struct cvmx_pko_mem_debug2_s
60253    {
60254#if __BYTE_ORDER == __BIG_ENDIAN
60255        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60256        uint64_t back                    : 4;       /**< Back value used for free operation */
60257        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60258        uint64_t size                    : 16;      /**< Size in bytes */
60259        uint64_t ptr                     : 40;      /**< Data pointer */
60260#else
60261        uint64_t ptr                     : 40;
60262        uint64_t size                    : 16;
60263        uint64_t pool                    : 3;
60264        uint64_t back                    : 4;
60265        uint64_t i                       : 1;
60266#endif
60267    } s;
60268    struct cvmx_pko_mem_debug2_s         cn30xx;
60269    struct cvmx_pko_mem_debug2_s         cn31xx;
60270    struct cvmx_pko_mem_debug2_s         cn38xx;
60271    struct cvmx_pko_mem_debug2_s         cn38xxp2;
60272    struct cvmx_pko_mem_debug2_s         cn50xx;
60273    struct cvmx_pko_mem_debug2_s         cn52xx;
60274    struct cvmx_pko_mem_debug2_s         cn52xxp1;
60275    struct cvmx_pko_mem_debug2_s         cn56xx;
60276    struct cvmx_pko_mem_debug2_s         cn56xxp1;
60277    struct cvmx_pko_mem_debug2_s         cn58xx;
60278    struct cvmx_pko_mem_debug2_s         cn58xxp1;
60279} cvmx_pko_mem_debug2_t;
60280
60281
60282/**
60283 * cvmx_pko_mem_debug3
60284 *
60285 * Notes:
60286 * Internal per-port state intended for debug use only - pko_prt_psb.resp[63:0]
60287 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60288 * CSR read operations to this address can be performed.
60289 */
60290typedef union
60291{
60292    uint64_t u64;
60293    struct cvmx_pko_mem_debug3_s
60294    {
60295#if __BYTE_ORDER == __BIG_ENDIAN
60296        uint64_t reserved_0_63           : 64;
60297#else
60298        uint64_t reserved_0_63           : 64;
60299#endif
60300    } s;
60301    struct cvmx_pko_mem_debug3_cn30xx
60302    {
60303#if __BYTE_ORDER == __BIG_ENDIAN
60304        uint64_t i                       : 1;       /**< "I"  value used for free operation */
60305        uint64_t back                    : 4;       /**< Back value used for free operation */
60306        uint64_t pool                    : 3;       /**< Pool value used for free operation */
60307        uint64_t size                    : 16;      /**< Size in bytes */
60308        uint64_t ptr                     : 40;      /**< Data pointer */
60309#else
60310        uint64_t ptr                     : 40;
60311        uint64_t size                    : 16;
60312        uint64_t pool                    : 3;
60313        uint64_t back                    : 4;
60314        uint64_t i                       : 1;
60315#endif
60316    } cn30xx;
60317    struct cvmx_pko_mem_debug3_cn30xx    cn31xx;
60318    struct cvmx_pko_mem_debug3_cn30xx    cn38xx;
60319    struct cvmx_pko_mem_debug3_cn30xx    cn38xxp2;
60320    struct cvmx_pko_mem_debug3_cn50xx
60321    {
60322#if __BYTE_ORDER == __BIG_ENDIAN
60323        uint64_t data                    : 64;      /**< WorkQ data or Store0 pointer */
60324#else
60325        uint64_t data                    : 64;
60326#endif
60327    } cn50xx;
60328    struct cvmx_pko_mem_debug3_cn50xx    cn52xx;
60329    struct cvmx_pko_mem_debug3_cn50xx    cn52xxp1;
60330    struct cvmx_pko_mem_debug3_cn50xx    cn56xx;
60331    struct cvmx_pko_mem_debug3_cn50xx    cn56xxp1;
60332    struct cvmx_pko_mem_debug3_cn50xx    cn58xx;
60333    struct cvmx_pko_mem_debug3_cn50xx    cn58xxp1;
60334} cvmx_pko_mem_debug3_t;
60335
60336
60337/**
60338 * cvmx_pko_mem_debug4
60339 *
60340 * Notes:
60341 * Internal per-port state intended for debug use only - pko_prt_psb.state[63:0]
60342 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60343 * CSR read operations to this address can be performed.
60344 */
60345typedef union
60346{
60347    uint64_t u64;
60348    struct cvmx_pko_mem_debug4_s
60349    {
60350#if __BYTE_ORDER == __BIG_ENDIAN
60351        uint64_t reserved_0_63           : 64;
60352#else
60353        uint64_t reserved_0_63           : 64;
60354#endif
60355    } s;
60356    struct cvmx_pko_mem_debug4_cn30xx
60357    {
60358#if __BYTE_ORDER == __BIG_ENDIAN
60359        uint64_t data                    : 64;      /**< WorkQ data or Store0 pointer */
60360#else
60361        uint64_t data                    : 64;
60362#endif
60363    } cn30xx;
60364    struct cvmx_pko_mem_debug4_cn30xx    cn31xx;
60365    struct cvmx_pko_mem_debug4_cn30xx    cn38xx;
60366    struct cvmx_pko_mem_debug4_cn30xx    cn38xxp2;
60367    struct cvmx_pko_mem_debug4_cn50xx
60368    {
60369#if __BYTE_ORDER == __BIG_ENDIAN
60370        uint64_t cmnd_segs               : 3;       /**< Internal state */
60371        uint64_t cmnd_siz                : 16;      /**< Internal state */
60372        uint64_t cmnd_off                : 6;       /**< Internal state */
60373        uint64_t uid                     : 3;       /**< Internal state */
60374        uint64_t dread_sop               : 1;       /**< Internal state */
60375        uint64_t init_dwrite             : 1;       /**< Internal state */
60376        uint64_t chk_once                : 1;       /**< Internal state */
60377        uint64_t chk_mode                : 1;       /**< Internal state */
60378        uint64_t active                  : 1;       /**< Internal state */
60379        uint64_t static_p                : 1;       /**< Internal state */
60380        uint64_t qos                     : 3;       /**< Internal state */
60381        uint64_t qcb_ridx                : 5;       /**< Internal state */
60382        uint64_t qid_off_max             : 4;       /**< Internal state */
60383        uint64_t qid_off                 : 4;       /**< Internal state */
60384        uint64_t qid_base                : 8;       /**< Internal state */
60385        uint64_t wait                    : 1;       /**< Internal state */
60386        uint64_t minor                   : 2;       /**< Internal state */
60387        uint64_t major                   : 3;       /**< Internal state */
60388#else
60389        uint64_t major                   : 3;
60390        uint64_t minor                   : 2;
60391        uint64_t wait                    : 1;
60392        uint64_t qid_base                : 8;
60393        uint64_t qid_off                 : 4;
60394        uint64_t qid_off_max             : 4;
60395        uint64_t qcb_ridx                : 5;
60396        uint64_t qos                     : 3;
60397        uint64_t static_p                : 1;
60398        uint64_t active                  : 1;
60399        uint64_t chk_mode                : 1;
60400        uint64_t chk_once                : 1;
60401        uint64_t init_dwrite             : 1;
60402        uint64_t dread_sop               : 1;
60403        uint64_t uid                     : 3;
60404        uint64_t cmnd_off                : 6;
60405        uint64_t cmnd_siz                : 16;
60406        uint64_t cmnd_segs               : 3;
60407#endif
60408    } cn50xx;
60409    struct cvmx_pko_mem_debug4_cn52xx
60410    {
60411#if __BYTE_ORDER == __BIG_ENDIAN
60412        uint64_t curr_siz                : 8;       /**< Internal state */
60413        uint64_t curr_off                : 16;      /**< Internal state */
60414        uint64_t cmnd_segs               : 6;       /**< Internal state */
60415        uint64_t cmnd_siz                : 16;      /**< Internal state */
60416        uint64_t cmnd_off                : 6;       /**< Internal state */
60417        uint64_t uid                     : 2;       /**< Internal state */
60418        uint64_t dread_sop               : 1;       /**< Internal state */
60419        uint64_t init_dwrite             : 1;       /**< Internal state */
60420        uint64_t chk_once                : 1;       /**< Internal state */
60421        uint64_t chk_mode                : 1;       /**< Internal state */
60422        uint64_t wait                    : 1;       /**< Internal state */
60423        uint64_t minor                   : 2;       /**< Internal state */
60424        uint64_t major                   : 3;       /**< Internal state */
60425#else
60426        uint64_t major                   : 3;
60427        uint64_t minor                   : 2;
60428        uint64_t wait                    : 1;
60429        uint64_t chk_mode                : 1;
60430        uint64_t chk_once                : 1;
60431        uint64_t init_dwrite             : 1;
60432        uint64_t dread_sop               : 1;
60433        uint64_t uid                     : 2;
60434        uint64_t cmnd_off                : 6;
60435        uint64_t cmnd_siz                : 16;
60436        uint64_t cmnd_segs               : 6;
60437        uint64_t curr_off                : 16;
60438        uint64_t curr_siz                : 8;
60439#endif
60440    } cn52xx;
60441    struct cvmx_pko_mem_debug4_cn52xx    cn52xxp1;
60442    struct cvmx_pko_mem_debug4_cn52xx    cn56xx;
60443    struct cvmx_pko_mem_debug4_cn52xx    cn56xxp1;
60444    struct cvmx_pko_mem_debug4_cn50xx    cn58xx;
60445    struct cvmx_pko_mem_debug4_cn50xx    cn58xxp1;
60446} cvmx_pko_mem_debug4_t;
60447
60448
60449/**
60450 * cvmx_pko_mem_debug5
60451 *
60452 * Notes:
60453 * Internal per-port state intended for debug use only - pko_prt_psb.state[127:64]
60454 * This CSR is a memory of 10 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60455 * CSR read operations to this address can be performed.
60456 */
60457typedef union
60458{
60459    uint64_t u64;
60460    struct cvmx_pko_mem_debug5_s
60461    {
60462#if __BYTE_ORDER == __BIG_ENDIAN
60463        uint64_t reserved_0_63           : 64;
60464#else
60465        uint64_t reserved_0_63           : 64;
60466#endif
60467    } s;
60468    struct cvmx_pko_mem_debug5_cn30xx
60469    {
60470#if __BYTE_ORDER == __BIG_ENDIAN
60471        uint64_t dwri_mod                : 1;       /**< Dwrite mod */
60472        uint64_t dwri_sop                : 1;       /**< Dwrite sop needed */
60473        uint64_t dwri_len                : 1;       /**< Dwrite len */
60474        uint64_t dwri_cnt                : 13;      /**< Dwrite count */
60475        uint64_t cmnd_siz                : 16;      /**< Copy of cmnd.size */
60476        uint64_t uid                     : 1;       /**< UID */
60477        uint64_t xfer_wor                : 1;       /**< Transfer work needed */
60478        uint64_t xfer_dwr                : 1;       /**< Transfer dwrite needed */
60479        uint64_t cbuf_fre                : 1;       /**< Cbuf needs free */
60480        uint64_t reserved_27_27          : 1;
60481        uint64_t chk_mode                : 1;       /**< Checksum mode */
60482        uint64_t active                  : 1;       /**< Port is active */
60483        uint64_t qos                     : 3;       /**< Current QOS round */
60484        uint64_t qcb_ridx                : 5;       /**< Buffer read  index for QCB */
60485        uint64_t qid_off                 : 3;       /**< Offset to be added to QID_BASE for current queue */
60486        uint64_t qid_base                : 7;       /**< Absolute QID of the queue array base = &QUEUES[0] */
60487        uint64_t wait                    : 1;       /**< State wait when set */
60488        uint64_t minor                   : 2;       /**< State minor code */
60489        uint64_t major                   : 4;       /**< State major code */
60490#else
60491        uint64_t major                   : 4;
60492        uint64_t minor                   : 2;
60493        uint64_t wait                    : 1;
60494        uint64_t qid_base                : 7;
60495        uint64_t qid_off                 : 3;
60496        uint64_t qcb_ridx                : 5;
60497        uint64_t qos                     : 3;
60498        uint64_t active                  : 1;
60499        uint64_t chk_mode                : 1;
60500        uint64_t reserved_27_27          : 1;
60501        uint64_t cbuf_fre                : 1;
60502        uint64_t xfer_dwr                : 1;
60503        uint64_t xfer_wor                : 1;
60504        uint64_t uid                     : 1;
60505        uint64_t cmnd_siz                : 16;
60506        uint64_t dwri_cnt                : 13;
60507        uint64_t dwri_len                : 1;
60508        uint64_t dwri_sop                : 1;
60509        uint64_t dwri_mod                : 1;
60510#endif
60511    } cn30xx;
60512    struct cvmx_pko_mem_debug5_cn30xx    cn31xx;
60513    struct cvmx_pko_mem_debug5_cn30xx    cn38xx;
60514    struct cvmx_pko_mem_debug5_cn30xx    cn38xxp2;
60515    struct cvmx_pko_mem_debug5_cn50xx
60516    {
60517#if __BYTE_ORDER == __BIG_ENDIAN
60518        uint64_t curr_ptr                : 29;      /**< Internal state */
60519        uint64_t curr_siz                : 16;      /**< Internal state */
60520        uint64_t curr_off                : 16;      /**< Internal state */
60521        uint64_t cmnd_segs               : 3;       /**< Internal state */
60522#else
60523        uint64_t cmnd_segs               : 3;
60524        uint64_t curr_off                : 16;
60525        uint64_t curr_siz                : 16;
60526        uint64_t curr_ptr                : 29;
60527#endif
60528    } cn50xx;
60529    struct cvmx_pko_mem_debug5_cn52xx
60530    {
60531#if __BYTE_ORDER == __BIG_ENDIAN
60532        uint64_t reserved_54_63          : 10;
60533        uint64_t nxt_inflt               : 6;       /**< Internal state */
60534        uint64_t curr_ptr                : 40;      /**< Internal state */
60535        uint64_t curr_siz                : 8;       /**< Internal state */
60536#else
60537        uint64_t curr_siz                : 8;
60538        uint64_t curr_ptr                : 40;
60539        uint64_t nxt_inflt               : 6;
60540        uint64_t reserved_54_63          : 10;
60541#endif
60542    } cn52xx;
60543    struct cvmx_pko_mem_debug5_cn52xx    cn52xxp1;
60544    struct cvmx_pko_mem_debug5_cn52xx    cn56xx;
60545    struct cvmx_pko_mem_debug5_cn52xx    cn56xxp1;
60546    struct cvmx_pko_mem_debug5_cn50xx    cn58xx;
60547    struct cvmx_pko_mem_debug5_cn50xx    cn58xxp1;
60548} cvmx_pko_mem_debug5_t;
60549
60550
60551/**
60552 * cvmx_pko_mem_debug6
60553 *
60554 * Notes:
60555 * Internal per-port state intended for debug use only - pko_prt_psb.port[63:0]
60556 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60557 * CSR read operations to this address can be performed.
60558 */
60559typedef union
60560{
60561    uint64_t u64;
60562    struct cvmx_pko_mem_debug6_s
60563    {
60564#if __BYTE_ORDER == __BIG_ENDIAN
60565        uint64_t reserved_37_63          : 27;
60566        uint64_t qid_offres              : 4;       /**< Internal state */
60567        uint64_t qid_offths              : 4;       /**< Internal state */
60568        uint64_t preempter               : 1;       /**< Internal state */
60569        uint64_t preemptee               : 1;       /**< Internal state */
60570        uint64_t preempted               : 1;       /**< Internal state */
60571        uint64_t active                  : 1;       /**< Internal state */
60572        uint64_t statc                   : 1;       /**< Internal state */
60573        uint64_t qos                     : 3;       /**< Internal state */
60574        uint64_t qcb_ridx                : 5;       /**< Internal state */
60575        uint64_t qid_offmax              : 4;       /**< Internal state */
60576        uint64_t reserved_0_11           : 12;
60577#else
60578        uint64_t reserved_0_11           : 12;
60579        uint64_t qid_offmax              : 4;
60580        uint64_t qcb_ridx                : 5;
60581        uint64_t qos                     : 3;
60582        uint64_t statc                   : 1;
60583        uint64_t active                  : 1;
60584        uint64_t preempted               : 1;
60585        uint64_t preemptee               : 1;
60586        uint64_t preempter               : 1;
60587        uint64_t qid_offths              : 4;
60588        uint64_t qid_offres              : 4;
60589        uint64_t reserved_37_63          : 27;
60590#endif
60591    } s;
60592    struct cvmx_pko_mem_debug6_cn30xx
60593    {
60594#if __BYTE_ORDER == __BIG_ENDIAN
60595        uint64_t reserved_11_63          : 53;
60596        uint64_t qid_offm                : 3;       /**< Qid offset max */
60597        uint64_t static_p                : 1;       /**< Static port when set */
60598        uint64_t work_min                : 3;       /**< Work minor */
60599        uint64_t dwri_chk                : 1;       /**< Dwrite checksum mode */
60600        uint64_t dwri_uid                : 1;       /**< Dwrite UID */
60601        uint64_t dwri_mod                : 2;       /**< Dwrite mod */
60602#else
60603        uint64_t dwri_mod                : 2;
60604        uint64_t dwri_uid                : 1;
60605        uint64_t dwri_chk                : 1;
60606        uint64_t work_min                : 3;
60607        uint64_t static_p                : 1;
60608        uint64_t qid_offm                : 3;
60609        uint64_t reserved_11_63          : 53;
60610#endif
60611    } cn30xx;
60612    struct cvmx_pko_mem_debug6_cn30xx    cn31xx;
60613    struct cvmx_pko_mem_debug6_cn30xx    cn38xx;
60614    struct cvmx_pko_mem_debug6_cn30xx    cn38xxp2;
60615    struct cvmx_pko_mem_debug6_cn50xx
60616    {
60617#if __BYTE_ORDER == __BIG_ENDIAN
60618        uint64_t reserved_11_63          : 53;
60619        uint64_t curr_ptr                : 11;      /**< Internal state */
60620#else
60621        uint64_t curr_ptr                : 11;
60622        uint64_t reserved_11_63          : 53;
60623#endif
60624    } cn50xx;
60625    struct cvmx_pko_mem_debug6_cn52xx
60626    {
60627#if __BYTE_ORDER == __BIG_ENDIAN
60628        uint64_t reserved_37_63          : 27;
60629        uint64_t qid_offres              : 4;       /**< Internal state */
60630        uint64_t qid_offths              : 4;       /**< Internal state */
60631        uint64_t preempter               : 1;       /**< Internal state */
60632        uint64_t preemptee               : 1;       /**< Internal state */
60633        uint64_t preempted               : 1;       /**< Internal state */
60634        uint64_t active                  : 1;       /**< Internal state */
60635        uint64_t statc                   : 1;       /**< Internal state */
60636        uint64_t qos                     : 3;       /**< Internal state */
60637        uint64_t qcb_ridx                : 5;       /**< Internal state */
60638        uint64_t qid_offmax              : 4;       /**< Internal state */
60639        uint64_t qid_off                 : 4;       /**< Internal state */
60640        uint64_t qid_base                : 8;       /**< Internal state */
60641#else
60642        uint64_t qid_base                : 8;
60643        uint64_t qid_off                 : 4;
60644        uint64_t qid_offmax              : 4;
60645        uint64_t qcb_ridx                : 5;
60646        uint64_t qos                     : 3;
60647        uint64_t statc                   : 1;
60648        uint64_t active                  : 1;
60649        uint64_t preempted               : 1;
60650        uint64_t preemptee               : 1;
60651        uint64_t preempter               : 1;
60652        uint64_t qid_offths              : 4;
60653        uint64_t qid_offres              : 4;
60654        uint64_t reserved_37_63          : 27;
60655#endif
60656    } cn52xx;
60657    struct cvmx_pko_mem_debug6_cn52xx    cn52xxp1;
60658    struct cvmx_pko_mem_debug6_cn52xx    cn56xx;
60659    struct cvmx_pko_mem_debug6_cn52xx    cn56xxp1;
60660    struct cvmx_pko_mem_debug6_cn50xx    cn58xx;
60661    struct cvmx_pko_mem_debug6_cn50xx    cn58xxp1;
60662} cvmx_pko_mem_debug6_t;
60663
60664
60665/**
60666 * cvmx_pko_mem_debug7
60667 *
60668 * Notes:
60669 * Internal per-queue state intended for debug use only - pko_prt_qsb.state[63:0]
60670 * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60671 * CSR read operations to this address can be performed.
60672 */
60673typedef union
60674{
60675    uint64_t u64;
60676    struct cvmx_pko_mem_debug7_s
60677    {
60678#if __BYTE_ORDER == __BIG_ENDIAN
60679        uint64_t qos                     : 5;       /**< QOS mask to enable the queue when set */
60680        uint64_t tail                    : 1;       /**< This queue is the last (tail) in the queue array */
60681        uint64_t reserved_0_57           : 58;
60682#else
60683        uint64_t reserved_0_57           : 58;
60684        uint64_t tail                    : 1;
60685        uint64_t qos                     : 5;
60686#endif
60687    } s;
60688    struct cvmx_pko_mem_debug7_cn30xx
60689    {
60690#if __BYTE_ORDER == __BIG_ENDIAN
60691        uint64_t reserved_58_63          : 6;
60692        uint64_t dwb                     : 9;       /**< Calculated DWB count used for free operation */
60693        uint64_t start                   : 33;      /**< Calculated start address used for free operation */
60694        uint64_t size                    : 16;      /**< Packet length in bytes */
60695#else
60696        uint64_t size                    : 16;
60697        uint64_t start                   : 33;
60698        uint64_t dwb                     : 9;
60699        uint64_t reserved_58_63          : 6;
60700#endif
60701    } cn30xx;
60702    struct cvmx_pko_mem_debug7_cn30xx    cn31xx;
60703    struct cvmx_pko_mem_debug7_cn30xx    cn38xx;
60704    struct cvmx_pko_mem_debug7_cn30xx    cn38xxp2;
60705    struct cvmx_pko_mem_debug7_cn50xx
60706    {
60707#if __BYTE_ORDER == __BIG_ENDIAN
60708        uint64_t qos                     : 5;       /**< QOS mask to enable the queue when set */
60709        uint64_t tail                    : 1;       /**< This queue is the last (tail) in the queue array */
60710        uint64_t buf_siz                 : 13;      /**< Command buffer remaining size in words */
60711        uint64_t buf_ptr                 : 33;      /**< Command word pointer */
60712        uint64_t qcb_widx                : 6;       /**< Buffer write index for QCB */
60713        uint64_t qcb_ridx                : 6;       /**< Buffer read  index for QCB */
60714#else
60715        uint64_t qcb_ridx                : 6;
60716        uint64_t qcb_widx                : 6;
60717        uint64_t buf_ptr                 : 33;
60718        uint64_t buf_siz                 : 13;
60719        uint64_t tail                    : 1;
60720        uint64_t qos                     : 5;
60721#endif
60722    } cn50xx;
60723    struct cvmx_pko_mem_debug7_cn50xx    cn52xx;
60724    struct cvmx_pko_mem_debug7_cn50xx    cn52xxp1;
60725    struct cvmx_pko_mem_debug7_cn50xx    cn56xx;
60726    struct cvmx_pko_mem_debug7_cn50xx    cn56xxp1;
60727    struct cvmx_pko_mem_debug7_cn50xx    cn58xx;
60728    struct cvmx_pko_mem_debug7_cn50xx    cn58xxp1;
60729} cvmx_pko_mem_debug7_t;
60730
60731
60732/**
60733 * cvmx_pko_mem_debug8
60734 *
60735 * Notes:
60736 * Internal per-queue state intended for debug use only - pko_prt_qsb.state[91:64]
60737 * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60738 * CSR read operations to this address can be performed.
60739 */
60740typedef union
60741{
60742    uint64_t u64;
60743    struct cvmx_pko_mem_debug8_s
60744    {
60745#if __BYTE_ORDER == __BIG_ENDIAN
60746        uint64_t reserved_59_63          : 5;
60747        uint64_t tail                    : 1;       /**< This queue is the last (tail) in the queue array */
60748        uint64_t buf_siz                 : 13;      /**< Command buffer remaining size in words */
60749        uint64_t reserved_0_44           : 45;
60750#else
60751        uint64_t reserved_0_44           : 45;
60752        uint64_t buf_siz                 : 13;
60753        uint64_t tail                    : 1;
60754        uint64_t reserved_59_63          : 5;
60755#endif
60756    } s;
60757    struct cvmx_pko_mem_debug8_cn30xx
60758    {
60759#if __BYTE_ORDER == __BIG_ENDIAN
60760        uint64_t qos                     : 5;       /**< QOS mask to enable the queue when set */
60761        uint64_t tail                    : 1;       /**< This queue is the last (tail) in the queue array */
60762        uint64_t buf_siz                 : 13;      /**< Command buffer remaining size in words */
60763        uint64_t buf_ptr                 : 33;      /**< Command word pointer */
60764        uint64_t qcb_widx                : 6;       /**< Buffer write index for QCB */
60765        uint64_t qcb_ridx                : 6;       /**< Buffer read  index for QCB */
60766#else
60767        uint64_t qcb_ridx                : 6;
60768        uint64_t qcb_widx                : 6;
60769        uint64_t buf_ptr                 : 33;
60770        uint64_t buf_siz                 : 13;
60771        uint64_t tail                    : 1;
60772        uint64_t qos                     : 5;
60773#endif
60774    } cn30xx;
60775    struct cvmx_pko_mem_debug8_cn30xx    cn31xx;
60776    struct cvmx_pko_mem_debug8_cn30xx    cn38xx;
60777    struct cvmx_pko_mem_debug8_cn30xx    cn38xxp2;
60778    struct cvmx_pko_mem_debug8_cn50xx
60779    {
60780#if __BYTE_ORDER == __BIG_ENDIAN
60781        uint64_t reserved_28_63          : 36;
60782        uint64_t doorbell                : 20;      /**< Doorbell count */
60783        uint64_t reserved_6_7            : 2;
60784        uint64_t static_p                : 1;       /**< Static priority */
60785        uint64_t s_tail                  : 1;       /**< Static tail */
60786        uint64_t static_q                : 1;       /**< Static priority */
60787        uint64_t qos                     : 3;       /**< QOS mask to enable the queue when set */
60788#else
60789        uint64_t qos                     : 3;
60790        uint64_t static_q                : 1;
60791        uint64_t s_tail                  : 1;
60792        uint64_t static_p                : 1;
60793        uint64_t reserved_6_7            : 2;
60794        uint64_t doorbell                : 20;
60795        uint64_t reserved_28_63          : 36;
60796#endif
60797    } cn50xx;
60798    struct cvmx_pko_mem_debug8_cn52xx
60799    {
60800#if __BYTE_ORDER == __BIG_ENDIAN
60801        uint64_t reserved_29_63          : 35;
60802        uint64_t preempter               : 1;       /**< Preempter */
60803        uint64_t doorbell                : 20;      /**< Doorbell count */
60804        uint64_t reserved_7_7            : 1;
60805        uint64_t preemptee               : 1;       /**< Preemptee */
60806        uint64_t static_p                : 1;       /**< Static priority */
60807        uint64_t s_tail                  : 1;       /**< Static tail */
60808        uint64_t static_q                : 1;       /**< Static priority */
60809        uint64_t qos                     : 3;       /**< QOS mask to enable the queue when set */
60810#else
60811        uint64_t qos                     : 3;
60812        uint64_t static_q                : 1;
60813        uint64_t s_tail                  : 1;
60814        uint64_t static_p                : 1;
60815        uint64_t preemptee               : 1;
60816        uint64_t reserved_7_7            : 1;
60817        uint64_t doorbell                : 20;
60818        uint64_t preempter               : 1;
60819        uint64_t reserved_29_63          : 35;
60820#endif
60821    } cn52xx;
60822    struct cvmx_pko_mem_debug8_cn52xx    cn52xxp1;
60823    struct cvmx_pko_mem_debug8_cn52xx    cn56xx;
60824    struct cvmx_pko_mem_debug8_cn52xx    cn56xxp1;
60825    struct cvmx_pko_mem_debug8_cn50xx    cn58xx;
60826    struct cvmx_pko_mem_debug8_cn50xx    cn58xxp1;
60827} cvmx_pko_mem_debug8_t;
60828
60829
60830/**
60831 * cvmx_pko_mem_debug9
60832 *
60833 * Notes:
60834 * Internal per-port state intended for debug use only - pko.dat.ptr.ptrs0, pko.dat.ptr.ptrs3
60835 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60836 * CSR read operations to this address can be performed.
60837 */
60838typedef union
60839{
60840    uint64_t u64;
60841    struct cvmx_pko_mem_debug9_s
60842    {
60843#if __BYTE_ORDER == __BIG_ENDIAN
60844        uint64_t reserved_49_63          : 15;
60845        uint64_t ptrs0                   : 17;      /**< Internal state */
60846        uint64_t reserved_0_31           : 32;
60847#else
60848        uint64_t reserved_0_31           : 32;
60849        uint64_t ptrs0                   : 17;
60850        uint64_t reserved_49_63          : 15;
60851#endif
60852    } s;
60853    struct cvmx_pko_mem_debug9_cn30xx
60854    {
60855#if __BYTE_ORDER == __BIG_ENDIAN
60856        uint64_t reserved_28_63          : 36;
60857        uint64_t doorbell                : 20;      /**< Doorbell count */
60858        uint64_t reserved_5_7            : 3;
60859        uint64_t s_tail                  : 1;       /**< reads as zero (S_TAIL cannot be read) */
60860        uint64_t static_q                : 1;       /**< reads as zero (STATIC_Q cannot be read) */
60861        uint64_t qos                     : 3;       /**< QOS mask to enable the queue when set */
60862#else
60863        uint64_t qos                     : 3;
60864        uint64_t static_q                : 1;
60865        uint64_t s_tail                  : 1;
60866        uint64_t reserved_5_7            : 3;
60867        uint64_t doorbell                : 20;
60868        uint64_t reserved_28_63          : 36;
60869#endif
60870    } cn30xx;
60871    struct cvmx_pko_mem_debug9_cn30xx    cn31xx;
60872    struct cvmx_pko_mem_debug9_cn38xx
60873    {
60874#if __BYTE_ORDER == __BIG_ENDIAN
60875        uint64_t reserved_28_63          : 36;
60876        uint64_t doorbell                : 20;      /**< Doorbell count */
60877        uint64_t reserved_6_7            : 2;
60878        uint64_t static_p                : 1;       /**< Static priority (port) */
60879        uint64_t s_tail                  : 1;       /**< Static tail */
60880        uint64_t static_q                : 1;       /**< Static priority */
60881        uint64_t qos                     : 3;       /**< QOS mask to enable the queue when set */
60882#else
60883        uint64_t qos                     : 3;
60884        uint64_t static_q                : 1;
60885        uint64_t s_tail                  : 1;
60886        uint64_t static_p                : 1;
60887        uint64_t reserved_6_7            : 2;
60888        uint64_t doorbell                : 20;
60889        uint64_t reserved_28_63          : 36;
60890#endif
60891    } cn38xx;
60892    struct cvmx_pko_mem_debug9_cn38xx    cn38xxp2;
60893    struct cvmx_pko_mem_debug9_cn50xx
60894    {
60895#if __BYTE_ORDER == __BIG_ENDIAN
60896        uint64_t reserved_49_63          : 15;
60897        uint64_t ptrs0                   : 17;      /**< Internal state */
60898        uint64_t reserved_17_31          : 15;
60899        uint64_t ptrs3                   : 17;      /**< Internal state */
60900#else
60901        uint64_t ptrs3                   : 17;
60902        uint64_t reserved_17_31          : 15;
60903        uint64_t ptrs0                   : 17;
60904        uint64_t reserved_49_63          : 15;
60905#endif
60906    } cn50xx;
60907    struct cvmx_pko_mem_debug9_cn50xx    cn52xx;
60908    struct cvmx_pko_mem_debug9_cn50xx    cn52xxp1;
60909    struct cvmx_pko_mem_debug9_cn50xx    cn56xx;
60910    struct cvmx_pko_mem_debug9_cn50xx    cn56xxp1;
60911    struct cvmx_pko_mem_debug9_cn50xx    cn58xx;
60912    struct cvmx_pko_mem_debug9_cn50xx    cn58xxp1;
60913} cvmx_pko_mem_debug9_t;
60914
60915
60916/**
60917 * cvmx_pko_mem_port_ptrs
60918 *
60919 * Notes:
60920 * Sets the port to engine mapping, per port.  Ports marked as static priority need not be contiguous,
60921 * but they must be the lowest numbered PIDs mapped to this EID and must have QOS_MASK=0xff.  If EID==8
60922 * or EID==9, then PID[1:0] is used to direct the packet to the correct port on that interface.
60923 * EID==15 can be used for unused PKO-internal ports.
60924 * BP_PORT==63 means that the PKO-internal port is not backpressured.
60925 * BP_PORTs are assumed to belong to an interface as follows:
60926 *   36 <= BP_PORT < 40 -> loopback   interface
60927 *   32 <= BP_PORT < 36 -> PCIe       interface
60928 *   0  <= BP_PORT < 16 -> SGMII/Xaui interface 0
60929 * The reset configuration is the following:
60930 *   PID EID(ext port) BP_PORT QOS_MASK STATIC_P
60931 *   -------------------------------------------
60932 *     0   0( 0)             0     0xff        0
60933 *     1   1( 1)             1     0xff        0
60934 *     2   2( 2)             2     0xff        0
60935 *     3   3( 3)             3     0xff        0
60936 *     4   0( 0)             4     0xff        0
60937 *     5   1( 1)             5     0xff        0
60938 *     6   2( 2)             6     0xff        0
60939 *     7   3( 3)             7     0xff        0
60940 *     8   0( 0)             8     0xff        0
60941 *     9   1( 1)             9     0xff        0
60942 *    10   2( 2)            10     0xff        0
60943 *    11   3( 3)            11     0xff        0
60944 *    12   0( 0)            12     0xff        0
60945 *    13   1( 1)            13     0xff        0
60946 *    14   2( 2)            14     0xff        0
60947 *    15   3( 3)            15     0xff        0
60948 *   -------------------------------------------
60949 *    16   0( 0)             0     0xff        0
60950 *    17   1( 1)             1     0xff        0
60951 *    18   2( 2)             2     0xff        0
60952 *    19   3( 3)             3     0xff        0
60953 *    20   0( 0)             4     0xff        0
60954 *    21   1( 1)             5     0xff        0
60955 *    22   2( 2)             6     0xff        0
60956 *    23   3( 3)             7     0xff        0
60957 *    24   0( 0)             8     0xff        0
60958 *    25   1( 1)             9     0xff        0
60959 *    26   2( 2)            10     0xff        0
60960 *    27   3( 3)            11     0xff        0
60961 *    28   0( 0)            12     0xff        0
60962 *    29   1( 1)            13     0xff        0
60963 *    30   2( 2)            14     0xff        0
60964 *    31   3( 3)            15     0xff        0
60965 *   -------------------------------------------
60966 *    32   8(32)            32     0xff        0
60967 *    33   8(33)            33     0xff        0
60968 *    34   8(34)            34     0xff        0
60969 *    35   8(35)            35     0xff        0
60970 *   -------------------------------------------
60971 *    36   9(36)            36     0xff        0
60972 *    37   9(37)            37     0xff        0
60973 *    38   9(38)            38     0xff        0
60974 *    39   9(39)            39     0xff        0
60975 *
60976 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
60977 * CSR read operations to this address can be performed.  A read of any entry that has not been
60978 * previously written is illegal and will result in unpredictable CSR read data.
60979 */
60980typedef union
60981{
60982    uint64_t u64;
60983    struct cvmx_pko_mem_port_ptrs_s
60984    {
60985#if __BYTE_ORDER == __BIG_ENDIAN
60986        uint64_t reserved_62_63          : 2;
60987        uint64_t static_p                : 1;       /**< Set if this PID has static priority */
60988        uint64_t qos_mask                : 8;       /**< Mask to control priority across 8 QOS rounds */
60989        uint64_t reserved_16_52          : 37;
60990        uint64_t bp_port                 : 6;       /**< PID listens to BP_PORT for per-packet backpressure
60991                                                         Legal BP_PORTs: 0-39, 63 (63 means no BP) */
60992        uint64_t eid                     : 4;       /**< Engine ID to which this port is mapped
60993                                                         Legal EIDs: 0-9, 15 (15 only if port not used) */
60994        uint64_t pid                     : 6;       /**< Port ID[5:0] */
60995#else
60996        uint64_t pid                     : 6;
60997        uint64_t eid                     : 4;
60998        uint64_t bp_port                 : 6;
60999        uint64_t reserved_16_52          : 37;
61000        uint64_t qos_mask                : 8;
61001        uint64_t static_p                : 1;
61002        uint64_t reserved_62_63          : 2;
61003#endif
61004    } s;
61005    struct cvmx_pko_mem_port_ptrs_s      cn52xx;
61006    struct cvmx_pko_mem_port_ptrs_s      cn52xxp1;
61007    struct cvmx_pko_mem_port_ptrs_s      cn56xx;
61008    struct cvmx_pko_mem_port_ptrs_s      cn56xxp1;
61009} cvmx_pko_mem_port_ptrs_t;
61010
61011
61012/**
61013 * cvmx_pko_mem_port_qos
61014 *
61015 * Notes:
61016 * Sets the QOS mask, per port.  These QOS_MASK bits are logically and physically the same QOS_MASK
61017 * bits in PKO_MEM_PORT_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
61018 * operation without affecting any other port state.  The engine to which port PID is mapped is engine
61019 * EID.  Note that the port to engine mapping must be the same as was previously programmed via the
61020 * PKO_MEM_PORT_PTRS CSR.
61021 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
61022 * CSR read operations to this address can be performed.  A read of any entry that has not been
61023 * previously written is illegal and will result in unpredictable CSR read data.
61024 */
61025typedef union
61026{
61027    uint64_t u64;
61028    struct cvmx_pko_mem_port_qos_s
61029    {
61030#if __BYTE_ORDER == __BIG_ENDIAN
61031        uint64_t reserved_61_63          : 3;
61032        uint64_t qos_mask                : 8;       /**< Mask to control priority across 8 QOS rounds */
61033        uint64_t reserved_10_52          : 43;
61034        uint64_t eid                     : 4;       /**< Engine ID to which this port is mapped
61035                                                         Legal EIDs: 0-9 */
61036        uint64_t pid                     : 6;       /**< Port ID[5:0] */
61037#else
61038        uint64_t pid                     : 6;
61039        uint64_t eid                     : 4;
61040        uint64_t reserved_10_52          : 43;
61041        uint64_t qos_mask                : 8;
61042        uint64_t reserved_61_63          : 3;
61043#endif
61044    } s;
61045    struct cvmx_pko_mem_port_qos_s       cn52xx;
61046    struct cvmx_pko_mem_port_qos_s       cn52xxp1;
61047    struct cvmx_pko_mem_port_qos_s       cn56xx;
61048    struct cvmx_pko_mem_port_qos_s       cn56xxp1;
61049} cvmx_pko_mem_port_qos_t;
61050
61051
61052/**
61053 * cvmx_pko_mem_port_rate0
61054 *
61055 * Notes:
61056 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
61057 * CSR read operations to this address can be performed.  A read of any entry that has not been
61058 * previously written is illegal and will result in unpredictable CSR read data.
61059 */
61060typedef union
61061{
61062    uint64_t u64;
61063    struct cvmx_pko_mem_port_rate0_s
61064    {
61065#if __BYTE_ORDER == __BIG_ENDIAN
61066        uint64_t reserved_51_63          : 13;
61067        uint64_t rate_word               : 19;      /**< Rate limiting adder per 8 byte */
61068        uint64_t rate_pkt                : 24;      /**< Rate limiting adder per packet */
61069        uint64_t reserved_6_7            : 2;
61070        uint64_t pid                     : 6;       /**< Port ID[5:0] */
61071#else
61072        uint64_t pid                     : 6;
61073        uint64_t reserved_6_7            : 2;
61074        uint64_t rate_pkt                : 24;
61075        uint64_t rate_word               : 19;
61076        uint64_t reserved_51_63          : 13;
61077#endif
61078    } s;
61079    struct cvmx_pko_mem_port_rate0_s     cn52xx;
61080    struct cvmx_pko_mem_port_rate0_s     cn52xxp1;
61081    struct cvmx_pko_mem_port_rate0_s     cn56xx;
61082    struct cvmx_pko_mem_port_rate0_s     cn56xxp1;
61083} cvmx_pko_mem_port_rate0_t;
61084
61085
61086/**
61087 * cvmx_pko_mem_port_rate1
61088 *
61089 * Notes:
61090 * Writing PKO_MEM_PORT_RATE1[PID,RATE_LIM] has the side effect of setting the corresponding
61091 * accumulator to zero.
61092 * This CSR is a memory of 40 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
61093 * CSR read operations to this address can be performed.  A read of any entry that has not been
61094 * previously written is illegal and will result in unpredictable CSR read data.
61095 */
61096typedef union
61097{
61098    uint64_t u64;
61099    struct cvmx_pko_mem_port_rate1_s
61100    {
61101#if __BYTE_ORDER == __BIG_ENDIAN
61102        uint64_t reserved_32_63          : 32;
61103        uint64_t rate_lim                : 24;      /**< Rate limiting accumulator limit */
61104        uint64_t reserved_6_7            : 2;
61105        uint64_t pid                     : 6;       /**< Port ID[5:0] */
61106#else
61107        uint64_t pid                     : 6;
61108        uint64_t reserved_6_7            : 2;
61109        uint64_t rate_lim                : 24;
61110        uint64_t reserved_32_63          : 32;
61111#endif
61112    } s;
61113    struct cvmx_pko_mem_port_rate1_s     cn52xx;
61114    struct cvmx_pko_mem_port_rate1_s     cn52xxp1;
61115    struct cvmx_pko_mem_port_rate1_s     cn56xx;
61116    struct cvmx_pko_mem_port_rate1_s     cn56xxp1;
61117} cvmx_pko_mem_port_rate1_t;
61118
61119
61120/**
61121 * cvmx_pko_mem_queue_ptrs
61122 *
61123 * Notes:
61124 * Sets the queue to port mapping and the initial command buffer pointer, per queue
61125 * Each queue may map to at most one port.  No more than 16 queues may map to a port.  The set of
61126 * queues that is mapped to a port must be a contiguous array of queues.  The port to which queue QID
61127 * is mapped is port PID.  The index of queue QID in port PID's queue list is IDX.  The last queue in
61128 * port PID's queue array must have its TAIL bit set.  Unused queues must be mapped to port 63.
61129 * STATIC_Q marks queue QID as having static priority.  STATIC_P marks the port PID to which QID is
61130 * mapped as having at least one queue with static priority.  If any QID that maps to PID has static
61131 * priority, then all QID that map to PID must have STATIC_P set.  Queues marked as static priority
61132 * must be contiguous and begin at IDX 0.  The last queue that is marked as having static priority
61133 * must have its S_TAIL bit set.
61134 * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
61135 * CSR read operations to this address can be performed.  A read of any entry that has not been
61136 * previously written is illegal and will result in unpredictable CSR read data.
61137 */
61138typedef union
61139{
61140    uint64_t u64;
61141    struct cvmx_pko_mem_queue_ptrs_s
61142    {
61143#if __BYTE_ORDER == __BIG_ENDIAN
61144        uint64_t s_tail                  : 1;       /**< Set if this QID is the tail of the static queues */
61145        uint64_t static_p                : 1;       /**< Set if any QID in this PID has static priority */
61146        uint64_t static_q                : 1;       /**< Set if this QID has static priority */
61147        uint64_t qos_mask                : 8;       /**< Mask to control priority across 8 QOS rounds */
61148        uint64_t buf_ptr                 : 36;      /**< Command buffer pointer, <23:17> MBZ */
61149        uint64_t tail                    : 1;       /**< Set if this QID is the tail of the queue array */
61150        uint64_t index                   : 3;       /**< Index[2:0] (distance from head) in the queue array */
61151        uint64_t port                    : 6;       /**< Port ID to which this queue is mapped */
61152        uint64_t queue                   : 7;       /**< Queue ID[6:0] */
61153#else
61154        uint64_t queue                   : 7;
61155        uint64_t port                    : 6;
61156        uint64_t index                   : 3;
61157        uint64_t tail                    : 1;
61158        uint64_t buf_ptr                 : 36;
61159        uint64_t qos_mask                : 8;
61160        uint64_t static_q                : 1;
61161        uint64_t static_p                : 1;
61162        uint64_t s_tail                  : 1;
61163#endif
61164    } s;
61165    struct cvmx_pko_mem_queue_ptrs_s     cn30xx;
61166    struct cvmx_pko_mem_queue_ptrs_s     cn31xx;
61167    struct cvmx_pko_mem_queue_ptrs_s     cn38xx;
61168    struct cvmx_pko_mem_queue_ptrs_s     cn38xxp2;
61169    struct cvmx_pko_mem_queue_ptrs_s     cn50xx;
61170    struct cvmx_pko_mem_queue_ptrs_s     cn52xx;
61171    struct cvmx_pko_mem_queue_ptrs_s     cn52xxp1;
61172    struct cvmx_pko_mem_queue_ptrs_s     cn56xx;
61173    struct cvmx_pko_mem_queue_ptrs_s     cn56xxp1;
61174    struct cvmx_pko_mem_queue_ptrs_s     cn58xx;
61175    struct cvmx_pko_mem_queue_ptrs_s     cn58xxp1;
61176} cvmx_pko_mem_queue_ptrs_t;
61177
61178
61179/**
61180 * cvmx_pko_mem_queue_qos
61181 *
61182 * Notes:
61183 * Sets the QOS mask, per queue.  These QOS_MASK bits are logically and physically the same QOS_MASK
61184 * bits in PKO_MEM_QUEUE_PTRS.  This CSR address allows the QOS_MASK bits to be written during PKO
61185 * operation without affecting any other queue state.  The port to which queue QID is mapped is port
61186 * PID.  Note that the queue to port mapping must be the same as was previously programmed via the
61187 * PKO_MEM_QUEUE_PTRS CSR.
61188 * This CSR is a memory of 256 entries, and thus, the PKO_REG_READ_IDX CSR must be written before any
61189 * CSR read operations to this address can be performed.  A read of any entry that has not been
61190 * previously written is illegal and will result in unpredictable CSR read data.
61191 */
61192typedef union
61193{
61194    uint64_t u64;
61195    struct cvmx_pko_mem_queue_qos_s
61196    {
61197#if __BYTE_ORDER == __BIG_ENDIAN
61198        uint64_t reserved_61_63          : 3;
61199        uint64_t qos_mask                : 8;       /**< Mask to control priority across 8 QOS rounds */
61200        uint64_t reserved_13_52          : 40;
61201        uint64_t pid                     : 6;       /**< Port ID to which this queue is mapped */
61202        uint64_t qid                     : 7;       /**< Queue ID */
61203#else
61204        uint64_t qid                     : 7;
61205        uint64_t pid                     : 6;
61206        uint64_t reserved_13_52          : 40;
61207        uint64_t qos_mask                : 8;
61208        uint64_t reserved_61_63          : 3;
61209#endif
61210    } s;
61211    struct cvmx_pko_mem_queue_qos_s      cn30xx;
61212    struct cvmx_pko_mem_queue_qos_s      cn31xx;
61213    struct cvmx_pko_mem_queue_qos_s      cn38xx;
61214    struct cvmx_pko_mem_queue_qos_s      cn38xxp2;
61215    struct cvmx_pko_mem_queue_qos_s      cn50xx;
61216    struct cvmx_pko_mem_queue_qos_s      cn52xx;
61217    struct cvmx_pko_mem_queue_qos_s      cn52xxp1;
61218    struct cvmx_pko_mem_queue_qos_s      cn56xx;
61219    struct cvmx_pko_mem_queue_qos_s      cn56xxp1;
61220    struct cvmx_pko_mem_queue_qos_s      cn58xx;
61221    struct cvmx_pko_mem_queue_qos_s      cn58xxp1;
61222} cvmx_pko_mem_queue_qos_t;
61223
61224
61225/**
61226 * cvmx_pko_reg_bist_result
61227 *
61228 * Notes:
61229 * Access to the internal BiST results
61230 * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
61231 */
61232typedef union
61233{
61234    uint64_t u64;
61235    struct cvmx_pko_reg_bist_result_s
61236    {
61237#if __BYTE_ORDER == __BIG_ENDIAN
61238        uint64_t reserved_0_63           : 64;
61239#else
61240        uint64_t reserved_0_63           : 64;
61241#endif
61242    } s;
61243    struct cvmx_pko_reg_bist_result_cn30xx
61244    {
61245#if __BYTE_ORDER == __BIG_ENDIAN
61246        uint64_t reserved_27_63          : 37;
61247        uint64_t psb2                    : 5;       /**< BiST result of the PSB   memories (0=pass, !0=fail) */
61248        uint64_t count                   : 1;       /**< BiST result of the COUNT memories (0=pass, !0=fail) */
61249        uint64_t rif                     : 1;       /**< BiST result of the RIF   memories (0=pass, !0=fail) */
61250        uint64_t wif                     : 1;       /**< BiST result of the WIF   memories (0=pass, !0=fail) */
61251        uint64_t ncb                     : 1;       /**< BiST result of the NCB   memories (0=pass, !0=fail) */
61252        uint64_t out                     : 1;       /**< BiST result of the OUT   memories (0=pass, !0=fail) */
61253        uint64_t crc                     : 1;       /**< BiST result of the CRC   memories (0=pass, !0=fail) */
61254        uint64_t chk                     : 1;       /**< BiST result of the CHK   memories (0=pass, !0=fail) */
61255        uint64_t qsb                     : 2;       /**< BiST result of the QSB   memories (0=pass, !0=fail) */
61256        uint64_t qcb                     : 2;       /**< BiST result of the QCB   memories (0=pass, !0=fail) */
61257        uint64_t pdb                     : 4;       /**< BiST result of the PDB   memories (0=pass, !0=fail) */
61258        uint64_t psb                     : 7;       /**< BiST result of the PSB   memories (0=pass, !0=fail) */
61259#else
61260        uint64_t psb                     : 7;
61261        uint64_t pdb                     : 4;
61262        uint64_t qcb                     : 2;
61263        uint64_t qsb                     : 2;
61264        uint64_t chk                     : 1;
61265        uint64_t crc                     : 1;
61266        uint64_t out                     : 1;
61267        uint64_t ncb                     : 1;
61268        uint64_t wif                     : 1;
61269        uint64_t rif                     : 1;
61270        uint64_t count                   : 1;
61271        uint64_t psb2                    : 5;
61272        uint64_t reserved_27_63          : 37;
61273#endif
61274    } cn30xx;
61275    struct cvmx_pko_reg_bist_result_cn30xx cn31xx;
61276    struct cvmx_pko_reg_bist_result_cn30xx cn38xx;
61277    struct cvmx_pko_reg_bist_result_cn30xx cn38xxp2;
61278    struct cvmx_pko_reg_bist_result_cn50xx
61279    {
61280#if __BYTE_ORDER == __BIG_ENDIAN
61281        uint64_t reserved_33_63          : 31;
61282        uint64_t csr                     : 1;       /**< BiST result of CSR      memories (0=pass, !0=fail) */
61283        uint64_t iob                     : 1;       /**< BiST result of IOB      memories (0=pass, !0=fail) */
61284        uint64_t out_crc                 : 1;       /**< BiST result of OUT_CRC  memories (0=pass, !0=fail) */
61285        uint64_t out_ctl                 : 3;       /**< BiST result of OUT_CTL  memories (0=pass, !0=fail) */
61286        uint64_t out_sta                 : 1;       /**< BiST result of OUT_STA  memories (0=pass, !0=fail) */
61287        uint64_t out_wif                 : 1;       /**< BiST result of OUT_WIF  memories (0=pass, !0=fail) */
61288        uint64_t prt_chk                 : 3;       /**< BiST result of PRT_CHK  memories (0=pass, !0=fail) */
61289        uint64_t prt_nxt                 : 1;       /**< BiST result of PRT_NXT  memories (0=pass, !0=fail) */
61290        uint64_t prt_psb                 : 6;       /**< BiST result of PRT_PSB  memories (0=pass, !0=fail) */
61291        uint64_t ncb_inb                 : 2;       /**< BiST result of NCB_INB  memories (0=pass, !0=fail) */
61292        uint64_t prt_qcb                 : 2;       /**< BiST result of PRT_QCB  memories (0=pass, !0=fail) */
61293        uint64_t prt_qsb                 : 3;       /**< BiST result of PRT_QSB  memories (0=pass, !0=fail) */
61294        uint64_t dat_dat                 : 4;       /**< BiST result of DAT_DAT  memories (0=pass, !0=fail) */
61295        uint64_t dat_ptr                 : 4;       /**< BiST result of DAT_PTR  memories (0=pass, !0=fail) */
61296#else
61297        uint64_t dat_ptr                 : 4;
61298        uint64_t dat_dat                 : 4;
61299        uint64_t prt_qsb                 : 3;
61300        uint64_t prt_qcb                 : 2;
61301        uint64_t ncb_inb                 : 2;
61302        uint64_t prt_psb                 : 6;
61303        uint64_t prt_nxt                 : 1;
61304        uint64_t prt_chk                 : 3;
61305        uint64_t out_wif                 : 1;
61306        uint64_t out_sta                 : 1;
61307        uint64_t out_ctl                 : 3;
61308        uint64_t out_crc                 : 1;
61309        uint64_t iob                     : 1;
61310        uint64_t csr                     : 1;
61311        uint64_t reserved_33_63          : 31;
61312#endif
61313    } cn50xx;
61314    struct cvmx_pko_reg_bist_result_cn52xx
61315    {
61316#if __BYTE_ORDER == __BIG_ENDIAN
61317        uint64_t reserved_35_63          : 29;
61318        uint64_t csr                     : 1;       /**< BiST result of CSR      memories (0=pass, !0=fail) */
61319        uint64_t iob                     : 1;       /**< BiST result of IOB      memories (0=pass, !0=fail) */
61320        uint64_t out_dat                 : 1;       /**< BiST result of OUT_DAT  memories (0=pass, !0=fail) */
61321        uint64_t out_ctl                 : 3;       /**< BiST result of OUT_CTL  memories (0=pass, !0=fail) */
61322        uint64_t out_sta                 : 1;       /**< BiST result of OUT_STA  memories (0=pass, !0=fail) */
61323        uint64_t out_wif                 : 1;       /**< BiST result of OUT_WIF  memories (0=pass, !0=fail) */
61324        uint64_t prt_chk                 : 3;       /**< BiST result of PRT_CHK  memories (0=pass, !0=fail) */
61325        uint64_t prt_nxt                 : 1;       /**< BiST result of PRT_NXT  memories (0=pass, !0=fail) */
61326        uint64_t prt_psb                 : 8;       /**< BiST result of PRT_PSB  memories (0=pass, !0=fail) */
61327        uint64_t ncb_inb                 : 2;       /**< BiST result of NCB_INB  memories (0=pass, !0=fail) */
61328        uint64_t prt_qcb                 : 2;       /**< BiST result of PRT_QCB  memories (0=pass, !0=fail) */
61329        uint64_t prt_qsb                 : 3;       /**< BiST result of PRT_QSB  memories (0=pass, !0=fail) */
61330        uint64_t prt_ctl                 : 2;       /**< BiST result of PRT_CTL  memories (0=pass, !0=fail) */
61331        uint64_t dat_dat                 : 2;       /**< BiST result of DAT_DAT  memories (0=pass, !0=fail) */
61332        uint64_t dat_ptr                 : 4;       /**< BiST result of DAT_PTR  memories (0=pass, !0=fail) */
61333#else
61334        uint64_t dat_ptr                 : 4;
61335        uint64_t dat_dat                 : 2;
61336        uint64_t prt_ctl                 : 2;
61337        uint64_t prt_qsb                 : 3;
61338        uint64_t prt_qcb                 : 2;
61339        uint64_t ncb_inb                 : 2;
61340        uint64_t prt_psb                 : 8;
61341        uint64_t prt_nxt                 : 1;
61342        uint64_t prt_chk                 : 3;
61343        uint64_t out_wif                 : 1;
61344        uint64_t out_sta                 : 1;
61345        uint64_t out_ctl                 : 3;
61346        uint64_t out_dat                 : 1;
61347        uint64_t iob                     : 1;
61348        uint64_t csr                     : 1;
61349        uint64_t reserved_35_63          : 29;
61350#endif
61351    } cn52xx;
61352    struct cvmx_pko_reg_bist_result_cn52xx cn52xxp1;
61353    struct cvmx_pko_reg_bist_result_cn52xx cn56xx;
61354    struct cvmx_pko_reg_bist_result_cn52xx cn56xxp1;
61355    struct cvmx_pko_reg_bist_result_cn50xx cn58xx;
61356    struct cvmx_pko_reg_bist_result_cn50xx cn58xxp1;
61357} cvmx_pko_reg_bist_result_t;
61358
61359
61360/**
61361 * cvmx_pko_reg_cmd_buf
61362 *
61363 * Notes:
61364 * Sets the command buffer parameters
61365 * The size of the command buffer segments is measured in uint64s.  The pool specifies (1 of 8 free
61366 * lists to be used when freeing command buffer segments.
61367 */
61368typedef union
61369{
61370    uint64_t u64;
61371    struct cvmx_pko_reg_cmd_buf_s
61372    {
61373#if __BYTE_ORDER == __BIG_ENDIAN
61374        uint64_t reserved_23_63          : 41;
61375        uint64_t pool                    : 3;       /**< Free list used to free command buffer segments */
61376        uint64_t reserved_13_19          : 7;
61377        uint64_t size                    : 13;      /**< Number of uint64s per command buffer segment */
61378#else
61379        uint64_t size                    : 13;
61380        uint64_t reserved_13_19          : 7;
61381        uint64_t pool                    : 3;
61382        uint64_t reserved_23_63          : 41;
61383#endif
61384    } s;
61385    struct cvmx_pko_reg_cmd_buf_s        cn30xx;
61386    struct cvmx_pko_reg_cmd_buf_s        cn31xx;
61387    struct cvmx_pko_reg_cmd_buf_s        cn38xx;
61388    struct cvmx_pko_reg_cmd_buf_s        cn38xxp2;
61389    struct cvmx_pko_reg_cmd_buf_s        cn50xx;
61390    struct cvmx_pko_reg_cmd_buf_s        cn52xx;
61391    struct cvmx_pko_reg_cmd_buf_s        cn52xxp1;
61392    struct cvmx_pko_reg_cmd_buf_s        cn56xx;
61393    struct cvmx_pko_reg_cmd_buf_s        cn56xxp1;
61394    struct cvmx_pko_reg_cmd_buf_s        cn58xx;
61395    struct cvmx_pko_reg_cmd_buf_s        cn58xxp1;
61396} cvmx_pko_reg_cmd_buf_t;
61397
61398
61399/**
61400 * cvmx_pko_reg_crc_ctl#
61401 *
61402 * Notes:
61403 * Controls datapath reflection when calculating CRC
61404 *
61405 */
61406typedef union
61407{
61408    uint64_t u64;
61409    struct cvmx_pko_reg_crc_ctlx_s
61410    {
61411#if __BYTE_ORDER == __BIG_ENDIAN
61412        uint64_t reserved_2_63           : 62;
61413        uint64_t invres                  : 1;       /**< Invert the result */
61414        uint64_t refin                   : 1;       /**< Reflect the bits in each byte.
61415                                                          Byte order does not change.
61416                                                         - 0: CRC is calculated MSB to LSB
61417                                                         - 1: CRC is calculated MLB to MSB */
61418#else
61419        uint64_t refin                   : 1;
61420        uint64_t invres                  : 1;
61421        uint64_t reserved_2_63           : 62;
61422#endif
61423    } s;
61424    struct cvmx_pko_reg_crc_ctlx_s       cn38xx;
61425    struct cvmx_pko_reg_crc_ctlx_s       cn38xxp2;
61426    struct cvmx_pko_reg_crc_ctlx_s       cn58xx;
61427    struct cvmx_pko_reg_crc_ctlx_s       cn58xxp1;
61428} cvmx_pko_reg_crc_ctlx_t;
61429
61430
61431/**
61432 * cvmx_pko_reg_crc_enable
61433 *
61434 * Notes:
61435 * Enables CRC for the GMX ports.
61436 *
61437 */
61438typedef union
61439{
61440    uint64_t u64;
61441    struct cvmx_pko_reg_crc_enable_s
61442    {
61443#if __BYTE_ORDER == __BIG_ENDIAN
61444        uint64_t reserved_32_63          : 32;
61445        uint64_t enable                  : 32;      /**< Mask for ports 31-0 to enable CRC
61446                                                         Mask bit==0 means CRC not enabled
61447                                                         Mask bit==1 means CRC     enabled
61448                                                         Note that CRC should be enabled only when using SPI4.2 */
61449#else
61450        uint64_t enable                  : 32;
61451        uint64_t reserved_32_63          : 32;
61452#endif
61453    } s;
61454    struct cvmx_pko_reg_crc_enable_s     cn38xx;
61455    struct cvmx_pko_reg_crc_enable_s     cn38xxp2;
61456    struct cvmx_pko_reg_crc_enable_s     cn58xx;
61457    struct cvmx_pko_reg_crc_enable_s     cn58xxp1;
61458} cvmx_pko_reg_crc_enable_t;
61459
61460
61461/**
61462 * cvmx_pko_reg_crc_iv#
61463 *
61464 * Notes:
61465 * Determines the IV used by the CRC algorithm
61466 * * PKO_CRC_IV
61467 *  PKO_CRC_IV controls the initial state of the CRC algorithm.  Octane can
61468 *  support a wide range of CRC algorithms and as such, the IV must be
61469 *  carefully constructed to meet the specific algorithm.  The code below
61470 *  determines the value to program into Octane based on the algorthim's IV
61471 *  and width.  In the case of Octane, the width should always be 32.
61472 *
61473 *  PKO_CRC_IV0 sets the IV for ports 0-15 while PKO_CRC_IV1 sets the IV for
61474 *  ports 16-31.
61475 *
61476 *   @verbatim
61477 *   unsigned octane_crc_iv(unsigned algorithm_iv, unsigned poly, unsigned w)
61478 *   [
61479 *     int i;
61480 *     int doit;
61481 *     unsigned int current_val = algorithm_iv;
61482 *
61483 *     for(i = 0; i < w; i++) [
61484 *       doit = current_val & 0x1;
61485 *
61486 *       if(doit) current_val ^= poly;
61487 *       assert(!(current_val & 0x1));
61488 *
61489 *       current_val = (current_val >> 1) | (doit << (w-1));
61490 *     ]
61491 *
61492 *     return current_val;
61493 *   ]
61494 *   @endverbatim
61495 */
61496typedef union
61497{
61498    uint64_t u64;
61499    struct cvmx_pko_reg_crc_ivx_s
61500    {
61501#if __BYTE_ORDER == __BIG_ENDIAN
61502        uint64_t reserved_32_63          : 32;
61503        uint64_t iv                      : 32;      /**< IV used by the CRC algorithm.  Default is FCS32. */
61504#else
61505        uint64_t iv                      : 32;
61506        uint64_t reserved_32_63          : 32;
61507#endif
61508    } s;
61509    struct cvmx_pko_reg_crc_ivx_s        cn38xx;
61510    struct cvmx_pko_reg_crc_ivx_s        cn38xxp2;
61511    struct cvmx_pko_reg_crc_ivx_s        cn58xx;
61512    struct cvmx_pko_reg_crc_ivx_s        cn58xxp1;
61513} cvmx_pko_reg_crc_ivx_t;
61514
61515
61516/**
61517 * cvmx_pko_reg_debug0
61518 *
61519 * Notes:
61520 * Note that this CSR is present only in chip revisions beginning with pass2.
61521 *
61522 */
61523typedef union
61524{
61525    uint64_t u64;
61526    struct cvmx_pko_reg_debug0_s
61527    {
61528#if __BYTE_ORDER == __BIG_ENDIAN
61529        uint64_t asserts                 : 64;      /**< Various assertion checks */
61530#else
61531        uint64_t asserts                 : 64;
61532#endif
61533    } s;
61534    struct cvmx_pko_reg_debug0_cn30xx
61535    {
61536#if __BYTE_ORDER == __BIG_ENDIAN
61537        uint64_t reserved_17_63          : 47;
61538        uint64_t asserts                 : 17;      /**< Various assertion checks */
61539#else
61540        uint64_t asserts                 : 17;
61541        uint64_t reserved_17_63          : 47;
61542#endif
61543    } cn30xx;
61544    struct cvmx_pko_reg_debug0_cn30xx    cn31xx;
61545    struct cvmx_pko_reg_debug0_cn30xx    cn38xx;
61546    struct cvmx_pko_reg_debug0_cn30xx    cn38xxp2;
61547    struct cvmx_pko_reg_debug0_s         cn50xx;
61548    struct cvmx_pko_reg_debug0_s         cn52xx;
61549    struct cvmx_pko_reg_debug0_s         cn52xxp1;
61550    struct cvmx_pko_reg_debug0_s         cn56xx;
61551    struct cvmx_pko_reg_debug0_s         cn56xxp1;
61552    struct cvmx_pko_reg_debug0_s         cn58xx;
61553    struct cvmx_pko_reg_debug0_s         cn58xxp1;
61554} cvmx_pko_reg_debug0_t;
61555
61556
61557/**
61558 * cvmx_pko_reg_debug1
61559 */
61560typedef union
61561{
61562    uint64_t u64;
61563    struct cvmx_pko_reg_debug1_s
61564    {
61565#if __BYTE_ORDER == __BIG_ENDIAN
61566        uint64_t asserts                 : 64;      /**< Various assertion checks */
61567#else
61568        uint64_t asserts                 : 64;
61569#endif
61570    } s;
61571    struct cvmx_pko_reg_debug1_s         cn50xx;
61572    struct cvmx_pko_reg_debug1_s         cn52xx;
61573    struct cvmx_pko_reg_debug1_s         cn52xxp1;
61574    struct cvmx_pko_reg_debug1_s         cn56xx;
61575    struct cvmx_pko_reg_debug1_s         cn56xxp1;
61576    struct cvmx_pko_reg_debug1_s         cn58xx;
61577    struct cvmx_pko_reg_debug1_s         cn58xxp1;
61578} cvmx_pko_reg_debug1_t;
61579
61580
61581/**
61582 * cvmx_pko_reg_debug2
61583 */
61584typedef union
61585{
61586    uint64_t u64;
61587    struct cvmx_pko_reg_debug2_s
61588    {
61589#if __BYTE_ORDER == __BIG_ENDIAN
61590        uint64_t asserts                 : 64;      /**< Various assertion checks */
61591#else
61592        uint64_t asserts                 : 64;
61593#endif
61594    } s;
61595    struct cvmx_pko_reg_debug2_s         cn50xx;
61596    struct cvmx_pko_reg_debug2_s         cn52xx;
61597    struct cvmx_pko_reg_debug2_s         cn52xxp1;
61598    struct cvmx_pko_reg_debug2_s         cn56xx;
61599    struct cvmx_pko_reg_debug2_s         cn56xxp1;
61600    struct cvmx_pko_reg_debug2_s         cn58xx;
61601    struct cvmx_pko_reg_debug2_s         cn58xxp1;
61602} cvmx_pko_reg_debug2_t;
61603
61604
61605/**
61606 * cvmx_pko_reg_debug3
61607 */
61608typedef union
61609{
61610    uint64_t u64;
61611    struct cvmx_pko_reg_debug3_s
61612    {
61613#if __BYTE_ORDER == __BIG_ENDIAN
61614        uint64_t asserts                 : 64;      /**< Various assertion checks */
61615#else
61616        uint64_t asserts                 : 64;
61617#endif
61618    } s;
61619    struct cvmx_pko_reg_debug3_s         cn50xx;
61620    struct cvmx_pko_reg_debug3_s         cn52xx;
61621    struct cvmx_pko_reg_debug3_s         cn52xxp1;
61622    struct cvmx_pko_reg_debug3_s         cn56xx;
61623    struct cvmx_pko_reg_debug3_s         cn56xxp1;
61624    struct cvmx_pko_reg_debug3_s         cn58xx;
61625    struct cvmx_pko_reg_debug3_s         cn58xxp1;
61626} cvmx_pko_reg_debug3_t;
61627
61628
61629/**
61630 * cvmx_pko_reg_engine_inflight
61631 *
61632 * Notes:
61633 * Sets the maximum number of inflight packets, per engine.  Values greater than 4 are illegal.
61634 * Setting an engine's value to 0 effectively stops the engine.
61635 * Note that engines 4-7 do not exist
61636 */
61637typedef union
61638{
61639    uint64_t u64;
61640    struct cvmx_pko_reg_engine_inflight_s
61641    {
61642#if __BYTE_ORDER == __BIG_ENDIAN
61643        uint64_t reserved_40_63          : 24;
61644        uint64_t engine9                 : 4;       /**< Maximum number of inflight packets for engine9 */
61645        uint64_t engine8                 : 4;       /**< Maximum number of inflight packets for engine8 */
61646        uint64_t engine7                 : 4;       /**< Maximum number of inflight packets for engine7 */
61647        uint64_t engine6                 : 4;       /**< Maximum number of inflight packets for engine6 */
61648        uint64_t engine5                 : 4;       /**< Maximum number of inflight packets for engine5 */
61649        uint64_t engine4                 : 4;       /**< Maximum number of inflight packets for engine4 */
61650        uint64_t engine3                 : 4;       /**< Maximum number of inflight packets for engine3 */
61651        uint64_t engine2                 : 4;       /**< Maximum number of inflight packets for engine2 */
61652        uint64_t engine1                 : 4;       /**< Maximum number of inflight packets for engine1 */
61653        uint64_t engine0                 : 4;       /**< Maximum number of inflight packets for engine0 */
61654#else
61655        uint64_t engine0                 : 4;
61656        uint64_t engine1                 : 4;
61657        uint64_t engine2                 : 4;
61658        uint64_t engine3                 : 4;
61659        uint64_t engine4                 : 4;
61660        uint64_t engine5                 : 4;
61661        uint64_t engine6                 : 4;
61662        uint64_t engine7                 : 4;
61663        uint64_t engine8                 : 4;
61664        uint64_t engine9                 : 4;
61665        uint64_t reserved_40_63          : 24;
61666#endif
61667    } s;
61668    struct cvmx_pko_reg_engine_inflight_s cn52xx;
61669    struct cvmx_pko_reg_engine_inflight_s cn52xxp1;
61670    struct cvmx_pko_reg_engine_inflight_s cn56xx;
61671    struct cvmx_pko_reg_engine_inflight_s cn56xxp1;
61672} cvmx_pko_reg_engine_inflight_t;
61673
61674
61675/**
61676 * cvmx_pko_reg_engine_thresh
61677 *
61678 * Notes:
61679 * When not enabled, packet data may be sent as soon as it is written into PKO's internal buffers.
61680 * When enabled and the packet fits entirely in the PKO's internal buffer, none of the packet data will
61681 * be sent until all of it has been written into the PKO's internal buffer.  Note that a packet is
61682 * considered to fit entirely only if the packet's size is <= BUFFER_SIZE-8.  When enabled and the
61683 * packet does not fit entirely in the PKO's internal buffer, none of the packet data will be sent until
61684 * at least BUFFER_SIZE-256 bytes of the packet have been written into the PKO's internal buffer
61685 * (note that BUFFER_SIZE is a function of PKO_REG_GMX_PORT_MODE above)
61686 * Note that engines 4-7 do not exist, so MASK<7:4> MBZ
61687 */
61688typedef union
61689{
61690    uint64_t u64;
61691    struct cvmx_pko_reg_engine_thresh_s
61692    {
61693#if __BYTE_ORDER == __BIG_ENDIAN
61694        uint64_t reserved_10_63          : 54;
61695        uint64_t mask                    : 10;      /**< Mask[n]=0 disables packet send threshold for engine n
61696                                                         Mask[n]=1 enables  packet send threshold for engine n  $PR       NS */
61697#else
61698        uint64_t mask                    : 10;
61699        uint64_t reserved_10_63          : 54;
61700#endif
61701    } s;
61702    struct cvmx_pko_reg_engine_thresh_s  cn52xx;
61703    struct cvmx_pko_reg_engine_thresh_s  cn52xxp1;
61704    struct cvmx_pko_reg_engine_thresh_s  cn56xx;
61705    struct cvmx_pko_reg_engine_thresh_s  cn56xxp1;
61706} cvmx_pko_reg_engine_thresh_t;
61707
61708
61709/**
61710 * cvmx_pko_reg_error
61711 *
61712 * Notes:
61713 * Note that this CSR is present only in chip revisions beginning with pass2.
61714 *
61715 */
61716typedef union
61717{
61718    uint64_t u64;
61719    struct cvmx_pko_reg_error_s
61720    {
61721#if __BYTE_ORDER == __BIG_ENDIAN
61722        uint64_t reserved_3_63           : 61;
61723        uint64_t currzero                : 1;       /**< A packet data pointer has size=0 */
61724        uint64_t doorbell                : 1;       /**< A doorbell count has overflowed */
61725        uint64_t parity                  : 1;       /**< Read parity error at port data buffer */
61726#else
61727        uint64_t parity                  : 1;
61728        uint64_t doorbell                : 1;
61729        uint64_t currzero                : 1;
61730        uint64_t reserved_3_63           : 61;
61731#endif
61732    } s;
61733    struct cvmx_pko_reg_error_cn30xx
61734    {
61735#if __BYTE_ORDER == __BIG_ENDIAN
61736        uint64_t reserved_2_63           : 62;
61737        uint64_t doorbell                : 1;       /**< A doorbell count has overflowed */
61738        uint64_t parity                  : 1;       /**< Read parity error at port data buffer */
61739#else
61740        uint64_t parity                  : 1;
61741        uint64_t doorbell                : 1;
61742        uint64_t reserved_2_63           : 62;
61743#endif
61744    } cn30xx;
61745    struct cvmx_pko_reg_error_cn30xx     cn31xx;
61746    struct cvmx_pko_reg_error_cn30xx     cn38xx;
61747    struct cvmx_pko_reg_error_cn30xx     cn38xxp2;
61748    struct cvmx_pko_reg_error_s          cn50xx;
61749    struct cvmx_pko_reg_error_s          cn52xx;
61750    struct cvmx_pko_reg_error_s          cn52xxp1;
61751    struct cvmx_pko_reg_error_s          cn56xx;
61752    struct cvmx_pko_reg_error_s          cn56xxp1;
61753    struct cvmx_pko_reg_error_s          cn58xx;
61754    struct cvmx_pko_reg_error_s          cn58xxp1;
61755} cvmx_pko_reg_error_t;
61756
61757
61758/**
61759 * cvmx_pko_reg_flags
61760 *
61761 * Notes:
61762 * When set, ENA_PKO enables the PKO picker and places the PKO in normal operation.  When set, ENA_DWB
61763 * enables the use of DontWriteBacks during the buffer freeing operations.  When not set, STORE_BE inverts
61764 * bits[2:0] of the STORE0 byte write address.  When set, RESET causes a 4-cycle reset pulse to the
61765 * entire box.
61766 */
61767typedef union
61768{
61769    uint64_t u64;
61770    struct cvmx_pko_reg_flags_s
61771    {
61772#if __BYTE_ORDER == __BIG_ENDIAN
61773        uint64_t reserved_4_63           : 60;
61774        uint64_t reset                   : 1;       /**< Reset oneshot pulse */
61775        uint64_t store_be                : 1;       /**< Force STORE0 byte write address to big endian */
61776        uint64_t ena_dwb                 : 1;       /**< Set to enable DontWriteBacks */
61777        uint64_t ena_pko                 : 1;       /**< Set to enable the PKO picker */
61778#else
61779        uint64_t ena_pko                 : 1;
61780        uint64_t ena_dwb                 : 1;
61781        uint64_t store_be                : 1;
61782        uint64_t reset                   : 1;
61783        uint64_t reserved_4_63           : 60;
61784#endif
61785    } s;
61786    struct cvmx_pko_reg_flags_s          cn30xx;
61787    struct cvmx_pko_reg_flags_s          cn31xx;
61788    struct cvmx_pko_reg_flags_s          cn38xx;
61789    struct cvmx_pko_reg_flags_s          cn38xxp2;
61790    struct cvmx_pko_reg_flags_s          cn50xx;
61791    struct cvmx_pko_reg_flags_s          cn52xx;
61792    struct cvmx_pko_reg_flags_s          cn52xxp1;
61793    struct cvmx_pko_reg_flags_s          cn56xx;
61794    struct cvmx_pko_reg_flags_s          cn56xxp1;
61795    struct cvmx_pko_reg_flags_s          cn58xx;
61796    struct cvmx_pko_reg_flags_s          cn58xxp1;
61797} cvmx_pko_reg_flags_t;
61798
61799
61800/**
61801 * cvmx_pko_reg_gmx_port_mode
61802 *
61803 * Notes:
61804 * The system has a total of 4 + 0 + 4 + 4 ports and 4 + 0 + 1 + 1 engines (GM0 + GM1 + PCI + LOOP).
61805 * This CSR sets the number of GMX0 ports and amount of local storage per engine.
61806 * It has no effect on the number of ports or amount of local storage per engine for
61807 * PCI or LOOP.  When all GMX ports are used (MODE0=2), each GMX engine has 2.5kB of local
61808 * storage.  Increasing the value of MODEn by 1 decreases the number of GMX ports by a power of 2 and
61809 * increases the local storage per PKO GMX engine by a power of 2.
61810 * Modes 0 and 1 are illegal and, if selected, are treated as mode 2.
61811 *
61812 * MODE[n] GM[0] PCI   LOOP  GM[0]                      PCI            LOOP
61813 *         ports ports ports storage/engine             storage/engine storage/engine
61814 * 0       4     4     4       2.5kB                    2.5kB          2.5kB
61815 * 1       4     4     4       2.5kB                    2.5kB          2.5kB
61816 * 2       4     4     4       2.5kB                    2.5kB          2.5kB
61817 * 3       2     4     4       5.0kB                    2.5kB          2.5kB
61818 * 4       1     4     4      10.0kB                    2.5kB          2.5kB
61819 */
61820typedef union
61821{
61822    uint64_t u64;
61823    struct cvmx_pko_reg_gmx_port_mode_s
61824    {
61825#if __BYTE_ORDER == __BIG_ENDIAN
61826        uint64_t reserved_6_63           : 58;
61827        uint64_t mode1                   : 3;       /**< # of GM1 ports = 16 >> MODE1, 0 <= MODE1 <= 5 */
61828        uint64_t mode0                   : 3;       /**< # of GM0 ports = 16 >> MODE0, 0 <= MODE0 <= 5 */
61829#else
61830        uint64_t mode0                   : 3;
61831        uint64_t mode1                   : 3;
61832        uint64_t reserved_6_63           : 58;
61833#endif
61834    } s;
61835    struct cvmx_pko_reg_gmx_port_mode_s  cn30xx;
61836    struct cvmx_pko_reg_gmx_port_mode_s  cn31xx;
61837    struct cvmx_pko_reg_gmx_port_mode_s  cn38xx;
61838    struct cvmx_pko_reg_gmx_port_mode_s  cn38xxp2;
61839    struct cvmx_pko_reg_gmx_port_mode_s  cn50xx;
61840    struct cvmx_pko_reg_gmx_port_mode_s  cn52xx;
61841    struct cvmx_pko_reg_gmx_port_mode_s  cn52xxp1;
61842    struct cvmx_pko_reg_gmx_port_mode_s  cn56xx;
61843    struct cvmx_pko_reg_gmx_port_mode_s  cn56xxp1;
61844    struct cvmx_pko_reg_gmx_port_mode_s  cn58xx;
61845    struct cvmx_pko_reg_gmx_port_mode_s  cn58xxp1;
61846} cvmx_pko_reg_gmx_port_mode_t;
61847
61848
61849/**
61850 * cvmx_pko_reg_int_mask
61851 *
61852 * Notes:
61853 * When a mask bit is set, the corresponding interrupt is enabled.
61854 *
61855 */
61856typedef union
61857{
61858    uint64_t u64;
61859    struct cvmx_pko_reg_int_mask_s
61860    {
61861#if __BYTE_ORDER == __BIG_ENDIAN
61862        uint64_t reserved_3_63           : 61;
61863        uint64_t currzero                : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[2] above */
61864        uint64_t doorbell                : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[1] above */
61865        uint64_t parity                  : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[0] above */
61866#else
61867        uint64_t parity                  : 1;
61868        uint64_t doorbell                : 1;
61869        uint64_t currzero                : 1;
61870        uint64_t reserved_3_63           : 61;
61871#endif
61872    } s;
61873    struct cvmx_pko_reg_int_mask_cn30xx
61874    {
61875#if __BYTE_ORDER == __BIG_ENDIAN
61876        uint64_t reserved_2_63           : 62;
61877        uint64_t doorbell                : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[1] above */
61878        uint64_t parity                  : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[0] above */
61879#else
61880        uint64_t parity                  : 1;
61881        uint64_t doorbell                : 1;
61882        uint64_t reserved_2_63           : 62;
61883#endif
61884    } cn30xx;
61885    struct cvmx_pko_reg_int_mask_cn30xx  cn31xx;
61886    struct cvmx_pko_reg_int_mask_cn30xx  cn38xx;
61887    struct cvmx_pko_reg_int_mask_cn30xx  cn38xxp2;
61888    struct cvmx_pko_reg_int_mask_s       cn50xx;
61889    struct cvmx_pko_reg_int_mask_s       cn52xx;
61890    struct cvmx_pko_reg_int_mask_s       cn52xxp1;
61891    struct cvmx_pko_reg_int_mask_s       cn56xx;
61892    struct cvmx_pko_reg_int_mask_s       cn56xxp1;
61893    struct cvmx_pko_reg_int_mask_s       cn58xx;
61894    struct cvmx_pko_reg_int_mask_s       cn58xxp1;
61895} cvmx_pko_reg_int_mask_t;
61896
61897
61898/**
61899 * cvmx_pko_reg_queue_mode
61900 *
61901 * Notes:
61902 * Sets the number of queues and amount of local storage per queue
61903 * The system has a total of 256 queues and (256*8) words of local command storage.  This CSR sets the
61904 * number of queues that are used.  Increasing the value of MODE by 1 decreases the number of queues
61905 * by a power of 2 and increases the local storage per queue by a power of 2.
61906 * MODEn queues storage/queue
61907 * 0     256     64B ( 8 words)
61908 * 1     128    128B (16 words)
61909 * 2      64    256B (32 words)
61910 */
61911typedef union
61912{
61913    uint64_t u64;
61914    struct cvmx_pko_reg_queue_mode_s
61915    {
61916#if __BYTE_ORDER == __BIG_ENDIAN
61917        uint64_t reserved_2_63           : 62;
61918        uint64_t mode                    : 2;       /**< # of queues = 256 >> MODE, 0 <= MODE <=2 */
61919#else
61920        uint64_t mode                    : 2;
61921        uint64_t reserved_2_63           : 62;
61922#endif
61923    } s;
61924    struct cvmx_pko_reg_queue_mode_s     cn30xx;
61925    struct cvmx_pko_reg_queue_mode_s     cn31xx;
61926    struct cvmx_pko_reg_queue_mode_s     cn38xx;
61927    struct cvmx_pko_reg_queue_mode_s     cn38xxp2;
61928    struct cvmx_pko_reg_queue_mode_s     cn50xx;
61929    struct cvmx_pko_reg_queue_mode_s     cn52xx;
61930    struct cvmx_pko_reg_queue_mode_s     cn52xxp1;
61931    struct cvmx_pko_reg_queue_mode_s     cn56xx;
61932    struct cvmx_pko_reg_queue_mode_s     cn56xxp1;
61933    struct cvmx_pko_reg_queue_mode_s     cn58xx;
61934    struct cvmx_pko_reg_queue_mode_s     cn58xxp1;
61935} cvmx_pko_reg_queue_mode_t;
61936
61937
61938/**
61939 * cvmx_pko_reg_queue_ptrs1
61940 *
61941 * Notes:
61942 * This CSR is used with PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS to allow access to queues 128-255
61943 * and to allow up mapping of up to 16 queues per port.  When programming queues 128-255, the
61944 * programming sequence must first write PKO_REG_QUEUE_PTRS1 and then write PKO_MEM_QUEUE_PTRS or
61945 * PKO_MEM_QUEUE_QOS for each queue.
61946 * See the descriptions of PKO_MEM_QUEUE_PTRS and PKO_MEM_QUEUE_QOS for further explanation of queue
61947 * programming.
61948 */
61949typedef union
61950{
61951    uint64_t u64;
61952    struct cvmx_pko_reg_queue_ptrs1_s
61953    {
61954#if __BYTE_ORDER == __BIG_ENDIAN
61955        uint64_t reserved_2_63           : 62;
61956        uint64_t idx3                    : 1;       /**< [3] of Index (distance from head) in the queue array */
61957        uint64_t qid7                    : 1;       /**< [7] of Queue ID */
61958#else
61959        uint64_t qid7                    : 1;
61960        uint64_t idx3                    : 1;
61961        uint64_t reserved_2_63           : 62;
61962#endif
61963    } s;
61964    struct cvmx_pko_reg_queue_ptrs1_s    cn50xx;
61965    struct cvmx_pko_reg_queue_ptrs1_s    cn52xx;
61966    struct cvmx_pko_reg_queue_ptrs1_s    cn52xxp1;
61967    struct cvmx_pko_reg_queue_ptrs1_s    cn56xx;
61968    struct cvmx_pko_reg_queue_ptrs1_s    cn56xxp1;
61969    struct cvmx_pko_reg_queue_ptrs1_s    cn58xx;
61970    struct cvmx_pko_reg_queue_ptrs1_s    cn58xxp1;
61971} cvmx_pko_reg_queue_ptrs1_t;
61972
61973
61974/**
61975 * cvmx_pko_reg_read_idx
61976 *
61977 * Notes:
61978 * Provides the read index during a CSR read operation to any of the CSRs that are physically stored
61979 * as memories.  The names of these CSRs begin with the prefix "PKO_MEM_".
61980 * IDX[7:0] is the read index.  INC[7:0] is an increment that is added to IDX[7:0] after any CSR read.
61981 * The intended use is to initially write this CSR such that IDX=0 and INC=1.  Then, the entire
61982 * contents of a CSR memory can be read with consecutive CSR read commands.
61983 */
61984typedef union
61985{
61986    uint64_t u64;
61987    struct cvmx_pko_reg_read_idx_s
61988    {
61989#if __BYTE_ORDER == __BIG_ENDIAN
61990        uint64_t reserved_16_63          : 48;
61991        uint64_t inc                     : 8;       /**< Increment to add to current index for next index */
61992        uint64_t index                   : 8;       /**< Index to use for next memory CSR read */
61993#else
61994        uint64_t index                   : 8;
61995        uint64_t inc                     : 8;
61996        uint64_t reserved_16_63          : 48;
61997#endif
61998    } s;
61999    struct cvmx_pko_reg_read_idx_s       cn30xx;
62000    struct cvmx_pko_reg_read_idx_s       cn31xx;
62001    struct cvmx_pko_reg_read_idx_s       cn38xx;
62002    struct cvmx_pko_reg_read_idx_s       cn38xxp2;
62003    struct cvmx_pko_reg_read_idx_s       cn50xx;
62004    struct cvmx_pko_reg_read_idx_s       cn52xx;
62005    struct cvmx_pko_reg_read_idx_s       cn52xxp1;
62006    struct cvmx_pko_reg_read_idx_s       cn56xx;
62007    struct cvmx_pko_reg_read_idx_s       cn56xxp1;
62008    struct cvmx_pko_reg_read_idx_s       cn58xx;
62009    struct cvmx_pko_reg_read_idx_s       cn58xxp1;
62010} cvmx_pko_reg_read_idx_t;
62011
62012
62013/**
62014 * cvmx_pow_bist_stat
62015 *
62016 * POW_BIST_STAT = POW BIST Status Register
62017 *
62018 * Contains the BIST status for the POW memories ('0' = pass, '1' = fail).
62019 *
62020 * Also contains the BIST status for the PP's.  Each bit in the PP field is the OR of all BIST
62021 * results for the corresponding physical PP ('0' = pass, '1' = fail).
62022 */
62023typedef union
62024{
62025    uint64_t u64;
62026    struct cvmx_pow_bist_stat_s
62027    {
62028#if __BYTE_ORDER == __BIG_ENDIAN
62029        uint64_t reserved_32_63          : 32;
62030        uint64_t pp                      : 16;      /**< Physical PP BIST status */
62031        uint64_t reserved_0_15           : 16;
62032#else
62033        uint64_t reserved_0_15           : 16;
62034        uint64_t pp                      : 16;
62035        uint64_t reserved_32_63          : 32;
62036#endif
62037    } s;
62038    struct cvmx_pow_bist_stat_cn30xx
62039    {
62040#if __BYTE_ORDER == __BIG_ENDIAN
62041        uint64_t reserved_17_63          : 47;
62042        uint64_t pp                      : 1;       /**< Physical PP BIST status */
62043        uint64_t reserved_9_15           : 7;
62044        uint64_t cam                     : 1;       /**< POW CAM BIST status */
62045        uint64_t nbt1                    : 1;       /**< NCB transmitter memory 1 BIST status */
62046        uint64_t nbt0                    : 1;       /**< NCB transmitter memory 0 BIST status */
62047        uint64_t index                   : 1;       /**< Index memory BIST status */
62048        uint64_t fidx                    : 1;       /**< Forward index memory BIST status */
62049        uint64_t nbr1                    : 1;       /**< NCB receiver memory 1 BIST status */
62050        uint64_t nbr0                    : 1;       /**< NCB receiver memory 0 BIST status */
62051        uint64_t pend                    : 1;       /**< Pending switch memory BIST status */
62052        uint64_t adr                     : 1;       /**< Address memory BIST status */
62053#else
62054        uint64_t adr                     : 1;
62055        uint64_t pend                    : 1;
62056        uint64_t nbr0                    : 1;
62057        uint64_t nbr1                    : 1;
62058        uint64_t fidx                    : 1;
62059        uint64_t index                   : 1;
62060        uint64_t nbt0                    : 1;
62061        uint64_t nbt1                    : 1;
62062        uint64_t cam                     : 1;
62063        uint64_t reserved_9_15           : 7;
62064        uint64_t pp                      : 1;
62065        uint64_t reserved_17_63          : 47;
62066#endif
62067    } cn30xx;
62068    struct cvmx_pow_bist_stat_cn31xx
62069    {
62070#if __BYTE_ORDER == __BIG_ENDIAN
62071        uint64_t reserved_18_63          : 46;
62072        uint64_t pp                      : 2;       /**< Physical PP BIST status */
62073        uint64_t reserved_9_15           : 7;
62074        uint64_t cam                     : 1;       /**< POW CAM BIST status */
62075        uint64_t nbt1                    : 1;       /**< NCB transmitter memory 1 BIST status */
62076        uint64_t nbt0                    : 1;       /**< NCB transmitter memory 0 BIST status */
62077        uint64_t index                   : 1;       /**< Index memory BIST status */
62078        uint64_t fidx                    : 1;       /**< Forward index memory BIST status */
62079        uint64_t nbr1                    : 1;       /**< NCB receiver memory 1 BIST status */
62080        uint64_t nbr0                    : 1;       /**< NCB receiver memory 0 BIST status */
62081        uint64_t pend                    : 1;       /**< Pending switch memory BIST status */
62082        uint64_t adr                     : 1;       /**< Address memory BIST status */
62083#else
62084        uint64_t adr                     : 1;
62085        uint64_t pend                    : 1;
62086        uint64_t nbr0                    : 1;
62087        uint64_t nbr1                    : 1;
62088        uint64_t fidx                    : 1;
62089        uint64_t index                   : 1;
62090        uint64_t nbt0                    : 1;
62091        uint64_t nbt1                    : 1;
62092        uint64_t cam                     : 1;
62093        uint64_t reserved_9_15           : 7;
62094        uint64_t pp                      : 2;
62095        uint64_t reserved_18_63          : 46;
62096#endif
62097    } cn31xx;
62098    struct cvmx_pow_bist_stat_cn38xx
62099    {
62100#if __BYTE_ORDER == __BIG_ENDIAN
62101        uint64_t reserved_32_63          : 32;
62102        uint64_t pp                      : 16;      /**< Physical PP BIST status */
62103        uint64_t reserved_10_15          : 6;
62104        uint64_t cam                     : 1;       /**< POW CAM BIST status */
62105        uint64_t nbt                     : 1;       /**< NCB transmitter memory BIST status */
62106        uint64_t index                   : 1;       /**< Index memory BIST status */
62107        uint64_t fidx                    : 1;       /**< Forward index memory BIST status */
62108        uint64_t nbr1                    : 1;       /**< NCB receiver memory 1 BIST status */
62109        uint64_t nbr0                    : 1;       /**< NCB receiver memory 0 BIST status */
62110        uint64_t pend1                   : 1;       /**< Pending switch memory 1 BIST status */
62111        uint64_t pend0                   : 1;       /**< Pending switch memory 0 BIST status */
62112        uint64_t adr1                    : 1;       /**< Address memory 1 BIST status */
62113        uint64_t adr0                    : 1;       /**< Address memory 0 BIST status */
62114#else
62115        uint64_t adr0                    : 1;
62116        uint64_t adr1                    : 1;
62117        uint64_t pend0                   : 1;
62118        uint64_t pend1                   : 1;
62119        uint64_t nbr0                    : 1;
62120        uint64_t nbr1                    : 1;
62121        uint64_t fidx                    : 1;
62122        uint64_t index                   : 1;
62123        uint64_t nbt                     : 1;
62124        uint64_t cam                     : 1;
62125        uint64_t reserved_10_15          : 6;
62126        uint64_t pp                      : 16;
62127        uint64_t reserved_32_63          : 32;
62128#endif
62129    } cn38xx;
62130    struct cvmx_pow_bist_stat_cn38xx     cn38xxp2;
62131    struct cvmx_pow_bist_stat_cn31xx     cn50xx;
62132    struct cvmx_pow_bist_stat_cn52xx
62133    {
62134#if __BYTE_ORDER == __BIG_ENDIAN
62135        uint64_t reserved_20_63          : 44;
62136        uint64_t pp                      : 4;       /**< Physical PP BIST status */
62137        uint64_t reserved_9_15           : 7;
62138        uint64_t cam                     : 1;       /**< POW CAM BIST status */
62139        uint64_t nbt1                    : 1;       /**< NCB transmitter memory 1 BIST status */
62140        uint64_t nbt0                    : 1;       /**< NCB transmitter memory 0 BIST status */
62141        uint64_t index                   : 1;       /**< Index memory BIST status */
62142        uint64_t fidx                    : 1;       /**< Forward index memory BIST status */
62143        uint64_t nbr1                    : 1;       /**< NCB receiver memory 1 BIST status */
62144        uint64_t nbr0                    : 1;       /**< NCB receiver memory 0 BIST status */
62145        uint64_t pend                    : 1;       /**< Pending switch memory BIST status */
62146        uint64_t adr                     : 1;       /**< Address memory BIST status */
62147#else
62148        uint64_t adr                     : 1;
62149        uint64_t pend                    : 1;
62150        uint64_t nbr0                    : 1;
62151        uint64_t nbr1                    : 1;
62152        uint64_t fidx                    : 1;
62153        uint64_t index                   : 1;
62154        uint64_t nbt0                    : 1;
62155        uint64_t nbt1                    : 1;
62156        uint64_t cam                     : 1;
62157        uint64_t reserved_9_15           : 7;
62158        uint64_t pp                      : 4;
62159        uint64_t reserved_20_63          : 44;
62160#endif
62161    } cn52xx;
62162    struct cvmx_pow_bist_stat_cn52xx     cn52xxp1;
62163    struct cvmx_pow_bist_stat_cn56xx
62164    {
62165#if __BYTE_ORDER == __BIG_ENDIAN
62166        uint64_t reserved_28_63          : 36;
62167        uint64_t pp                      : 12;      /**< Physical PP BIST status */
62168        uint64_t reserved_10_15          : 6;
62169        uint64_t cam                     : 1;       /**< POW CAM BIST status */
62170        uint64_t nbt                     : 1;       /**< NCB transmitter memory BIST status */
62171        uint64_t index                   : 1;       /**< Index memory BIST status */
62172        uint64_t fidx                    : 1;       /**< Forward index memory BIST status */
62173        uint64_t nbr1                    : 1;       /**< NCB receiver memory 1 BIST status */
62174        uint64_t nbr0                    : 1;       /**< NCB receiver memory 0 BIST status */
62175        uint64_t pend1                   : 1;       /**< Pending switch memory 1 BIST status */
62176        uint64_t pend0                   : 1;       /**< Pending switch memory 0 BIST status */
62177        uint64_t adr1                    : 1;       /**< Address memory 1 BIST status */
62178        uint64_t adr0                    : 1;       /**< Address memory 0 BIST status */
62179#else
62180        uint64_t adr0                    : 1;
62181        uint64_t adr1                    : 1;
62182        uint64_t pend0                   : 1;
62183        uint64_t pend1                   : 1;
62184        uint64_t nbr0                    : 1;
62185        uint64_t nbr1                    : 1;
62186        uint64_t fidx                    : 1;
62187        uint64_t index                   : 1;
62188        uint64_t nbt                     : 1;
62189        uint64_t cam                     : 1;
62190        uint64_t reserved_10_15          : 6;
62191        uint64_t pp                      : 12;
62192        uint64_t reserved_28_63          : 36;
62193#endif
62194    } cn56xx;
62195    struct cvmx_pow_bist_stat_cn56xx     cn56xxp1;
62196    struct cvmx_pow_bist_stat_cn38xx     cn58xx;
62197    struct cvmx_pow_bist_stat_cn38xx     cn58xxp1;
62198} cvmx_pow_bist_stat_t;
62199
62200
62201/**
62202 * cvmx_pow_ds_pc
62203 *
62204 * POW_DS_PC = POW De-Schedule Performance Counter
62205 *
62206 * Counts the number of de-schedule requests.  Write to clear.
62207 */
62208typedef union
62209{
62210    uint64_t u64;
62211    struct cvmx_pow_ds_pc_s
62212    {
62213#if __BYTE_ORDER == __BIG_ENDIAN
62214        uint64_t reserved_32_63          : 32;
62215        uint64_t ds_pc                   : 32;      /**< De-schedule performance counter */
62216#else
62217        uint64_t ds_pc                   : 32;
62218        uint64_t reserved_32_63          : 32;
62219#endif
62220    } s;
62221    struct cvmx_pow_ds_pc_s              cn30xx;
62222    struct cvmx_pow_ds_pc_s              cn31xx;
62223    struct cvmx_pow_ds_pc_s              cn38xx;
62224    struct cvmx_pow_ds_pc_s              cn38xxp2;
62225    struct cvmx_pow_ds_pc_s              cn50xx;
62226    struct cvmx_pow_ds_pc_s              cn52xx;
62227    struct cvmx_pow_ds_pc_s              cn52xxp1;
62228    struct cvmx_pow_ds_pc_s              cn56xx;
62229    struct cvmx_pow_ds_pc_s              cn56xxp1;
62230    struct cvmx_pow_ds_pc_s              cn58xx;
62231    struct cvmx_pow_ds_pc_s              cn58xxp1;
62232} cvmx_pow_ds_pc_t;
62233
62234
62235/**
62236 * cvmx_pow_ecc_err
62237 *
62238 * POW_ECC_ERR = POW ECC Error Register
62239 *
62240 * Contains the single and double error bits and the corresponding interrupt enables for the ECC-
62241 * protected POW index memory.  Also contains the syndrome value in the event of an ECC error.
62242 *
62243 * Also contains the remote pointer error bit and interrupt enable.  RPE is set when the POW detected
62244 * corruption on one or more of the input queue lists in L2/DRAM (POW's local copy of the tail pointer
62245 * for the L2/DRAM input queue did not match the last entry on the the list).   This is caused by
62246 * L2/DRAM corruption, and is generally a fatal error because it likely caused POW to load bad work
62247 * queue entries.
62248 *
62249 * This register also contains the illegal operation error bits and the corresponding interrupt
62250 * enables as follows:
62251 *
62252 *  <0> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL_NULL state
62253 *  <1> Received SWTAG/SWTAG_DESCH/DESCH/UPD_WQP from PP in NULL state
62254 *  <2> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/GET_WORK from PP with pending tag switch to ORDERED or ATOMIC
62255 *  <3> Received SWTAG/SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL_NULL
62256 *  <4> Received SWTAG_FULL/SWTAG_DESCH from PP with tag specified as NULL
62257 *  <5> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with GET_WORK pending
62258 *  <6> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with NULL_RD pending
62259 *  <7> Received CLR_NSCHED from PP with SWTAG_DESCH/DESCH/CLR_NSCHED pending
62260 *  <8> Received SWTAG/SWTAG_FULL/SWTAG_DESCH/DESCH/UPD_WQP/GET_WORK/NULL_RD from PP with CLR_NSCHED pending
62261 *  <9> Received illegal opcode
62262 * <10> Received ADD_WORK with tag specified as NULL_NULL
62263 * <11> Received DBG load from PP with DBG load pending
62264 * <12> Received CSR load from PP with CSR load pending
62265 */
62266typedef union
62267{
62268    uint64_t u64;
62269    struct cvmx_pow_ecc_err_s
62270    {
62271#if __BYTE_ORDER == __BIG_ENDIAN
62272        uint64_t reserved_45_63          : 19;
62273        uint64_t iop_ie                  : 13;      /**< Illegal operation interrupt enables */
62274        uint64_t reserved_29_31          : 3;
62275        uint64_t iop                     : 13;      /**< Illegal operation errors */
62276        uint64_t reserved_14_15          : 2;
62277        uint64_t rpe_ie                  : 1;       /**< Remote pointer error interrupt enable */
62278        uint64_t rpe                     : 1;       /**< Remote pointer error */
62279        uint64_t reserved_9_11           : 3;
62280        uint64_t syn                     : 5;       /**< Syndrome value (only valid when DBE or SBE is set) */
62281        uint64_t dbe_ie                  : 1;       /**< Double bit error interrupt enable */
62282        uint64_t sbe_ie                  : 1;       /**< Single bit error interrupt enable */
62283        uint64_t dbe                     : 1;       /**< Double bit error */
62284        uint64_t sbe                     : 1;       /**< Single bit error */
62285#else
62286        uint64_t sbe                     : 1;
62287        uint64_t dbe                     : 1;
62288        uint64_t sbe_ie                  : 1;
62289        uint64_t dbe_ie                  : 1;
62290        uint64_t syn                     : 5;
62291        uint64_t reserved_9_11           : 3;
62292        uint64_t rpe                     : 1;
62293        uint64_t rpe_ie                  : 1;
62294        uint64_t reserved_14_15          : 2;
62295        uint64_t iop                     : 13;
62296        uint64_t reserved_29_31          : 3;
62297        uint64_t iop_ie                  : 13;
62298        uint64_t reserved_45_63          : 19;
62299#endif
62300    } s;
62301    struct cvmx_pow_ecc_err_s            cn30xx;
62302    struct cvmx_pow_ecc_err_cn31xx
62303    {
62304#if __BYTE_ORDER == __BIG_ENDIAN
62305        uint64_t reserved_14_63          : 50;
62306        uint64_t rpe_ie                  : 1;       /**< Remote pointer error interrupt enable */
62307        uint64_t rpe                     : 1;       /**< Remote pointer error */
62308        uint64_t reserved_9_11           : 3;
62309        uint64_t syn                     : 5;       /**< Syndrome value (only valid when DBE or SBE is set) */
62310        uint64_t dbe_ie                  : 1;       /**< Double bit error interrupt enable */
62311        uint64_t sbe_ie                  : 1;       /**< Single bit error interrupt enable */
62312        uint64_t dbe                     : 1;       /**< Double bit error */
62313        uint64_t sbe                     : 1;       /**< Single bit error */
62314#else
62315        uint64_t sbe                     : 1;
62316        uint64_t dbe                     : 1;
62317        uint64_t sbe_ie                  : 1;
62318        uint64_t dbe_ie                  : 1;
62319        uint64_t syn                     : 5;
62320        uint64_t reserved_9_11           : 3;
62321        uint64_t rpe                     : 1;
62322        uint64_t rpe_ie                  : 1;
62323        uint64_t reserved_14_63          : 50;
62324#endif
62325    } cn31xx;
62326    struct cvmx_pow_ecc_err_s            cn38xx;
62327    struct cvmx_pow_ecc_err_cn31xx       cn38xxp2;
62328    struct cvmx_pow_ecc_err_s            cn50xx;
62329    struct cvmx_pow_ecc_err_s            cn52xx;
62330    struct cvmx_pow_ecc_err_s            cn52xxp1;
62331    struct cvmx_pow_ecc_err_s            cn56xx;
62332    struct cvmx_pow_ecc_err_s            cn56xxp1;
62333    struct cvmx_pow_ecc_err_s            cn58xx;
62334    struct cvmx_pow_ecc_err_s            cn58xxp1;
62335} cvmx_pow_ecc_err_t;
62336
62337
62338/**
62339 * cvmx_pow_int_ctl
62340 *
62341 * POW_INT_CTL = POW Internal Control Register
62342 *
62343 * Contains POW internal control values (for internal use, not typically for customer use):
62344 *
62345 * PFR_DIS = Disable high-performance pre-fetch reset mode.
62346 *
62347 * NBR_THR = Assert ncb__busy when the number of remaining coherent bus NBR credits equals is less
62348 * than or equal to this value.
62349 */
62350typedef union
62351{
62352    uint64_t u64;
62353    struct cvmx_pow_int_ctl_s
62354    {
62355#if __BYTE_ORDER == __BIG_ENDIAN
62356        uint64_t reserved_6_63           : 58;
62357        uint64_t pfr_dis                 : 1;       /**< High-perf pre-fetch reset mode disable */
62358        uint64_t nbr_thr                 : 5;       /**< NBR busy threshold */
62359#else
62360        uint64_t nbr_thr                 : 5;
62361        uint64_t pfr_dis                 : 1;
62362        uint64_t reserved_6_63           : 58;
62363#endif
62364    } s;
62365    struct cvmx_pow_int_ctl_s            cn30xx;
62366    struct cvmx_pow_int_ctl_s            cn31xx;
62367    struct cvmx_pow_int_ctl_s            cn38xx;
62368    struct cvmx_pow_int_ctl_s            cn38xxp2;
62369    struct cvmx_pow_int_ctl_s            cn50xx;
62370    struct cvmx_pow_int_ctl_s            cn52xx;
62371    struct cvmx_pow_int_ctl_s            cn52xxp1;
62372    struct cvmx_pow_int_ctl_s            cn56xx;
62373    struct cvmx_pow_int_ctl_s            cn56xxp1;
62374    struct cvmx_pow_int_ctl_s            cn58xx;
62375    struct cvmx_pow_int_ctl_s            cn58xxp1;
62376} cvmx_pow_int_ctl_t;
62377
62378
62379/**
62380 * cvmx_pow_iq_cnt#
62381 *
62382 * POW_IQ_CNTX = POW Input Queue Count Register (1 per QOS level)
62383 *
62384 * Contains a read-only count of the number of work queue entries for each QOS level.
62385 */
62386typedef union
62387{
62388    uint64_t u64;
62389    struct cvmx_pow_iq_cntx_s
62390    {
62391#if __BYTE_ORDER == __BIG_ENDIAN
62392        uint64_t reserved_32_63          : 32;
62393        uint64_t iq_cnt                  : 32;      /**< Input queue count for QOS level X */
62394#else
62395        uint64_t iq_cnt                  : 32;
62396        uint64_t reserved_32_63          : 32;
62397#endif
62398    } s;
62399    struct cvmx_pow_iq_cntx_s            cn30xx;
62400    struct cvmx_pow_iq_cntx_s            cn31xx;
62401    struct cvmx_pow_iq_cntx_s            cn38xx;
62402    struct cvmx_pow_iq_cntx_s            cn38xxp2;
62403    struct cvmx_pow_iq_cntx_s            cn50xx;
62404    struct cvmx_pow_iq_cntx_s            cn52xx;
62405    struct cvmx_pow_iq_cntx_s            cn52xxp1;
62406    struct cvmx_pow_iq_cntx_s            cn56xx;
62407    struct cvmx_pow_iq_cntx_s            cn56xxp1;
62408    struct cvmx_pow_iq_cntx_s            cn58xx;
62409    struct cvmx_pow_iq_cntx_s            cn58xxp1;
62410} cvmx_pow_iq_cntx_t;
62411
62412
62413/**
62414 * cvmx_pow_iq_com_cnt
62415 *
62416 * POW_IQ_COM_CNT = POW Input Queue Combined Count Register
62417 *
62418 * Contains a read-only count of the total number of work queue entries in all QOS levels.
62419 */
62420typedef union
62421{
62422    uint64_t u64;
62423    struct cvmx_pow_iq_com_cnt_s
62424    {
62425#if __BYTE_ORDER == __BIG_ENDIAN
62426        uint64_t reserved_32_63          : 32;
62427        uint64_t iq_cnt                  : 32;      /**< Input queue combined count */
62428#else
62429        uint64_t iq_cnt                  : 32;
62430        uint64_t reserved_32_63          : 32;
62431#endif
62432    } s;
62433    struct cvmx_pow_iq_com_cnt_s         cn30xx;
62434    struct cvmx_pow_iq_com_cnt_s         cn31xx;
62435    struct cvmx_pow_iq_com_cnt_s         cn38xx;
62436    struct cvmx_pow_iq_com_cnt_s         cn38xxp2;
62437    struct cvmx_pow_iq_com_cnt_s         cn50xx;
62438    struct cvmx_pow_iq_com_cnt_s         cn52xx;
62439    struct cvmx_pow_iq_com_cnt_s         cn52xxp1;
62440    struct cvmx_pow_iq_com_cnt_s         cn56xx;
62441    struct cvmx_pow_iq_com_cnt_s         cn56xxp1;
62442    struct cvmx_pow_iq_com_cnt_s         cn58xx;
62443    struct cvmx_pow_iq_com_cnt_s         cn58xxp1;
62444} cvmx_pow_iq_com_cnt_t;
62445
62446
62447/**
62448 * cvmx_pow_iq_int
62449 *
62450 * POW_IQ_INT = POW Input Queue Interrupt Register
62451 *
62452 * Contains the bits (1 per QOS level) that can trigger the input queue interrupt.  An IQ_INT bit
62453 * will be set if POW_IQ_CNT#QOS# changes and the resulting value is equal to POW_IQ_THR#QOS#.
62454 */
62455typedef union
62456{
62457    uint64_t u64;
62458    struct cvmx_pow_iq_int_s
62459    {
62460#if __BYTE_ORDER == __BIG_ENDIAN
62461        uint64_t reserved_8_63           : 56;
62462        uint64_t iq_int                  : 8;       /**< Input queue interrupt bits */
62463#else
62464        uint64_t iq_int                  : 8;
62465        uint64_t reserved_8_63           : 56;
62466#endif
62467    } s;
62468    struct cvmx_pow_iq_int_s             cn52xx;
62469    struct cvmx_pow_iq_int_s             cn52xxp1;
62470    struct cvmx_pow_iq_int_s             cn56xx;
62471    struct cvmx_pow_iq_int_s             cn56xxp1;
62472} cvmx_pow_iq_int_t;
62473
62474
62475/**
62476 * cvmx_pow_iq_int_en
62477 *
62478 * POW_IQ_INT_EN = POW Input Queue Interrupt Enable Register
62479 *
62480 * Contains the bits (1 per QOS level) that enable the input queue interrupt.
62481 */
62482typedef union
62483{
62484    uint64_t u64;
62485    struct cvmx_pow_iq_int_en_s
62486    {
62487#if __BYTE_ORDER == __BIG_ENDIAN
62488        uint64_t reserved_8_63           : 56;
62489        uint64_t int_en                  : 8;       /**< Input queue interrupt enable bits */
62490#else
62491        uint64_t int_en                  : 8;
62492        uint64_t reserved_8_63           : 56;
62493#endif
62494    } s;
62495    struct cvmx_pow_iq_int_en_s          cn52xx;
62496    struct cvmx_pow_iq_int_en_s          cn52xxp1;
62497    struct cvmx_pow_iq_int_en_s          cn56xx;
62498    struct cvmx_pow_iq_int_en_s          cn56xxp1;
62499} cvmx_pow_iq_int_en_t;
62500
62501
62502/**
62503 * cvmx_pow_iq_thr#
62504 *
62505 * POW_IQ_THRX = POW Input Queue Threshold Register (1 per QOS level)
62506 *
62507 * Threshold value for triggering input queue interrupts.
62508 */
62509typedef union
62510{
62511    uint64_t u64;
62512    struct cvmx_pow_iq_thrx_s
62513    {
62514#if __BYTE_ORDER == __BIG_ENDIAN
62515        uint64_t reserved_32_63          : 32;
62516        uint64_t iq_thr                  : 32;      /**< Input queue threshold for QOS level X */
62517#else
62518        uint64_t iq_thr                  : 32;
62519        uint64_t reserved_32_63          : 32;
62520#endif
62521    } s;
62522    struct cvmx_pow_iq_thrx_s            cn52xx;
62523    struct cvmx_pow_iq_thrx_s            cn52xxp1;
62524    struct cvmx_pow_iq_thrx_s            cn56xx;
62525    struct cvmx_pow_iq_thrx_s            cn56xxp1;
62526} cvmx_pow_iq_thrx_t;
62527
62528
62529/**
62530 * cvmx_pow_nos_cnt
62531 *
62532 * POW_NOS_CNT = POW No-schedule Count Register
62533 *
62534 * Contains the number of work queue entries on the no-schedule list.
62535 */
62536typedef union
62537{
62538    uint64_t u64;
62539    struct cvmx_pow_nos_cnt_s
62540    {
62541#if __BYTE_ORDER == __BIG_ENDIAN
62542        uint64_t reserved_12_63          : 52;
62543        uint64_t nos_cnt                 : 12;      /**< # of work queue entries on the no-schedule list */
62544#else
62545        uint64_t nos_cnt                 : 12;
62546        uint64_t reserved_12_63          : 52;
62547#endif
62548    } s;
62549    struct cvmx_pow_nos_cnt_cn30xx
62550    {
62551#if __BYTE_ORDER == __BIG_ENDIAN
62552        uint64_t reserved_7_63           : 57;
62553        uint64_t nos_cnt                 : 7;       /**< # of work queue entries on the no-schedule list */
62554#else
62555        uint64_t nos_cnt                 : 7;
62556        uint64_t reserved_7_63           : 57;
62557#endif
62558    } cn30xx;
62559    struct cvmx_pow_nos_cnt_cn31xx
62560    {
62561#if __BYTE_ORDER == __BIG_ENDIAN
62562        uint64_t reserved_9_63           : 55;
62563        uint64_t nos_cnt                 : 9;       /**< # of work queue entries on the no-schedule list */
62564#else
62565        uint64_t nos_cnt                 : 9;
62566        uint64_t reserved_9_63           : 55;
62567#endif
62568    } cn31xx;
62569    struct cvmx_pow_nos_cnt_s            cn38xx;
62570    struct cvmx_pow_nos_cnt_s            cn38xxp2;
62571    struct cvmx_pow_nos_cnt_cn31xx       cn50xx;
62572    struct cvmx_pow_nos_cnt_cn52xx
62573    {
62574#if __BYTE_ORDER == __BIG_ENDIAN
62575        uint64_t reserved_10_63          : 54;
62576        uint64_t nos_cnt                 : 10;      /**< # of work queue entries on the no-schedule list */
62577#else
62578        uint64_t nos_cnt                 : 10;
62579        uint64_t reserved_10_63          : 54;
62580#endif
62581    } cn52xx;
62582    struct cvmx_pow_nos_cnt_cn52xx       cn52xxp1;
62583    struct cvmx_pow_nos_cnt_s            cn56xx;
62584    struct cvmx_pow_nos_cnt_s            cn56xxp1;
62585    struct cvmx_pow_nos_cnt_s            cn58xx;
62586    struct cvmx_pow_nos_cnt_s            cn58xxp1;
62587} cvmx_pow_nos_cnt_t;
62588
62589
62590/**
62591 * cvmx_pow_nw_tim
62592 *
62593 * POW_NW_TIM = POW New Work Timer Period Register
62594 *
62595 * Sets the minimum period for a new work request timeout.  Period is specified in n-1 notation
62596 * where the increment value is 1024 clock cycles.  Thus, a value of 0x0 in this register translates
62597 * to 1024 cycles, 0x1 translates to 2048 cycles, 0x2 translates to 3072 cycles, etc...  Note: the
62598 * maximum period for a new work request timeout is 2 times the minimum period.  Note: the new work
62599 * request timeout counter is reset when this register is written.
62600 */
62601typedef union
62602{
62603    uint64_t u64;
62604    struct cvmx_pow_nw_tim_s
62605    {
62606#if __BYTE_ORDER == __BIG_ENDIAN
62607        uint64_t reserved_10_63          : 54;
62608        uint64_t nw_tim                  : 10;      /**< New work timer period */
62609#else
62610        uint64_t nw_tim                  : 10;
62611        uint64_t reserved_10_63          : 54;
62612#endif
62613    } s;
62614    struct cvmx_pow_nw_tim_s             cn30xx;
62615    struct cvmx_pow_nw_tim_s             cn31xx;
62616    struct cvmx_pow_nw_tim_s             cn38xx;
62617    struct cvmx_pow_nw_tim_s             cn38xxp2;
62618    struct cvmx_pow_nw_tim_s             cn50xx;
62619    struct cvmx_pow_nw_tim_s             cn52xx;
62620    struct cvmx_pow_nw_tim_s             cn52xxp1;
62621    struct cvmx_pow_nw_tim_s             cn56xx;
62622    struct cvmx_pow_nw_tim_s             cn56xxp1;
62623    struct cvmx_pow_nw_tim_s             cn58xx;
62624    struct cvmx_pow_nw_tim_s             cn58xxp1;
62625} cvmx_pow_nw_tim_t;
62626
62627
62628/**
62629 * cvmx_pow_pf_rst_msk
62630 *
62631 * POW_PF_RST_MSK = POW Prefetch Reset Mask
62632 *
62633 * Resets the work prefetch engine when work is stored in an internal buffer (either when the add
62634 * work arrives or when the work is reloaded from an external buffer) for an enabled QOS level
62635 * (1 bit per QOS level).
62636 */
62637typedef union
62638{
62639    uint64_t u64;
62640    struct cvmx_pow_pf_rst_msk_s
62641    {
62642#if __BYTE_ORDER == __BIG_ENDIAN
62643        uint64_t reserved_8_63           : 56;
62644        uint64_t rst_msk                 : 8;       /**< Prefetch engine reset mask */
62645#else
62646        uint64_t rst_msk                 : 8;
62647        uint64_t reserved_8_63           : 56;
62648#endif
62649    } s;
62650    struct cvmx_pow_pf_rst_msk_s         cn50xx;
62651    struct cvmx_pow_pf_rst_msk_s         cn52xx;
62652    struct cvmx_pow_pf_rst_msk_s         cn52xxp1;
62653    struct cvmx_pow_pf_rst_msk_s         cn56xx;
62654    struct cvmx_pow_pf_rst_msk_s         cn56xxp1;
62655    struct cvmx_pow_pf_rst_msk_s         cn58xx;
62656    struct cvmx_pow_pf_rst_msk_s         cn58xxp1;
62657} cvmx_pow_pf_rst_msk_t;
62658
62659
62660/**
62661 * cvmx_pow_pp_grp_msk#
62662 *
62663 * POW_PP_GRP_MSKX = POW PP Group Mask Register (1 per PP)
62664 *
62665 * Selects which group(s) a PP belongs to.  A '1' in any bit position sets the PP's membership in
62666 * the corresponding group.  A value of 0x0 will prevent the PP from receiving new work.  Note:
62667 * disabled or non-existent PP's should have this field set to 0xffff (the reset value) in order to
62668 * maximize POW performance.
62669 *
62670 * Also contains the QOS level priorities for each PP.  0x0 is highest priority, and 0x7 the lowest.
62671 * Setting the priority to 0xf will prevent that PP from receiving work from that QOS level.
62672 * Priority values 0x8 through 0xe are reserved and should not be used.  For a given PP, priorities
62673 * should begin at 0x0 and remain contiguous throughout the range.
62674 */
62675typedef union
62676{
62677    uint64_t u64;
62678    struct cvmx_pow_pp_grp_mskx_s
62679    {
62680#if __BYTE_ORDER == __BIG_ENDIAN
62681        uint64_t reserved_48_63          : 16;
62682        uint64_t qos7_pri                : 4;       /**< PPX priority for QOS level 7 */
62683        uint64_t qos6_pri                : 4;       /**< PPX priority for QOS level 6 */
62684        uint64_t qos5_pri                : 4;       /**< PPX priority for QOS level 5 */
62685        uint64_t qos4_pri                : 4;       /**< PPX priority for QOS level 4 */
62686        uint64_t qos3_pri                : 4;       /**< PPX priority for QOS level 3 */
62687        uint64_t qos2_pri                : 4;       /**< PPX priority for QOS level 2 */
62688        uint64_t qos1_pri                : 4;       /**< PPX priority for QOS level 1 */
62689        uint64_t qos0_pri                : 4;       /**< PPX priority for QOS level 0 */
62690        uint64_t grp_msk                 : 16;      /**< PPX group mask */
62691#else
62692        uint64_t grp_msk                 : 16;
62693        uint64_t qos0_pri                : 4;
62694        uint64_t qos1_pri                : 4;
62695        uint64_t qos2_pri                : 4;
62696        uint64_t qos3_pri                : 4;
62697        uint64_t qos4_pri                : 4;
62698        uint64_t qos5_pri                : 4;
62699        uint64_t qos6_pri                : 4;
62700        uint64_t qos7_pri                : 4;
62701        uint64_t reserved_48_63          : 16;
62702#endif
62703    } s;
62704    struct cvmx_pow_pp_grp_mskx_cn30xx
62705    {
62706#if __BYTE_ORDER == __BIG_ENDIAN
62707        uint64_t reserved_16_63          : 48;
62708        uint64_t grp_msk                 : 16;      /**< PPX group mask */
62709#else
62710        uint64_t grp_msk                 : 16;
62711        uint64_t reserved_16_63          : 48;
62712#endif
62713    } cn30xx;
62714    struct cvmx_pow_pp_grp_mskx_cn30xx   cn31xx;
62715    struct cvmx_pow_pp_grp_mskx_cn30xx   cn38xx;
62716    struct cvmx_pow_pp_grp_mskx_cn30xx   cn38xxp2;
62717    struct cvmx_pow_pp_grp_mskx_s        cn50xx;
62718    struct cvmx_pow_pp_grp_mskx_s        cn52xx;
62719    struct cvmx_pow_pp_grp_mskx_s        cn52xxp1;
62720    struct cvmx_pow_pp_grp_mskx_s        cn56xx;
62721    struct cvmx_pow_pp_grp_mskx_s        cn56xxp1;
62722    struct cvmx_pow_pp_grp_mskx_s        cn58xx;
62723    struct cvmx_pow_pp_grp_mskx_s        cn58xxp1;
62724} cvmx_pow_pp_grp_mskx_t;
62725
62726
62727/**
62728 * cvmx_pow_qos_rnd#
62729 *
62730 * POW_QOS_RNDX = POW QOS Issue Round Register (4 rounds per register x 8 registers = 32 rounds)
62731 *
62732 * Contains the round definitions for issuing new work.  Each round consists of 8 bits with each bit
62733 * corresponding to a QOS level.  There are 4 rounds contained in each register for a total of 32
62734 * rounds.  The issue logic traverses through the rounds sequentially (lowest round to highest round)
62735 * in an attempt to find new work for each PP.  Within each round, the issue logic traverses through
62736 * the QOS levels sequentially (highest QOS to lowest QOS) skipping over each QOS level with a clear
62737 * bit in the round mask.  Note: setting a QOS level to all zeroes in all issue round registers will
62738 * prevent work from being issued from that QOS level.
62739 */
62740typedef union
62741{
62742    uint64_t u64;
62743    struct cvmx_pow_qos_rndx_s
62744    {
62745#if __BYTE_ORDER == __BIG_ENDIAN
62746        uint64_t reserved_32_63          : 32;
62747        uint64_t rnd_p3                  : 8;       /**< Round mask for round Xx4+3 */
62748        uint64_t rnd_p2                  : 8;       /**< Round mask for round Xx4+2 */
62749        uint64_t rnd_p1                  : 8;       /**< Round mask for round Xx4+1 */
62750        uint64_t rnd                     : 8;       /**< Round mask for round Xx4 */
62751#else
62752        uint64_t rnd                     : 8;
62753        uint64_t rnd_p1                  : 8;
62754        uint64_t rnd_p2                  : 8;
62755        uint64_t rnd_p3                  : 8;
62756        uint64_t reserved_32_63          : 32;
62757#endif
62758    } s;
62759    struct cvmx_pow_qos_rndx_s           cn30xx;
62760    struct cvmx_pow_qos_rndx_s           cn31xx;
62761    struct cvmx_pow_qos_rndx_s           cn38xx;
62762    struct cvmx_pow_qos_rndx_s           cn38xxp2;
62763    struct cvmx_pow_qos_rndx_s           cn50xx;
62764    struct cvmx_pow_qos_rndx_s           cn52xx;
62765    struct cvmx_pow_qos_rndx_s           cn52xxp1;
62766    struct cvmx_pow_qos_rndx_s           cn56xx;
62767    struct cvmx_pow_qos_rndx_s           cn56xxp1;
62768    struct cvmx_pow_qos_rndx_s           cn58xx;
62769    struct cvmx_pow_qos_rndx_s           cn58xxp1;
62770} cvmx_pow_qos_rndx_t;
62771
62772
62773/**
62774 * cvmx_pow_qos_thr#
62775 *
62776 * POW_QOS_THRX = POW QOS Threshold Register (1 per QOS level)
62777 *
62778 * Contains the thresholds for allocating POW internal storage buffers.  If the number of remaining
62779 * free buffers drops below the minimum threshold (MIN_THR) or the number of allocated buffers for
62780 * this QOS level rises above the maximum threshold (MAX_THR), future incoming work queue entries
62781 * will be buffered externally rather than internally.  This register also contains a read-only count
62782 * of the current number of free buffers (FREE_CNT), the number of internal buffers currently
62783 * allocated to this QOS level (BUF_CNT), and the total number of buffers on the de-schedule list
62784 * (DES_CNT) (which is not the same as the total number of de-scheduled buffers).
62785 */
62786typedef union
62787{
62788    uint64_t u64;
62789    struct cvmx_pow_qos_thrx_s
62790    {
62791#if __BYTE_ORDER == __BIG_ENDIAN
62792        uint64_t reserved_60_63          : 4;
62793        uint64_t des_cnt                 : 12;      /**< # of buffers on de-schedule list */
62794        uint64_t buf_cnt                 : 12;      /**< # of internal buffers allocated to QOS level X */
62795        uint64_t free_cnt                : 12;      /**< # of total free buffers */
62796        uint64_t reserved_23_23          : 1;
62797        uint64_t max_thr                 : 11;      /**< Max threshold for QOS level X */
62798        uint64_t reserved_11_11          : 1;
62799        uint64_t min_thr                 : 11;      /**< Min threshold for QOS level X */
62800#else
62801        uint64_t min_thr                 : 11;
62802        uint64_t reserved_11_11          : 1;
62803        uint64_t max_thr                 : 11;
62804        uint64_t reserved_23_23          : 1;
62805        uint64_t free_cnt                : 12;
62806        uint64_t buf_cnt                 : 12;
62807        uint64_t des_cnt                 : 12;
62808        uint64_t reserved_60_63          : 4;
62809#endif
62810    } s;
62811    struct cvmx_pow_qos_thrx_cn30xx
62812    {
62813#if __BYTE_ORDER == __BIG_ENDIAN
62814        uint64_t reserved_55_63          : 9;
62815        uint64_t des_cnt                 : 7;       /**< # of buffers on de-schedule list */
62816        uint64_t reserved_43_47          : 5;
62817        uint64_t buf_cnt                 : 7;       /**< # of internal buffers allocated to QOS level X */
62818        uint64_t reserved_31_35          : 5;
62819        uint64_t free_cnt                : 7;       /**< # of total free buffers */
62820        uint64_t reserved_18_23          : 6;
62821        uint64_t max_thr                 : 6;       /**< Max threshold for QOS level X */
62822        uint64_t reserved_6_11           : 6;
62823        uint64_t min_thr                 : 6;       /**< Min threshold for QOS level X */
62824#else
62825        uint64_t min_thr                 : 6;
62826        uint64_t reserved_6_11           : 6;
62827        uint64_t max_thr                 : 6;
62828        uint64_t reserved_18_23          : 6;
62829        uint64_t free_cnt                : 7;
62830        uint64_t reserved_31_35          : 5;
62831        uint64_t buf_cnt                 : 7;
62832        uint64_t reserved_43_47          : 5;
62833        uint64_t des_cnt                 : 7;
62834        uint64_t reserved_55_63          : 9;
62835#endif
62836    } cn30xx;
62837    struct cvmx_pow_qos_thrx_cn31xx
62838    {
62839#if __BYTE_ORDER == __BIG_ENDIAN
62840        uint64_t reserved_57_63          : 7;
62841        uint64_t des_cnt                 : 9;       /**< # of buffers on de-schedule list */
62842        uint64_t reserved_45_47          : 3;
62843        uint64_t buf_cnt                 : 9;       /**< # of internal buffers allocated to QOS level X */
62844        uint64_t reserved_33_35          : 3;
62845        uint64_t free_cnt                : 9;       /**< # of total free buffers */
62846        uint64_t reserved_20_23          : 4;
62847        uint64_t max_thr                 : 8;       /**< Max threshold for QOS level X */
62848        uint64_t reserved_8_11           : 4;
62849        uint64_t min_thr                 : 8;       /**< Min threshold for QOS level X */
62850#else
62851        uint64_t min_thr                 : 8;
62852        uint64_t reserved_8_11           : 4;
62853        uint64_t max_thr                 : 8;
62854        uint64_t reserved_20_23          : 4;
62855        uint64_t free_cnt                : 9;
62856        uint64_t reserved_33_35          : 3;
62857        uint64_t buf_cnt                 : 9;
62858        uint64_t reserved_45_47          : 3;
62859        uint64_t des_cnt                 : 9;
62860        uint64_t reserved_57_63          : 7;
62861#endif
62862    } cn31xx;
62863    struct cvmx_pow_qos_thrx_s           cn38xx;
62864    struct cvmx_pow_qos_thrx_s           cn38xxp2;
62865    struct cvmx_pow_qos_thrx_cn31xx      cn50xx;
62866    struct cvmx_pow_qos_thrx_cn52xx
62867    {
62868#if __BYTE_ORDER == __BIG_ENDIAN
62869        uint64_t reserved_58_63          : 6;
62870        uint64_t des_cnt                 : 10;      /**< # of buffers on de-schedule list */
62871        uint64_t reserved_46_47          : 2;
62872        uint64_t buf_cnt                 : 10;      /**< # of internal buffers allocated to QOS level X */
62873        uint64_t reserved_34_35          : 2;
62874        uint64_t free_cnt                : 10;      /**< # of total free buffers */
62875        uint64_t reserved_21_23          : 3;
62876        uint64_t max_thr                 : 9;       /**< Max threshold for QOS level X */
62877        uint64_t reserved_9_11           : 3;
62878        uint64_t min_thr                 : 9;       /**< Min threshold for QOS level X */
62879#else
62880        uint64_t min_thr                 : 9;
62881        uint64_t reserved_9_11           : 3;
62882        uint64_t max_thr                 : 9;
62883        uint64_t reserved_21_23          : 3;
62884        uint64_t free_cnt                : 10;
62885        uint64_t reserved_34_35          : 2;
62886        uint64_t buf_cnt                 : 10;
62887        uint64_t reserved_46_47          : 2;
62888        uint64_t des_cnt                 : 10;
62889        uint64_t reserved_58_63          : 6;
62890#endif
62891    } cn52xx;
62892    struct cvmx_pow_qos_thrx_cn52xx      cn52xxp1;
62893    struct cvmx_pow_qos_thrx_s           cn56xx;
62894    struct cvmx_pow_qos_thrx_s           cn56xxp1;
62895    struct cvmx_pow_qos_thrx_s           cn58xx;
62896    struct cvmx_pow_qos_thrx_s           cn58xxp1;
62897} cvmx_pow_qos_thrx_t;
62898
62899
62900/**
62901 * cvmx_pow_ts_pc
62902 *
62903 * POW_TS_PC = POW Tag Switch Performance Counter
62904 *
62905 * Counts the number of tag switch requests.  Write to clear.
62906 */
62907typedef union
62908{
62909    uint64_t u64;
62910    struct cvmx_pow_ts_pc_s
62911    {
62912#if __BYTE_ORDER == __BIG_ENDIAN
62913        uint64_t reserved_32_63          : 32;
62914        uint64_t ts_pc                   : 32;      /**< Tag switch performance counter */
62915#else
62916        uint64_t ts_pc                   : 32;
62917        uint64_t reserved_32_63          : 32;
62918#endif
62919    } s;
62920    struct cvmx_pow_ts_pc_s              cn30xx;
62921    struct cvmx_pow_ts_pc_s              cn31xx;
62922    struct cvmx_pow_ts_pc_s              cn38xx;
62923    struct cvmx_pow_ts_pc_s              cn38xxp2;
62924    struct cvmx_pow_ts_pc_s              cn50xx;
62925    struct cvmx_pow_ts_pc_s              cn52xx;
62926    struct cvmx_pow_ts_pc_s              cn52xxp1;
62927    struct cvmx_pow_ts_pc_s              cn56xx;
62928    struct cvmx_pow_ts_pc_s              cn56xxp1;
62929    struct cvmx_pow_ts_pc_s              cn58xx;
62930    struct cvmx_pow_ts_pc_s              cn58xxp1;
62931} cvmx_pow_ts_pc_t;
62932
62933
62934/**
62935 * cvmx_pow_wa_com_pc
62936 *
62937 * POW_WA_COM_PC = POW Work Add Combined Performance Counter
62938 *
62939 * Counts the number of add new work requests for all QOS levels.  Write to clear.
62940 */
62941typedef union
62942{
62943    uint64_t u64;
62944    struct cvmx_pow_wa_com_pc_s
62945    {
62946#if __BYTE_ORDER == __BIG_ENDIAN
62947        uint64_t reserved_32_63          : 32;
62948        uint64_t wa_pc                   : 32;      /**< Work add combined performance counter */
62949#else
62950        uint64_t wa_pc                   : 32;
62951        uint64_t reserved_32_63          : 32;
62952#endif
62953    } s;
62954    struct cvmx_pow_wa_com_pc_s          cn30xx;
62955    struct cvmx_pow_wa_com_pc_s          cn31xx;
62956    struct cvmx_pow_wa_com_pc_s          cn38xx;
62957    struct cvmx_pow_wa_com_pc_s          cn38xxp2;
62958    struct cvmx_pow_wa_com_pc_s          cn50xx;
62959    struct cvmx_pow_wa_com_pc_s          cn52xx;
62960    struct cvmx_pow_wa_com_pc_s          cn52xxp1;
62961    struct cvmx_pow_wa_com_pc_s          cn56xx;
62962    struct cvmx_pow_wa_com_pc_s          cn56xxp1;
62963    struct cvmx_pow_wa_com_pc_s          cn58xx;
62964    struct cvmx_pow_wa_com_pc_s          cn58xxp1;
62965} cvmx_pow_wa_com_pc_t;
62966
62967
62968/**
62969 * cvmx_pow_wa_pc#
62970 *
62971 * POW_WA_PCX = POW Work Add Performance Counter (1 per QOS level)
62972 *
62973 * Counts the number of add new work requests for each QOS level.  Write to clear.
62974 */
62975typedef union
62976{
62977    uint64_t u64;
62978    struct cvmx_pow_wa_pcx_s
62979    {
62980#if __BYTE_ORDER == __BIG_ENDIAN
62981        uint64_t reserved_32_63          : 32;
62982        uint64_t wa_pc                   : 32;      /**< Work add performance counter for QOS level X */
62983#else
62984        uint64_t wa_pc                   : 32;
62985        uint64_t reserved_32_63          : 32;
62986#endif
62987    } s;
62988    struct cvmx_pow_wa_pcx_s             cn30xx;
62989    struct cvmx_pow_wa_pcx_s             cn31xx;
62990    struct cvmx_pow_wa_pcx_s             cn38xx;
62991    struct cvmx_pow_wa_pcx_s             cn38xxp2;
62992    struct cvmx_pow_wa_pcx_s             cn50xx;
62993    struct cvmx_pow_wa_pcx_s             cn52xx;
62994    struct cvmx_pow_wa_pcx_s             cn52xxp1;
62995    struct cvmx_pow_wa_pcx_s             cn56xx;
62996    struct cvmx_pow_wa_pcx_s             cn56xxp1;
62997    struct cvmx_pow_wa_pcx_s             cn58xx;
62998    struct cvmx_pow_wa_pcx_s             cn58xxp1;
62999} cvmx_pow_wa_pcx_t;
63000
63001
63002/**
63003 * cvmx_pow_wq_int
63004 *
63005 * POW_WQ_INT = POW Work Queue Interrupt Register
63006 *
63007 * Contains the bits (1 per group) that set work queue interrupts and are used to clear these
63008 * interrupts.  Also contains the input queue interrupt temporary disable bits (1 per group).  For
63009 * more information regarding this register, see the interrupt section.
63010 */
63011typedef union
63012{
63013    uint64_t u64;
63014    struct cvmx_pow_wq_int_s
63015    {
63016#if __BYTE_ORDER == __BIG_ENDIAN
63017        uint64_t reserved_32_63          : 32;
63018        uint64_t iq_dis                  : 16;      /**< Input queue interrupt temporary disable mask
63019                                                         Corresponding WQ_INT<*> bit cannot be set due to
63020                                                         IQ_CNT/IQ_THR check when this bit is set.
63021                                                         Corresponding IQ_DIS bit is cleared by HW whenever:
63022                                                          - POW_WQ_INT_CNT*[IQ_CNT] is zero, or
63023                                                          - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic
63024                                                            counter POW_WQ_INT_PC[PC]==0 */
63025        uint64_t wq_int                  : 16;      /**< Work queue interrupt bits
63026                                                         Corresponding WQ_INT bit is set by HW whenever:
63027                                                          - POW_WQ_INT_CNT*[IQ_CNT] >=
63028                                                            POW_WQ_INT_THR*[IQ_THR] and the threshold
63029                                                            interrupt is not disabled.
63030                                                            IQ_DIS<*>==1 disables the interrupt.
63031                                                            POW_WQ_INT_THR*[IQ_THR]==0 disables the int.
63032                                                          - POW_WQ_INT_CNT*[DS_CNT] >=
63033                                                            POW_WQ_INT_THR*[DS_THR] and the threshold
63034                                                            interrupt is not disabled
63035                                                            POW_WQ_INT_THR*[DS_THR]==0 disables the int.
63036                                                          - POW_WQ_INT_CNT*[TC_CNT]==1 when periodic
63037                                                            counter POW_WQ_INT_PC[PC]==0 and
63038                                                            POW_WQ_INT_THR*[TC_EN]==1 and at least one of:
63039                                                            - POW_WQ_INT_CNT*[IQ_CNT] > 0
63040                                                            - POW_WQ_INT_CNT*[DS_CNT] > 0 */
63041#else
63042        uint64_t wq_int                  : 16;
63043        uint64_t iq_dis                  : 16;
63044        uint64_t reserved_32_63          : 32;
63045#endif
63046    } s;
63047    struct cvmx_pow_wq_int_s             cn30xx;
63048    struct cvmx_pow_wq_int_s             cn31xx;
63049    struct cvmx_pow_wq_int_s             cn38xx;
63050    struct cvmx_pow_wq_int_s             cn38xxp2;
63051    struct cvmx_pow_wq_int_s             cn50xx;
63052    struct cvmx_pow_wq_int_s             cn52xx;
63053    struct cvmx_pow_wq_int_s             cn52xxp1;
63054    struct cvmx_pow_wq_int_s             cn56xx;
63055    struct cvmx_pow_wq_int_s             cn56xxp1;
63056    struct cvmx_pow_wq_int_s             cn58xx;
63057    struct cvmx_pow_wq_int_s             cn58xxp1;
63058} cvmx_pow_wq_int_t;
63059
63060
63061/**
63062 * cvmx_pow_wq_int_cnt#
63063 *
63064 * POW_WQ_INT_CNTX = POW Work Queue Interrupt Count Register (1 per group)
63065 *
63066 * Contains a read-only copy of the counts used to trigger work queue interrupts.  For more
63067 * information regarding this register, see the interrupt section.
63068 */
63069typedef union
63070{
63071    uint64_t u64;
63072    struct cvmx_pow_wq_int_cntx_s
63073    {
63074#if __BYTE_ORDER == __BIG_ENDIAN
63075        uint64_t reserved_28_63          : 36;
63076        uint64_t tc_cnt                  : 4;       /**< Time counter current value for group X
63077                                                         HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
63078                                                          - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
63079                                                            corresponding POW_WQ_INT_CNT*[DS_CNT]==0
63080                                                          - corresponding POW_WQ_INT[WQ_INT<*>] is written
63081                                                            with a 1 by SW
63082                                                          - corresponding POW_WQ_INT[IQ_DIS<*>] is written
63083                                                            with a 1 by SW
63084                                                          - corresponding POW_WQ_INT_THR* is written by SW
63085                                                          - TC_CNT==1 and periodic counter
63086                                                            POW_WQ_INT_PC[PC]==0
63087                                                         Otherwise, HW decrements TC_CNT whenever the
63088                                                         periodic counter POW_WQ_INT_PC[PC]==0.
63089                                                         TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
63090        uint64_t ds_cnt                  : 12;      /**< De-schedule executable count for group X */
63091        uint64_t iq_cnt                  : 12;      /**< Input queue executable count for group X */
63092#else
63093        uint64_t iq_cnt                  : 12;
63094        uint64_t ds_cnt                  : 12;
63095        uint64_t tc_cnt                  : 4;
63096        uint64_t reserved_28_63          : 36;
63097#endif
63098    } s;
63099    struct cvmx_pow_wq_int_cntx_cn30xx
63100    {
63101#if __BYTE_ORDER == __BIG_ENDIAN
63102        uint64_t reserved_28_63          : 36;
63103        uint64_t tc_cnt                  : 4;       /**< Time counter current value for group X
63104                                                         HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
63105                                                          - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
63106                                                            corresponding POW_WQ_INT_CNT*[DS_CNT]==0
63107                                                          - corresponding POW_WQ_INT[WQ_INT<*>] is written
63108                                                            with a 1 by SW
63109                                                          - corresponding POW_WQ_INT[IQ_DIS<*>] is written
63110                                                            with a 1 by SW
63111                                                          - corresponding POW_WQ_INT_THR* is written by SW
63112                                                          - TC_CNT==1 and periodic counter
63113                                                            POW_WQ_INT_PC[PC]==0
63114                                                         Otherwise, HW decrements TC_CNT whenever the
63115                                                         periodic counter POW_WQ_INT_PC[PC]==0.
63116                                                         TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
63117        uint64_t reserved_19_23          : 5;
63118        uint64_t ds_cnt                  : 7;       /**< De-schedule executable count for group X */
63119        uint64_t reserved_7_11           : 5;
63120        uint64_t iq_cnt                  : 7;       /**< Input queue executable count for group X */
63121#else
63122        uint64_t iq_cnt                  : 7;
63123        uint64_t reserved_7_11           : 5;
63124        uint64_t ds_cnt                  : 7;
63125        uint64_t reserved_19_23          : 5;
63126        uint64_t tc_cnt                  : 4;
63127        uint64_t reserved_28_63          : 36;
63128#endif
63129    } cn30xx;
63130    struct cvmx_pow_wq_int_cntx_cn31xx
63131    {
63132#if __BYTE_ORDER == __BIG_ENDIAN
63133        uint64_t reserved_28_63          : 36;
63134        uint64_t tc_cnt                  : 4;       /**< Time counter current value for group X
63135                                                         HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
63136                                                          - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
63137                                                            corresponding POW_WQ_INT_CNT*[DS_CNT]==0
63138                                                          - corresponding POW_WQ_INT[WQ_INT<*>] is written
63139                                                            with a 1 by SW
63140                                                          - corresponding POW_WQ_INT[IQ_DIS<*>] is written
63141                                                            with a 1 by SW
63142                                                          - corresponding POW_WQ_INT_THR* is written by SW
63143                                                          - TC_CNT==1 and periodic counter
63144                                                            POW_WQ_INT_PC[PC]==0
63145                                                         Otherwise, HW decrements TC_CNT whenever the
63146                                                         periodic counter POW_WQ_INT_PC[PC]==0.
63147                                                         TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
63148        uint64_t reserved_21_23          : 3;
63149        uint64_t ds_cnt                  : 9;       /**< De-schedule executable count for group X */
63150        uint64_t reserved_9_11           : 3;
63151        uint64_t iq_cnt                  : 9;       /**< Input queue executable count for group X */
63152#else
63153        uint64_t iq_cnt                  : 9;
63154        uint64_t reserved_9_11           : 3;
63155        uint64_t ds_cnt                  : 9;
63156        uint64_t reserved_21_23          : 3;
63157        uint64_t tc_cnt                  : 4;
63158        uint64_t reserved_28_63          : 36;
63159#endif
63160    } cn31xx;
63161    struct cvmx_pow_wq_int_cntx_s        cn38xx;
63162    struct cvmx_pow_wq_int_cntx_s        cn38xxp2;
63163    struct cvmx_pow_wq_int_cntx_cn31xx   cn50xx;
63164    struct cvmx_pow_wq_int_cntx_cn52xx
63165    {
63166#if __BYTE_ORDER == __BIG_ENDIAN
63167        uint64_t reserved_28_63          : 36;
63168        uint64_t tc_cnt                  : 4;       /**< Time counter current value for group X
63169                                                         HW sets TC_CNT to POW_WQ_INT_THR*[TC_THR] whenever:
63170                                                          - corresponding POW_WQ_INT_CNT*[IQ_CNT]==0 and
63171                                                            corresponding POW_WQ_INT_CNT*[DS_CNT]==0
63172                                                          - corresponding POW_WQ_INT[WQ_INT<*>] is written
63173                                                            with a 1 by SW
63174                                                          - corresponding POW_WQ_INT[IQ_DIS<*>] is written
63175                                                            with a 1 by SW
63176                                                          - corresponding POW_WQ_INT_THR* is written by SW
63177                                                          - TC_CNT==1 and periodic counter
63178                                                            POW_WQ_INT_PC[PC]==0
63179                                                         Otherwise, HW decrements TC_CNT whenever the
63180                                                         periodic counter POW_WQ_INT_PC[PC]==0.
63181                                                         TC_CNT is 0 whenever POW_WQ_INT_THR*[TC_THR]==0. */
63182        uint64_t reserved_22_23          : 2;
63183        uint64_t ds_cnt                  : 10;      /**< De-schedule executable count for group X */
63184        uint64_t reserved_10_11          : 2;
63185        uint64_t iq_cnt                  : 10;      /**< Input queue executable count for group X */
63186#else
63187        uint64_t iq_cnt                  : 10;
63188        uint64_t reserved_10_11          : 2;
63189        uint64_t ds_cnt                  : 10;
63190        uint64_t reserved_22_23          : 2;
63191        uint64_t tc_cnt                  : 4;
63192        uint64_t reserved_28_63          : 36;
63193#endif
63194    } cn52xx;
63195    struct cvmx_pow_wq_int_cntx_cn52xx   cn52xxp1;
63196    struct cvmx_pow_wq_int_cntx_s        cn56xx;
63197    struct cvmx_pow_wq_int_cntx_s        cn56xxp1;
63198    struct cvmx_pow_wq_int_cntx_s        cn58xx;
63199    struct cvmx_pow_wq_int_cntx_s        cn58xxp1;
63200} cvmx_pow_wq_int_cntx_t;
63201
63202
63203/**
63204 * cvmx_pow_wq_int_pc
63205 *
63206 * POW_WQ_INT_PC = POW Work Queue Interrupt Periodic Counter Register
63207 *
63208 * Contains the threshold value for the work queue interrupt periodic counter and also a read-only
63209 * copy of the periodic counter.  For more information regarding this register, see the interrupt
63210 * section.
63211 */
63212typedef union
63213{
63214    uint64_t u64;
63215    struct cvmx_pow_wq_int_pc_s
63216    {
63217#if __BYTE_ORDER == __BIG_ENDIAN
63218        uint64_t reserved_60_63          : 4;
63219        uint64_t pc                      : 28;      /**< Work queue interrupt periodic counter */
63220        uint64_t reserved_28_31          : 4;
63221        uint64_t pc_thr                  : 20;      /**< Work queue interrupt periodic counter threshold */
63222        uint64_t reserved_0_7            : 8;
63223#else
63224        uint64_t reserved_0_7            : 8;
63225        uint64_t pc_thr                  : 20;
63226        uint64_t reserved_28_31          : 4;
63227        uint64_t pc                      : 28;
63228        uint64_t reserved_60_63          : 4;
63229#endif
63230    } s;
63231    struct cvmx_pow_wq_int_pc_s          cn30xx;
63232    struct cvmx_pow_wq_int_pc_s          cn31xx;
63233    struct cvmx_pow_wq_int_pc_s          cn38xx;
63234    struct cvmx_pow_wq_int_pc_s          cn38xxp2;
63235    struct cvmx_pow_wq_int_pc_s          cn50xx;
63236    struct cvmx_pow_wq_int_pc_s          cn52xx;
63237    struct cvmx_pow_wq_int_pc_s          cn52xxp1;
63238    struct cvmx_pow_wq_int_pc_s          cn56xx;
63239    struct cvmx_pow_wq_int_pc_s          cn56xxp1;
63240    struct cvmx_pow_wq_int_pc_s          cn58xx;
63241    struct cvmx_pow_wq_int_pc_s          cn58xxp1;
63242} cvmx_pow_wq_int_pc_t;
63243
63244
63245/**
63246 * cvmx_pow_wq_int_thr#
63247 *
63248 * POW_WQ_INT_THRX = POW Work Queue Interrupt Threshold Register (1 per group)
63249 *
63250 * Contains the thresholds for enabling and setting work queue interrupts.  For more information
63251 * regarding this register, see the interrupt section.
63252 *
63253 * Note: Up to 4 of the POW's internal storage buffers can be allocated for hardware use and are
63254 * therefore not available for incoming work queue entries.  Additionally, any PP that is not in the
63255 * NULL_NULL state consumes a buffer.  Thus in a 4 PP system, it is not advisable to set either
63256 * IQ_THR or DS_THR to greater than 512 - 4 - 4 = 504.  Doing so may prevent the interrupt from
63257 * ever triggering.
63258 */
63259typedef union
63260{
63261    uint64_t u64;
63262    struct cvmx_pow_wq_int_thrx_s
63263    {
63264#if __BYTE_ORDER == __BIG_ENDIAN
63265        uint64_t reserved_29_63          : 35;
63266        uint64_t tc_en                   : 1;       /**< Time counter interrupt enable for group X
63267                                                         TC_EN must be zero when TC_THR==0 */
63268        uint64_t tc_thr                  : 4;       /**< Time counter interrupt threshold for group X
63269                                                         When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
63270        uint64_t reserved_23_23          : 1;
63271        uint64_t ds_thr                  : 11;      /**< De-schedule count threshold for group X
63272                                                         DS_THR==0 disables the threshold interrupt */
63273        uint64_t reserved_11_11          : 1;
63274        uint64_t iq_thr                  : 11;      /**< Input queue count threshold for group X
63275                                                         IQ_THR==0 disables the threshold interrupt */
63276#else
63277        uint64_t iq_thr                  : 11;
63278        uint64_t reserved_11_11          : 1;
63279        uint64_t ds_thr                  : 11;
63280        uint64_t reserved_23_23          : 1;
63281        uint64_t tc_thr                  : 4;
63282        uint64_t tc_en                   : 1;
63283        uint64_t reserved_29_63          : 35;
63284#endif
63285    } s;
63286    struct cvmx_pow_wq_int_thrx_cn30xx
63287    {
63288#if __BYTE_ORDER == __BIG_ENDIAN
63289        uint64_t reserved_29_63          : 35;
63290        uint64_t tc_en                   : 1;       /**< Time counter interrupt enable for group X
63291                                                         TC_EN must be zero when TC_THR==0 */
63292        uint64_t tc_thr                  : 4;       /**< Time counter interrupt threshold for group X
63293                                                         When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
63294        uint64_t reserved_18_23          : 6;
63295        uint64_t ds_thr                  : 6;       /**< De-schedule count threshold for group X
63296                                                         DS_THR==0 disables the threshold interrupt */
63297        uint64_t reserved_6_11           : 6;
63298        uint64_t iq_thr                  : 6;       /**< Input queue count threshold for group X
63299                                                         IQ_THR==0 disables the threshold interrupt */
63300#else
63301        uint64_t iq_thr                  : 6;
63302        uint64_t reserved_6_11           : 6;
63303        uint64_t ds_thr                  : 6;
63304        uint64_t reserved_18_23          : 6;
63305        uint64_t tc_thr                  : 4;
63306        uint64_t tc_en                   : 1;
63307        uint64_t reserved_29_63          : 35;
63308#endif
63309    } cn30xx;
63310    struct cvmx_pow_wq_int_thrx_cn31xx
63311    {
63312#if __BYTE_ORDER == __BIG_ENDIAN
63313        uint64_t reserved_29_63          : 35;
63314        uint64_t tc_en                   : 1;       /**< Time counter interrupt enable for group X
63315                                                         TC_EN must be zero when TC_THR==0 */
63316        uint64_t tc_thr                  : 4;       /**< Time counter interrupt threshold for group X
63317                                                         When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
63318        uint64_t reserved_20_23          : 4;
63319        uint64_t ds_thr                  : 8;       /**< De-schedule count threshold for group X
63320                                                         DS_THR==0 disables the threshold interrupt */
63321        uint64_t reserved_8_11           : 4;
63322        uint64_t iq_thr                  : 8;       /**< Input queue count threshold for group X
63323                                                         IQ_THR==0 disables the threshold interrupt */
63324#else
63325        uint64_t iq_thr                  : 8;
63326        uint64_t reserved_8_11           : 4;
63327        uint64_t ds_thr                  : 8;
63328        uint64_t reserved_20_23          : 4;
63329        uint64_t tc_thr                  : 4;
63330        uint64_t tc_en                   : 1;
63331        uint64_t reserved_29_63          : 35;
63332#endif
63333    } cn31xx;
63334    struct cvmx_pow_wq_int_thrx_s        cn38xx;
63335    struct cvmx_pow_wq_int_thrx_s        cn38xxp2;
63336    struct cvmx_pow_wq_int_thrx_cn31xx   cn50xx;
63337    struct cvmx_pow_wq_int_thrx_cn52xx
63338    {
63339#if __BYTE_ORDER == __BIG_ENDIAN
63340        uint64_t reserved_29_63          : 35;
63341        uint64_t tc_en                   : 1;       /**< Time counter interrupt enable for group X
63342                                                         TC_EN must be zero when TC_THR==0 */
63343        uint64_t tc_thr                  : 4;       /**< Time counter interrupt threshold for group X
63344                                                         When TC_THR==0, POW_WQ_INT_CNT*[TC_CNT] is zero */
63345        uint64_t reserved_21_23          : 3;
63346        uint64_t ds_thr                  : 9;       /**< De-schedule count threshold for group X
63347                                                         DS_THR==0 disables the threshold interrupt */
63348        uint64_t reserved_9_11           : 3;
63349        uint64_t iq_thr                  : 9;       /**< Input queue count threshold for group X
63350                                                         IQ_THR==0 disables the threshold interrupt */
63351#else
63352        uint64_t iq_thr                  : 9;
63353        uint64_t reserved_9_11           : 3;
63354        uint64_t ds_thr                  : 9;
63355        uint64_t reserved_21_23          : 3;
63356        uint64_t tc_thr                  : 4;
63357        uint64_t tc_en                   : 1;
63358        uint64_t reserved_29_63          : 35;
63359#endif
63360    } cn52xx;
63361    struct cvmx_pow_wq_int_thrx_cn52xx   cn52xxp1;
63362    struct cvmx_pow_wq_int_thrx_s        cn56xx;
63363    struct cvmx_pow_wq_int_thrx_s        cn56xxp1;
63364    struct cvmx_pow_wq_int_thrx_s        cn58xx;
63365    struct cvmx_pow_wq_int_thrx_s        cn58xxp1;
63366} cvmx_pow_wq_int_thrx_t;
63367
63368
63369/**
63370 * cvmx_pow_ws_pc#
63371 *
63372 * POW_WS_PCX = POW Work Schedule Performance Counter (1 per group)
63373 *
63374 * Counts the number of work schedules for each group.  Write to clear.
63375 */
63376typedef union
63377{
63378    uint64_t u64;
63379    struct cvmx_pow_ws_pcx_s
63380    {
63381#if __BYTE_ORDER == __BIG_ENDIAN
63382        uint64_t reserved_32_63          : 32;
63383        uint64_t ws_pc                   : 32;      /**< Work schedule performance counter for group X */
63384#else
63385        uint64_t ws_pc                   : 32;
63386        uint64_t reserved_32_63          : 32;
63387#endif
63388    } s;
63389    struct cvmx_pow_ws_pcx_s             cn30xx;
63390    struct cvmx_pow_ws_pcx_s             cn31xx;
63391    struct cvmx_pow_ws_pcx_s             cn38xx;
63392    struct cvmx_pow_ws_pcx_s             cn38xxp2;
63393    struct cvmx_pow_ws_pcx_s             cn50xx;
63394    struct cvmx_pow_ws_pcx_s             cn52xx;
63395    struct cvmx_pow_ws_pcx_s             cn52xxp1;
63396    struct cvmx_pow_ws_pcx_s             cn56xx;
63397    struct cvmx_pow_ws_pcx_s             cn56xxp1;
63398    struct cvmx_pow_ws_pcx_s             cn58xx;
63399    struct cvmx_pow_ws_pcx_s             cn58xxp1;
63400} cvmx_pow_ws_pcx_t;
63401
63402
63403/**
63404 * cvmx_rad_mem_debug0
63405 *
63406 * Notes:
63407 * This CSR is a memory of 32 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any
63408 * CSR read operations to this address can be performed.  A read of any entry that has not been
63409 * previously written is illegal and will result in unpredictable CSR read data.
63410 */
63411typedef union
63412{
63413    uint64_t u64;
63414    struct cvmx_rad_mem_debug0_s
63415    {
63416#if __BYTE_ORDER == __BIG_ENDIAN
63417        uint64_t iword                   : 64;      /**< IWord */
63418#else
63419        uint64_t iword                   : 64;
63420#endif
63421    } s;
63422    struct cvmx_rad_mem_debug0_s         cn52xx;
63423    struct cvmx_rad_mem_debug0_s         cn52xxp1;
63424    struct cvmx_rad_mem_debug0_s         cn56xx;
63425    struct cvmx_rad_mem_debug0_s         cn56xxp1;
63426} cvmx_rad_mem_debug0_t;
63427
63428
63429/**
63430 * cvmx_rad_mem_debug1
63431 *
63432 * Notes:
63433 * This CSR is a memory of 256 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any
63434 * CSR read operations to this address can be performed.  A read of any entry that has not been
63435 * previously written is illegal and will result in unpredictable CSR read data.
63436 */
63437typedef union
63438{
63439    uint64_t u64;
63440    struct cvmx_rad_mem_debug1_s
63441    {
63442#if __BYTE_ORDER == __BIG_ENDIAN
63443        uint64_t p_dat                   : 64;      /**< P data */
63444#else
63445        uint64_t p_dat                   : 64;
63446#endif
63447    } s;
63448    struct cvmx_rad_mem_debug1_s         cn52xx;
63449    struct cvmx_rad_mem_debug1_s         cn52xxp1;
63450    struct cvmx_rad_mem_debug1_s         cn56xx;
63451    struct cvmx_rad_mem_debug1_s         cn56xxp1;
63452} cvmx_rad_mem_debug1_t;
63453
63454
63455/**
63456 * cvmx_rad_mem_debug2
63457 *
63458 * Notes:
63459 * This CSR is a memory of 256 entries, and thus, the RAD_REG_READ_IDX CSR must be written before any
63460 * CSR read operations to this address can be performed.  A read of any entry that has not been
63461 * previously written is illegal and will result in unpredictable CSR read data.
63462 */
63463typedef union
63464{
63465    uint64_t u64;
63466    struct cvmx_rad_mem_debug2_s
63467    {
63468#if __BYTE_ORDER == __BIG_ENDIAN
63469        uint64_t q_dat                   : 64;      /**< Q data */
63470#else
63471        uint64_t q_dat                   : 64;
63472#endif
63473    } s;
63474    struct cvmx_rad_mem_debug2_s         cn52xx;
63475    struct cvmx_rad_mem_debug2_s         cn52xxp1;
63476    struct cvmx_rad_mem_debug2_s         cn56xx;
63477    struct cvmx_rad_mem_debug2_s         cn56xxp1;
63478} cvmx_rad_mem_debug2_t;
63479
63480
63481/**
63482 * cvmx_rad_reg_bist_result
63483 *
63484 * Notes:
63485 * Access to the internal BiST results
63486 * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
63487 */
63488typedef union
63489{
63490    uint64_t u64;
63491    struct cvmx_rad_reg_bist_result_s
63492    {
63493#if __BYTE_ORDER == __BIG_ENDIAN
63494        uint64_t reserved_6_63           : 58;
63495        uint64_t sta                     : 1;       /**< BiST result of the STA     memories */
63496        uint64_t ncb_oub                 : 1;       /**< BiST result of the NCB_OUB memories */
63497        uint64_t ncb_inb                 : 2;       /**< BiST result of the NCB_INB memories */
63498        uint64_t dat                     : 2;       /**< BiST result of the DAT     memories */
63499#else
63500        uint64_t dat                     : 2;
63501        uint64_t ncb_inb                 : 2;
63502        uint64_t ncb_oub                 : 1;
63503        uint64_t sta                     : 1;
63504        uint64_t reserved_6_63           : 58;
63505#endif
63506    } s;
63507    struct cvmx_rad_reg_bist_result_s    cn52xx;
63508    struct cvmx_rad_reg_bist_result_s    cn52xxp1;
63509    struct cvmx_rad_reg_bist_result_s    cn56xx;
63510    struct cvmx_rad_reg_bist_result_s    cn56xxp1;
63511} cvmx_rad_reg_bist_result_t;
63512
63513
63514/**
63515 * cvmx_rad_reg_cmd_buf
63516 *
63517 * Notes:
63518 * Sets the command buffer parameters
63519 * The size of the command buffer segments is measured in uint64s.  The pool specifies 1 of 8 free
63520 * lists to be used when freeing command buffer segments.  The PTR field is overwritten with the next
63521 * pointer each time that the command buffer segment is exhausted.
63522 */
63523typedef union
63524{
63525    uint64_t u64;
63526    struct cvmx_rad_reg_cmd_buf_s
63527    {
63528#if __BYTE_ORDER == __BIG_ENDIAN
63529        uint64_t reserved_58_63          : 6;
63530        uint64_t dwb                     : 9;       /**< Number of DontWriteBacks */
63531        uint64_t pool                    : 3;       /**< Free list used to free command buffer segments */
63532        uint64_t size                    : 13;      /**< Number of uint64s per command buffer segment */
63533        uint64_t ptr                     : 33;      /**< Initial command buffer pointer[39:7] (128B-aligned) */
63534#else
63535        uint64_t ptr                     : 33;
63536        uint64_t size                    : 13;
63537        uint64_t pool                    : 3;
63538        uint64_t dwb                     : 9;
63539        uint64_t reserved_58_63          : 6;
63540#endif
63541    } s;
63542    struct cvmx_rad_reg_cmd_buf_s        cn52xx;
63543    struct cvmx_rad_reg_cmd_buf_s        cn52xxp1;
63544    struct cvmx_rad_reg_cmd_buf_s        cn56xx;
63545    struct cvmx_rad_reg_cmd_buf_s        cn56xxp1;
63546} cvmx_rad_reg_cmd_buf_t;
63547
63548
63549/**
63550 * cvmx_rad_reg_ctl
63551 *
63552 * Notes:
63553 * MAX_READ is a throttle to control NCB usage.  Values >8 are illegal.
63554 *
63555 */
63556typedef union
63557{
63558    uint64_t u64;
63559    struct cvmx_rad_reg_ctl_s
63560    {
63561#if __BYTE_ORDER == __BIG_ENDIAN
63562        uint64_t reserved_6_63           : 58;
63563        uint64_t max_read                : 4;       /**< Maximum number of outstanding data read commands */
63564        uint64_t store_le                : 1;       /**< Force STORE0 byte write address to little endian */
63565        uint64_t reset                   : 1;       /**< Reset oneshot pulse (lasts for 4 cycles) */
63566#else
63567        uint64_t reset                   : 1;
63568        uint64_t store_le                : 1;
63569        uint64_t max_read                : 4;
63570        uint64_t reserved_6_63           : 58;
63571#endif
63572    } s;
63573    struct cvmx_rad_reg_ctl_s            cn52xx;
63574    struct cvmx_rad_reg_ctl_s            cn52xxp1;
63575    struct cvmx_rad_reg_ctl_s            cn56xx;
63576    struct cvmx_rad_reg_ctl_s            cn56xxp1;
63577} cvmx_rad_reg_ctl_t;
63578
63579
63580/**
63581 * cvmx_rad_reg_debug0
63582 */
63583typedef union
63584{
63585    uint64_t u64;
63586    struct cvmx_rad_reg_debug0_s
63587    {
63588#if __BYTE_ORDER == __BIG_ENDIAN
63589        uint64_t reserved_57_63          : 7;
63590        uint64_t loop                    : 25;      /**< Loop offset */
63591        uint64_t reserved_22_31          : 10;
63592        uint64_t iridx                   : 6;       /**< IWords read index */
63593        uint64_t reserved_14_15          : 2;
63594        uint64_t iwidx                   : 6;       /**< IWords write index */
63595        uint64_t owordqv                 : 1;       /**< Valid for OWORDQ */
63596        uint64_t owordpv                 : 1;       /**< Valid for OWORDP */
63597        uint64_t commit                  : 1;       /**< Waiting for write commit */
63598        uint64_t state                   : 5;       /**< Main state */
63599#else
63600        uint64_t state                   : 5;
63601        uint64_t commit                  : 1;
63602        uint64_t owordpv                 : 1;
63603        uint64_t owordqv                 : 1;
63604        uint64_t iwidx                   : 6;
63605        uint64_t reserved_14_15          : 2;
63606        uint64_t iridx                   : 6;
63607        uint64_t reserved_22_31          : 10;
63608        uint64_t loop                    : 25;
63609        uint64_t reserved_57_63          : 7;
63610#endif
63611    } s;
63612    struct cvmx_rad_reg_debug0_s         cn52xx;
63613    struct cvmx_rad_reg_debug0_s         cn52xxp1;
63614    struct cvmx_rad_reg_debug0_s         cn56xx;
63615    struct cvmx_rad_reg_debug0_s         cn56xxp1;
63616} cvmx_rad_reg_debug0_t;
63617
63618
63619/**
63620 * cvmx_rad_reg_debug1
63621 */
63622typedef union
63623{
63624    uint64_t u64;
63625    struct cvmx_rad_reg_debug1_s
63626    {
63627#if __BYTE_ORDER == __BIG_ENDIAN
63628        uint64_t cword                   : 64;      /**< CWord */
63629#else
63630        uint64_t cword                   : 64;
63631#endif
63632    } s;
63633    struct cvmx_rad_reg_debug1_s         cn52xx;
63634    struct cvmx_rad_reg_debug1_s         cn52xxp1;
63635    struct cvmx_rad_reg_debug1_s         cn56xx;
63636    struct cvmx_rad_reg_debug1_s         cn56xxp1;
63637} cvmx_rad_reg_debug1_t;
63638
63639
63640/**
63641 * cvmx_rad_reg_debug10
63642 */
63643typedef union
63644{
63645    uint64_t u64;
63646    struct cvmx_rad_reg_debug10_s
63647    {
63648#if __BYTE_ORDER == __BIG_ENDIAN
63649        uint64_t flags                   : 8;       /**< OCTL flags */
63650        uint64_t size                    : 16;      /**< OCTL size (bytes) */
63651        uint64_t ptr                     : 40;      /**< OCTL pointer */
63652#else
63653        uint64_t ptr                     : 40;
63654        uint64_t size                    : 16;
63655        uint64_t flags                   : 8;
63656#endif
63657    } s;
63658    struct cvmx_rad_reg_debug10_s        cn52xx;
63659    struct cvmx_rad_reg_debug10_s        cn52xxp1;
63660    struct cvmx_rad_reg_debug10_s        cn56xx;
63661    struct cvmx_rad_reg_debug10_s        cn56xxp1;
63662} cvmx_rad_reg_debug10_t;
63663
63664
63665/**
63666 * cvmx_rad_reg_debug11
63667 */
63668typedef union
63669{
63670    uint64_t u64;
63671    struct cvmx_rad_reg_debug11_s
63672    {
63673#if __BYTE_ORDER == __BIG_ENDIAN
63674        uint64_t reserved_13_63          : 51;
63675        uint64_t q                       : 1;       /**< OCTL q flag */
63676        uint64_t p                       : 1;       /**< OCTL p flag */
63677        uint64_t wc                      : 1;       /**< OCTL write commit flag */
63678        uint64_t eod                     : 1;       /**< OCTL eod flag */
63679        uint64_t sod                     : 1;       /**< OCTL sod flag */
63680        uint64_t index                   : 8;       /**< OCTL index */
63681#else
63682        uint64_t index                   : 8;
63683        uint64_t sod                     : 1;
63684        uint64_t eod                     : 1;
63685        uint64_t wc                      : 1;
63686        uint64_t p                       : 1;
63687        uint64_t q                       : 1;
63688        uint64_t reserved_13_63          : 51;
63689#endif
63690    } s;
63691    struct cvmx_rad_reg_debug11_s        cn52xx;
63692    struct cvmx_rad_reg_debug11_s        cn52xxp1;
63693    struct cvmx_rad_reg_debug11_s        cn56xx;
63694    struct cvmx_rad_reg_debug11_s        cn56xxp1;
63695} cvmx_rad_reg_debug11_t;
63696
63697
63698/**
63699 * cvmx_rad_reg_debug12
63700 */
63701typedef union
63702{
63703    uint64_t u64;
63704    struct cvmx_rad_reg_debug12_s
63705    {
63706#if __BYTE_ORDER == __BIG_ENDIAN
63707        uint64_t reserved_15_63          : 49;
63708        uint64_t asserts                 : 15;      /**< Various assertion checks */
63709#else
63710        uint64_t asserts                 : 15;
63711        uint64_t reserved_15_63          : 49;
63712#endif
63713    } s;
63714    struct cvmx_rad_reg_debug12_s        cn52xx;
63715    struct cvmx_rad_reg_debug12_s        cn52xxp1;
63716    struct cvmx_rad_reg_debug12_s        cn56xx;
63717    struct cvmx_rad_reg_debug12_s        cn56xxp1;
63718} cvmx_rad_reg_debug12_t;
63719
63720
63721/**
63722 * cvmx_rad_reg_debug2
63723 */
63724typedef union
63725{
63726    uint64_t u64;
63727    struct cvmx_rad_reg_debug2_s
63728    {
63729#if __BYTE_ORDER == __BIG_ENDIAN
63730        uint64_t owordp                  : 64;      /**< OWordP */
63731#else
63732        uint64_t owordp                  : 64;
63733#endif
63734    } s;
63735    struct cvmx_rad_reg_debug2_s         cn52xx;
63736    struct cvmx_rad_reg_debug2_s         cn52xxp1;
63737    struct cvmx_rad_reg_debug2_s         cn56xx;
63738    struct cvmx_rad_reg_debug2_s         cn56xxp1;
63739} cvmx_rad_reg_debug2_t;
63740
63741
63742/**
63743 * cvmx_rad_reg_debug3
63744 */
63745typedef union
63746{
63747    uint64_t u64;
63748    struct cvmx_rad_reg_debug3_s
63749    {
63750#if __BYTE_ORDER == __BIG_ENDIAN
63751        uint64_t owordq                  : 64;      /**< OWordQ */
63752#else
63753        uint64_t owordq                  : 64;
63754#endif
63755    } s;
63756    struct cvmx_rad_reg_debug3_s         cn52xx;
63757    struct cvmx_rad_reg_debug3_s         cn52xxp1;
63758    struct cvmx_rad_reg_debug3_s         cn56xx;
63759    struct cvmx_rad_reg_debug3_s         cn56xxp1;
63760} cvmx_rad_reg_debug3_t;
63761
63762
63763/**
63764 * cvmx_rad_reg_debug4
63765 */
63766typedef union
63767{
63768    uint64_t u64;
63769    struct cvmx_rad_reg_debug4_s
63770    {
63771#if __BYTE_ORDER == __BIG_ENDIAN
63772        uint64_t rword                   : 64;      /**< RWord */
63773#else
63774        uint64_t rword                   : 64;
63775#endif
63776    } s;
63777    struct cvmx_rad_reg_debug4_s         cn52xx;
63778    struct cvmx_rad_reg_debug4_s         cn52xxp1;
63779    struct cvmx_rad_reg_debug4_s         cn56xx;
63780    struct cvmx_rad_reg_debug4_s         cn56xxp1;
63781} cvmx_rad_reg_debug4_t;
63782
63783
63784/**
63785 * cvmx_rad_reg_debug5
63786 */
63787typedef union
63788{
63789    uint64_t u64;
63790    struct cvmx_rad_reg_debug5_s
63791    {
63792#if __BYTE_ORDER == __BIG_ENDIAN
63793        uint64_t reserved_53_63          : 11;
63794        uint64_t niropc7                 : 3;       /**< NCBI ropc (stage7 grant) */
63795        uint64_t nirque7                 : 2;       /**< NCBI rque (stage7 grant) */
63796        uint64_t nirval7                 : 5;       /**< NCBI rval (stage7 grant) */
63797        uint64_t niropc6                 : 3;       /**< NCBI ropc (stage6 arb) */
63798        uint64_t nirque6                 : 2;       /**< NCBI rque (stage6 arb) */
63799        uint64_t nirarb6                 : 1;       /**< NCBI rarb (stage6 arb) */
63800        uint64_t nirval6                 : 5;       /**< NCBI rval (stage6 arb) */
63801        uint64_t niridx1                 : 4;       /**< NCBI ridx1 */
63802        uint64_t niwidx1                 : 4;       /**< NCBI widx1 */
63803        uint64_t niridx0                 : 4;       /**< NCBI ridx0 */
63804        uint64_t niwidx0                 : 4;       /**< NCBI widx0 */
63805        uint64_t wccreds                 : 2;       /**< WC credits */
63806        uint64_t fpacreds                : 2;       /**< POW credits */
63807        uint64_t reserved_10_11          : 2;
63808        uint64_t powcreds                : 2;       /**< POW credits */
63809        uint64_t n1creds                 : 4;       /**< NCBI1 credits */
63810        uint64_t n0creds                 : 4;       /**< NCBI0 credits */
63811#else
63812        uint64_t n0creds                 : 4;
63813        uint64_t n1creds                 : 4;
63814        uint64_t powcreds                : 2;
63815        uint64_t reserved_10_11          : 2;
63816        uint64_t fpacreds                : 2;
63817        uint64_t wccreds                 : 2;
63818        uint64_t niwidx0                 : 4;
63819        uint64_t niridx0                 : 4;
63820        uint64_t niwidx1                 : 4;
63821        uint64_t niridx1                 : 4;
63822        uint64_t nirval6                 : 5;
63823        uint64_t nirarb6                 : 1;
63824        uint64_t nirque6                 : 2;
63825        uint64_t niropc6                 : 3;
63826        uint64_t nirval7                 : 5;
63827        uint64_t nirque7                 : 2;
63828        uint64_t niropc7                 : 3;
63829        uint64_t reserved_53_63          : 11;
63830#endif
63831    } s;
63832    struct cvmx_rad_reg_debug5_s         cn52xx;
63833    struct cvmx_rad_reg_debug5_s         cn52xxp1;
63834    struct cvmx_rad_reg_debug5_s         cn56xx;
63835    struct cvmx_rad_reg_debug5_s         cn56xxp1;
63836} cvmx_rad_reg_debug5_t;
63837
63838
63839/**
63840 * cvmx_rad_reg_debug6
63841 */
63842typedef union
63843{
63844    uint64_t u64;
63845    struct cvmx_rad_reg_debug6_s
63846    {
63847#if __BYTE_ORDER == __BIG_ENDIAN
63848        uint64_t cnt                     : 8;       /**< CCTL count[7:0] (bytes) */
63849        uint64_t size                    : 16;      /**< CCTL size (bytes) */
63850        uint64_t ptr                     : 40;      /**< CCTL pointer */
63851#else
63852        uint64_t ptr                     : 40;
63853        uint64_t size                    : 16;
63854        uint64_t cnt                     : 8;
63855#endif
63856    } s;
63857    struct cvmx_rad_reg_debug6_s         cn52xx;
63858    struct cvmx_rad_reg_debug6_s         cn52xxp1;
63859    struct cvmx_rad_reg_debug6_s         cn56xx;
63860    struct cvmx_rad_reg_debug6_s         cn56xxp1;
63861} cvmx_rad_reg_debug6_t;
63862
63863
63864/**
63865 * cvmx_rad_reg_debug7
63866 */
63867typedef union
63868{
63869    uint64_t u64;
63870    struct cvmx_rad_reg_debug7_s
63871    {
63872#if __BYTE_ORDER == __BIG_ENDIAN
63873        uint64_t reserved_15_63          : 49;
63874        uint64_t cnt                     : 15;      /**< CCTL count[22:8] (bytes) */
63875#else
63876        uint64_t cnt                     : 15;
63877        uint64_t reserved_15_63          : 49;
63878#endif
63879    } s;
63880    struct cvmx_rad_reg_debug7_s         cn52xx;
63881    struct cvmx_rad_reg_debug7_s         cn52xxp1;
63882    struct cvmx_rad_reg_debug7_s         cn56xx;
63883    struct cvmx_rad_reg_debug7_s         cn56xxp1;
63884} cvmx_rad_reg_debug7_t;
63885
63886
63887/**
63888 * cvmx_rad_reg_debug8
63889 */
63890typedef union
63891{
63892    uint64_t u64;
63893    struct cvmx_rad_reg_debug8_s
63894    {
63895#if __BYTE_ORDER == __BIG_ENDIAN
63896        uint64_t flags                   : 8;       /**< ICTL flags */
63897        uint64_t size                    : 16;      /**< ICTL size (bytes) */
63898        uint64_t ptr                     : 40;      /**< ICTL pointer */
63899#else
63900        uint64_t ptr                     : 40;
63901        uint64_t size                    : 16;
63902        uint64_t flags                   : 8;
63903#endif
63904    } s;
63905    struct cvmx_rad_reg_debug8_s         cn52xx;
63906    struct cvmx_rad_reg_debug8_s         cn52xxp1;
63907    struct cvmx_rad_reg_debug8_s         cn56xx;
63908    struct cvmx_rad_reg_debug8_s         cn56xxp1;
63909} cvmx_rad_reg_debug8_t;
63910
63911
63912/**
63913 * cvmx_rad_reg_debug9
63914 */
63915typedef union
63916{
63917    uint64_t u64;
63918    struct cvmx_rad_reg_debug9_s
63919    {
63920#if __BYTE_ORDER == __BIG_ENDIAN
63921        uint64_t reserved_20_63          : 44;
63922        uint64_t eod                     : 1;       /**< ICTL eod flag */
63923        uint64_t ini                     : 1;       /**< ICTL init flag */
63924        uint64_t q                       : 1;       /**< ICTL q enable */
63925        uint64_t p                       : 1;       /**< ICTL p enable */
63926        uint64_t mul                     : 8;       /**< ICTL multiplier */
63927        uint64_t index                   : 8;       /**< ICTL index */
63928#else
63929        uint64_t index                   : 8;
63930        uint64_t mul                     : 8;
63931        uint64_t p                       : 1;
63932        uint64_t q                       : 1;
63933        uint64_t ini                     : 1;
63934        uint64_t eod                     : 1;
63935        uint64_t reserved_20_63          : 44;
63936#endif
63937    } s;
63938    struct cvmx_rad_reg_debug9_s         cn52xx;
63939    struct cvmx_rad_reg_debug9_s         cn52xxp1;
63940    struct cvmx_rad_reg_debug9_s         cn56xx;
63941    struct cvmx_rad_reg_debug9_s         cn56xxp1;
63942} cvmx_rad_reg_debug9_t;
63943
63944
63945/**
63946 * cvmx_rad_reg_error
63947 */
63948typedef union
63949{
63950    uint64_t u64;
63951    struct cvmx_rad_reg_error_s
63952    {
63953#if __BYTE_ORDER == __BIG_ENDIAN
63954        uint64_t reserved_1_63           : 63;
63955        uint64_t doorbell                : 1;       /**< A doorbell count has overflowed */
63956#else
63957        uint64_t doorbell                : 1;
63958        uint64_t reserved_1_63           : 63;
63959#endif
63960    } s;
63961    struct cvmx_rad_reg_error_s          cn52xx;
63962    struct cvmx_rad_reg_error_s          cn52xxp1;
63963    struct cvmx_rad_reg_error_s          cn56xx;
63964    struct cvmx_rad_reg_error_s          cn56xxp1;
63965} cvmx_rad_reg_error_t;
63966
63967
63968/**
63969 * cvmx_rad_reg_int_mask
63970 *
63971 * Notes:
63972 * When a mask bit is set, the corresponding interrupt is enabled.
63973 *
63974 */
63975typedef union
63976{
63977    uint64_t u64;
63978    struct cvmx_rad_reg_int_mask_s
63979    {
63980#if __BYTE_ORDER == __BIG_ENDIAN
63981        uint64_t reserved_1_63           : 63;
63982        uint64_t doorbell                : 1;       /**< Bit mask corresponding to RAD_REG_ERROR[0] above */
63983#else
63984        uint64_t doorbell                : 1;
63985        uint64_t reserved_1_63           : 63;
63986#endif
63987    } s;
63988    struct cvmx_rad_reg_int_mask_s       cn52xx;
63989    struct cvmx_rad_reg_int_mask_s       cn52xxp1;
63990    struct cvmx_rad_reg_int_mask_s       cn56xx;
63991    struct cvmx_rad_reg_int_mask_s       cn56xxp1;
63992} cvmx_rad_reg_int_mask_t;
63993
63994
63995/**
63996 * cvmx_rad_reg_polynomial
63997 *
63998 * Notes:
63999 * The polynomial is x^8 + C7*x^7 + C6*x^6 + C5*x^5 + C4*x^4 + C3*x^3 + C2*x^2 + C1*x^1 + C0.
64000 *
64001 */
64002typedef union
64003{
64004    uint64_t u64;
64005    struct cvmx_rad_reg_polynomial_s
64006    {
64007#if __BYTE_ORDER == __BIG_ENDIAN
64008        uint64_t reserved_8_63           : 56;
64009        uint64_t coeffs                  : 8;       /**< coefficients of GF(2^8) irreducible polynomial */
64010#else
64011        uint64_t coeffs                  : 8;
64012        uint64_t reserved_8_63           : 56;
64013#endif
64014    } s;
64015    struct cvmx_rad_reg_polynomial_s     cn52xx;
64016    struct cvmx_rad_reg_polynomial_s     cn52xxp1;
64017    struct cvmx_rad_reg_polynomial_s     cn56xx;
64018    struct cvmx_rad_reg_polynomial_s     cn56xxp1;
64019} cvmx_rad_reg_polynomial_t;
64020
64021
64022/**
64023 * cvmx_rad_reg_read_idx
64024 *
64025 * Notes:
64026 * Provides the read index during a CSR read operation to any of the CSRs that are physically stored
64027 * as memories.  The names of these CSRs begin with the prefix "RAD_MEM_".
64028 * IDX[15:0] is the read index.  INC[15:0] is an increment that is added to IDX[15:0] after any CSR read.
64029 * The intended use is to initially write this CSR such that IDX=0 and INC=1.  Then, the entire
64030 * contents of a CSR memory can be read with consecutive CSR read commands.
64031 */
64032typedef union
64033{
64034    uint64_t u64;
64035    struct cvmx_rad_reg_read_idx_s
64036    {
64037#if __BYTE_ORDER == __BIG_ENDIAN
64038        uint64_t reserved_32_63          : 32;
64039        uint64_t inc                     : 16;      /**< Increment to add to current index for next index */
64040        uint64_t index                   : 16;      /**< Index to use for next memory CSR read */
64041#else
64042        uint64_t index                   : 16;
64043        uint64_t inc                     : 16;
64044        uint64_t reserved_32_63          : 32;
64045#endif
64046    } s;
64047    struct cvmx_rad_reg_read_idx_s       cn52xx;
64048    struct cvmx_rad_reg_read_idx_s       cn52xxp1;
64049    struct cvmx_rad_reg_read_idx_s       cn56xx;
64050    struct cvmx_rad_reg_read_idx_s       cn56xxp1;
64051} cvmx_rad_reg_read_idx_t;
64052
64053
64054/**
64055 * cvmx_rnm_bist_status
64056 *
64057 * RNM_BIST_STATUS = RNM's BIST Status Register
64058 *
64059 * The RNM's Memory Bist Status register.
64060 */
64061typedef union
64062{
64063    uint64_t u64;
64064    struct cvmx_rnm_bist_status_s
64065    {
64066#if __BYTE_ORDER == __BIG_ENDIAN
64067        uint64_t reserved_2_63           : 62;
64068        uint64_t rrc                     : 1;       /**< Status of RRC block bist. */
64069        uint64_t mem                     : 1;       /**< Status of MEM block bist. */
64070#else
64071        uint64_t mem                     : 1;
64072        uint64_t rrc                     : 1;
64073        uint64_t reserved_2_63           : 62;
64074#endif
64075    } s;
64076    struct cvmx_rnm_bist_status_s        cn30xx;
64077    struct cvmx_rnm_bist_status_s        cn31xx;
64078    struct cvmx_rnm_bist_status_s        cn38xx;
64079    struct cvmx_rnm_bist_status_s        cn38xxp2;
64080    struct cvmx_rnm_bist_status_s        cn50xx;
64081    struct cvmx_rnm_bist_status_s        cn52xx;
64082    struct cvmx_rnm_bist_status_s        cn52xxp1;
64083    struct cvmx_rnm_bist_status_s        cn56xx;
64084    struct cvmx_rnm_bist_status_s        cn56xxp1;
64085    struct cvmx_rnm_bist_status_s        cn58xx;
64086    struct cvmx_rnm_bist_status_s        cn58xxp1;
64087} cvmx_rnm_bist_status_t;
64088
64089
64090/**
64091 * cvmx_rnm_ctl_status
64092 *
64093 * RNM_CTL_STATUS = RNM's Control/Status Register
64094 *
64095 * The RNM's interrupt enable register.
64096 */
64097typedef union
64098{
64099    uint64_t u64;
64100    struct cvmx_rnm_ctl_status_s
64101    {
64102#if __BYTE_ORDER == __BIG_ENDIAN
64103        uint64_t reserved_9_63           : 55;
64104        uint64_t ent_sel                 : 4;       /**< ? */
64105        uint64_t exp_ent                 : 1;       /**< Exported entropy enable for random number generator */
64106        uint64_t rng_rst                 : 1;       /**< Reset RNG as core reset. */
64107        uint64_t rnm_rst                 : 1;       /**< Reset the RNM as core reset except for register
64108                                                         logic. */
64109        uint64_t rng_en                  : 1;       /**< Enable the output of the RNG. */
64110        uint64_t ent_en                  : 1;       /**< Entropy enable for random number generator. */
64111#else
64112        uint64_t ent_en                  : 1;
64113        uint64_t rng_en                  : 1;
64114        uint64_t rnm_rst                 : 1;
64115        uint64_t rng_rst                 : 1;
64116        uint64_t exp_ent                 : 1;
64117        uint64_t ent_sel                 : 4;
64118        uint64_t reserved_9_63           : 55;
64119#endif
64120    } s;
64121    struct cvmx_rnm_ctl_status_cn30xx
64122    {
64123#if __BYTE_ORDER == __BIG_ENDIAN
64124        uint64_t reserved_4_63           : 60;
64125        uint64_t rng_rst                 : 1;       /**< Reset RNG as core reset. */
64126        uint64_t rnm_rst                 : 1;       /**< Reset the RNM as core reset except for register
64127                                                         logic. */
64128        uint64_t rng_en                  : 1;       /**< Enable the output of the RNG. */
64129        uint64_t ent_en                  : 1;       /**< Entropy enable for random number generator. */
64130#else
64131        uint64_t ent_en                  : 1;
64132        uint64_t rng_en                  : 1;
64133        uint64_t rnm_rst                 : 1;
64134        uint64_t rng_rst                 : 1;
64135        uint64_t reserved_4_63           : 60;
64136#endif
64137    } cn30xx;
64138    struct cvmx_rnm_ctl_status_cn30xx    cn31xx;
64139    struct cvmx_rnm_ctl_status_cn30xx    cn38xx;
64140    struct cvmx_rnm_ctl_status_cn30xx    cn38xxp2;
64141    struct cvmx_rnm_ctl_status_s         cn50xx;
64142    struct cvmx_rnm_ctl_status_s         cn52xx;
64143    struct cvmx_rnm_ctl_status_s         cn52xxp1;
64144    struct cvmx_rnm_ctl_status_s         cn56xx;
64145    struct cvmx_rnm_ctl_status_s         cn56xxp1;
64146    struct cvmx_rnm_ctl_status_s         cn58xx;
64147    struct cvmx_rnm_ctl_status_s         cn58xxp1;
64148} cvmx_rnm_ctl_status_t;
64149
64150
64151/**
64152 * cvmx_smi#_clk
64153 *
64154 * SMI_CLK = Clock Control Register
64155 *
64156 */
64157typedef union
64158{
64159    uint64_t u64;
64160    struct cvmx_smix_clk_s
64161    {
64162#if __BYTE_ORDER == __BIG_ENDIAN
64163        uint64_t reserved_25_63          : 39;
64164        uint64_t mode                    : 1;       /**< IEEE operating mode
64165                                                         0=Clause 22 complient
64166                                                         1=Clause 45 complient */
64167        uint64_t reserved_21_23          : 3;
64168        uint64_t sample_hi               : 5;       /**< When to sample read data (extended bits) */
64169        uint64_t sample_mode             : 1;       /**< Read Data sampling mode
64170                                                         According to the 802.3 spec, on reads, the STA
64171                                                         transitions MDC and the PHY drives MDIO with
64172                                                         some delay relative to that edge.  This is edge1.
64173                                                         The STA then samples MDIO on the next rising edge
64174                                                         of MDC.  This is edge2. Octeon can sample the
64175                                                         read data relative to either edge.
64176                                                          0=[SAMPLE_HI,SAMPLE] specify the sample time
64177                                                            relative to edge2
64178                                                          1=[SAMPLE_HI,SAMPLE] specify the sample time
64179                                                            relative to edge1 */
64180        uint64_t reserved_14_14          : 1;
64181        uint64_t clk_idle                : 1;       /**< Do not toggle MDC on idle cycles */
64182        uint64_t preamble                : 1;       /**< Send PREAMBLE on SMI transacton */
64183        uint64_t sample                  : 4;       /**< When to sample read data
64184                                                         (number of eclks after the rising edge of mdc)
64185                                                         ( [SAMPLE_HI,SAMPLE] > 1 )
64186                                                         ( [SAMPLE_HI, SAMPLE] + 3 <= 2*PHASE ) */
64187        uint64_t phase                   : 8;       /**< MDC Clock Phase
64188                                                         (number of eclks that make up an mdc phase)
64189                                                         (PHASE > 2) */
64190#else
64191        uint64_t phase                   : 8;
64192        uint64_t sample                  : 4;
64193        uint64_t preamble                : 1;
64194        uint64_t clk_idle                : 1;
64195        uint64_t reserved_14_14          : 1;
64196        uint64_t sample_mode             : 1;
64197        uint64_t sample_hi               : 5;
64198        uint64_t reserved_21_23          : 3;
64199        uint64_t mode                    : 1;
64200        uint64_t reserved_25_63          : 39;
64201#endif
64202    } s;
64203    struct cvmx_smix_clk_cn30xx
64204    {
64205#if __BYTE_ORDER == __BIG_ENDIAN
64206        uint64_t reserved_21_63          : 43;
64207        uint64_t sample_hi               : 5;       /**< When to sample read data (extended bits) */
64208        uint64_t sample_mode             : 1;       /**< Read Data sampling mode
64209                                                         According to the 802.3 spec, on reads, the STA
64210                                                         transitions MDC and the PHY drives MDIO with
64211                                                         some delay relative to that edge.  This is edge1.
64212                                                         The STA then samples MDIO on the next rising edge
64213                                                         of MDC.  This is edge2. Octeon can sample the
64214                                                         read data relative to either edge.
64215                                                          0=[SAMPLE_HI,SAMPLE] specify the sample time
64216                                                            relative to edge2
64217                                                          1=[SAMPLE_HI,SAMPLE] specify the sample time
64218                                                            relative to edge1 */
64219        uint64_t reserved_14_14          : 1;
64220        uint64_t clk_idle                : 1;       /**< Do not toggle MDC on idle cycles */
64221        uint64_t preamble                : 1;       /**< Send PREAMBLE on SMI transacton */
64222        uint64_t sample                  : 4;       /**< When to sample read data
64223                                                         (number of eclks after the rising edge of mdc)
64224                                                         ( [SAMPLE_HI,SAMPLE] > 1 )
64225                                                         ( [SAMPLE_HI, SAMPLE] + 3 <= 2*PHASE ) */
64226        uint64_t phase                   : 8;       /**< MDC Clock Phase
64227                                                         (number of eclks that make up an mdc phase)
64228                                                         (PHASE > 2) */
64229#else
64230        uint64_t phase                   : 8;
64231        uint64_t sample                  : 4;
64232        uint64_t preamble                : 1;
64233        uint64_t clk_idle                : 1;
64234        uint64_t reserved_14_14          : 1;
64235        uint64_t sample_mode             : 1;
64236        uint64_t sample_hi               : 5;
64237        uint64_t reserved_21_63          : 43;
64238#endif
64239    } cn30xx;
64240    struct cvmx_smix_clk_cn30xx          cn31xx;
64241    struct cvmx_smix_clk_cn30xx          cn38xx;
64242    struct cvmx_smix_clk_cn30xx          cn38xxp2;
64243    struct cvmx_smix_clk_s               cn50xx;
64244    struct cvmx_smix_clk_s               cn52xx;
64245    struct cvmx_smix_clk_s               cn52xxp1;
64246    struct cvmx_smix_clk_s               cn56xx;
64247    struct cvmx_smix_clk_s               cn56xxp1;
64248    struct cvmx_smix_clk_cn30xx          cn58xx;
64249    struct cvmx_smix_clk_cn30xx          cn58xxp1;
64250} cvmx_smix_clk_t;
64251
64252
64253/**
64254 * cvmx_smi#_cmd
64255 *
64256 * SMI_CMD = Force a Read/Write command to the PHY
64257 *
64258 *
64259 * Notes:
64260 * Writes to this register will create SMI xactions.  Software will poll on (depending on the xaction type).
64261 *
64262 */
64263typedef union
64264{
64265    uint64_t u64;
64266    struct cvmx_smix_cmd_s
64267    {
64268#if __BYTE_ORDER == __BIG_ENDIAN
64269        uint64_t reserved_18_63          : 46;
64270        uint64_t phy_op                  : 2;       /**< PHY Opcode
64271                                                         0=write
64272                                                         1=read */
64273        uint64_t reserved_13_15          : 3;
64274        uint64_t phy_adr                 : 5;       /**< PHY Address */
64275        uint64_t reserved_5_7            : 3;
64276        uint64_t reg_adr                 : 5;       /**< PHY Register Offset */
64277#else
64278        uint64_t reg_adr                 : 5;
64279        uint64_t reserved_5_7            : 3;
64280        uint64_t phy_adr                 : 5;
64281        uint64_t reserved_13_15          : 3;
64282        uint64_t phy_op                  : 2;
64283        uint64_t reserved_18_63          : 46;
64284#endif
64285    } s;
64286    struct cvmx_smix_cmd_cn30xx
64287    {
64288#if __BYTE_ORDER == __BIG_ENDIAN
64289        uint64_t reserved_17_63          : 47;
64290        uint64_t phy_op                  : 1;       /**< PHY Opcode
64291                                                         0=write
64292                                                         1=read */
64293        uint64_t reserved_13_15          : 3;
64294        uint64_t phy_adr                 : 5;       /**< PHY Address */
64295        uint64_t reserved_5_7            : 3;
64296        uint64_t reg_adr                 : 5;       /**< PHY Register Offset */
64297#else
64298        uint64_t reg_adr                 : 5;
64299        uint64_t reserved_5_7            : 3;
64300        uint64_t phy_adr                 : 5;
64301        uint64_t reserved_13_15          : 3;
64302        uint64_t phy_op                  : 1;
64303        uint64_t reserved_17_63          : 47;
64304#endif
64305    } cn30xx;
64306    struct cvmx_smix_cmd_cn30xx          cn31xx;
64307    struct cvmx_smix_cmd_cn30xx          cn38xx;
64308    struct cvmx_smix_cmd_cn30xx          cn38xxp2;
64309    struct cvmx_smix_cmd_s               cn50xx;
64310    struct cvmx_smix_cmd_s               cn52xx;
64311    struct cvmx_smix_cmd_s               cn52xxp1;
64312    struct cvmx_smix_cmd_s               cn56xx;
64313    struct cvmx_smix_cmd_s               cn56xxp1;
64314    struct cvmx_smix_cmd_cn30xx          cn58xx;
64315    struct cvmx_smix_cmd_cn30xx          cn58xxp1;
64316} cvmx_smix_cmd_t;
64317
64318
64319/**
64320 * cvmx_smi#_en
64321 *
64322 * SMI_EN = Enable the SMI interface
64323 *
64324 */
64325typedef union
64326{
64327    uint64_t u64;
64328    struct cvmx_smix_en_s
64329    {
64330#if __BYTE_ORDER == __BIG_ENDIAN
64331        uint64_t reserved_1_63           : 63;
64332        uint64_t en                      : 1;       /**< Interface enable
64333                                                         0=SMI Interface is down / no transactions, no MDC
64334                                                         1=SMI Interface is up */
64335#else
64336        uint64_t en                      : 1;
64337        uint64_t reserved_1_63           : 63;
64338#endif
64339    } s;
64340    struct cvmx_smix_en_s                cn30xx;
64341    struct cvmx_smix_en_s                cn31xx;
64342    struct cvmx_smix_en_s                cn38xx;
64343    struct cvmx_smix_en_s                cn38xxp2;
64344    struct cvmx_smix_en_s                cn50xx;
64345    struct cvmx_smix_en_s                cn52xx;
64346    struct cvmx_smix_en_s                cn52xxp1;
64347    struct cvmx_smix_en_s                cn56xx;
64348    struct cvmx_smix_en_s                cn56xxp1;
64349    struct cvmx_smix_en_s                cn58xx;
64350    struct cvmx_smix_en_s                cn58xxp1;
64351} cvmx_smix_en_t;
64352
64353
64354/**
64355 * cvmx_smi#_rd_dat
64356 *
64357 * SMI_RD_DAT = SMI Read Data
64358 *
64359 *
64360 * Notes:
64361 * VAL will assert when the read xaction completes.  A read to this register
64362 * will clear VAL.  PENDING indicates that an SMI RD transaction is in flight.
64363 */
64364typedef union
64365{
64366    uint64_t u64;
64367    struct cvmx_smix_rd_dat_s
64368    {
64369#if __BYTE_ORDER == __BIG_ENDIAN
64370        uint64_t reserved_18_63          : 46;
64371        uint64_t pending                 : 1;       /**< Read Xaction Pending */
64372        uint64_t val                     : 1;       /**< Read Data Valid */
64373        uint64_t dat                     : 16;      /**< Read Data */
64374#else
64375        uint64_t dat                     : 16;
64376        uint64_t val                     : 1;
64377        uint64_t pending                 : 1;
64378        uint64_t reserved_18_63          : 46;
64379#endif
64380    } s;
64381    struct cvmx_smix_rd_dat_s            cn30xx;
64382    struct cvmx_smix_rd_dat_s            cn31xx;
64383    struct cvmx_smix_rd_dat_s            cn38xx;
64384    struct cvmx_smix_rd_dat_s            cn38xxp2;
64385    struct cvmx_smix_rd_dat_s            cn50xx;
64386    struct cvmx_smix_rd_dat_s            cn52xx;
64387    struct cvmx_smix_rd_dat_s            cn52xxp1;
64388    struct cvmx_smix_rd_dat_s            cn56xx;
64389    struct cvmx_smix_rd_dat_s            cn56xxp1;
64390    struct cvmx_smix_rd_dat_s            cn58xx;
64391    struct cvmx_smix_rd_dat_s            cn58xxp1;
64392} cvmx_smix_rd_dat_t;
64393
64394
64395/**
64396 * cvmx_smi#_wr_dat
64397 *
64398 * SMI_WR_DAT = SMI Write Data
64399 *
64400 *
64401 * Notes:
64402 * VAL will assert when the write xaction completes.  A read to this register
64403 * will clear VAL.  PENDING indicates that an SMI WR transaction is in flight.
64404 */
64405typedef union
64406{
64407    uint64_t u64;
64408    struct cvmx_smix_wr_dat_s
64409    {
64410#if __BYTE_ORDER == __BIG_ENDIAN
64411        uint64_t reserved_18_63          : 46;
64412        uint64_t pending                 : 1;       /**< Write Xaction Pending */
64413        uint64_t val                     : 1;       /**< Write Data Valid */
64414        uint64_t dat                     : 16;      /**< Write Data */
64415#else
64416        uint64_t dat                     : 16;
64417        uint64_t val                     : 1;
64418        uint64_t pending                 : 1;
64419        uint64_t reserved_18_63          : 46;
64420#endif
64421    } s;
64422    struct cvmx_smix_wr_dat_s            cn30xx;
64423    struct cvmx_smix_wr_dat_s            cn31xx;
64424    struct cvmx_smix_wr_dat_s            cn38xx;
64425    struct cvmx_smix_wr_dat_s            cn38xxp2;
64426    struct cvmx_smix_wr_dat_s            cn50xx;
64427    struct cvmx_smix_wr_dat_s            cn52xx;
64428    struct cvmx_smix_wr_dat_s            cn52xxp1;
64429    struct cvmx_smix_wr_dat_s            cn56xx;
64430    struct cvmx_smix_wr_dat_s            cn56xxp1;
64431    struct cvmx_smix_wr_dat_s            cn58xx;
64432    struct cvmx_smix_wr_dat_s            cn58xxp1;
64433} cvmx_smix_wr_dat_t;
64434
64435
64436/**
64437 * cvmx_spx#_bckprs_cnt
64438 *
64439 * Notes:
64440 * The back pressure watcher counts the number of cycles in which the spi
64441 * receiver receives data once the TPA for a particular port has been
64442 * deasserted.  The desired port to watch can be selected with the
64443 * SPX_TPA_SEL[PRTSEL] field.
64444 *
64445 * This register can be cleared by simply writting all 1's to it.
64446 */
64447typedef union
64448{
64449    uint64_t u64;
64450    struct cvmx_spxx_bckprs_cnt_s
64451    {
64452#if __BYTE_ORDER == __BIG_ENDIAN
64453        uint64_t reserved_32_63          : 32;
64454        uint64_t cnt                     : 32;      /**< Number of cycles when back-pressure is received */
64455#else
64456        uint64_t cnt                     : 32;
64457        uint64_t reserved_32_63          : 32;
64458#endif
64459    } s;
64460    struct cvmx_spxx_bckprs_cnt_s        cn38xx;
64461    struct cvmx_spxx_bckprs_cnt_s        cn38xxp2;
64462    struct cvmx_spxx_bckprs_cnt_s        cn58xx;
64463    struct cvmx_spxx_bckprs_cnt_s        cn58xxp1;
64464} cvmx_spxx_bckprs_cnt_t;
64465
64466
64467/**
64468 * cvmx_spx#_bist_stat
64469 *
64470 * Notes:
64471 * Bist results encoding
64472 * - 0: good (or bist in progress/never run)
64473 * - 1: bad
64474 */
64475typedef union
64476{
64477    uint64_t u64;
64478    struct cvmx_spxx_bist_stat_s
64479    {
64480#if __BYTE_ORDER == __BIG_ENDIAN
64481        uint64_t reserved_3_63           : 61;
64482        uint64_t stat2                   : 1;       /**< Bist Results/No Repair (Tx calendar table)
64483                                                         (spx.stx.cal.calendar) */
64484        uint64_t stat1                   : 1;       /**< Bist Results/No Repair (Rx calendar table)
64485                                                         (spx.srx.spi4.cal.calendar) */
64486        uint64_t stat0                   : 1;       /**< Bist Results/No Repair (Spi4 receive datapath FIFO)
64487                                                         (spx.srx.spi4.dat.dpr) */
64488#else
64489        uint64_t stat0                   : 1;
64490        uint64_t stat1                   : 1;
64491        uint64_t stat2                   : 1;
64492        uint64_t reserved_3_63           : 61;
64493#endif
64494    } s;
64495    struct cvmx_spxx_bist_stat_s         cn38xx;
64496    struct cvmx_spxx_bist_stat_s         cn38xxp2;
64497    struct cvmx_spxx_bist_stat_s         cn58xx;
64498    struct cvmx_spxx_bist_stat_s         cn58xxp1;
64499} cvmx_spxx_bist_stat_t;
64500
64501
64502/**
64503 * cvmx_spx#_clk_ctl
64504 *
64505 * Notes:
64506 * * SRXDLCK
64507 *   When asserted, this bit locks the Spi4 receive DLLs.  This bit also
64508 *   acts as the Spi4 receiver reset and must be asserted before the
64509 *   training sequences are used to initialize the interface.  This bit
64510 *   only applies to the receiver interface.
64511 *
64512 * * RCVTRN
64513 *   Once the SRXDLCK bit is asserted and the DLLs have locked and the
64514 *   system has been programmed, software should assert this bit in order
64515 *   to start looking for valid training sequence and synchronize the
64516 *   interface. This bit only applies to the receiver interface.
64517 *
64518 * * DRPTRN
64519 *   The Spi4 receiver can either convert training packets into NOPs or
64520 *   drop them entirely.  Dropping ticks allows the interface to deskew
64521 *   periodically if the dclk and eclk ratios are close. This bit only
64522 *   applies to the receiver interface.
64523 *
64524 * * SNDTRN
64525 *   When software sets this bit, it indicates that the Spi4 transmit
64526 *   interface has been setup and has seen the calendare status.  Once the
64527 *   transmitter begins sending training data, the receiving device is free
64528 *   to start traversing the calendar table to synch the link.
64529 *
64530 * * STATRCV
64531 *   This bit determines which status clock edge to sample the status
64532 *   channel in Spi4 mode.  Since the status channel is in the opposite
64533 *   direction to the datapath, the STATRCV actually effects the
64534 *   transmitter/TX block.
64535 *
64536 * * STATDRV
64537 *   This bit determines which status clock edge to drive the status
64538 *   channel in Spi4 mode.  Since the status channel is in the opposite
64539 *   direction to the datapath, the STATDRV actually effects the
64540 *   receiver/RX block.
64541 *
64542 * * RUNBIST
64543 *   RUNBIST will beginning BIST/BISR in all the SPX compilied memories.
64544 *   These memories are...
64545 *
64546 *       * spx.srx.spi4.dat.dpr        // FIFO Spi4 to IMX
64547 *       * spx.stx.cal.calendar        // Spi4 TX calendar table
64548 *       * spx.srx.spi4.cal.calendar   // Spi4 RX calendar table
64549 *
64550 *   RUNBIST must never be asserted when the interface is enabled.
64551 *   Furthmore, setting RUNBIST at any other time is destructive and can
64552 *   cause data and configuration corruption.  The entire interface must be
64553 *   reconfigured when this bit is set.
64554 *
64555 * * CLKDLY
64556 *   Static clock positioning mostly intended for use in quarter clocking
64557 *   schemes.  The delay window is not large enough for slow clock freq,
64558 *   therefore clock and data must be statically positioned with CSRs.  By
64559 *   changing the clock position relative to the data bits, we give the
64560 *   system a wider window.
64561 *
64562 * * SEETRN
64563 *   In systems in which no training data is sent to N2 or N2 cannot
64564 *   correctly sample the training data, software may pulse this bit by
64565 *   writing a '1' followed by a '0' in order to correctly set the
64566 *   receivers state.  The receive data bus should be idle at this time
64567 *   (only NOPs on the bus).  If N2 cannot see at least on training
64568 *   sequence, the data bus will not send any data to the core.  The
64569 *   interface will hang.
64570 */
64571typedef union
64572{
64573    uint64_t u64;
64574    struct cvmx_spxx_clk_ctl_s
64575    {
64576#if __BYTE_ORDER == __BIG_ENDIAN
64577        uint64_t reserved_17_63          : 47;
64578        uint64_t seetrn                  : 1;       /**< Force the Spi4 receive into seeing a traing
64579                                                         sequence */
64580        uint64_t reserved_12_15          : 4;
64581        uint64_t clkdly                  : 5;       /**< Set the spx__clkdly lines to this value to
64582                                                         control the delay on the incoming dclk
64583                                                         (spx__clkdly) */
64584        uint64_t runbist                 : 1;       /**< Write this bit to begin BIST testing in SPX */
64585        uint64_t statdrv                 : 1;       /**< Spi4 status channel drive mode
64586                                                         - 1: Drive STAT on posedge of SCLK
64587                                                         - 0: Drive STAT on negedge of SCLK */
64588        uint64_t statrcv                 : 1;       /**< Spi4 status channel sample mode
64589                                                         - 1: Sample STAT on posedge of SCLK
64590                                                         - 0: Sample STAT on negedge of SCLK */
64591        uint64_t sndtrn                  : 1;       /**< Start sending training patterns on the Spi4
64592                                                         Tx Interface */
64593        uint64_t drptrn                  : 1;       /**< Drop blocks of training packets */
64594        uint64_t rcvtrn                  : 1;       /**< Write this bit once the DLL is locked to sync
64595                                                         on the training seqeunce */
64596        uint64_t srxdlck                 : 1;       /**< Write this bit to lock the Spi4 receive DLL */
64597#else
64598        uint64_t srxdlck                 : 1;
64599        uint64_t rcvtrn                  : 1;
64600        uint64_t drptrn                  : 1;
64601        uint64_t sndtrn                  : 1;
64602        uint64_t statrcv                 : 1;
64603        uint64_t statdrv                 : 1;
64604        uint64_t runbist                 : 1;
64605        uint64_t clkdly                  : 5;
64606        uint64_t reserved_12_15          : 4;
64607        uint64_t seetrn                  : 1;
64608        uint64_t reserved_17_63          : 47;
64609#endif
64610    } s;
64611    struct cvmx_spxx_clk_ctl_s           cn38xx;
64612    struct cvmx_spxx_clk_ctl_s           cn38xxp2;
64613    struct cvmx_spxx_clk_ctl_s           cn58xx;
64614    struct cvmx_spxx_clk_ctl_s           cn58xxp1;
64615} cvmx_spxx_clk_ctl_t;
64616
64617
64618/**
64619 * cvmx_spx#_clk_stat
64620 */
64621typedef union
64622{
64623    uint64_t u64;
64624    struct cvmx_spxx_clk_stat_s
64625    {
64626#if __BYTE_ORDER == __BIG_ENDIAN
64627        uint64_t reserved_11_63          : 53;
64628        uint64_t stxcal                  : 1;       /**< The transistion from Sync to Calendar on status
64629                                                         channel */
64630        uint64_t reserved_9_9            : 1;
64631        uint64_t srxtrn                  : 1;       /**< Saw a good data training sequence */
64632        uint64_t s4clk1                  : 1;       /**< Saw '1' on Spi4 transmit status forward clk input */
64633        uint64_t s4clk0                  : 1;       /**< Saw '0' on Spi4 transmit status forward clk input */
64634        uint64_t d4clk1                  : 1;       /**< Saw '1' on Spi4 receive data forward clk input */
64635        uint64_t d4clk0                  : 1;       /**< Saw '0' on Spi4 receive data forward clk input */
64636        uint64_t reserved_0_3            : 4;
64637#else
64638        uint64_t reserved_0_3            : 4;
64639        uint64_t d4clk0                  : 1;
64640        uint64_t d4clk1                  : 1;
64641        uint64_t s4clk0                  : 1;
64642        uint64_t s4clk1                  : 1;
64643        uint64_t srxtrn                  : 1;
64644        uint64_t reserved_9_9            : 1;
64645        uint64_t stxcal                  : 1;
64646        uint64_t reserved_11_63          : 53;
64647#endif
64648    } s;
64649    struct cvmx_spxx_clk_stat_s          cn38xx;
64650    struct cvmx_spxx_clk_stat_s          cn38xxp2;
64651    struct cvmx_spxx_clk_stat_s          cn58xx;
64652    struct cvmx_spxx_clk_stat_s          cn58xxp1;
64653} cvmx_spxx_clk_stat_t;
64654
64655
64656/**
64657 * cvmx_spx#_dbg_deskew_ctl
64658 *
64659 * Notes:
64660 * These bits are meant as a backdoor to control Spi4 per-bit deskew.  See
64661 * that Spec for more details.
64662 *
64663 *   The basic idea is to allow software to disable the auto-deskew widgets
64664 *   and make any adjustments by hand.  These steps should only be taken
64665 *   once the RCVTRN bit is set and before any real traffic is sent on the
64666 *   Spi4 bus.  Great care should be taken when messing with these bits as
64667 *   improper programmings can cause catestrophic or intermitent problems.
64668 *
64669 *   The params we have to test are the MUX tap selects and the XCV delay
64670 *   tap selects.
64671 *
64672 *   For the muxes, we can set each tap to a random value and then read
64673 *   back the taps.  To write...
64674 *
64675 *    SPXX_DBG_DESKEW_CTL[BITSEL]   = bit to set
64676 *    SPXX_DBG_DESKEW_CTL[OFFSET]   = mux tap value (2-bits)
64677 *    SPXX_DBG_DESKEW_CTL[MUX]      = go bit
64678 *
64679 *   Notice this can all happen with a single CSR write.  To read, first
64680 *   set the bit you to look at with the SPXX_DBG_DESKEW_CTL[BITSEL], then
64681 *   simply read SPXX_DBG_DESKEW_STATE[MUXSEL]...
64682 *
64683 *    SPXX_DBG_DESKEW_CTL[BITSEL]   = bit to set
64684 *    SPXX_DBG_DESKEW_STATE[MUXSEL] = 2-bit value
64685 *
64686 *   For the xcv delay taps, the CSR controls increment and decrement the
64687 *   5-bit count value in the XCV.  This is a saturating counter, so it
64688 *   will not wrap when decrementing below zero or incrementing above 31.
64689 *
64690 *   To write...
64691 *
64692 *    SPXX_DBG_DESKEW_CTL[BITSEL]   = bit to set
64693 *    SPXX_DBG_DESKEW_CTL[OFFSET]   = tap value increment or decrement amount (5-bits)
64694 *    SPXX_DBG_DESKEW_CTL[INC|DEC]  = go bit
64695 *
64696 *   These values are copied in SPX, so that they can be read back by
64697 *   software by a similar mechanism to the MUX selects...
64698 *
64699 *    SPXX_DBG_DESKEW_CTL[BITSEL]   = bit to set
64700 *    SPXX_DBG_DESKEW_STATE[OFFSET] = 5-bit value
64701 *
64702 *   In addition, there is a reset bit that sets all the state back to the
64703 *   default/starting value of 0x10.
64704 *
64705 *    SPXX_DBG_DESKEW_CTL[CLRDLY]   = 1
64706 *
64707 * SINGLE STEP TRAINING MODE (WILMA)
64708 *     Debug feature that will enable the user to single-step the debug
64709 *     logic to watch initial movement and trends by putting the training
64710 *     machine in single step mode.
64711 *
64712 * * SPX*_DBG_DESKEW_CTL[SSTEP]
64713 *        This will put the training control logic into single step mode.  We
64714 *        will not deskew in this scenario and will require the TX device to
64715 *        send continuous training sequences.
64716 *
64717 *        It is required that SRX*_COM_CTL[INF_EN] be clear so that suspect
64718 *        data does not flow into the chip.
64719 *
64720 *        Deasserting SPX*_DBG_DESKEW_CTL[SSTEP] will attempt to deskew as per
64721 *        the normal definition.  Single step mode is for debug only.  Special
64722 *        care must be given to correctly deskew the interface if normal
64723 *        operation is desired.
64724 *
64725 * * SPX*_DBG_DESKEW_CTL[SSTEP_GO]
64726 *        Each write of '1' to SSTEP_GO will go through a single training
64727 *        iteration and will perform...
64728 *
64729 *        - DLL update, if SPX*_DBG_DESKEW_CTL[DLLDIS] is clear
64730 *        - coarse update, if SPX*_TRN4_CTL[MUX_EN] is set
64731 *        - single fine update, if SPX*_TRN4_CTL[MACRO_EN] is set and an edge
64732 *       was detected after walked +/- SPX*_TRN4_CTL[MAXDIST] taps.
64733 *
64734 *        Writes to this register have no effect if the interface is not in
64735 *        SSTEP mode (SPX*_DBG_DESKEW_CTL[SSTEP]).
64736 *
64737 *        The WILMA mode will be cleared at the final state transition, so
64738 *        that software can set SPX*_DBG_DESKEW_CTL[SSTEP] and
64739 *        SPX*_DBG_DESKEW_CTL[SSTEP_GO] before setting SPX*_CLK_CTL[RCVTRN]
64740 *        and the machine will go through the initial iteration and stop -
64741 *        waiting for another SPX*_DBG_DESKEW_CTL[SSTEP_GO] or an interface
64742 *        enable.
64743 *
64744 * * SPX*_DBG_DESKEW_CTL[FALL8]
64745 *   Determines how many pattern matches are required during training
64746 *   operations to fallout of training and begin processing the normal data
64747 *   stream.  The default value is 10 pattern matches.  The pattern that is
64748 *   used is dependent on the SPX*_DBG_DESKEW_CTL[FALLNOP] CSR which
64749 *   determines between non-training packets (the default) and NOPs.
64750 *
64751 * * SPX*_DBG_DESKEW_CTL[FALLNOP]
64752 *   Determines the pattern that is required during training operations to
64753 *   fallout of training and begin processing the normal data stream.  The
64754 *   default value is to match against non-training data.  Setting this
64755 *   bit, changes the behavior to watch for NOPs packet instead.
64756 *
64757 *   This bit should not be changed dynamically while the link is
64758 *   operational.
64759 */
64760typedef union
64761{
64762    uint64_t u64;
64763    struct cvmx_spxx_dbg_deskew_ctl_s
64764    {
64765#if __BYTE_ORDER == __BIG_ENDIAN
64766        uint64_t reserved_30_63          : 34;
64767        uint64_t fallnop                 : 1;       /**< Training fallout on NOP matches instead of
64768                                                         non-training matches.
64769                                                         (spx_csr__spi4_fallout_nop) */
64770        uint64_t fall8                   : 1;       /**< Training fallout at 8 pattern matches instead of 10
64771                                                         (spx_csr__spi4_fallout_8_match) */
64772        uint64_t reserved_26_27          : 2;
64773        uint64_t sstep_go                : 1;       /**< Single Step Training Sequence
64774                                                         (spx_csr__spi4_single_step_go) */
64775        uint64_t sstep                   : 1;       /**< Single Step Training Mode
64776                                                         (spx_csr__spi4_single_step_mode) */
64777        uint64_t reserved_22_23          : 2;
64778        uint64_t clrdly                  : 1;       /**< Resets the offset control in the XCV
64779                                                         (spx_csr__spi4_dll_clr_dly) */
64780        uint64_t dec                     : 1;       /**< Decrement the offset by OFFSET for the Spi4
64781                                                         bit selected by BITSEL
64782                                                         (spx_csr__spi4_dbg_trn_dec) */
64783        uint64_t inc                     : 1;       /**< Increment the offset by OFFSET for the Spi4
64784                                                         bit selected by BITSEL
64785                                                         (spx_csr__spi4_dbg_trn_inc) */
64786        uint64_t mux                     : 1;       /**< Set the mux select tap for the Spi4 bit
64787                                                         selected by BITSEL
64788                                                         (spx_csr__spi4_dbg_trn_mux) */
64789        uint64_t offset                  : 5;       /**< Adds or subtracts (Based on INC or DEC) the
64790                                                         offset to Spi4 bit BITSEL.
64791                                                         (spx_csr__spi4_dbg_trn_offset) */
64792        uint64_t bitsel                  : 5;       /**< Select the Spi4 CTL or DAT bit
64793                                                         15-0 : Spi4 DAT[15:0]
64794                                                         16   : Spi4 CTL
64795                                                         - 31-17: Invalid
64796                                                         (spx_csr__spi4_dbg_trn_bitsel) */
64797        uint64_t offdly                  : 6;       /**< Set the spx__offset lines to this value when
64798                                                         not in macro sequence
64799                                                         (spx_csr__spi4_mac_offdly) */
64800        uint64_t dllfrc                  : 1;       /**< Force the Spi4 RX DLL to update
64801                                                         (spx_csr__spi4_dll_force) */
64802        uint64_t dlldis                  : 1;       /**< Disable sending the update signal to the Spi4
64803                                                         RX DLL when set
64804                                                         (spx_csr__spi4_dll_trn_en) */
64805#else
64806        uint64_t dlldis                  : 1;
64807        uint64_t dllfrc                  : 1;
64808        uint64_t offdly                  : 6;
64809        uint64_t bitsel                  : 5;
64810        uint64_t offset                  : 5;
64811        uint64_t mux                     : 1;
64812        uint64_t inc                     : 1;
64813        uint64_t dec                     : 1;
64814        uint64_t clrdly                  : 1;
64815        uint64_t reserved_22_23          : 2;
64816        uint64_t sstep                   : 1;
64817        uint64_t sstep_go                : 1;
64818        uint64_t reserved_26_27          : 2;
64819        uint64_t fall8                   : 1;
64820        uint64_t fallnop                 : 1;
64821        uint64_t reserved_30_63          : 34;
64822#endif
64823    } s;
64824    struct cvmx_spxx_dbg_deskew_ctl_s    cn38xx;
64825    struct cvmx_spxx_dbg_deskew_ctl_s    cn38xxp2;
64826    struct cvmx_spxx_dbg_deskew_ctl_s    cn58xx;
64827    struct cvmx_spxx_dbg_deskew_ctl_s    cn58xxp1;
64828} cvmx_spxx_dbg_deskew_ctl_t;
64829
64830
64831/**
64832 * cvmx_spx#_dbg_deskew_state
64833 *
64834 * Notes:
64835 * These bits are meant as a backdoor to control Spi4 per-bit deskew.  See
64836 * that Spec for more details.
64837 */
64838typedef union
64839{
64840    uint64_t u64;
64841    struct cvmx_spxx_dbg_deskew_state_s
64842    {
64843#if __BYTE_ORDER == __BIG_ENDIAN
64844        uint64_t reserved_9_63           : 55;
64845        uint64_t testres                 : 1;       /**< Training Test Mode Result
64846                                                         (srx_spi4__test_mode_result) */
64847        uint64_t unxterm                 : 1;       /**< Unexpected training terminiation
64848                                                         (srx_spi4__top_unxexp_trn_term) */
64849        uint64_t muxsel                  : 2;       /**< The mux select value of the bit selected by
64850                                                         SPX_DBG_DESKEW_CTL[BITSEL]
64851                                                         (srx_spi4__trn_mux_sel) */
64852        uint64_t offset                  : 5;       /**< The counter value of the bit selected by
64853                                                         SPX_DBG_DESKEW_CTL[BITSEL]
64854                                                         (srx_spi4__xcv_tap_select) */
64855#else
64856        uint64_t offset                  : 5;
64857        uint64_t muxsel                  : 2;
64858        uint64_t unxterm                 : 1;
64859        uint64_t testres                 : 1;
64860        uint64_t reserved_9_63           : 55;
64861#endif
64862    } s;
64863    struct cvmx_spxx_dbg_deskew_state_s  cn38xx;
64864    struct cvmx_spxx_dbg_deskew_state_s  cn38xxp2;
64865    struct cvmx_spxx_dbg_deskew_state_s  cn58xx;
64866    struct cvmx_spxx_dbg_deskew_state_s  cn58xxp1;
64867} cvmx_spxx_dbg_deskew_state_t;
64868
64869
64870/**
64871 * cvmx_spx#_drv_ctl
64872 *
64873 * Notes:
64874 * These bits all come from Duke - he will provide documentation and
64875 * explanation.  I'll just butcher it.
64876 */
64877typedef union
64878{
64879    uint64_t u64;
64880    struct cvmx_spxx_drv_ctl_s
64881    {
64882#if __BYTE_ORDER == __BIG_ENDIAN
64883        uint64_t reserved_0_63           : 64;
64884#else
64885        uint64_t reserved_0_63           : 64;
64886#endif
64887    } s;
64888    struct cvmx_spxx_drv_ctl_cn38xx
64889    {
64890#if __BYTE_ORDER == __BIG_ENDIAN
64891        uint64_t reserved_16_63          : 48;
64892        uint64_t stx4ncmp                : 4;       /**< Duke (spx__spi4_tx_nctl_comp) */
64893        uint64_t stx4pcmp                : 4;       /**< Duke (spx__spi4_tx_pctl_comp) */
64894        uint64_t srx4cmp                 : 8;       /**< Duke (spx__spi4_rx_rctl_comp) */
64895#else
64896        uint64_t srx4cmp                 : 8;
64897        uint64_t stx4pcmp                : 4;
64898        uint64_t stx4ncmp                : 4;
64899        uint64_t reserved_16_63          : 48;
64900#endif
64901    } cn38xx;
64902    struct cvmx_spxx_drv_ctl_cn38xx      cn38xxp2;
64903    struct cvmx_spxx_drv_ctl_cn58xx
64904    {
64905#if __BYTE_ORDER == __BIG_ENDIAN
64906        uint64_t reserved_24_63          : 40;
64907        uint64_t stx4ncmp                : 4;       /**< Duke (spx__spi4_tx_nctl_comp) */
64908        uint64_t stx4pcmp                : 4;       /**< Duke (spx__spi4_tx_pctl_comp) */
64909        uint64_t reserved_10_15          : 6;
64910        uint64_t srx4cmp                 : 10;      /**< Duke (spx__spi4_rx_rctl_comp) */
64911#else
64912        uint64_t srx4cmp                 : 10;
64913        uint64_t reserved_10_15          : 6;
64914        uint64_t stx4pcmp                : 4;
64915        uint64_t stx4ncmp                : 4;
64916        uint64_t reserved_24_63          : 40;
64917#endif
64918    } cn58xx;
64919    struct cvmx_spxx_drv_ctl_cn58xx      cn58xxp1;
64920} cvmx_spxx_drv_ctl_t;
64921
64922
64923/**
64924 * cvmx_spx#_err_ctl
64925 *
64926 * SPX_ERR_CTL - Spi error control register
64927 *
64928 *
64929 * Notes:
64930 * * DIPPAY, DIPCLS, PRTNXA
64931 * These bits control whether or not the packet's ERR bit is set when any of
64932 * the these error is detected.  If the corresponding error's bit is clear,
64933 * the packet ERR will be set.  If the error bit is set, the SPX will simply
64934 * pass through the ERR bit without modifying it in anyway - the error bit
64935 * may or may not have been set by the transmitter device.
64936 */
64937typedef union
64938{
64939    uint64_t u64;
64940    struct cvmx_spxx_err_ctl_s
64941    {
64942#if __BYTE_ORDER == __BIG_ENDIAN
64943        uint64_t reserved_9_63           : 55;
64944        uint64_t prtnxa                  : 1;       /**< Spi4 - set the ERR bit on packets in which the
64945                                                         port is out-of-range */
64946        uint64_t dipcls                  : 1;       /**< Spi4 DIPERR on closing control words cause the
64947                                                         ERR bit to be set */
64948        uint64_t dippay                  : 1;       /**< Spi4 DIPERR on payload control words cause the
64949                                                         ERR bit to be set */
64950        uint64_t reserved_4_5            : 2;
64951        uint64_t errcnt                  : 4;       /**< Number of Dip4 errors before bringing down the
64952                                                         interface */
64953#else
64954        uint64_t errcnt                  : 4;
64955        uint64_t reserved_4_5            : 2;
64956        uint64_t dippay                  : 1;
64957        uint64_t dipcls                  : 1;
64958        uint64_t prtnxa                  : 1;
64959        uint64_t reserved_9_63           : 55;
64960#endif
64961    } s;
64962    struct cvmx_spxx_err_ctl_s           cn38xx;
64963    struct cvmx_spxx_err_ctl_s           cn38xxp2;
64964    struct cvmx_spxx_err_ctl_s           cn58xx;
64965    struct cvmx_spxx_err_ctl_s           cn58xxp1;
64966} cvmx_spxx_err_ctl_t;
64967
64968
64969/**
64970 * cvmx_spx#_int_dat
64971 *
64972 * SPX_INT_DAT - Interrupt Data Register
64973 *
64974 *
64975 * Notes:
64976 * Note: The SPX_INT_DAT[MUL] bit is set when multiple errors have been
64977 * detected that would set any of the data fields: PRT, RSVOP, and CALBNK.
64978 *
64979 * The following errors will cause MUL to assert for PRT conflicts.
64980 * - ABNORM
64981 * - APERR
64982 * - DPERR
64983 *
64984 * The following errors will cause MUL to assert for RSVOP conflicts.
64985 * - RSVERR
64986 *
64987 * The following errors will cause MUL to assert for CALBNK conflicts.
64988 * - CALERR
64989 *
64990 * The following errors will cause MUL to assert if multiple interrupts are
64991 * asserted.
64992 * - TPAOVR
64993 *
64994 * The MUL bit will be cleared once all outstanding errors have been
64995 * cleared by software (not just MUL errors - all errors).
64996 */
64997typedef union
64998{
64999    uint64_t u64;
65000    struct cvmx_spxx_int_dat_s
65001    {
65002#if __BYTE_ORDER == __BIG_ENDIAN
65003        uint64_t reserved_32_63          : 32;
65004        uint64_t mul                     : 1;       /**< Multiple errors have occured */
65005        uint64_t reserved_14_30          : 17;
65006        uint64_t calbnk                  : 2;       /**< Spi4 Calendar table parity error bank */
65007        uint64_t rsvop                   : 4;       /**< Spi4 reserved control word */
65008        uint64_t prt                     : 8;       /**< Port associated with error */
65009#else
65010        uint64_t prt                     : 8;
65011        uint64_t rsvop                   : 4;
65012        uint64_t calbnk                  : 2;
65013        uint64_t reserved_14_30          : 17;
65014        uint64_t mul                     : 1;
65015        uint64_t reserved_32_63          : 32;
65016#endif
65017    } s;
65018    struct cvmx_spxx_int_dat_s           cn38xx;
65019    struct cvmx_spxx_int_dat_s           cn38xxp2;
65020    struct cvmx_spxx_int_dat_s           cn58xx;
65021    struct cvmx_spxx_int_dat_s           cn58xxp1;
65022} cvmx_spxx_int_dat_t;
65023
65024
65025/**
65026 * cvmx_spx#_int_msk
65027 *
65028 * SPX_INT_MSK - Interrupt Mask Register
65029 *
65030 */
65031typedef union
65032{
65033    uint64_t u64;
65034    struct cvmx_spxx_int_msk_s
65035    {
65036#if __BYTE_ORDER == __BIG_ENDIAN
65037        uint64_t reserved_12_63          : 52;
65038        uint64_t calerr                  : 1;       /**< Spi4 Calendar table parity error */
65039        uint64_t syncerr                 : 1;       /**< Consecutive Spi4 DIP4 errors have exceeded
65040                                                         SPX_ERR_CTL[ERRCNT] */
65041        uint64_t diperr                  : 1;       /**< Spi4 DIP4 error */
65042        uint64_t tpaovr                  : 1;       /**< Selected port has hit TPA overflow */
65043        uint64_t rsverr                  : 1;       /**< Spi4 reserved control word detected */
65044        uint64_t drwnng                  : 1;       /**< Spi4 receive FIFO drowning/overflow */
65045        uint64_t clserr                  : 1;       /**< Spi4 packet closed on non-16B alignment without EOP */
65046        uint64_t spiovr                  : 1;       /**< Spi async FIFO overflow (Spi3 or Spi4) */
65047        uint64_t reserved_2_3            : 2;
65048        uint64_t abnorm                  : 1;       /**< Abnormal packet termination (ERR bit) */
65049        uint64_t prtnxa                  : 1;       /**< Port out of range */
65050#else
65051        uint64_t prtnxa                  : 1;
65052        uint64_t abnorm                  : 1;
65053        uint64_t reserved_2_3            : 2;
65054        uint64_t spiovr                  : 1;
65055        uint64_t clserr                  : 1;
65056        uint64_t drwnng                  : 1;
65057        uint64_t rsverr                  : 1;
65058        uint64_t tpaovr                  : 1;
65059        uint64_t diperr                  : 1;
65060        uint64_t syncerr                 : 1;
65061        uint64_t calerr                  : 1;
65062        uint64_t reserved_12_63          : 52;
65063#endif
65064    } s;
65065    struct cvmx_spxx_int_msk_s           cn38xx;
65066    struct cvmx_spxx_int_msk_s           cn38xxp2;
65067    struct cvmx_spxx_int_msk_s           cn58xx;
65068    struct cvmx_spxx_int_msk_s           cn58xxp1;
65069} cvmx_spxx_int_msk_t;
65070
65071
65072/**
65073 * cvmx_spx#_int_reg
65074 *
65075 * SPX_INT_REG - Interrupt Register
65076 *
65077 *
65078 * Notes:
65079 * * PRTNXA
65080 *   This error indicates that the port on the Spi bus was not a valid port
65081 *   for the system.  Spi4 accesses occur on payload control bit-times. The
65082 *   SRX can be configured with the exact number of ports available (by
65083 *   SRX_COM_CTL[PRTS] register).  Any Spi access to anthing outside the range
65084 *   of 0 .. (SRX_COM_CTL[PRTS] - 1) is considered an error.  The offending
65085 *   port is logged in SPX_INT_DAT[PRT] if there are no pending interrupts in
65086 *   SPX_INT_REG that require SPX_INT_DAT[PRT].
65087 *
65088 *   SRX will not drop the packet with the bogus port address.  Instead, the
65089 *   port will be mapped into the supported port range.  The remapped address
65090 *   in simply...
65091 *
65092 *            Address = [ interfaceId, ADR[3:0] ]
65093 *
65094 *   If the SPX detects that a PRTNXA error has occured, the packet will
65095 *   have its ERR bit set (or'ed in with the ERR bit from the transmitter)
65096 *   if the SPX_ERR_CTL[PRTNXA] bit is clear.
65097 *
65098 *   In Spi4 mode, SPX will generate an interrupt for every 8B data burst
65099 *   associated with the invalid address.  The SPX_INT_DAT[MUL] bit will never
65100 *   be set.
65101 *
65102 * * ABNORM
65103 *   This bit simply indicates that a given packet had abnormal terminiation.
65104 *   In Spi4 mode, this means that packet completed with an EOPS[1:0] code of
65105 *   2'b01.  This error can also be thought of as the application specific
65106 *   error (as mentioned in the Spi4 spec).  The offending port is logged in
65107 *   SPX_INT_DAT[PRT] if there are no pending interrupts in SPX_INT_REG that
65108 *   require SPX_INT_DAT[PRT].
65109 *
65110 *   The ABNORM error is only raised when the ERR bit that comes from the
65111 *   Spi interface is set.  It will never assert if any internal condition
65112 *   causes the ERR bit to assert (e.g. PRTNXA or DPERR).
65113 *
65114 * * SPIOVR
65115 *   This error indicates that the FIFOs that manage the async crossing from
65116 *   the Spi clocks to the core clock domains have overflowed.  This is a
65117 *   fatal error and can cause much data/control corruption since ticks will
65118 *   be dropped and reordered.  This is purely a function of clock ratios and
65119 *   correct system ratios should make this an impossible condition.
65120 *
65121 * * CLSERR
65122 *   This is a Spi4 error that indicates that a given data transfer burst
65123 *   that did not terminate with an EOP, did not end with the 16B alignment
65124 *   as per the Spi4 spec.  The offending port cannot be logged since the
65125 *   block does not know the streamm terminated until the port switches.
65126 *   At that time, that packet has already been pushed down the pipe.
65127 *
65128 *   The CLSERR bit does not actually check the Spi4 burst - just how data
65129 *   is accumulated for the downstream logic.  Bursts that are separted by
65130 *   idles or training will still be merged into accumulated transfers and
65131 *   will not fire the CLSERR condition.  The checker is really checking
65132 *   non-8B aligned, non-EOP data ticks that are sent downstream.  These
65133 *   ticks are what will really mess up the core.
65134 *
65135 *   This is an expensive fix, so we'll probably let it ride.  We never
65136 *   claim to check Spi4 protocol anyway.
65137 *
65138 * * DRWNNG
65139 *   This error indicates that the Spi4 FIFO that services the GMX has
65140 *   overflowed.  Like the SPIOVR error condition, correct system ratios
65141 *   should make this an impossible condition.
65142 *
65143 * * RSVERR
65144 *   This Spi4 error indicates that the Spi4 receiver has seen a reserve
65145 *   control packet.  A reserve control packet is an invalid combiniation
65146 *   of bits on DAT[15:12].  Basically this is DAT[15] == 1'b0 and DAT[12]
65147 *   == 1'b1 (an SOP without a payload command).  The RSVERR indicates an
65148 *   error has occured and SPX_INT_DAT[RSVOP] holds the first reserved
65149 *   opcode and will be set if there are no pending interrupts in
65150 *   SPX_INT_REG that require SPX_INT_DAT[RSVOP].
65151 *
65152 * * TPAOVR
65153 *   This bit indicates that the TPA Watcher has flagged an event.  See the
65154 *   TPA Watcher for a more detailed discussion.
65155 *
65156 * * DIPERR
65157 *   This bit indicates that the Spi4 receiver has encountered a DIP4
65158 *   miscompare on the datapath.  A DIPERR can occur in an IDLE or a
65159 *   control word that frames a data burst.  If the DIPERR occurs on a
65160 *   framing word there are three cases.
65161 *
65162 *   1) DIPERR occurs at the end of a data burst.  The previous packet is
65163 *      marked with the ERR bit to be processed later if
65164 *      SPX_ERR_CTL[DIPCLS] is clear.
65165 *   2) DIPERR occurs on a payload word.  The subsequent packet is marked
65166 *      with the ERR bit to be processed later if SPX_ERR_CTL[DIPPAY] is
65167 *      clear.
65168 *   3) DIPERR occurs on a control word that closes on packet and is a
65169 *      payload for another packet.  In this case, both packets will have
65170 *      their ERR bit marked depending on the respective values of
65171 *      SPX_ERR_CTL[DIPCLS] and SPX_ERR_CTL[DIPPAY] as discussed above.
65172 *
65173 * * SYNCERR
65174 *   This bit indicates that the Spi4 receiver has encountered
65175 *   SPX_ERR_CTL[ERRCNT] consecutive Spi4 DIP4 errors and the interface
65176 *   should be synched.
65177 *
65178 * * CALERR
65179 *   This bit indicates that the Spi4 calendar table encountered a parity
65180 *   error.  This error bit is associated with the calendar table on the RX
65181 *   interface - the interface that receives the Spi databus.  Parity errors
65182 *   can occur during normal operation when the calendar table is constantly
65183 *   being read for the port information, or during initialization time, when
65184 *   the user has access.  Since the calendar table is split into two banks,
65185 *   SPX_INT_DAT[CALBNK] indicates which banks have taken a parity error.
65186 *   CALBNK[1] indicates the error occured in the upper bank, while CALBNK[0]
65187 *   indicates that the error occured in the lower bank.  SPX_INT_DAT[CALBNK]
65188 *   will be set if there are no pending interrupts in SPX_INT_REG that
65189 *   require SPX_INT_DAT[CALBNK].
65190 *
65191 * * SPF
65192 *   This bit indicates that a Spi fatal error has occurred.  A fatal error
65193 *   is defined as any error condition for which the corresponding
65194 *   SPX_INT_SYNC bit is set.  Therefore, conservative systems can halt the
65195 *   interface on any error condition although this is not strictly
65196 *   necessary.  Some error are much more fatal in nature than others.
65197 *
65198 *   PRTNXA, SPIOVR, CLSERR, DRWNNG, DIPERR, CALERR, and SYNCERR are examples
65199 *   of fatal error for different reasons - usually because multiple port
65200 *   streams could be effected.  ABNORM, RSVERR, and TPAOVR are conditions
65201 *   that are contained to a single packet which allows the interface to drop
65202 *   a single packet and remain up and stable.
65203 */
65204typedef union
65205{
65206    uint64_t u64;
65207    struct cvmx_spxx_int_reg_s
65208    {
65209#if __BYTE_ORDER == __BIG_ENDIAN
65210        uint64_t reserved_32_63          : 32;
65211        uint64_t spf                     : 1;       /**< Spi interface down */
65212        uint64_t reserved_12_30          : 19;
65213        uint64_t calerr                  : 1;       /**< Spi4 Calendar table parity error */
65214        uint64_t syncerr                 : 1;       /**< Consecutive Spi4 DIP4 errors have exceeded
65215                                                         SPX_ERR_CTL[ERRCNT] */
65216        uint64_t diperr                  : 1;       /**< Spi4 DIP4 error */
65217        uint64_t tpaovr                  : 1;       /**< Selected port has hit TPA overflow */
65218        uint64_t rsverr                  : 1;       /**< Spi4 reserved control word detected */
65219        uint64_t drwnng                  : 1;       /**< Spi4 receive FIFO drowning/overflow */
65220        uint64_t clserr                  : 1;       /**< Spi4 packet closed on non-16B alignment without EOP */
65221        uint64_t spiovr                  : 1;       /**< Spi async FIFO overflow */
65222        uint64_t reserved_2_3            : 2;
65223        uint64_t abnorm                  : 1;       /**< Abnormal packet termination (ERR bit) */
65224        uint64_t prtnxa                  : 1;       /**< Port out of range */
65225#else
65226        uint64_t prtnxa                  : 1;
65227        uint64_t abnorm                  : 1;
65228        uint64_t reserved_2_3            : 2;
65229        uint64_t spiovr                  : 1;
65230        uint64_t clserr                  : 1;
65231        uint64_t drwnng                  : 1;
65232        uint64_t rsverr                  : 1;
65233        uint64_t tpaovr                  : 1;
65234        uint64_t diperr                  : 1;
65235        uint64_t syncerr                 : 1;
65236        uint64_t calerr                  : 1;
65237        uint64_t reserved_12_30          : 19;
65238        uint64_t spf                     : 1;
65239        uint64_t reserved_32_63          : 32;
65240#endif
65241    } s;
65242    struct cvmx_spxx_int_reg_s           cn38xx;
65243    struct cvmx_spxx_int_reg_s           cn38xxp2;
65244    struct cvmx_spxx_int_reg_s           cn58xx;
65245    struct cvmx_spxx_int_reg_s           cn58xxp1;
65246} cvmx_spxx_int_reg_t;
65247
65248
65249/**
65250 * cvmx_spx#_int_sync
65251 *
65252 * SPX_INT_SYNC - Interrupt Sync Register
65253 *
65254 *
65255 * Notes:
65256 * This mask set indicates which exception condition should cause the
65257 * SPX_INT_REG[SPF] bit to assert
65258 *
65259 * It is recommended that software set the PRTNXA, SPIOVR, CLSERR, DRWNNG,
65260 * DIPERR, CALERR, and SYNCERR errors as synchronization events.  Software is
65261 * free to synchronize the bus on other conditions, but this is the minimum
65262 * recommended set.
65263 */
65264typedef union
65265{
65266    uint64_t u64;
65267    struct cvmx_spxx_int_sync_s
65268    {
65269#if __BYTE_ORDER == __BIG_ENDIAN
65270        uint64_t reserved_12_63          : 52;
65271        uint64_t calerr                  : 1;       /**< Spi4 Calendar table parity error */
65272        uint64_t syncerr                 : 1;       /**< Consecutive Spi4 DIP4 errors have exceeded
65273                                                         SPX_ERR_CTL[ERRCNT] */
65274        uint64_t diperr                  : 1;       /**< Spi4 DIP4 error */
65275        uint64_t tpaovr                  : 1;       /**< Selected port has hit TPA overflow */
65276        uint64_t rsverr                  : 1;       /**< Spi4 reserved control word detected */
65277        uint64_t drwnng                  : 1;       /**< Spi4 receive FIFO drowning/overflow */
65278        uint64_t clserr                  : 1;       /**< Spi4 packet closed on non-16B alignment without EOP */
65279        uint64_t spiovr                  : 1;       /**< Spi async FIFO overflow (Spi3 or Spi4) */
65280        uint64_t reserved_2_3            : 2;
65281        uint64_t abnorm                  : 1;       /**< Abnormal packet termination (ERR bit) */
65282        uint64_t prtnxa                  : 1;       /**< Port out of range */
65283#else
65284        uint64_t prtnxa                  : 1;
65285        uint64_t abnorm                  : 1;
65286        uint64_t reserved_2_3            : 2;
65287        uint64_t spiovr                  : 1;
65288        uint64_t clserr                  : 1;
65289        uint64_t drwnng                  : 1;
65290        uint64_t rsverr                  : 1;
65291        uint64_t tpaovr                  : 1;
65292        uint64_t diperr                  : 1;
65293        uint64_t syncerr                 : 1;
65294        uint64_t calerr                  : 1;
65295        uint64_t reserved_12_63          : 52;
65296#endif
65297    } s;
65298    struct cvmx_spxx_int_sync_s          cn38xx;
65299    struct cvmx_spxx_int_sync_s          cn38xxp2;
65300    struct cvmx_spxx_int_sync_s          cn58xx;
65301    struct cvmx_spxx_int_sync_s          cn58xxp1;
65302} cvmx_spxx_int_sync_t;
65303
65304
65305/**
65306 * cvmx_spx#_tpa_acc
65307 *
65308 * SPX_TPA_ACC - TPA watcher byte accumulator
65309 *
65310 *
65311 * Notes:
65312 * This field allows the user to access the TPA watcher accumulator counter.
65313 * This register reflects the number of bytes sent to IMX once the port
65314 * specified by SPX_TPA_SEL[PRTSEL] has lost its TPA.  The SPX_INT_REG[TPAOVR]
65315 * bit is asserted when CNT >= SPX_TPA_MAX[MAX].  The CNT will continue to
65316 * increment until the TPA for the port is asserted.  At that point the CNT
65317 * value is frozen until software clears the interrupt bit.
65318 */
65319typedef union
65320{
65321    uint64_t u64;
65322    struct cvmx_spxx_tpa_acc_s
65323    {
65324#if __BYTE_ORDER == __BIG_ENDIAN
65325        uint64_t reserved_32_63          : 32;
65326        uint64_t cnt                     : 32;      /**< TPA watcher accumulate count */
65327#else
65328        uint64_t cnt                     : 32;
65329        uint64_t reserved_32_63          : 32;
65330#endif
65331    } s;
65332    struct cvmx_spxx_tpa_acc_s           cn38xx;
65333    struct cvmx_spxx_tpa_acc_s           cn38xxp2;
65334    struct cvmx_spxx_tpa_acc_s           cn58xx;
65335    struct cvmx_spxx_tpa_acc_s           cn58xxp1;
65336} cvmx_spxx_tpa_acc_t;
65337
65338
65339/**
65340 * cvmx_spx#_tpa_max
65341 *
65342 * SPX_TPA_MAX - TPA watcher assertion threshold
65343 *
65344 *
65345 * Notes:
65346 * The TPA watcher has the ability to notify the system with an interrupt when
65347 * too much data has been received on loss of TPA.  The user sets the
65348 * SPX_TPA_MAX[MAX] register and when the watcher has accumulated that many
65349 * ticks, then the interrupt is conditionally raised (based on interrupt mask
65350 * bits).  This feature will be disabled if the programmed count is zero.
65351 */
65352typedef union
65353{
65354    uint64_t u64;
65355    struct cvmx_spxx_tpa_max_s
65356    {
65357#if __BYTE_ORDER == __BIG_ENDIAN
65358        uint64_t reserved_32_63          : 32;
65359        uint64_t max                     : 32;      /**< TPA watcher TPA threshold */
65360#else
65361        uint64_t max                     : 32;
65362        uint64_t reserved_32_63          : 32;
65363#endif
65364    } s;
65365    struct cvmx_spxx_tpa_max_s           cn38xx;
65366    struct cvmx_spxx_tpa_max_s           cn38xxp2;
65367    struct cvmx_spxx_tpa_max_s           cn58xx;
65368    struct cvmx_spxx_tpa_max_s           cn58xxp1;
65369} cvmx_spxx_tpa_max_t;
65370
65371
65372/**
65373 * cvmx_spx#_tpa_sel
65374 *
65375 * SPX_TPA_SEL - TPA watcher port selector
65376 *
65377 *
65378 * Notes:
65379 * The TPA Watcher is primarily a debug vehicle used to help initial bringup
65380 * of a system.  The TPA watcher counts bytes that roll in from the Spi
65381 * interface.  The user programs the Spi port to watch using
65382 * SPX_TPA_SEL[PRTSEL].  Once the TPA is deasserted for that port, the watcher
65383 * begins to count the data ticks that have been delivered to the inbound
65384 * datapath (and eventually to the IOB).  The result is that we can derive
65385 * turn-around times of the other device by watching how much data was sent
65386 * after a loss of TPA through the SPX_TPA_ACC[CNT] register.  An optional
65387 * interrupt may be raised as well.  See SPX_TPA_MAX for further information.
65388 *
65389 * TPA's can be deasserted for a number of reasons...
65390 *
65391 * 1) IPD indicates backpressure
65392 * 2) The GMX inbound FIFO is filling up and should BP
65393 * 3) User has out an override on the TPA wires
65394 */
65395typedef union
65396{
65397    uint64_t u64;
65398    struct cvmx_spxx_tpa_sel_s
65399    {
65400#if __BYTE_ORDER == __BIG_ENDIAN
65401        uint64_t reserved_4_63           : 60;
65402        uint64_t prtsel                  : 4;       /**< TPA watcher port select */
65403#else
65404        uint64_t prtsel                  : 4;
65405        uint64_t reserved_4_63           : 60;
65406#endif
65407    } s;
65408    struct cvmx_spxx_tpa_sel_s           cn38xx;
65409    struct cvmx_spxx_tpa_sel_s           cn38xxp2;
65410    struct cvmx_spxx_tpa_sel_s           cn58xx;
65411    struct cvmx_spxx_tpa_sel_s           cn58xxp1;
65412} cvmx_spxx_tpa_sel_t;
65413
65414
65415/**
65416 * cvmx_spx#_trn4_ctl
65417 *
65418 * Notes:
65419 * These bits are controls for the Spi4 RX bit deskew logic.  See that Spec
65420 * for further details.
65421 *
65422 * * BOOT_BIT
65423 *   On the initial training synchronization sequence, the hardware has the
65424 *   BOOT_BIT set which means that it will continueously perform macro
65425 *   operations.  Once the BOOT_BIT is cleared, the macro machine will finish
65426 *   the macro operation is working on and then return to the idle state.
65427 *   Subsequent training sequences will only go through a single macro
65428 *   operation in order to do slight deskews.
65429 *
65430 * * JITTER
65431 *   Minimum value is 1.  This parameter must be set for Spi4 mode using
65432 *   auto-bit deskew.  Regardless of the original intent, this field must be
65433 *   set non-zero for deskew to function correctly.
65434 *
65435 *   The thought is the JITTER range is no longer required since the macro
65436 *   machine was enhanced to understand about edge direction.  Originally
65437 *   these bits were intended to compensate for clock jitter.
65438 *
65439 *   dly:    this is the intrinsic delay of each delay element
65440 *              tap currently, it is 70ps-110ps.
65441 *   jitter: amount of jitter we expect in the system (~200ps)
65442 *   j:      number of taps to account for jitter
65443 *
65444 *   j = ((jitter / dly) + 1)
65445 *
65446 * * TRNTEST
65447 *   This mode is used to test systems to make sure that the bit deskew
65448 *   parameters have been correctly setup.  After configuration, software can
65449 *   set the TRNTEST mode bit.  This should be done before SRX_COM_CTL[ST_EN]
65450 *   is set such that we can be sure that the TX device is simply sending
65451 *   continuous training patterns.
65452 *
65453 *   The test mode samples every incoming bit-time and makes sure that it is
65454 *   either a training control or a training data packet.  If any other data
65455 *   is observed, then SPX_DBG_DESKEW_STATE[TESTRES] will assert signaling a
65456 *   test failure.
65457 *
65458 *   Software must clear TRNTEST before training is terminated.
65459 *
65460 * * Example Spi4 RX init flow...
65461 *
65462 * 1) set the CLKDLY lines (SPXX_CLK_CTL[CLKDLY])
65463 *    - these bits must be set before the DLL can successfully lock
65464 *
65465 * 2) set the SRXDLCK (SPXX_CLK_CTL[SRXDLCK])
65466 *    - this is the DLL lock bit which also acts as a block reset
65467 *
65468 * 3) wait for the DLLs lock
65469 *
65470 * 4) set any desired fields in SPXX_DBG_DESKEW_CTL
65471 *    - This register has only one field that most users will care about.
65472 *      When set, DLLDIS will disable sending update pulses to the Spi4 RX
65473 *      DLLs.  This pulse allows the DLL to adjust to clock variations over
65474 *      time.  In general, it is desired behavior.
65475 *
65476 * 5) set fields in SPXX_TRN4_CTL
65477 *    - These fields deal with the MUX training sequence
65478 *      * MUX_EN
65479 *        This is the enable bit for the mux select.  The MUX select will
65480 *        run in the training sequence between the DLL and the Macro
65481 *        sequence when enabled.  Once the MUX selects are selected, the
65482 *        entire macro sequence must be rerun.  The expectation is that
65483 *        this is only run at boot time and this is bit cleared at/around
65484 *        step \#8.
65485 *    - These fields deal with the Macro training sequence
65486 *      * MACRO_EN
65487 *        This is the enable bit for the macro sequence.  Macro sequences
65488 *        will run after the DLL and MUX training sequences.  Each macro
65489 *        sequence can move the offset by one value.
65490 *      * MAXDIST
65491 *        This is how far we will search for an edge.  Example...
65492 *
65493 *           dly:    this is the intrinsic delay of each delay element
65494 *                   tap currently, it is 70ps-110ps.
65495 *           U:      bit time period in time units.
65496 *
65497 *           MAXDIST = MIN(16, ((bit_time / 2) / dly)
65498 *
65499 *           Each MAXDIST iteration consists of an edge detect in the early
65500 *           and late (+/-) directions in an attempt to center the data.  This
65501 *           requires two training transistions, the control/data and
65502 *           data/control transistions which comprise a training sequence.
65503 *           Therefore, the number of training sequences required for a single
65504 *           macro operation is simply MAXDIST.
65505 *
65506 * 6) set the RCVTRN go bit (SPXX_CLK_CTL[RCVTRN])
65507 *    - this bit synchs on the first valid complete training cycle and
65508 *      starts to process the training packets
65509 *
65510 * 6b) This is where software could manually set the controls as opposed to
65511 *     letting the hardware do it.  See the SPXX_DBG_DESKEW_CTL register
65512 *        description for more detail.
65513 *
65514 * 7) the TX device must continue to send training packets for the initial
65515 *    time period.
65516 *    - this can be determined by...
65517 *
65518 *      DLL: one training sequence for the DLL adjustment (regardless of enable/disable)
65519 *      MUX: one training sequence for the Flop MUX taps (regardless of enable/disable)
65520 *      INIT_SEQUENCES: max number of taps that we must move
65521 *
65522 *         INIT_SEQUENCES = MIN(16, ((bit_time / 2) / dly))
65523 *
65524 *         INIT_TRN = DLL + MUX + ROUNDUP((INIT_SEQUENCES * (MAXDIST + 2)))
65525 *
65526 *
65527 *    - software can either wait a fixed amount of time based on the clock
65528 *      frequencies or poll the SPXX_CLK_STAT[SRXTRN] register.  Each
65529 *      assertion of SRXTRN means that at least one training sequence has
65530 *      been received.  Software can poll, clear, and repeat on this bit to
65531 *      eventually count all required transistions.
65532 *
65533 *      int cnt = 0;
65534 *      while (cnt < INIT_TRN) [
65535 *             if (SPXX_CLK_STAT[SRXTRN]) [
65536 *                cnt++;
65537 *                SPXX_CLK_STAT[SRXTRN] = 0;
65538 *             ]
65539 *      ]
65540 *
65541 *   - subsequent training sequences will normally move the taps only
65542 *     one position, so the ALPHA equation becomes...
65543 *
65544 *     MAC   = (MAXDIST == 0) ? 1 : ROUNDUP((1 * (MAXDIST + 2))) + 1
65545 *
65546 *        ALPHA = DLL + MUX + MAC
65547 *
65548 *     ergo, MAXDIST simplifies to...
65549 *
65550 *        ALPHA = (MAXDIST == 0) ? 3 : MAXDIST + 5
65551 *
65552 *        DLL and MUX and MAC will always require at least a training sequence
65553 *        each - even if disabled.  If the macro sequence is enabled, an
65554 *        additional training sequenece at the end is necessary.  The extra
65555 *        sequence allows for all training state to be cleared before resuming
65556 *        normal operation.
65557 *
65558 * 8) after the recevier gets enough training sequences in order to achieve
65559 *    deskew lock, set SPXX_TRN4_CTL[CLR_BOOT]
65560 *    - this disables the continuous macro sequences and puts into into one
65561 *      macro sequnence per training operation
65562 *    - optionally, the machine can choose to fall out of training if
65563 *      enough NOPs follow the training operation (require at least 32 NOPs
65564 *      to follow the training sequence).
65565 *
65566 *    There must be at least MAXDIST + 3 training sequences after the
65567 *    SPXX_TRN4_CTL[CLR_BOOT] is set or sufficient NOPs from the TX device.
65568 *
65569 * 9) the TX device continues to send training sequences until the RX
65570 *    device sends a calendar transistion.  This is controlled by
65571 *    SRXX_COM_CTL[ST_EN].  Other restrictions require other Spi parameters
65572 *    (e.g. the calendar table) to be setup before this bit can be enabled.
65573 *    Once the entire interface is properly programmed, software writes
65574 *    SRXX_COM_CTL[INF_EN].  At this point, the Spi4 packets will begin to
65575 *    be sent into the N2K core and processed by the chip.
65576 */
65577typedef union
65578{
65579    uint64_t u64;
65580    struct cvmx_spxx_trn4_ctl_s
65581    {
65582#if __BYTE_ORDER == __BIG_ENDIAN
65583        uint64_t reserved_13_63          : 51;
65584        uint64_t trntest                 : 1;       /**< Training Test Mode
65585                                                         This bit is only for initial bringup
65586                                                         (spx_csr__spi4_trn_test_mode) */
65587        uint64_t jitter                  : 3;       /**< Accounts for jitter when the macro sequence is
65588                                                         locking.  The value is how many consecutive
65589                                                         transititions before declaring en edge.  Minimum
65590                                                         value is 1.  This parameter must be set for Spi4
65591                                                         mode using auto-bit deskew.
65592                                                         (spx_csr__spi4_mac_jitter) */
65593        uint64_t clr_boot                : 1;       /**< Clear the macro boot sequence mode bit
65594                                                         (spx_csr__spi4_mac_clr_boot) */
65595        uint64_t set_boot                : 1;       /**< Enable the macro boot sequence mode bit
65596                                                         (spx_csr__spi4_mac_set_boot) */
65597        uint64_t maxdist                 : 5;       /**< This field defines how far from center the
65598                                                         deskew logic will search in a single macro
65599                                                          sequence (spx_csr__spi4_mac_iters) */
65600        uint64_t macro_en                : 1;       /**< Allow the macro sequence to center the sample
65601                                                         point in the data window through hardware
65602                                                         (spx_csr__spi4_mac_trn_en) */
65603        uint64_t mux_en                  : 1;       /**< Enable the hardware machine that selects the
65604                                                         proper coarse FLOP selects
65605                                                         (spx_csr__spi4_mux_trn_en) */
65606#else
65607        uint64_t mux_en                  : 1;
65608        uint64_t macro_en                : 1;
65609        uint64_t maxdist                 : 5;
65610        uint64_t set_boot                : 1;
65611        uint64_t clr_boot                : 1;
65612        uint64_t jitter                  : 3;
65613        uint64_t trntest                 : 1;
65614        uint64_t reserved_13_63          : 51;
65615#endif
65616    } s;
65617    struct cvmx_spxx_trn4_ctl_s          cn38xx;
65618    struct cvmx_spxx_trn4_ctl_s          cn38xxp2;
65619    struct cvmx_spxx_trn4_ctl_s          cn58xx;
65620    struct cvmx_spxx_trn4_ctl_s          cn58xxp1;
65621} cvmx_spxx_trn4_ctl_t;
65622
65623
65624/**
65625 * cvmx_spx0_pll_bw_ctl
65626 */
65627typedef union
65628{
65629    uint64_t u64;
65630    struct cvmx_spx0_pll_bw_ctl_s
65631    {
65632#if __BYTE_ORDER == __BIG_ENDIAN
65633        uint64_t reserved_5_63           : 59;
65634        uint64_t bw_ctl                  : 5;       /**< Core PLL bandwidth control */
65635#else
65636        uint64_t bw_ctl                  : 5;
65637        uint64_t reserved_5_63           : 59;
65638#endif
65639    } s;
65640    struct cvmx_spx0_pll_bw_ctl_s        cn38xx;
65641    struct cvmx_spx0_pll_bw_ctl_s        cn38xxp2;
65642} cvmx_spx0_pll_bw_ctl_t;
65643
65644
65645/**
65646 * cvmx_spx0_pll_setting
65647 */
65648typedef union
65649{
65650    uint64_t u64;
65651    struct cvmx_spx0_pll_setting_s
65652    {
65653#if __BYTE_ORDER == __BIG_ENDIAN
65654        uint64_t reserved_17_63          : 47;
65655        uint64_t setting                 : 17;      /**< Core PLL setting */
65656#else
65657        uint64_t setting                 : 17;
65658        uint64_t reserved_17_63          : 47;
65659#endif
65660    } s;
65661    struct cvmx_spx0_pll_setting_s       cn38xx;
65662    struct cvmx_spx0_pll_setting_s       cn38xxp2;
65663} cvmx_spx0_pll_setting_t;
65664
65665
65666/**
65667 * cvmx_srx#_com_ctl
65668 *
65669 * SRX_COM_CTL - Spi receive common control
65670 *
65671 *
65672 * Notes:
65673 * Restrictions:
65674 * Both the calendar table and the LEN and M parameters must be completely
65675 * setup before writing the Interface enable (INF_EN) and Status channel
65676 * enabled (ST_EN) asserted.
65677 */
65678typedef union
65679{
65680    uint64_t u64;
65681    struct cvmx_srxx_com_ctl_s
65682    {
65683#if __BYTE_ORDER == __BIG_ENDIAN
65684        uint64_t reserved_8_63           : 56;
65685        uint64_t prts                    : 4;       /**< Number of ports in the receiver (write: ports - 1)
65686                                                         - 0:  1 port
65687                                                         - 1:  2 ports
65688                                                         - 2:  3 ports
65689                                                          - ...
65690                                                          - 15: 16 ports */
65691        uint64_t st_en                   : 1;       /**< Status channel enabled
65692                                                         This is to allow configs without a status channel.
65693                                                         This bit should not be modified once the
65694                                                         interface is enabled. */
65695        uint64_t reserved_1_2            : 2;
65696        uint64_t inf_en                  : 1;       /**< Interface enable
65697                                                         The master switch that enables the entire
65698                                                         interface. SRX will not validiate any data until
65699                                                         this bit is set. This bit should not be modified
65700                                                         once the interface is enabled. */
65701#else
65702        uint64_t inf_en                  : 1;
65703        uint64_t reserved_1_2            : 2;
65704        uint64_t st_en                   : 1;
65705        uint64_t prts                    : 4;
65706        uint64_t reserved_8_63           : 56;
65707#endif
65708    } s;
65709    struct cvmx_srxx_com_ctl_s           cn38xx;
65710    struct cvmx_srxx_com_ctl_s           cn38xxp2;
65711    struct cvmx_srxx_com_ctl_s           cn58xx;
65712    struct cvmx_srxx_com_ctl_s           cn58xxp1;
65713} cvmx_srxx_com_ctl_t;
65714
65715
65716/**
65717 * cvmx_srx#_ign_rx_full
65718 *
65719 * SRX_IGN_RX_FULL - Ignore RX FIFO backpressure
65720 *
65721 *
65722 * Notes:
65723 * * IGNORE
65724 * If a device can not or should not assert backpressure, then setting DROP
65725 * will force STARVING status on the status channel for all ports.  This
65726 * eliminates any back pressure from N2.
65727 *
65728 * This implies that it's ok drop packets when the FIFOS fill up.
65729 *
65730 * A side effect of this mode is that the TPA Watcher will effectively be
65731 * disabled.  Since the DROP mode forces all TPA lines asserted, the TPA
65732 * Watcher will never find a cycle where the TPA for the selected port is
65733 * deasserted in order to increment its count.
65734 */
65735typedef union
65736{
65737    uint64_t u64;
65738    struct cvmx_srxx_ign_rx_full_s
65739    {
65740#if __BYTE_ORDER == __BIG_ENDIAN
65741        uint64_t reserved_16_63          : 48;
65742        uint64_t ignore                  : 16;      /**< This port should ignore backpressure hints from
65743                                                          GMX when the RX FIFO fills up
65744                                                         - 0: Use GMX backpressure
65745                                                         - 1: Ignore GMX backpressure */
65746#else
65747        uint64_t ignore                  : 16;
65748        uint64_t reserved_16_63          : 48;
65749#endif
65750    } s;
65751    struct cvmx_srxx_ign_rx_full_s       cn38xx;
65752    struct cvmx_srxx_ign_rx_full_s       cn38xxp2;
65753    struct cvmx_srxx_ign_rx_full_s       cn58xx;
65754    struct cvmx_srxx_ign_rx_full_s       cn58xxp1;
65755} cvmx_srxx_ign_rx_full_t;
65756
65757
65758/**
65759 * cvmx_srx#_spi4_cal#
65760 *
65761 * specify the RSL base addresses for the block
65762 * SRX_SPI4_CAL - Spi4 Calender table
65763 * direct_calendar_write / direct_calendar_read
65764 *
65765 * Notes:
65766 * There are 32 calendar table CSR's, each containing 4 entries for a
65767 *     total of 128 entries.  In the above definition...
65768 *
65769 *           n = calendar table offset * 4
65770 *
65771 *        Example, offset 0x00 contains the calendar table entries 0, 1, 2, 3
65772 *        (with n == 0).  Offset 0x10 is the 16th entry in the calendar table
65773 *        and would contain entries (16*4) = 64, 65, 66, and 67.
65774 *
65775 * Restrictions:
65776 *          Calendar table entry accesses (read or write) can only occur
65777 *          if the interface is disabled.  All other accesses will be
65778 *          unpredictable.
65779 *
65780 *          Both the calendar table and the LEN and M parameters must be
65781 *          completely setup before writing the Interface enable (INF_EN) and
65782 *          Status channel enabled (ST_EN) asserted.
65783 */
65784typedef union
65785{
65786    uint64_t u64;
65787    struct cvmx_srxx_spi4_calx_s
65788    {
65789#if __BYTE_ORDER == __BIG_ENDIAN
65790        uint64_t reserved_17_63          : 47;
65791        uint64_t oddpar                  : 1;       /**< Odd parity over SRX_SPI4_CAL[15:0]
65792                                                         (^SRX_SPI4_CAL[16:0] === 1'b1)                  |   $NS       NS */
65793        uint64_t prt3                    : 4;       /**< Status for port n+3 */
65794        uint64_t prt2                    : 4;       /**< Status for port n+2 */
65795        uint64_t prt1                    : 4;       /**< Status for port n+1 */
65796        uint64_t prt0                    : 4;       /**< Status for port n+0 */
65797#else
65798        uint64_t prt0                    : 4;
65799        uint64_t prt1                    : 4;
65800        uint64_t prt2                    : 4;
65801        uint64_t prt3                    : 4;
65802        uint64_t oddpar                  : 1;
65803        uint64_t reserved_17_63          : 47;
65804#endif
65805    } s;
65806    struct cvmx_srxx_spi4_calx_s         cn38xx;
65807    struct cvmx_srxx_spi4_calx_s         cn38xxp2;
65808    struct cvmx_srxx_spi4_calx_s         cn58xx;
65809    struct cvmx_srxx_spi4_calx_s         cn58xxp1;
65810} cvmx_srxx_spi4_calx_t;
65811
65812
65813/**
65814 * cvmx_srx#_spi4_stat
65815 *
65816 * SRX_SPI4_STAT - Spi4 status channel control
65817 *
65818 *
65819 * Notes:
65820 * Restrictions:
65821 *    Both the calendar table and the LEN and M parameters must be
65822 *    completely setup before writing the Interface enable (INF_EN) and
65823 *    Status channel enabled (ST_EN) asserted.
65824 *
65825 * Current rev only supports LVTTL status IO
65826 */
65827typedef union
65828{
65829    uint64_t u64;
65830    struct cvmx_srxx_spi4_stat_s
65831    {
65832#if __BYTE_ORDER == __BIG_ENDIAN
65833        uint64_t reserved_16_63          : 48;
65834        uint64_t m                       : 8;       /**< CALENDAR_M (from spi4.2 spec) */
65835        uint64_t reserved_7_7            : 1;
65836        uint64_t len                     : 7;       /**< CALENDAR_LEN (from spi4.2 spec) */
65837#else
65838        uint64_t len                     : 7;
65839        uint64_t reserved_7_7            : 1;
65840        uint64_t m                       : 8;
65841        uint64_t reserved_16_63          : 48;
65842#endif
65843    } s;
65844    struct cvmx_srxx_spi4_stat_s         cn38xx;
65845    struct cvmx_srxx_spi4_stat_s         cn38xxp2;
65846    struct cvmx_srxx_spi4_stat_s         cn58xx;
65847    struct cvmx_srxx_spi4_stat_s         cn58xxp1;
65848} cvmx_srxx_spi4_stat_t;
65849
65850
65851/**
65852 * cvmx_srx#_sw_tick_ctl
65853 *
65854 * SRX_SW_TICK_CTL - Create a software tick of Spi4 data.  A write to this register will create a data tick.
65855 *
65856 */
65857typedef union
65858{
65859    uint64_t u64;
65860    struct cvmx_srxx_sw_tick_ctl_s
65861    {
65862#if __BYTE_ORDER == __BIG_ENDIAN
65863        uint64_t reserved_14_63          : 50;
65864        uint64_t eop                     : 1;       /**< SW Tick EOP
65865                                                         (PASS3 only) */
65866        uint64_t sop                     : 1;       /**< SW Tick SOP
65867                                                         (PASS3 only) */
65868        uint64_t mod                     : 4;       /**< SW Tick MOD - valid byte count
65869                                                         (PASS3 only) */
65870        uint64_t opc                     : 4;       /**< SW Tick ERR - packet had an error
65871                                                         (PASS3 only) */
65872        uint64_t adr                     : 4;       /**< SW Tick port address
65873                                                         (PASS3 only) */
65874#else
65875        uint64_t adr                     : 4;
65876        uint64_t opc                     : 4;
65877        uint64_t mod                     : 4;
65878        uint64_t sop                     : 1;
65879        uint64_t eop                     : 1;
65880        uint64_t reserved_14_63          : 50;
65881#endif
65882    } s;
65883    struct cvmx_srxx_sw_tick_ctl_s       cn38xx;
65884    struct cvmx_srxx_sw_tick_ctl_s       cn58xx;
65885    struct cvmx_srxx_sw_tick_ctl_s       cn58xxp1;
65886} cvmx_srxx_sw_tick_ctl_t;
65887
65888
65889/**
65890 * cvmx_srx#_sw_tick_dat
65891 *
65892 * SRX_SW_TICK_DAT - Create a software tick of Spi4 data
65893 *
65894 */
65895typedef union
65896{
65897    uint64_t u64;
65898    struct cvmx_srxx_sw_tick_dat_s
65899    {
65900#if __BYTE_ORDER == __BIG_ENDIAN
65901        uint64_t dat                     : 64;      /**< Data tick when SRX_SW_TICK_CTL is written
65902                                                         (PASS3 only) */
65903#else
65904        uint64_t dat                     : 64;
65905#endif
65906    } s;
65907    struct cvmx_srxx_sw_tick_dat_s       cn38xx;
65908    struct cvmx_srxx_sw_tick_dat_s       cn58xx;
65909    struct cvmx_srxx_sw_tick_dat_s       cn58xxp1;
65910} cvmx_srxx_sw_tick_dat_t;
65911
65912
65913/**
65914 * cvmx_stx#_arb_ctl
65915 *
65916 * STX_ARB_CTL - Spi transmit arbitration control
65917 *
65918 *
65919 * Notes:
65920 * If STX_ARB_CTL[MINTRN] is set in Spi4 mode, then the data_max_t
65921 * parameter will have to be adjusted.  Please see the
65922 * STX_SPI4_DAT[MAX_T] section for additional information.  In
65923 * addition, the min_burst can only be guaranteed on the initial data
65924 * burst of a given packet (i.e. the first data burst which contains
65925 * the SOP tick).  All subsequent bursts could be truncated by training
65926 * sequences at any point during transmission and could be arbitrarily
65927 * small.  This mode is only for use in Spi4 mode.
65928 */
65929typedef union
65930{
65931    uint64_t u64;
65932    struct cvmx_stxx_arb_ctl_s
65933    {
65934#if __BYTE_ORDER == __BIG_ENDIAN
65935        uint64_t reserved_6_63           : 58;
65936        uint64_t mintrn                  : 1;       /**< Hold off training cycles until STX_MIN_BST[MINB]
65937                                                         is satisfied */
65938        uint64_t reserved_4_4            : 1;
65939        uint64_t igntpa                  : 1;       /**< User switch to ignore any TPA information from the
65940                                                         Spi interface. This CSR forces all TPA terms to
65941                                                         be masked out.  It is only intended as backdoor
65942                                                         or debug feature. */
65943        uint64_t reserved_0_2            : 3;
65944#else
65945        uint64_t reserved_0_2            : 3;
65946        uint64_t igntpa                  : 1;
65947        uint64_t reserved_4_4            : 1;
65948        uint64_t mintrn                  : 1;
65949        uint64_t reserved_6_63           : 58;
65950#endif
65951    } s;
65952    struct cvmx_stxx_arb_ctl_s           cn38xx;
65953    struct cvmx_stxx_arb_ctl_s           cn38xxp2;
65954    struct cvmx_stxx_arb_ctl_s           cn58xx;
65955    struct cvmx_stxx_arb_ctl_s           cn58xxp1;
65956} cvmx_stxx_arb_ctl_t;
65957
65958
65959/**
65960 * cvmx_stx#_bckprs_cnt
65961 *
65962 * Notes:
65963 * This register reports the total number of cycles (STX data clks -
65964 * stx_clk) in which the port defined in STX_STAT_CTL[BCKPRS] has lost TPA
65965 * or is otherwise receiving backpressure.
65966 *
65967 * In Spi4 mode, this is defined as a loss of TPA which is indicated when
65968 * the receiving device reports SATISFIED for the given port.  The calendar
65969 * status is brought into N2 on the spi4_tx*_sclk and synchronized into the
65970 * N2 Spi TX clock domain which is 1/2 the frequency of the spi4_tx*_dclk
65971 * clock (internally, this the stx_clk).  The counter will update on the
65972 * rising edge in which backpressure is reported.
65973 *
65974 * This register will be cleared when software writes all '1's to
65975 * the STX_BCKPRS_CNT.
65976 */
65977typedef union
65978{
65979    uint64_t u64;
65980    struct cvmx_stxx_bckprs_cnt_s
65981    {
65982#if __BYTE_ORDER == __BIG_ENDIAN
65983        uint64_t reserved_32_63          : 32;
65984        uint64_t cnt                     : 32;      /**< Number of cycles when back-pressure is received
65985                                                         for port defined in STX_STAT_CTL[BCKPRS] */
65986#else
65987        uint64_t cnt                     : 32;
65988        uint64_t reserved_32_63          : 32;
65989#endif
65990    } s;
65991    struct cvmx_stxx_bckprs_cnt_s        cn38xx;
65992    struct cvmx_stxx_bckprs_cnt_s        cn38xxp2;
65993    struct cvmx_stxx_bckprs_cnt_s        cn58xx;
65994    struct cvmx_stxx_bckprs_cnt_s        cn58xxp1;
65995} cvmx_stxx_bckprs_cnt_t;
65996
65997
65998/**
65999 * cvmx_stx#_com_ctl
66000 *
66001 * STX_COM_CTL - TX Common Control Register
66002 *
66003 *
66004 * Notes:
66005 * Restrictions:
66006 * Both the calendar table and the LEN and M parameters must be
66007 * completely setup before writing the Interface enable (INF_EN) and
66008 * Status channel enabled (ST_EN) asserted.
66009 */
66010typedef union
66011{
66012    uint64_t u64;
66013    struct cvmx_stxx_com_ctl_s
66014    {
66015#if __BYTE_ORDER == __BIG_ENDIAN
66016        uint64_t reserved_4_63           : 60;
66017        uint64_t st_en                   : 1;       /**< Status channel enabled */
66018        uint64_t reserved_1_2            : 2;
66019        uint64_t inf_en                  : 1;       /**< Interface enable */
66020#else
66021        uint64_t inf_en                  : 1;
66022        uint64_t reserved_1_2            : 2;
66023        uint64_t st_en                   : 1;
66024        uint64_t reserved_4_63           : 60;
66025#endif
66026    } s;
66027    struct cvmx_stxx_com_ctl_s           cn38xx;
66028    struct cvmx_stxx_com_ctl_s           cn38xxp2;
66029    struct cvmx_stxx_com_ctl_s           cn58xx;
66030    struct cvmx_stxx_com_ctl_s           cn58xxp1;
66031} cvmx_stxx_com_ctl_t;
66032
66033
66034/**
66035 * cvmx_stx#_dip_cnt
66036 *
66037 * Notes:
66038 * * DIPMAX
66039 *   This counts the number of consecutive DIP2 states in which the the
66040 *   received DIP2 is bad.  The expected range is 1-15 cycles with the
66041 *   value of 0 meaning disabled.
66042 *
66043 * * FRMMAX
66044 *   This counts the number of consecutive unexpected framing patterns (11)
66045 *   states.  The expected range is 1-15 cycles with the value of 0 meaning
66046 *   disabled.
66047 */
66048typedef union
66049{
66050    uint64_t u64;
66051    struct cvmx_stxx_dip_cnt_s
66052    {
66053#if __BYTE_ORDER == __BIG_ENDIAN
66054        uint64_t reserved_8_63           : 56;
66055        uint64_t frmmax                  : 4;       /**< Number of consecutive unexpected framing patterns
66056                                                         before loss of sync */
66057        uint64_t dipmax                  : 4;       /**< Number of consecutive DIP2 error before loss
66058                                                         of sync */
66059#else
66060        uint64_t dipmax                  : 4;
66061        uint64_t frmmax                  : 4;
66062        uint64_t reserved_8_63           : 56;
66063#endif
66064    } s;
66065    struct cvmx_stxx_dip_cnt_s           cn38xx;
66066    struct cvmx_stxx_dip_cnt_s           cn38xxp2;
66067    struct cvmx_stxx_dip_cnt_s           cn58xx;
66068    struct cvmx_stxx_dip_cnt_s           cn58xxp1;
66069} cvmx_stxx_dip_cnt_t;
66070
66071
66072/**
66073 * cvmx_stx#_ign_cal
66074 *
66075 * STX_IGN_CAL - Ignore Calendar Status from Spi4 Status Channel
66076 *
66077 */
66078typedef union
66079{
66080    uint64_t u64;
66081    struct cvmx_stxx_ign_cal_s
66082    {
66083#if __BYTE_ORDER == __BIG_ENDIAN
66084        uint64_t reserved_16_63          : 48;
66085        uint64_t igntpa                  : 16;      /**< Ignore Calendar Status from Spi4 Status Channel
66086                                                          per Spi4 port
66087                                                         - 0: Use the status channel info
66088                                                         - 1: Grant the given port MAX_BURST1 credits */
66089#else
66090        uint64_t igntpa                  : 16;
66091        uint64_t reserved_16_63          : 48;
66092#endif
66093    } s;
66094    struct cvmx_stxx_ign_cal_s           cn38xx;
66095    struct cvmx_stxx_ign_cal_s           cn38xxp2;
66096    struct cvmx_stxx_ign_cal_s           cn58xx;
66097    struct cvmx_stxx_ign_cal_s           cn58xxp1;
66098} cvmx_stxx_ign_cal_t;
66099
66100
66101/**
66102 * cvmx_stx#_int_msk
66103 *
66104 * Notes:
66105 * If the bit is enabled, then the coresponding exception condition will
66106 * result in an interrupt to the system.
66107 */
66108typedef union
66109{
66110    uint64_t u64;
66111    struct cvmx_stxx_int_msk_s
66112    {
66113#if __BYTE_ORDER == __BIG_ENDIAN
66114        uint64_t reserved_8_63           : 56;
66115        uint64_t frmerr                  : 1;       /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */
66116        uint64_t unxfrm                  : 1;       /**< Unexpected framing sequence */
66117        uint64_t nosync                  : 1;       /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */
66118        uint64_t diperr                  : 1;       /**< DIP2 error on the Spi4 Status channel */
66119        uint64_t datovr                  : 1;       /**< Spi4 FIFO overflow error */
66120        uint64_t ovrbst                  : 1;       /**< Transmit packet burst too big */
66121        uint64_t calpar1                 : 1;       /**< STX Calendar Table Parity Error Bank1 */
66122        uint64_t calpar0                 : 1;       /**< STX Calendar Table Parity Error Bank0 */
66123#else
66124        uint64_t calpar0                 : 1;
66125        uint64_t calpar1                 : 1;
66126        uint64_t ovrbst                  : 1;
66127        uint64_t datovr                  : 1;
66128        uint64_t diperr                  : 1;
66129        uint64_t nosync                  : 1;
66130        uint64_t unxfrm                  : 1;
66131        uint64_t frmerr                  : 1;
66132        uint64_t reserved_8_63           : 56;
66133#endif
66134    } s;
66135    struct cvmx_stxx_int_msk_s           cn38xx;
66136    struct cvmx_stxx_int_msk_s           cn38xxp2;
66137    struct cvmx_stxx_int_msk_s           cn58xx;
66138    struct cvmx_stxx_int_msk_s           cn58xxp1;
66139} cvmx_stxx_int_msk_t;
66140
66141
66142/**
66143 * cvmx_stx#_int_reg
66144 *
66145 * Notes:
66146 * * CALPAR0
66147 *   This bit indicates that the Spi4 calendar table encountered a parity
66148 *   error on bank0 of the calendar table memory.  This error bit is
66149 *   associated with the calendar table on the TX interface - the interface
66150 *   that drives the Spi databus.  The calendar table is used in Spi4 mode
66151 *   when using the status channel.  Parity errors can occur during normal
66152 *   operation when the calendar table is constantly being read for the port
66153 *   information, or during initialization time, when the user has access.
66154 *   This errors will force the the status channel to the reset state and
66155 *   begin driving training sequences.  The status channel will also reset.
66156 *   Software must follow the init sequence to resynch the interface.  This
66157 *   includes toggling INF_EN which will cancel all outstanding accumulated
66158 *   credits.
66159 *
66160 * * CALPAR1
66161 *   Identical to CALPAR0 except that it indicates that the error occured
66162 *   on bank1 (instead of bank0).
66163 *
66164 * * OVRBST
66165 *   STX can track upto a 512KB data burst.  Any packet larger than that is
66166 *   illegal and will cause confusion in the STX state machine.  BMI is
66167 *   responsible for throwing away these out of control packets from the
66168 *   input and the Execs should never generate them on the output.  This is
66169 *   a fatal error and should have STX_INT_SYNC[OVRBST] set.
66170 *
66171 * * DATOVR
66172 *   FIFO where the Spi4 data ramps upto its transmit frequency has
66173 *   overflowed.  This is a fatal error and should have
66174 *   STX_INT_SYNC[DATOVR] set.
66175 *
66176 * * DIPERR
66177 *   This bit will fire if any DIP2 error is caught by the Spi4 status
66178 *   channel.
66179 *
66180 * * NOSYNC
66181 *   This bit indicates that the number of consecutive DIP2 errors exceeds
66182 *   STX_DIP_CNT[MAXDIP] and that the interface should be taken down.  The
66183 *   datapath will be notified and send continuous training sequences until
66184 *   software resynchronizes the interface.  This error condition should
66185 *   have STX_INT_SYNC[NOSYNC] set.
66186 *
66187 * * UNXFRM
66188 *   Unexpected framing data was seen on the status channel.
66189 *
66190 * * FRMERR
66191 *   This bit indicates that the number of consecutive unexpected framing
66192 *   sequences STX_DIP_CNT[MAXFRM] and that the interface should be taken
66193 *   down.  The datapath will be notified and send continuous training
66194 *   sequences until software resynchronizes the interface.  This error
66195 *   condition should have STX_INT_SYNC[FRMERR] set.
66196 *
66197 * * SYNCERR
66198 *   Indicates that an exception marked in STX_INT_SYNC has occured and the
66199 *   TX datapath is disabled.  It is recommended that the OVRBST, DATOVR,
66200 *   NOSYNC, and FRMERR error conditions all have their bits set in the
66201 *   STX_INT_SYNC register.
66202 */
66203typedef union
66204{
66205    uint64_t u64;
66206    struct cvmx_stxx_int_reg_s
66207    {
66208#if __BYTE_ORDER == __BIG_ENDIAN
66209        uint64_t reserved_9_63           : 55;
66210        uint64_t syncerr                 : 1;       /**< Interface encountered a fatal error */
66211        uint64_t frmerr                  : 1;       /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */
66212        uint64_t unxfrm                  : 1;       /**< Unexpected framing sequence */
66213        uint64_t nosync                  : 1;       /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */
66214        uint64_t diperr                  : 1;       /**< DIP2 error on the Spi4 Status channel */
66215        uint64_t datovr                  : 1;       /**< Spi4 FIFO overflow error */
66216        uint64_t ovrbst                  : 1;       /**< Transmit packet burst too big */
66217        uint64_t calpar1                 : 1;       /**< STX Calendar Table Parity Error Bank1 */
66218        uint64_t calpar0                 : 1;       /**< STX Calendar Table Parity Error Bank0 */
66219#else
66220        uint64_t calpar0                 : 1;
66221        uint64_t calpar1                 : 1;
66222        uint64_t ovrbst                  : 1;
66223        uint64_t datovr                  : 1;
66224        uint64_t diperr                  : 1;
66225        uint64_t nosync                  : 1;
66226        uint64_t unxfrm                  : 1;
66227        uint64_t frmerr                  : 1;
66228        uint64_t syncerr                 : 1;
66229        uint64_t reserved_9_63           : 55;
66230#endif
66231    } s;
66232    struct cvmx_stxx_int_reg_s           cn38xx;
66233    struct cvmx_stxx_int_reg_s           cn38xxp2;
66234    struct cvmx_stxx_int_reg_s           cn58xx;
66235    struct cvmx_stxx_int_reg_s           cn58xxp1;
66236} cvmx_stxx_int_reg_t;
66237
66238
66239/**
66240 * cvmx_stx#_int_sync
66241 *
66242 * Notes:
66243 * If the bit is enabled, then the coresponding exception condition is flagged
66244 * to be fatal.  In Spi4 mode, the exception condition will result in a loss
66245 * of sync condition on the Spi4 interface and the datapath will send
66246 * continuous traing sequences.
66247 *
66248 * It is recommended that software set the OVRBST, DATOVR, NOSYNC, and
66249 * FRMERR errors as synchronization events.  Software is free to
66250 * synchronize the bus on other conditions, but this is the minimum
66251 * recommended set.
66252 */
66253typedef union
66254{
66255    uint64_t u64;
66256    struct cvmx_stxx_int_sync_s
66257    {
66258#if __BYTE_ORDER == __BIG_ENDIAN
66259        uint64_t reserved_8_63           : 56;
66260        uint64_t frmerr                  : 1;       /**< FRMCNT has exceeded STX_DIP_CNT[MAXFRM] */
66261        uint64_t unxfrm                  : 1;       /**< Unexpected framing sequence */
66262        uint64_t nosync                  : 1;       /**< ERRCNT has exceeded STX_DIP_CNT[MAXDIP] */
66263        uint64_t diperr                  : 1;       /**< DIP2 error on the Spi4 Status channel */
66264        uint64_t datovr                  : 1;       /**< Spi4 FIFO overflow error */
66265        uint64_t ovrbst                  : 1;       /**< Transmit packet burst too big */
66266        uint64_t calpar1                 : 1;       /**< STX Calendar Table Parity Error Bank1 */
66267        uint64_t calpar0                 : 1;       /**< STX Calendar Table Parity Error Bank0 */
66268#else
66269        uint64_t calpar0                 : 1;
66270        uint64_t calpar1                 : 1;
66271        uint64_t ovrbst                  : 1;
66272        uint64_t datovr                  : 1;
66273        uint64_t diperr                  : 1;
66274        uint64_t nosync                  : 1;
66275        uint64_t unxfrm                  : 1;
66276        uint64_t frmerr                  : 1;
66277        uint64_t reserved_8_63           : 56;
66278#endif
66279    } s;
66280    struct cvmx_stxx_int_sync_s          cn38xx;
66281    struct cvmx_stxx_int_sync_s          cn38xxp2;
66282    struct cvmx_stxx_int_sync_s          cn58xx;
66283    struct cvmx_stxx_int_sync_s          cn58xxp1;
66284} cvmx_stxx_int_sync_t;
66285
66286
66287/**
66288 * cvmx_stx#_min_bst
66289 *
66290 * STX_MIN_BST - Min Burst to enforce when inserting training sequence
66291 *
66292 */
66293typedef union
66294{
66295    uint64_t u64;
66296    struct cvmx_stxx_min_bst_s
66297    {
66298#if __BYTE_ORDER == __BIG_ENDIAN
66299        uint64_t reserved_9_63           : 55;
66300        uint64_t minb                    : 9;       /**< When STX_ARB_CTL[MINTRN] is set, MINB indicates
66301                                                         the number of 8B blocks to send before inserting
66302                                                         a training sequence.  Normally MINB will be set
66303                                                         to GMX_TX_SPI_THRESH[THRESH].  MINB should always
66304                                                         be set to an even number (ie. multiple of 16B) */
66305#else
66306        uint64_t minb                    : 9;
66307        uint64_t reserved_9_63           : 55;
66308#endif
66309    } s;
66310    struct cvmx_stxx_min_bst_s           cn38xx;
66311    struct cvmx_stxx_min_bst_s           cn38xxp2;
66312    struct cvmx_stxx_min_bst_s           cn58xx;
66313    struct cvmx_stxx_min_bst_s           cn58xxp1;
66314} cvmx_stxx_min_bst_t;
66315
66316
66317/**
66318 * cvmx_stx#_spi4_cal#
66319 *
66320 * specify the RSL base addresses for the block
66321 * STX_SPI4_CAL - Spi4 Calender table
66322 * direct_calendar_write / direct_calendar_read
66323 *
66324 * Notes:
66325 * There are 32 calendar table CSR's, each containing 4 entries for a
66326 *     total of 128 entries.  In the above definition...
66327 *
66328 *           n = calendar table offset * 4
66329 *
66330 *        Example, offset 0x00 contains the calendar table entries 0, 1, 2, 3
66331 *        (with n == 0).  Offset 0x10 is the 16th entry in the calendar table
66332 *        and would contain entries (16*4) = 64, 65, 66, and 67.
66333 *
66334 * Restrictions:
66335 *        Calendar table entry accesses (read or write) can only occur
66336 *        if the interface is disabled.  All other accesses will be
66337 *        unpredictable.
66338 *
66339 *     Both the calendar table and the LEN and M parameters must be
66340 *     completely setup before writing the Interface enable (INF_EN) and
66341 *     Status channel enabled (ST_EN) asserted.
66342 */
66343typedef union
66344{
66345    uint64_t u64;
66346    struct cvmx_stxx_spi4_calx_s
66347    {
66348#if __BYTE_ORDER == __BIG_ENDIAN
66349        uint64_t reserved_17_63          : 47;
66350        uint64_t oddpar                  : 1;       /**< Odd parity over STX_SPI4_CAL[15:0]
66351                                                         (^STX_SPI4_CAL[16:0] === 1'b1)                  |   $NS       NS */
66352        uint64_t prt3                    : 4;       /**< Status for port n+3 */
66353        uint64_t prt2                    : 4;       /**< Status for port n+2 */
66354        uint64_t prt1                    : 4;       /**< Status for port n+1 */
66355        uint64_t prt0                    : 4;       /**< Status for port n+0 */
66356#else
66357        uint64_t prt0                    : 4;
66358        uint64_t prt1                    : 4;
66359        uint64_t prt2                    : 4;
66360        uint64_t prt3                    : 4;
66361        uint64_t oddpar                  : 1;
66362        uint64_t reserved_17_63          : 47;
66363#endif
66364    } s;
66365    struct cvmx_stxx_spi4_calx_s         cn38xx;
66366    struct cvmx_stxx_spi4_calx_s         cn38xxp2;
66367    struct cvmx_stxx_spi4_calx_s         cn58xx;
66368    struct cvmx_stxx_spi4_calx_s         cn58xxp1;
66369} cvmx_stxx_spi4_calx_t;
66370
66371
66372/**
66373 * cvmx_stx#_spi4_dat
66374 *
66375 * STX_SPI4_DAT - Spi4 datapath channel control register
66376 *
66377 *
66378 * Notes:
66379 * Restrictions:
66380 * * DATA_MAX_T must be in MOD 4 cycles
66381 *
66382 * * DATA_MAX_T must at least 0x20
66383 *
66384 * * DATA_MAX_T == 0 or ALPHA == 0 will disable the training sequnce
66385 *
66386 * * If STX_ARB_CTL[MINTRN] is set, then training cycles will stall
66387 *   waiting for min bursts to complete.  In the worst case, this will
66388 *   add the entire min burst transmission time to the interval between
66389 *   trainging sequence.  The observed MAX_T on the Spi4 bus will be...
66390 *
66391 *                STX_SPI4_DAT[MAX_T] + (STX_MIN_BST[MINB] * 4)
66392 *
66393 *      If STX_ARB_CTL[MINTRN] is set in Spi4 mode, then the data_max_t
66394 *      parameter will have to be adjusted.  Please see the
66395 *      STX_SPI4_DAT[MAX_T] section for additional information.  In
66396 *      addition, the min_burst can only be guaranteed on the initial data
66397 *      burst of a given packet (i.e. the first data burst which contains
66398 *      the SOP tick).  All subsequent bursts could be truncated by training
66399 *      sequences at any point during transmission and could be arbitrarily
66400 *      small.  This mode is only for use in Spi4 mode.
66401 */
66402typedef union
66403{
66404    uint64_t u64;
66405    struct cvmx_stxx_spi4_dat_s
66406    {
66407#if __BYTE_ORDER == __BIG_ENDIAN
66408        uint64_t reserved_32_63          : 32;
66409        uint64_t alpha                   : 16;      /**< alpha (from spi4.2 spec) */
66410        uint64_t max_t                   : 16;      /**< DATA_MAX_T (from spi4.2 spec) */
66411#else
66412        uint64_t max_t                   : 16;
66413        uint64_t alpha                   : 16;
66414        uint64_t reserved_32_63          : 32;
66415#endif
66416    } s;
66417    struct cvmx_stxx_spi4_dat_s          cn38xx;
66418    struct cvmx_stxx_spi4_dat_s          cn38xxp2;
66419    struct cvmx_stxx_spi4_dat_s          cn58xx;
66420    struct cvmx_stxx_spi4_dat_s          cn58xxp1;
66421} cvmx_stxx_spi4_dat_t;
66422
66423
66424/**
66425 * cvmx_stx#_spi4_stat
66426 *
66427 * STX_SPI4_STAT - Spi4 status channel control register
66428 *
66429 *
66430 * Notes:
66431 * Restrictions:
66432 * Both the calendar table and the LEN and M parameters must be
66433 * completely setup before writing the Interface enable (INF_EN) and
66434 * Status channel enabled (ST_EN) asserted.
66435 *
66436 * The calendar table will only be enabled when LEN > 0.
66437 *
66438 * Current rev will only support LVTTL status IO.
66439 */
66440typedef union
66441{
66442    uint64_t u64;
66443    struct cvmx_stxx_spi4_stat_s
66444    {
66445#if __BYTE_ORDER == __BIG_ENDIAN
66446        uint64_t reserved_16_63          : 48;
66447        uint64_t m                       : 8;       /**< CALENDAR_M (from spi4.2 spec) */
66448        uint64_t reserved_7_7            : 1;
66449        uint64_t len                     : 7;       /**< CALENDAR_LEN (from spi4.2 spec) */
66450#else
66451        uint64_t len                     : 7;
66452        uint64_t reserved_7_7            : 1;
66453        uint64_t m                       : 8;
66454        uint64_t reserved_16_63          : 48;
66455#endif
66456    } s;
66457    struct cvmx_stxx_spi4_stat_s         cn38xx;
66458    struct cvmx_stxx_spi4_stat_s         cn38xxp2;
66459    struct cvmx_stxx_spi4_stat_s         cn58xx;
66460    struct cvmx_stxx_spi4_stat_s         cn58xxp1;
66461} cvmx_stxx_spi4_stat_t;
66462
66463
66464/**
66465 * cvmx_stx#_stat_bytes_hi
66466 */
66467typedef union
66468{
66469    uint64_t u64;
66470    struct cvmx_stxx_stat_bytes_hi_s
66471    {
66472#if __BYTE_ORDER == __BIG_ENDIAN
66473        uint64_t reserved_32_63          : 32;
66474        uint64_t cnt                     : 32;      /**< Number of bytes sent (CNT[63:32]) */
66475#else
66476        uint64_t cnt                     : 32;
66477        uint64_t reserved_32_63          : 32;
66478#endif
66479    } s;
66480    struct cvmx_stxx_stat_bytes_hi_s     cn38xx;
66481    struct cvmx_stxx_stat_bytes_hi_s     cn38xxp2;
66482    struct cvmx_stxx_stat_bytes_hi_s     cn58xx;
66483    struct cvmx_stxx_stat_bytes_hi_s     cn58xxp1;
66484} cvmx_stxx_stat_bytes_hi_t;
66485
66486
66487/**
66488 * cvmx_stx#_stat_bytes_lo
66489 */
66490typedef union
66491{
66492    uint64_t u64;
66493    struct cvmx_stxx_stat_bytes_lo_s
66494    {
66495#if __BYTE_ORDER == __BIG_ENDIAN
66496        uint64_t reserved_32_63          : 32;
66497        uint64_t cnt                     : 32;      /**< Number of bytes sent (CNT[31:0]) */
66498#else
66499        uint64_t cnt                     : 32;
66500        uint64_t reserved_32_63          : 32;
66501#endif
66502    } s;
66503    struct cvmx_stxx_stat_bytes_lo_s     cn38xx;
66504    struct cvmx_stxx_stat_bytes_lo_s     cn38xxp2;
66505    struct cvmx_stxx_stat_bytes_lo_s     cn58xx;
66506    struct cvmx_stxx_stat_bytes_lo_s     cn58xxp1;
66507} cvmx_stxx_stat_bytes_lo_t;
66508
66509
66510/**
66511 * cvmx_stx#_stat_ctl
66512 */
66513typedef union
66514{
66515    uint64_t u64;
66516    struct cvmx_stxx_stat_ctl_s
66517    {
66518#if __BYTE_ORDER == __BIG_ENDIAN
66519        uint64_t reserved_5_63           : 59;
66520        uint64_t clr                     : 1;       /**< Clear all statistics counters
66521                                                         - STX_STAT_PKT_XMT
66522                                                         - STX_STAT_BYTES_HI
66523                                                         - STX_STAT_BYTES_LO */
66524        uint64_t bckprs                  : 4;       /**< The selected port for STX_BCKPRS_CNT */
66525#else
66526        uint64_t bckprs                  : 4;
66527        uint64_t clr                     : 1;
66528        uint64_t reserved_5_63           : 59;
66529#endif
66530    } s;
66531    struct cvmx_stxx_stat_ctl_s          cn38xx;
66532    struct cvmx_stxx_stat_ctl_s          cn38xxp2;
66533    struct cvmx_stxx_stat_ctl_s          cn58xx;
66534    struct cvmx_stxx_stat_ctl_s          cn58xxp1;
66535} cvmx_stxx_stat_ctl_t;
66536
66537
66538/**
66539 * cvmx_stx#_stat_pkt_xmt
66540 */
66541typedef union
66542{
66543    uint64_t u64;
66544    struct cvmx_stxx_stat_pkt_xmt_s
66545    {
66546#if __BYTE_ORDER == __BIG_ENDIAN
66547        uint64_t reserved_32_63          : 32;
66548        uint64_t cnt                     : 32;      /**< Number of packets sent */
66549#else
66550        uint64_t cnt                     : 32;
66551        uint64_t reserved_32_63          : 32;
66552#endif
66553    } s;
66554    struct cvmx_stxx_stat_pkt_xmt_s      cn38xx;
66555    struct cvmx_stxx_stat_pkt_xmt_s      cn38xxp2;
66556    struct cvmx_stxx_stat_pkt_xmt_s      cn58xx;
66557    struct cvmx_stxx_stat_pkt_xmt_s      cn58xxp1;
66558} cvmx_stxx_stat_pkt_xmt_t;
66559
66560
66561/**
66562 * cvmx_tim_mem_debug0
66563 *
66564 * Notes:
66565 * Internal per-ring state intended for debug use only - tim.ctl[47:0]
66566 * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any
66567 * CSR read operations to this address can be performed.
66568 */
66569typedef union
66570{
66571    uint64_t u64;
66572    struct cvmx_tim_mem_debug0_s
66573    {
66574#if __BYTE_ORDER == __BIG_ENDIAN
66575        uint64_t reserved_48_63          : 16;
66576        uint64_t ena                     : 1;       /**< Ring timer enable */
66577        uint64_t reserved_46_46          : 1;
66578        uint64_t count                   : 22;      /**< Time offset for the ring
66579                                                         Set to INTERVAL and counts down by 1 every 1024
66580                                                         cycles when ENA==1. The HW forces a bucket
66581                                                         traversal (and resets COUNT to INTERVAL) whenever
66582                                                         the decrement would cause COUNT to go negative.
66583                                                         COUNT is unpredictable whenever ENA==0.
66584                                                         COUNT is reset to INTERVAL whenever TIM_MEM_RING1
66585                                                         is written for the ring. */
66586        uint64_t reserved_22_23          : 2;
66587        uint64_t interval                : 22;      /**< Timer interval - 1 */
66588#else
66589        uint64_t interval                : 22;
66590        uint64_t reserved_22_23          : 2;
66591        uint64_t count                   : 22;
66592        uint64_t reserved_46_46          : 1;
66593        uint64_t ena                     : 1;
66594        uint64_t reserved_48_63          : 16;
66595#endif
66596    } s;
66597    struct cvmx_tim_mem_debug0_s         cn30xx;
66598    struct cvmx_tim_mem_debug0_s         cn31xx;
66599    struct cvmx_tim_mem_debug0_s         cn38xx;
66600    struct cvmx_tim_mem_debug0_s         cn38xxp2;
66601    struct cvmx_tim_mem_debug0_s         cn50xx;
66602    struct cvmx_tim_mem_debug0_s         cn52xx;
66603    struct cvmx_tim_mem_debug0_s         cn52xxp1;
66604    struct cvmx_tim_mem_debug0_s         cn56xx;
66605    struct cvmx_tim_mem_debug0_s         cn56xxp1;
66606    struct cvmx_tim_mem_debug0_s         cn58xx;
66607    struct cvmx_tim_mem_debug0_s         cn58xxp1;
66608} cvmx_tim_mem_debug0_t;
66609
66610
66611/**
66612 * cvmx_tim_mem_debug1
66613 *
66614 * Notes:
66615 * Internal per-ring state intended for debug use only - tim.sta[63:0]
66616 * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any
66617 * CSR read operations to this address can be performed.
66618 */
66619typedef union
66620{
66621    uint64_t u64;
66622    struct cvmx_tim_mem_debug1_s
66623    {
66624#if __BYTE_ORDER == __BIG_ENDIAN
66625        uint64_t bucket                  : 13;      /**< Current bucket[12:0]
66626                                                         Reset to 0 whenever TIM_MEM_RING0 is written for
66627                                                         the ring. Incremented (modulo BSIZE) once per
66628                                                         bucket traversal.
66629                                                         See TIM_MEM_DEBUG2[BUCKET]. */
66630        uint64_t base                    : 31;      /**< Pointer[35:5] to bucket[0] */
66631        uint64_t bsize                   : 20;      /**< Number of buckets - 1 */
66632#else
66633        uint64_t bsize                   : 20;
66634        uint64_t base                    : 31;
66635        uint64_t bucket                  : 13;
66636#endif
66637    } s;
66638    struct cvmx_tim_mem_debug1_s         cn30xx;
66639    struct cvmx_tim_mem_debug1_s         cn31xx;
66640    struct cvmx_tim_mem_debug1_s         cn38xx;
66641    struct cvmx_tim_mem_debug1_s         cn38xxp2;
66642    struct cvmx_tim_mem_debug1_s         cn50xx;
66643    struct cvmx_tim_mem_debug1_s         cn52xx;
66644    struct cvmx_tim_mem_debug1_s         cn52xxp1;
66645    struct cvmx_tim_mem_debug1_s         cn56xx;
66646    struct cvmx_tim_mem_debug1_s         cn56xxp1;
66647    struct cvmx_tim_mem_debug1_s         cn58xx;
66648    struct cvmx_tim_mem_debug1_s         cn58xxp1;
66649} cvmx_tim_mem_debug1_t;
66650
66651
66652/**
66653 * cvmx_tim_mem_debug2
66654 *
66655 * Notes:
66656 * Internal per-ring state intended for debug use only - tim.sta[95:64]
66657 * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any
66658 * CSR read operations to this address can be performed.
66659 */
66660typedef union
66661{
66662    uint64_t u64;
66663    struct cvmx_tim_mem_debug2_s
66664    {
66665#if __BYTE_ORDER == __BIG_ENDIAN
66666        uint64_t reserved_24_63          : 40;
66667        uint64_t cpool                   : 3;       /**< Free list used to free chunks */
66668        uint64_t csize                   : 13;      /**< Number of words per chunk */
66669        uint64_t reserved_7_7            : 1;
66670        uint64_t bucket                  : 7;       /**< Current bucket[19:13]
66671                                                         See TIM_MEM_DEBUG1[BUCKET]. */
66672#else
66673        uint64_t bucket                  : 7;
66674        uint64_t reserved_7_7            : 1;
66675        uint64_t csize                   : 13;
66676        uint64_t cpool                   : 3;
66677        uint64_t reserved_24_63          : 40;
66678#endif
66679    } s;
66680    struct cvmx_tim_mem_debug2_s         cn30xx;
66681    struct cvmx_tim_mem_debug2_s         cn31xx;
66682    struct cvmx_tim_mem_debug2_s         cn38xx;
66683    struct cvmx_tim_mem_debug2_s         cn38xxp2;
66684    struct cvmx_tim_mem_debug2_s         cn50xx;
66685    struct cvmx_tim_mem_debug2_s         cn52xx;
66686    struct cvmx_tim_mem_debug2_s         cn52xxp1;
66687    struct cvmx_tim_mem_debug2_s         cn56xx;
66688    struct cvmx_tim_mem_debug2_s         cn56xxp1;
66689    struct cvmx_tim_mem_debug2_s         cn58xx;
66690    struct cvmx_tim_mem_debug2_s         cn58xxp1;
66691} cvmx_tim_mem_debug2_t;
66692
66693
66694/**
66695 * cvmx_tim_mem_ring0
66696 *
66697 * Notes:
66698 * TIM_MEM_RING0 must not be written for a ring when TIM_MEM_RING1[ENA] is set for the ring.
66699 * Every write to TIM_MEM_RING0 clears the current bucket for the ring. (The current bucket is
66700 * readable via TIM_MEM_DEBUG2[BUCKET],TIM_MEM_DEBUG1[BUCKET].)
66701 * BASE is a 32-byte aligned pointer[35:0].  Only pointer[35:5] are stored because pointer[4:0] = 0.
66702 * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any
66703 * CSR read operations to this address can be performed.
66704 */
66705typedef union
66706{
66707    uint64_t u64;
66708    struct cvmx_tim_mem_ring0_s
66709    {
66710#if __BYTE_ORDER == __BIG_ENDIAN
66711        uint64_t reserved_55_63          : 9;
66712        uint64_t first_bucket            : 31;      /**< Pointer[35:5] to bucket[0] */
66713        uint64_t num_buckets             : 20;      /**< Number of buckets - 1 */
66714        uint64_t ring                    : 4;       /**< Ring ID */
66715#else
66716        uint64_t ring                    : 4;
66717        uint64_t num_buckets             : 20;
66718        uint64_t first_bucket            : 31;
66719        uint64_t reserved_55_63          : 9;
66720#endif
66721    } s;
66722    struct cvmx_tim_mem_ring0_s          cn30xx;
66723    struct cvmx_tim_mem_ring0_s          cn31xx;
66724    struct cvmx_tim_mem_ring0_s          cn38xx;
66725    struct cvmx_tim_mem_ring0_s          cn38xxp2;
66726    struct cvmx_tim_mem_ring0_s          cn50xx;
66727    struct cvmx_tim_mem_ring0_s          cn52xx;
66728    struct cvmx_tim_mem_ring0_s          cn52xxp1;
66729    struct cvmx_tim_mem_ring0_s          cn56xx;
66730    struct cvmx_tim_mem_ring0_s          cn56xxp1;
66731    struct cvmx_tim_mem_ring0_s          cn58xx;
66732    struct cvmx_tim_mem_ring0_s          cn58xxp1;
66733} cvmx_tim_mem_ring0_t;
66734
66735
66736/**
66737 * cvmx_tim_mem_ring1
66738 *
66739 * Notes:
66740 * After a 1->0 transition on ENA, the HW will still complete a bucket traversal for the ring
66741 * if it was pending or active prior to the transition. (SW must delay to ensure the completion
66742 * of the traversal before reprogramming the ring.)
66743 * Every write to TIM_MEM_RING1 resets the current time offset for the ring to the INTERVAL value.
66744 * (The current time offset for the ring is readable via TIM_MEM_DEBUG0[COUNT].)
66745 * CSIZE must be at least 16.  It is illegal to program CSIZE to a value that is less than 16.
66746 * This CSR is a memory of 16 entries, and thus, the TIM_REG_READ_IDX CSR must be written before any
66747 * CSR read operations to this address can be performed.
66748 */
66749typedef union
66750{
66751    uint64_t u64;
66752    struct cvmx_tim_mem_ring1_s
66753    {
66754#if __BYTE_ORDER == __BIG_ENDIAN
66755        uint64_t reserved_43_63          : 21;
66756        uint64_t enable                  : 1;       /**< Ring timer enable
66757                                                         When clear, the ring is disabled and TIM
66758                                                         will not traverse any new buckets for the ring. */
66759        uint64_t pool                    : 3;       /**< Free list used to free chunks */
66760        uint64_t words_per_chunk         : 13;      /**< Number of words per chunk */
66761        uint64_t interval                : 22;      /**< Timer interval - 1, measured in 1024 cycle ticks */
66762        uint64_t ring                    : 4;       /**< Ring ID */
66763#else
66764        uint64_t ring                    : 4;
66765        uint64_t interval                : 22;
66766        uint64_t words_per_chunk         : 13;
66767        uint64_t pool                    : 3;
66768        uint64_t enable                  : 1;
66769        uint64_t reserved_43_63          : 21;
66770#endif
66771    } s;
66772    struct cvmx_tim_mem_ring1_s          cn30xx;
66773    struct cvmx_tim_mem_ring1_s          cn31xx;
66774    struct cvmx_tim_mem_ring1_s          cn38xx;
66775    struct cvmx_tim_mem_ring1_s          cn38xxp2;
66776    struct cvmx_tim_mem_ring1_s          cn50xx;
66777    struct cvmx_tim_mem_ring1_s          cn52xx;
66778    struct cvmx_tim_mem_ring1_s          cn52xxp1;
66779    struct cvmx_tim_mem_ring1_s          cn56xx;
66780    struct cvmx_tim_mem_ring1_s          cn56xxp1;
66781    struct cvmx_tim_mem_ring1_s          cn58xx;
66782    struct cvmx_tim_mem_ring1_s          cn58xxp1;
66783} cvmx_tim_mem_ring1_t;
66784
66785
66786/**
66787 * cvmx_tim_reg_bist_result
66788 *
66789 * Notes:
66790 * Access to the internal BiST results
66791 * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
66792 */
66793typedef union
66794{
66795    uint64_t u64;
66796    struct cvmx_tim_reg_bist_result_s
66797    {
66798#if __BYTE_ORDER == __BIG_ENDIAN
66799        uint64_t reserved_4_63           : 60;
66800        uint64_t sta                     : 2;       /**< BiST result of the STA   memories (0=pass, !0=fail) */
66801        uint64_t ncb                     : 1;       /**< BiST result of the NCB   memories (0=pass, !0=fail) */
66802        uint64_t ctl                     : 1;       /**< BiST result of the CTL   memories (0=pass, !0=fail) */
66803#else
66804        uint64_t ctl                     : 1;
66805        uint64_t ncb                     : 1;
66806        uint64_t sta                     : 2;
66807        uint64_t reserved_4_63           : 60;
66808#endif
66809    } s;
66810    struct cvmx_tim_reg_bist_result_s    cn30xx;
66811    struct cvmx_tim_reg_bist_result_s    cn31xx;
66812    struct cvmx_tim_reg_bist_result_s    cn38xx;
66813    struct cvmx_tim_reg_bist_result_s    cn38xxp2;
66814    struct cvmx_tim_reg_bist_result_s    cn50xx;
66815    struct cvmx_tim_reg_bist_result_s    cn52xx;
66816    struct cvmx_tim_reg_bist_result_s    cn52xxp1;
66817    struct cvmx_tim_reg_bist_result_s    cn56xx;
66818    struct cvmx_tim_reg_bist_result_s    cn56xxp1;
66819    struct cvmx_tim_reg_bist_result_s    cn58xx;
66820    struct cvmx_tim_reg_bist_result_s    cn58xxp1;
66821} cvmx_tim_reg_bist_result_t;
66822
66823
66824/**
66825 * cvmx_tim_reg_error
66826 *
66827 * Notes:
66828 * A ring is in error if its interval has elapsed more than once without having been serviced.
66829 * During a CSR write to this register, the write data is used as a mask to clear the selected mask
66830 * bits (mask'[15:0] = mask[15:0] & ~write_data[15:0]).
66831 */
66832typedef union
66833{
66834    uint64_t u64;
66835    struct cvmx_tim_reg_error_s
66836    {
66837#if __BYTE_ORDER == __BIG_ENDIAN
66838        uint64_t reserved_16_63          : 48;
66839        uint64_t mask                    : 16;      /**< Bit mask indicating the rings in error */
66840#else
66841        uint64_t mask                    : 16;
66842        uint64_t reserved_16_63          : 48;
66843#endif
66844    } s;
66845    struct cvmx_tim_reg_error_s          cn30xx;
66846    struct cvmx_tim_reg_error_s          cn31xx;
66847    struct cvmx_tim_reg_error_s          cn38xx;
66848    struct cvmx_tim_reg_error_s          cn38xxp2;
66849    struct cvmx_tim_reg_error_s          cn50xx;
66850    struct cvmx_tim_reg_error_s          cn52xx;
66851    struct cvmx_tim_reg_error_s          cn52xxp1;
66852    struct cvmx_tim_reg_error_s          cn56xx;
66853    struct cvmx_tim_reg_error_s          cn56xxp1;
66854    struct cvmx_tim_reg_error_s          cn58xx;
66855    struct cvmx_tim_reg_error_s          cn58xxp1;
66856} cvmx_tim_reg_error_t;
66857
66858
66859/**
66860 * cvmx_tim_reg_flags
66861 *
66862 * Notes:
66863 * TIM has a counter that causes a periodic tick every 1024 cycles. This counter is shared by all
66864 * rings. (Each tick causes the HW to decrement the time offset (i.e. COUNT) for all enabled rings.)
66865 * When ENA_TIM==0, the HW stops this shared periodic counter, so there are no more ticks, and there
66866 * are no more new bucket traversals (for any ring).
66867 *
66868 * If ENA_TIM transitions 1->0, TIM will no longer create new bucket traversals, but there may
66869 * have been previous ones. If there are ring bucket traversals that were already pending but
66870 * not currently active (i.e. bucket traversals that need to be done by the HW, but haven't been yet)
66871 * during this ENA_TIM 1->0 transition, then these bucket traversals will remain pending until
66872 * ENA_TIM is later set to one. Bucket traversals that were already in progress will complete
66873 * after the 1->0 ENA_TIM transition, though.
66874 */
66875typedef union
66876{
66877    uint64_t u64;
66878    struct cvmx_tim_reg_flags_s
66879    {
66880#if __BYTE_ORDER == __BIG_ENDIAN
66881        uint64_t reserved_3_63           : 61;
66882        uint64_t reset                   : 1;       /**< Reset oneshot pulse for free-running structures */
66883        uint64_t enable_dwb              : 1;       /**< Enables non-zero DonwWriteBacks when set
66884                                                         When set, enables the use of
66885                                                         DontWriteBacks during the buffer freeing
66886                                                         operations. */
66887        uint64_t enable_timers           : 1;       /**< Enables the TIM section when set
66888                                                         When set, TIM is in normal operation.
66889                                                         When clear, time is effectively stopped for all
66890                                                         rings in TIM. */
66891#else
66892        uint64_t enable_timers           : 1;
66893        uint64_t enable_dwb              : 1;
66894        uint64_t reset                   : 1;
66895        uint64_t reserved_3_63           : 61;
66896#endif
66897    } s;
66898    struct cvmx_tim_reg_flags_s          cn30xx;
66899    struct cvmx_tim_reg_flags_s          cn31xx;
66900    struct cvmx_tim_reg_flags_s          cn38xx;
66901    struct cvmx_tim_reg_flags_s          cn38xxp2;
66902    struct cvmx_tim_reg_flags_s          cn50xx;
66903    struct cvmx_tim_reg_flags_s          cn52xx;
66904    struct cvmx_tim_reg_flags_s          cn52xxp1;
66905    struct cvmx_tim_reg_flags_s          cn56xx;
66906    struct cvmx_tim_reg_flags_s          cn56xxp1;
66907    struct cvmx_tim_reg_flags_s          cn58xx;
66908    struct cvmx_tim_reg_flags_s          cn58xxp1;
66909} cvmx_tim_reg_flags_t;
66910
66911
66912/**
66913 * cvmx_tim_reg_int_mask
66914 *
66915 * Notes:
66916 * Note that this CSR is present only in chip revisions beginning with pass2.
66917 * When mask bit is set, the interrupt is enabled.
66918 */
66919typedef union
66920{
66921    uint64_t u64;
66922    struct cvmx_tim_reg_int_mask_s
66923    {
66924#if __BYTE_ORDER == __BIG_ENDIAN
66925        uint64_t reserved_16_63          : 48;
66926        uint64_t mask                    : 16;      /**< Bit mask corresponding to TIM_REG_ERROR.MASK above */
66927#else
66928        uint64_t mask                    : 16;
66929        uint64_t reserved_16_63          : 48;
66930#endif
66931    } s;
66932    struct cvmx_tim_reg_int_mask_s       cn30xx;
66933    struct cvmx_tim_reg_int_mask_s       cn31xx;
66934    struct cvmx_tim_reg_int_mask_s       cn38xx;
66935    struct cvmx_tim_reg_int_mask_s       cn38xxp2;
66936    struct cvmx_tim_reg_int_mask_s       cn50xx;
66937    struct cvmx_tim_reg_int_mask_s       cn52xx;
66938    struct cvmx_tim_reg_int_mask_s       cn52xxp1;
66939    struct cvmx_tim_reg_int_mask_s       cn56xx;
66940    struct cvmx_tim_reg_int_mask_s       cn56xxp1;
66941    struct cvmx_tim_reg_int_mask_s       cn58xx;
66942    struct cvmx_tim_reg_int_mask_s       cn58xxp1;
66943} cvmx_tim_reg_int_mask_t;
66944
66945
66946/**
66947 * cvmx_tim_reg_read_idx
66948 *
66949 * Notes:
66950 * Provides the read index during a CSR read operation to any of the CSRs that are physically stored
66951 * as memories.  The names of these CSRs begin with the prefix "TIM_MEM_".
66952 * IDX[7:0] is the read index.  INC[7:0] is an increment that is added to IDX[7:0] after any CSR read.
66953 * The intended use is to initially write this CSR such that IDX=0 and INC=1.  Then, the entire
66954 * contents of a CSR memory can be read with consecutive CSR read commands.
66955 */
66956typedef union
66957{
66958    uint64_t u64;
66959    struct cvmx_tim_reg_read_idx_s
66960    {
66961#if __BYTE_ORDER == __BIG_ENDIAN
66962        uint64_t reserved_16_63          : 48;
66963        uint64_t inc                     : 8;       /**< Increment to add to current index for next index */
66964        uint64_t index                   : 8;       /**< Index to use for next memory CSR read */
66965#else
66966        uint64_t index                   : 8;
66967        uint64_t inc                     : 8;
66968        uint64_t reserved_16_63          : 48;
66969#endif
66970    } s;
66971    struct cvmx_tim_reg_read_idx_s       cn30xx;
66972    struct cvmx_tim_reg_read_idx_s       cn31xx;
66973    struct cvmx_tim_reg_read_idx_s       cn38xx;
66974    struct cvmx_tim_reg_read_idx_s       cn38xxp2;
66975    struct cvmx_tim_reg_read_idx_s       cn50xx;
66976    struct cvmx_tim_reg_read_idx_s       cn52xx;
66977    struct cvmx_tim_reg_read_idx_s       cn52xxp1;
66978    struct cvmx_tim_reg_read_idx_s       cn56xx;
66979    struct cvmx_tim_reg_read_idx_s       cn56xxp1;
66980    struct cvmx_tim_reg_read_idx_s       cn58xx;
66981    struct cvmx_tim_reg_read_idx_s       cn58xxp1;
66982} cvmx_tim_reg_read_idx_t;
66983
66984
66985/**
66986 * cvmx_tra_bist_status
66987 *
66988 * TRA_BIST_STATUS = Trace Buffer BiST Status
66989 *
66990 * Description:
66991 */
66992typedef union
66993{
66994    uint64_t u64;
66995    struct cvmx_tra_bist_status_s
66996    {
66997#if __BYTE_ORDER == __BIG_ENDIAN
66998        uint64_t reserved_3_63           : 61;
66999        uint64_t tcf                     : 1;       /**< Bist Results for TCF memory
67000                                                         - 0: GOOD (or bist in progress/never run)
67001                                                         - 1: BAD */
67002        uint64_t tdf1                    : 1;       /**< Bist Results for TDF memory 1
67003                                                         - 0: GOOD (or bist in progress/never run)
67004                                                         - 1: BAD */
67005        uint64_t tdf0                    : 1;       /**< Bist Results for TCF memory 0
67006                                                         - 0: GOOD (or bist in progress/never run)
67007                                                         - 1: BAD */
67008#else
67009        uint64_t tdf0                    : 1;
67010        uint64_t tdf1                    : 1;
67011        uint64_t tcf                     : 1;
67012        uint64_t reserved_3_63           : 61;
67013#endif
67014    } s;
67015    struct cvmx_tra_bist_status_s        cn31xx;
67016    struct cvmx_tra_bist_status_s        cn38xx;
67017    struct cvmx_tra_bist_status_s        cn38xxp2;
67018    struct cvmx_tra_bist_status_s        cn52xx;
67019    struct cvmx_tra_bist_status_s        cn52xxp1;
67020    struct cvmx_tra_bist_status_s        cn56xx;
67021    struct cvmx_tra_bist_status_s        cn56xxp1;
67022    struct cvmx_tra_bist_status_s        cn58xx;
67023    struct cvmx_tra_bist_status_s        cn58xxp1;
67024} cvmx_tra_bist_status_t;
67025
67026
67027/**
67028 * cvmx_tra_ctl
67029 *
67030 * TRA_CTL = Trace Buffer Control
67031 *
67032 * Description:
67033 *
67034 * Notes:
67035 * It is illegal to change the values of WRAP, TRIG_CTL, IGNORE_O while tracing (i.e. when ENA=1).
67036 * Note that the following fields are present only in chip revisions beginning with pass2: IGNORE_O
67037 */
67038typedef union
67039{
67040    uint64_t u64;
67041    struct cvmx_tra_ctl_s
67042    {
67043#if __BYTE_ORDER == __BIG_ENDIAN
67044        uint64_t reserved_15_63          : 49;
67045        uint64_t ignore_o                : 1;       /**< Ignore overflow during wrap mode
67046                                                         If set and wrapping mode is enabled, then tracing
67047                                                         will not stop at the overflow condition.  Each
67048                                                         write during an overflow will overwrite the
67049                                                         oldest, unread entry and the read pointer is
67050                                                         incremented by one entry.  This bit has no effect
67051                                                         if WRAP=0. */
67052        uint64_t mcd0_ena                : 1;       /**< MCD0 enable
67053                                                         If set and any PP sends the MCD0 signal, the
67054                                                         tracing is disabled. */
67055        uint64_t mcd0_thr                : 1;       /**< MCD0_threshold
67056                                                         At a fill threshold event, sends an MCD0
67057                                                         wire pulse that can cause cores to enter debug
67058                                                         mode, if enabled.  This MCD0 wire pulse will not
67059                                                         occur while (TRA_INT_STATUS.MCD0_THR == 1). */
67060        uint64_t mcd0_trg                : 1;       /**< MCD0_trigger
67061                                                         At an end trigger event, sends an MCD0
67062                                                         wire pulse that can cause cores to enter debug
67063                                                         mode, if enabled.  This MCD0 wire pulse will not
67064                                                         occur while (TRA_INT_STATUS.MCD0_TRG == 1). */
67065        uint64_t ciu_thr                 : 1;       /**< CIU_threshold
67066                                                         When set during a fill threshold event,
67067                                                         TRA_INT_STATUS[CIU_THR] is set, which can cause
67068                                                         core interrupts, if enabled. */
67069        uint64_t ciu_trg                 : 1;       /**< CIU_trigger
67070                                                         When set during an end trigger event,
67071                                                         TRA_INT_STATUS[CIU_TRG] is set, which can cause
67072                                                         core interrupts, if enabled. */
67073        uint64_t full_thr                : 2;       /**< Full Threshhold
67074                                                         0=none
67075                                                         1=1/2 full
67076                                                         2=3/4 full
67077                                                         3=4/4 full */
67078        uint64_t time_grn                : 3;       /**< Timestamp granularity
67079                                                         granularity=8^n cycles, n=0,1,2,3,4,5,6,7 */
67080        uint64_t trig_ctl                : 2;       /**< Trigger Control
67081                                                         Note: trigger events are written to the trace
67082                                                         0=no triggers
67083                                                         1=trigger0=start trigger, trigger1=stop trigger
67084                                                         2=(trigger0 || trigger1)=start trigger
67085                                                         3=(trigger0 || trigger1)=stop trigger */
67086        uint64_t wrap                    : 1;       /**< Wrap mode
67087                                                         When WRAP=0, the trace buffer will disable itself
67088                                                         after having logged 1024 entries.  When WRAP=1,
67089                                                         the trace buffer will never disable itself.
67090                                                         In this case, tracing may or may not be
67091                                                         temporarily suspended during the overflow
67092                                                         condition (see IGNORE_O above).
67093                                                         0=do not wrap
67094                                                         1=wrap */
67095        uint64_t ena                     : 1;       /**< Enable Trace
67096                                                         Master enable.  Tracing only happens when ENA=1.
67097                                                         When ENA changes from 0 to 1, the read and write
67098                                                         pointers are reset to 0x00 to begin a new trace.
67099                                                         The MCD0 event may set ENA=0 (see MCD0_ENA
67100                                                         above).  When using triggers, tracing occurs only
67101                                                         between start and stop triggers (including the
67102                                                         triggers themselves).
67103                                                         0=disable
67104                                                         1=enable */
67105#else
67106        uint64_t ena                     : 1;
67107        uint64_t wrap                    : 1;
67108        uint64_t trig_ctl                : 2;
67109        uint64_t time_grn                : 3;
67110        uint64_t full_thr                : 2;
67111        uint64_t ciu_trg                 : 1;
67112        uint64_t ciu_thr                 : 1;
67113        uint64_t mcd0_trg                : 1;
67114        uint64_t mcd0_thr                : 1;
67115        uint64_t mcd0_ena                : 1;
67116        uint64_t ignore_o                : 1;
67117        uint64_t reserved_15_63          : 49;
67118#endif
67119    } s;
67120    struct cvmx_tra_ctl_s                cn31xx;
67121    struct cvmx_tra_ctl_s                cn38xx;
67122    struct cvmx_tra_ctl_s                cn38xxp2;
67123    struct cvmx_tra_ctl_s                cn52xx;
67124    struct cvmx_tra_ctl_s                cn52xxp1;
67125    struct cvmx_tra_ctl_s                cn56xx;
67126    struct cvmx_tra_ctl_s                cn56xxp1;
67127    struct cvmx_tra_ctl_s                cn58xx;
67128    struct cvmx_tra_ctl_s                cn58xxp1;
67129} cvmx_tra_ctl_t;
67130
67131
67132/**
67133 * cvmx_tra_cycles_since
67134 *
67135 * TRA_CYCLES_SINCE = Trace Buffer Cycles Since Last Write, Read/Write pointers
67136 *
67137 * Description:
67138 *
67139 * Notes:
67140 * This CSR is obsolete.  Use TRA_CYCLES_SINCE1 instead.
67141 *
67142 */
67143typedef union
67144{
67145    uint64_t u64;
67146    struct cvmx_tra_cycles_since_s
67147    {
67148#if __BYTE_ORDER == __BIG_ENDIAN
67149        uint64_t cycles                  : 48;      /**< Cycles since the last entry was written */
67150        uint64_t rptr                    : 8;       /**< Read pointer */
67151        uint64_t wptr                    : 8;       /**< Write pointer */
67152#else
67153        uint64_t wptr                    : 8;
67154        uint64_t rptr                    : 8;
67155        uint64_t cycles                  : 48;
67156#endif
67157    } s;
67158    struct cvmx_tra_cycles_since_s       cn31xx;
67159    struct cvmx_tra_cycles_since_s       cn38xx;
67160    struct cvmx_tra_cycles_since_s       cn38xxp2;
67161    struct cvmx_tra_cycles_since_s       cn52xx;
67162    struct cvmx_tra_cycles_since_s       cn52xxp1;
67163    struct cvmx_tra_cycles_since_s       cn56xx;
67164    struct cvmx_tra_cycles_since_s       cn56xxp1;
67165    struct cvmx_tra_cycles_since_s       cn58xx;
67166    struct cvmx_tra_cycles_since_s       cn58xxp1;
67167} cvmx_tra_cycles_since_t;
67168
67169
67170/**
67171 * cvmx_tra_cycles_since1
67172 *
67173 * TRA_CYCLES_SINCE1 = Trace Buffer Cycles Since Last Write, Read/Write pointers
67174 *
67175 * Description:
67176 */
67177typedef union
67178{
67179    uint64_t u64;
67180    struct cvmx_tra_cycles_since1_s
67181    {
67182#if __BYTE_ORDER == __BIG_ENDIAN
67183        uint64_t cycles                  : 40;      /**< Cycles since the last entry was written */
67184        uint64_t reserved_22_23          : 2;
67185        uint64_t rptr                    : 10;      /**< Read pointer */
67186        uint64_t reserved_10_11          : 2;
67187        uint64_t wptr                    : 10;      /**< Write pointer */
67188#else
67189        uint64_t wptr                    : 10;
67190        uint64_t reserved_10_11          : 2;
67191        uint64_t rptr                    : 10;
67192        uint64_t reserved_22_23          : 2;
67193        uint64_t cycles                  : 40;
67194#endif
67195    } s;
67196    struct cvmx_tra_cycles_since1_s      cn52xx;
67197    struct cvmx_tra_cycles_since1_s      cn52xxp1;
67198    struct cvmx_tra_cycles_since1_s      cn56xx;
67199    struct cvmx_tra_cycles_since1_s      cn56xxp1;
67200    struct cvmx_tra_cycles_since1_s      cn58xx;
67201    struct cvmx_tra_cycles_since1_s      cn58xxp1;
67202} cvmx_tra_cycles_since1_t;
67203
67204
67205/**
67206 * cvmx_tra_filt_adr_adr
67207 *
67208 * TRA_FILT_ADR_ADR = Trace Buffer Filter Address Address
67209 *
67210 * Description:
67211 */
67212typedef union
67213{
67214    uint64_t u64;
67215    struct cvmx_tra_filt_adr_adr_s
67216    {
67217#if __BYTE_ORDER == __BIG_ENDIAN
67218        uint64_t reserved_36_63          : 28;
67219        uint64_t adr                     : 36;      /**< Unmasked Address
67220                                                         The combination of TRA_FILT_ADR_ADR and
67221                                                         TRA_FILT_ADR_MSK is a masked address to
67222                                                         enable tracing of only those commands whose
67223                                                         masked address matches */
67224#else
67225        uint64_t adr                     : 36;
67226        uint64_t reserved_36_63          : 28;
67227#endif
67228    } s;
67229    struct cvmx_tra_filt_adr_adr_s       cn31xx;
67230    struct cvmx_tra_filt_adr_adr_s       cn38xx;
67231    struct cvmx_tra_filt_adr_adr_s       cn38xxp2;
67232    struct cvmx_tra_filt_adr_adr_s       cn52xx;
67233    struct cvmx_tra_filt_adr_adr_s       cn52xxp1;
67234    struct cvmx_tra_filt_adr_adr_s       cn56xx;
67235    struct cvmx_tra_filt_adr_adr_s       cn56xxp1;
67236    struct cvmx_tra_filt_adr_adr_s       cn58xx;
67237    struct cvmx_tra_filt_adr_adr_s       cn58xxp1;
67238} cvmx_tra_filt_adr_adr_t;
67239
67240
67241/**
67242 * cvmx_tra_filt_adr_msk
67243 *
67244 * TRA_FILT_ADR_MSK = Trace Buffer Filter Address Mask
67245 *
67246 * Description:
67247 */
67248typedef union
67249{
67250    uint64_t u64;
67251    struct cvmx_tra_filt_adr_msk_s
67252    {
67253#if __BYTE_ORDER == __BIG_ENDIAN
67254        uint64_t reserved_36_63          : 28;
67255        uint64_t adr                     : 36;      /**< Address Mask
67256                                                         The combination of TRA_FILT_ADR_ADR and
67257                                                         TRA_FILT_ADR_MSK is a masked address to
67258                                                         enable tracing of only those commands whose
67259                                                         masked address matches.  When a mask bit is not
67260                                                         set, the corresponding address bits are assumed
67261                                                         to match.  Also, note that IOBDMAs do not have
67262                                                         proper addresses, so when TRA_FILT_CMD[IOBDMA]
67263                                                         is set, TRA_FILT_ADR_MSK must be zero to
67264                                                         guarantee that any IOBDMAs enter the trace. */
67265#else
67266        uint64_t adr                     : 36;
67267        uint64_t reserved_36_63          : 28;
67268#endif
67269    } s;
67270    struct cvmx_tra_filt_adr_msk_s       cn31xx;
67271    struct cvmx_tra_filt_adr_msk_s       cn38xx;
67272    struct cvmx_tra_filt_adr_msk_s       cn38xxp2;
67273    struct cvmx_tra_filt_adr_msk_s       cn52xx;
67274    struct cvmx_tra_filt_adr_msk_s       cn52xxp1;
67275    struct cvmx_tra_filt_adr_msk_s       cn56xx;
67276    struct cvmx_tra_filt_adr_msk_s       cn56xxp1;
67277    struct cvmx_tra_filt_adr_msk_s       cn58xx;
67278    struct cvmx_tra_filt_adr_msk_s       cn58xxp1;
67279} cvmx_tra_filt_adr_msk_t;
67280
67281
67282/**
67283 * cvmx_tra_filt_cmd
67284 *
67285 * TRA_FILT_CMD = Trace Buffer Filter Command Mask
67286 *
67287 * Description:
67288 *
67289 * Notes:
67290 * Note that the trace buffer does not do proper IOBDMA address compares.  Thus, if IOBDMA is set, then
67291 * the address compare must be disabled (i.e. TRA_FILT_ADR_MSK set to zero) to guarantee that IOBDMAs
67292 * enter the trace.
67293 */
67294typedef union
67295{
67296    uint64_t u64;
67297    struct cvmx_tra_filt_cmd_s
67298    {
67299#if __BYTE_ORDER == __BIG_ENDIAN
67300        uint64_t reserved_17_63          : 47;
67301        uint64_t saa                     : 1;       /**< Enable SAA     tracing
67302                                                         0=disable, 1=enable */
67303        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
67304                                                         0=disable, 1=enable */
67305        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
67306                                                         0=disable, 1=enable */
67307        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
67308                                                         0=disable, 1=enable */
67309        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
67310                                                         0=disable, 1=enable */
67311        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
67312                                                         0=disable, 1=enable */
67313        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
67314                                                         0=disable, 1=enable */
67315        uint64_t stt                     : 1;       /**< Enable STT     tracing
67316                                                         0=disable, 1=enable */
67317        uint64_t stp                     : 1;       /**< Enable STP     tracing
67318                                                         0=disable, 1=enable */
67319        uint64_t stc                     : 1;       /**< Enable STC     tracing
67320                                                         0=disable, 1=enable */
67321        uint64_t stf                     : 1;       /**< Enable STF     tracing
67322                                                         0=disable, 1=enable */
67323        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
67324                                                         0=disable, 1=enable */
67325        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
67326                                                         0=disable, 1=enable */
67327        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
67328                                                         0=disable, 1=enable */
67329        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
67330                                                         0=disable, 1=enable */
67331        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
67332                                                         0=disable, 1=enable */
67333        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
67334                                                         0=disable, 1=enable */
67335#else
67336        uint64_t dwb                     : 1;
67337        uint64_t pl2                     : 1;
67338        uint64_t psl1                    : 1;
67339        uint64_t ldd                     : 1;
67340        uint64_t ldi                     : 1;
67341        uint64_t ldt                     : 1;
67342        uint64_t stf                     : 1;
67343        uint64_t stc                     : 1;
67344        uint64_t stp                     : 1;
67345        uint64_t stt                     : 1;
67346        uint64_t iobld8                  : 1;
67347        uint64_t iobld16                 : 1;
67348        uint64_t iobld32                 : 1;
67349        uint64_t iobld64                 : 1;
67350        uint64_t iobst                   : 1;
67351        uint64_t iobdma                  : 1;
67352        uint64_t saa                     : 1;
67353        uint64_t reserved_17_63          : 47;
67354#endif
67355    } s;
67356    struct cvmx_tra_filt_cmd_cn31xx
67357    {
67358#if __BYTE_ORDER == __BIG_ENDIAN
67359        uint64_t reserved_16_63          : 48;
67360        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
67361                                                         0=disable, 1=enable */
67362        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
67363                                                         0=disable, 1=enable */
67364        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
67365                                                         0=disable, 1=enable */
67366        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
67367                                                         0=disable, 1=enable */
67368        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
67369                                                         0=disable, 1=enable */
67370        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
67371                                                         0=disable, 1=enable */
67372        uint64_t stt                     : 1;       /**< Enable STT     tracing
67373                                                         0=disable, 1=enable */
67374        uint64_t stp                     : 1;       /**< Enable STP     tracing
67375                                                         0=disable, 1=enable */
67376        uint64_t stc                     : 1;       /**< Enable STC     tracing
67377                                                         0=disable, 1=enable */
67378        uint64_t stf                     : 1;       /**< Enable STF     tracing
67379                                                         0=disable, 1=enable */
67380        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
67381                                                         0=disable, 1=enable */
67382        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
67383                                                         0=disable, 1=enable */
67384        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
67385                                                         0=disable, 1=enable */
67386        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
67387                                                         0=disable, 1=enable */
67388        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
67389                                                         0=disable, 1=enable */
67390        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
67391                                                         0=disable, 1=enable */
67392#else
67393        uint64_t dwb                     : 1;
67394        uint64_t pl2                     : 1;
67395        uint64_t psl1                    : 1;
67396        uint64_t ldd                     : 1;
67397        uint64_t ldi                     : 1;
67398        uint64_t ldt                     : 1;
67399        uint64_t stf                     : 1;
67400        uint64_t stc                     : 1;
67401        uint64_t stp                     : 1;
67402        uint64_t stt                     : 1;
67403        uint64_t iobld8                  : 1;
67404        uint64_t iobld16                 : 1;
67405        uint64_t iobld32                 : 1;
67406        uint64_t iobld64                 : 1;
67407        uint64_t iobst                   : 1;
67408        uint64_t iobdma                  : 1;
67409        uint64_t reserved_16_63          : 48;
67410#endif
67411    } cn31xx;
67412    struct cvmx_tra_filt_cmd_cn31xx      cn38xx;
67413    struct cvmx_tra_filt_cmd_cn31xx      cn38xxp2;
67414    struct cvmx_tra_filt_cmd_s           cn52xx;
67415    struct cvmx_tra_filt_cmd_s           cn52xxp1;
67416    struct cvmx_tra_filt_cmd_s           cn56xx;
67417    struct cvmx_tra_filt_cmd_s           cn56xxp1;
67418    struct cvmx_tra_filt_cmd_s           cn58xx;
67419    struct cvmx_tra_filt_cmd_s           cn58xxp1;
67420} cvmx_tra_filt_cmd_t;
67421
67422
67423/**
67424 * cvmx_tra_filt_did
67425 *
67426 * TRA_FILT_DID = Trace Buffer Filter DestinationId Mask
67427 *
67428 * Description:
67429 */
67430typedef union
67431{
67432    uint64_t u64;
67433    struct cvmx_tra_filt_did_s
67434    {
67435#if __BYTE_ORDER == __BIG_ENDIAN
67436        uint64_t reserved_32_63          : 32;
67437        uint64_t illegal                 : 19;      /**< Illegal destinations */
67438        uint64_t pow                     : 1;       /**< Enable tracing of requests to POW
67439                                                         (get work, add work, status/memory/index
67440                                                         loads, NULLRd loads, CSR's) */
67441        uint64_t illegal2                : 3;       /**< Illegal destinations */
67442        uint64_t rng                     : 1;       /**< Enable tracing of requests to RNG
67443                                                         (loads/IOBDMA's are legal) */
67444        uint64_t zip                     : 1;       /**< Enable tracing of requests to ZIP
67445                                                         (doorbell stores are legal) */
67446        uint64_t dfa                     : 1;       /**< Enable tracing of requests to DFA
67447                                                         (CSR's and operations are legal) */
67448        uint64_t fpa                     : 1;       /**< Enable tracing of requests to FPA
67449                                                         (alloc's (loads/IOBDMA's), frees (stores) are legal) */
67450        uint64_t key                     : 1;       /**< Enable tracing of requests to KEY memory
67451                                                         (loads/IOBDMA's/stores are legal) */
67452        uint64_t pci                     : 1;       /**< Enable tracing of requests to PCI and RSL-type
67453                                                         CSR's (RSL CSR's, PCI bus operations, PCI
67454                                                         CSR's) */
67455        uint64_t illegal3                : 2;       /**< Illegal destinations */
67456        uint64_t mio                     : 1;       /**< Enable tracing of CIU and GPIO CSR's */
67457#else
67458        uint64_t mio                     : 1;
67459        uint64_t illegal3                : 2;
67460        uint64_t pci                     : 1;
67461        uint64_t key                     : 1;
67462        uint64_t fpa                     : 1;
67463        uint64_t dfa                     : 1;
67464        uint64_t zip                     : 1;
67465        uint64_t rng                     : 1;
67466        uint64_t illegal2                : 3;
67467        uint64_t pow                     : 1;
67468        uint64_t illegal                 : 19;
67469        uint64_t reserved_32_63          : 32;
67470#endif
67471    } s;
67472    struct cvmx_tra_filt_did_s           cn31xx;
67473    struct cvmx_tra_filt_did_s           cn38xx;
67474    struct cvmx_tra_filt_did_s           cn38xxp2;
67475    struct cvmx_tra_filt_did_s           cn52xx;
67476    struct cvmx_tra_filt_did_s           cn52xxp1;
67477    struct cvmx_tra_filt_did_s           cn56xx;
67478    struct cvmx_tra_filt_did_s           cn56xxp1;
67479    struct cvmx_tra_filt_did_s           cn58xx;
67480    struct cvmx_tra_filt_did_s           cn58xxp1;
67481} cvmx_tra_filt_did_t;
67482
67483
67484/**
67485 * cvmx_tra_filt_sid
67486 *
67487 * TRA_FILT_SID = Trace Buffer Filter SourceId Mask
67488 *
67489 * Description:
67490 */
67491typedef union
67492{
67493    uint64_t u64;
67494    struct cvmx_tra_filt_sid_s
67495    {
67496#if __BYTE_ORDER == __BIG_ENDIAN
67497        uint64_t reserved_20_63          : 44;
67498        uint64_t dwb                     : 1;       /**< Enable tracing of requests from the IOB DWB engine */
67499        uint64_t iobreq                  : 1;       /**< Enable tracing of requests from FPA,TIM,DFA,
67500                                                         PCI,ZIP,POW, and PKO (writes) */
67501        uint64_t pko                     : 1;       /**< Enable tracing of read requests from PKO */
67502        uint64_t pki                     : 1;       /**< Enable tracing of write requests from PIP/IPD */
67503        uint64_t pp                      : 16;      /**< Enable tracing from PP[N] with matching SourceID
67504                                                         0=disable, 1=enableper bit N where  0<=N<=15 */
67505#else
67506        uint64_t pp                      : 16;
67507        uint64_t pki                     : 1;
67508        uint64_t pko                     : 1;
67509        uint64_t iobreq                  : 1;
67510        uint64_t dwb                     : 1;
67511        uint64_t reserved_20_63          : 44;
67512#endif
67513    } s;
67514    struct cvmx_tra_filt_sid_s           cn31xx;
67515    struct cvmx_tra_filt_sid_s           cn38xx;
67516    struct cvmx_tra_filt_sid_s           cn38xxp2;
67517    struct cvmx_tra_filt_sid_s           cn52xx;
67518    struct cvmx_tra_filt_sid_s           cn52xxp1;
67519    struct cvmx_tra_filt_sid_s           cn56xx;
67520    struct cvmx_tra_filt_sid_s           cn56xxp1;
67521    struct cvmx_tra_filt_sid_s           cn58xx;
67522    struct cvmx_tra_filt_sid_s           cn58xxp1;
67523} cvmx_tra_filt_sid_t;
67524
67525
67526/**
67527 * cvmx_tra_int_status
67528 *
67529 * TRA_INT_STATUS = Trace Buffer Interrupt Status
67530 *
67531 * Description:
67532 *
67533 * Notes:
67534 * During a CSR write to this register, the write data is used as a mask to clear the selected status
67535 * bits (status'[3:0] = status[3:0] & ~write_data[3:0]).
67536 */
67537typedef union
67538{
67539    uint64_t u64;
67540    struct cvmx_tra_int_status_s
67541    {
67542#if __BYTE_ORDER == __BIG_ENDIAN
67543        uint64_t reserved_4_63           : 60;
67544        uint64_t mcd0_thr                : 1;       /**< MCD0 full threshold interrupt status
67545                                                         0=trace buffer did not generate MCD0 wire pulse
67546                                                         1=trace buffer did     generate MCD0 wire pulse
67547                                                           and prevents additional MCD0_THR MCD0 wire pulses */
67548        uint64_t mcd0_trg                : 1;       /**< MCD0 end trigger interrupt status
67549                                                         0=trace buffer did not generate interrupt
67550                                                         1=trace buffer did     generate interrupt
67551                                                           and prevents additional MCD0_TRG MCD0 wire pulses */
67552        uint64_t ciu_thr                 : 1;       /**< CIU full threshold interrupt status
67553                                                         0=trace buffer did not generate interrupt
67554                                                         1=trace buffer did     generate interrupt */
67555        uint64_t ciu_trg                 : 1;       /**< CIU end trigger interrupt status
67556                                                         0=trace buffer did not generate interrupt
67557                                                         1=trace buffer did     generate interrupt */
67558#else
67559        uint64_t ciu_trg                 : 1;
67560        uint64_t ciu_thr                 : 1;
67561        uint64_t mcd0_trg                : 1;
67562        uint64_t mcd0_thr                : 1;
67563        uint64_t reserved_4_63           : 60;
67564#endif
67565    } s;
67566    struct cvmx_tra_int_status_s         cn31xx;
67567    struct cvmx_tra_int_status_s         cn38xx;
67568    struct cvmx_tra_int_status_s         cn38xxp2;
67569    struct cvmx_tra_int_status_s         cn52xx;
67570    struct cvmx_tra_int_status_s         cn52xxp1;
67571    struct cvmx_tra_int_status_s         cn56xx;
67572    struct cvmx_tra_int_status_s         cn56xxp1;
67573    struct cvmx_tra_int_status_s         cn58xx;
67574    struct cvmx_tra_int_status_s         cn58xxp1;
67575} cvmx_tra_int_status_t;
67576
67577
67578/**
67579 * cvmx_tra_read_dat
67580 *
67581 * TRA_READ_DAT = Trace Buffer Read Data
67582 *
67583 * Description:
67584 *
67585 * Notes:
67586 * This CSR is a memory of 1024 entries.  When the trace was enabled, the read pointer was set to entry
67587 * 0 by hardware.  Each read to this address increments the read pointer.
67588 */
67589typedef union
67590{
67591    uint64_t u64;
67592    struct cvmx_tra_read_dat_s
67593    {
67594#if __BYTE_ORDER == __BIG_ENDIAN
67595        uint64_t data                    : 64;      /**< Trace buffer data for current entry */
67596#else
67597        uint64_t data                    : 64;
67598#endif
67599    } s;
67600    struct cvmx_tra_read_dat_s           cn31xx;
67601    struct cvmx_tra_read_dat_s           cn38xx;
67602    struct cvmx_tra_read_dat_s           cn38xxp2;
67603    struct cvmx_tra_read_dat_s           cn52xx;
67604    struct cvmx_tra_read_dat_s           cn52xxp1;
67605    struct cvmx_tra_read_dat_s           cn56xx;
67606    struct cvmx_tra_read_dat_s           cn56xxp1;
67607    struct cvmx_tra_read_dat_s           cn58xx;
67608    struct cvmx_tra_read_dat_s           cn58xxp1;
67609} cvmx_tra_read_dat_t;
67610
67611
67612/**
67613 * cvmx_tra_trig0_adr_adr
67614 *
67615 * TRA_TRIG0_ADR_ADR = Trace Buffer Filter Address Address
67616 *
67617 * Description:
67618 */
67619typedef union
67620{
67621    uint64_t u64;
67622    struct cvmx_tra_trig0_adr_adr_s
67623    {
67624#if __BYTE_ORDER == __BIG_ENDIAN
67625        uint64_t reserved_36_63          : 28;
67626        uint64_t adr                     : 36;      /**< Unmasked Address
67627                                                         The combination of TRA_TRIG0_ADR_ADR and
67628                                                         TRA_TRIG0_ADR_MSK is a masked address to
67629                                                         enable tracing of only those commands whose
67630                                                         masked address matches */
67631#else
67632        uint64_t adr                     : 36;
67633        uint64_t reserved_36_63          : 28;
67634#endif
67635    } s;
67636    struct cvmx_tra_trig0_adr_adr_s      cn31xx;
67637    struct cvmx_tra_trig0_adr_adr_s      cn38xx;
67638    struct cvmx_tra_trig0_adr_adr_s      cn38xxp2;
67639    struct cvmx_tra_trig0_adr_adr_s      cn52xx;
67640    struct cvmx_tra_trig0_adr_adr_s      cn52xxp1;
67641    struct cvmx_tra_trig0_adr_adr_s      cn56xx;
67642    struct cvmx_tra_trig0_adr_adr_s      cn56xxp1;
67643    struct cvmx_tra_trig0_adr_adr_s      cn58xx;
67644    struct cvmx_tra_trig0_adr_adr_s      cn58xxp1;
67645} cvmx_tra_trig0_adr_adr_t;
67646
67647
67648/**
67649 * cvmx_tra_trig0_adr_msk
67650 *
67651 * TRA_TRIG0_ADR_MSK = Trace Buffer Filter Address Mask
67652 *
67653 * Description:
67654 */
67655typedef union
67656{
67657    uint64_t u64;
67658    struct cvmx_tra_trig0_adr_msk_s
67659    {
67660#if __BYTE_ORDER == __BIG_ENDIAN
67661        uint64_t reserved_36_63          : 28;
67662        uint64_t adr                     : 36;      /**< Address Mask
67663                                                         The combination of TRA_TRIG0_ADR_ADR and
67664                                                         TRA_TRIG0_ADR_MSK is a masked address to
67665                                                         enable tracing of only those commands whose
67666                                                         masked address matches.  When a mask bit is not
67667                                                         set, the corresponding address bits are assumed
67668                                                         to match.  Also, note that IOBDMAs do not have
67669                                                         proper addresses, so when TRA_TRIG0_CMD[IOBDMA]
67670                                                         is set, TRA_FILT_TRIG0_MSK must be zero to
67671                                                         guarantee that any IOBDMAs are recognized as
67672                                                         triggers. */
67673#else
67674        uint64_t adr                     : 36;
67675        uint64_t reserved_36_63          : 28;
67676#endif
67677    } s;
67678    struct cvmx_tra_trig0_adr_msk_s      cn31xx;
67679    struct cvmx_tra_trig0_adr_msk_s      cn38xx;
67680    struct cvmx_tra_trig0_adr_msk_s      cn38xxp2;
67681    struct cvmx_tra_trig0_adr_msk_s      cn52xx;
67682    struct cvmx_tra_trig0_adr_msk_s      cn52xxp1;
67683    struct cvmx_tra_trig0_adr_msk_s      cn56xx;
67684    struct cvmx_tra_trig0_adr_msk_s      cn56xxp1;
67685    struct cvmx_tra_trig0_adr_msk_s      cn58xx;
67686    struct cvmx_tra_trig0_adr_msk_s      cn58xxp1;
67687} cvmx_tra_trig0_adr_msk_t;
67688
67689
67690/**
67691 * cvmx_tra_trig0_cmd
67692 *
67693 * TRA_TRIG0_CMD = Trace Buffer Filter Command Mask
67694 *
67695 * Description:
67696 *
67697 * Notes:
67698 * Note that the trace buffer does not do proper IOBDMA address compares.  Thus, if IOBDMA is set, then
67699 * the address compare must be disabled (i.e. TRA_TRIG0_ADR_MSK set to zero) to guarantee that IOBDMAs
67700 * are recognized as triggers.
67701 */
67702typedef union
67703{
67704    uint64_t u64;
67705    struct cvmx_tra_trig0_cmd_s
67706    {
67707#if __BYTE_ORDER == __BIG_ENDIAN
67708        uint64_t reserved_17_63          : 47;
67709        uint64_t saa                     : 1;       /**< Enable SAA     tracing
67710                                                         0=disable, 1=enable */
67711        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
67712                                                         0=disable, 1=enable */
67713        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
67714                                                         0=disable, 1=enable */
67715        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
67716                                                         0=disable, 1=enable */
67717        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
67718                                                         0=disable, 1=enable */
67719        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
67720                                                         0=disable, 1=enable */
67721        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
67722                                                         0=disable, 1=enable */
67723        uint64_t stt                     : 1;       /**< Enable STT     tracing
67724                                                         0=disable, 1=enable */
67725        uint64_t stp                     : 1;       /**< Enable STP     tracing
67726                                                         0=disable, 1=enable */
67727        uint64_t stc                     : 1;       /**< Enable STC     tracing
67728                                                         0=disable, 1=enable */
67729        uint64_t stf                     : 1;       /**< Enable STF     tracing
67730                                                         0=disable, 1=enable */
67731        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
67732                                                         0=disable, 1=enable */
67733        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
67734                                                         0=disable, 1=enable */
67735        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
67736                                                         0=disable, 1=enable */
67737        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
67738                                                         0=disable, 1=enable */
67739        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
67740                                                         0=disable, 1=enable */
67741        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
67742                                                         0=disable, 1=enable */
67743#else
67744        uint64_t dwb                     : 1;
67745        uint64_t pl2                     : 1;
67746        uint64_t psl1                    : 1;
67747        uint64_t ldd                     : 1;
67748        uint64_t ldi                     : 1;
67749        uint64_t ldt                     : 1;
67750        uint64_t stf                     : 1;
67751        uint64_t stc                     : 1;
67752        uint64_t stp                     : 1;
67753        uint64_t stt                     : 1;
67754        uint64_t iobld8                  : 1;
67755        uint64_t iobld16                 : 1;
67756        uint64_t iobld32                 : 1;
67757        uint64_t iobld64                 : 1;
67758        uint64_t iobst                   : 1;
67759        uint64_t iobdma                  : 1;
67760        uint64_t saa                     : 1;
67761        uint64_t reserved_17_63          : 47;
67762#endif
67763    } s;
67764    struct cvmx_tra_trig0_cmd_cn31xx
67765    {
67766#if __BYTE_ORDER == __BIG_ENDIAN
67767        uint64_t reserved_16_63          : 48;
67768        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
67769                                                         0=disable, 1=enable */
67770        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
67771                                                         0=disable, 1=enable */
67772        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
67773                                                         0=disable, 1=enable */
67774        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
67775                                                         0=disable, 1=enable */
67776        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
67777                                                         0=disable, 1=enable */
67778        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
67779                                                         0=disable, 1=enable */
67780        uint64_t stt                     : 1;       /**< Enable STT     tracing
67781                                                         0=disable, 1=enable */
67782        uint64_t stp                     : 1;       /**< Enable STP     tracing
67783                                                         0=disable, 1=enable */
67784        uint64_t stc                     : 1;       /**< Enable STC     tracing
67785                                                         0=disable, 1=enable */
67786        uint64_t stf                     : 1;       /**< Enable STF     tracing
67787                                                         0=disable, 1=enable */
67788        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
67789                                                         0=disable, 1=enable */
67790        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
67791                                                         0=disable, 1=enable */
67792        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
67793                                                         0=disable, 1=enable */
67794        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
67795                                                         0=disable, 1=enable */
67796        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
67797                                                         0=disable, 1=enable */
67798        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
67799                                                         0=disable, 1=enable */
67800#else
67801        uint64_t dwb                     : 1;
67802        uint64_t pl2                     : 1;
67803        uint64_t psl1                    : 1;
67804        uint64_t ldd                     : 1;
67805        uint64_t ldi                     : 1;
67806        uint64_t ldt                     : 1;
67807        uint64_t stf                     : 1;
67808        uint64_t stc                     : 1;
67809        uint64_t stp                     : 1;
67810        uint64_t stt                     : 1;
67811        uint64_t iobld8                  : 1;
67812        uint64_t iobld16                 : 1;
67813        uint64_t iobld32                 : 1;
67814        uint64_t iobld64                 : 1;
67815        uint64_t iobst                   : 1;
67816        uint64_t iobdma                  : 1;
67817        uint64_t reserved_16_63          : 48;
67818#endif
67819    } cn31xx;
67820    struct cvmx_tra_trig0_cmd_cn31xx     cn38xx;
67821    struct cvmx_tra_trig0_cmd_cn31xx     cn38xxp2;
67822    struct cvmx_tra_trig0_cmd_s          cn52xx;
67823    struct cvmx_tra_trig0_cmd_s          cn52xxp1;
67824    struct cvmx_tra_trig0_cmd_s          cn56xx;
67825    struct cvmx_tra_trig0_cmd_s          cn56xxp1;
67826    struct cvmx_tra_trig0_cmd_s          cn58xx;
67827    struct cvmx_tra_trig0_cmd_s          cn58xxp1;
67828} cvmx_tra_trig0_cmd_t;
67829
67830
67831/**
67832 * cvmx_tra_trig0_did
67833 *
67834 * TRA_TRIG0_DID = Trace Buffer Filter DestinationId Mask
67835 *
67836 * Description:
67837 */
67838typedef union
67839{
67840    uint64_t u64;
67841    struct cvmx_tra_trig0_did_s
67842    {
67843#if __BYTE_ORDER == __BIG_ENDIAN
67844        uint64_t reserved_32_63          : 32;
67845        uint64_t illegal                 : 19;      /**< Illegal destinations */
67846        uint64_t pow                     : 1;       /**< Enable triggering on requests to POW
67847                                                         (get work, add work, status/memory/index
67848                                                         loads, NULLRd loads, CSR's) */
67849        uint64_t illegal2                : 3;       /**< Illegal destinations */
67850        uint64_t rng                     : 1;       /**< Enable triggering on requests to RNG
67851                                                         (loads/IOBDMA's are legal) */
67852        uint64_t zip                     : 1;       /**< Enable triggering on requests to ZIP
67853                                                         (doorbell stores are legal) */
67854        uint64_t dfa                     : 1;       /**< Enable triggering on requests to DFA
67855                                                         (CSR's and operations are legal) */
67856        uint64_t fpa                     : 1;       /**< Enable triggering on requests to FPA
67857                                                         (alloc's (loads/IOBDMA's), frees (stores) are legal) */
67858        uint64_t key                     : 1;       /**< Enable triggering on requests to KEY memory
67859                                                         (loads/IOBDMA's/stores are legal) */
67860        uint64_t pci                     : 1;       /**< Enable triggering on requests to PCI and RSL-type
67861                                                         CSR's (RSL CSR's, PCI bus operations, PCI
67862                                                         CSR's) */
67863        uint64_t illegal3                : 2;       /**< Illegal destinations */
67864        uint64_t mio                     : 1;       /**< Enable triggering on CIU and GPIO CSR's */
67865#else
67866        uint64_t mio                     : 1;
67867        uint64_t illegal3                : 2;
67868        uint64_t pci                     : 1;
67869        uint64_t key                     : 1;
67870        uint64_t fpa                     : 1;
67871        uint64_t dfa                     : 1;
67872        uint64_t zip                     : 1;
67873        uint64_t rng                     : 1;
67874        uint64_t illegal2                : 3;
67875        uint64_t pow                     : 1;
67876        uint64_t illegal                 : 19;
67877        uint64_t reserved_32_63          : 32;
67878#endif
67879    } s;
67880    struct cvmx_tra_trig0_did_s          cn31xx;
67881    struct cvmx_tra_trig0_did_s          cn38xx;
67882    struct cvmx_tra_trig0_did_s          cn38xxp2;
67883    struct cvmx_tra_trig0_did_s          cn52xx;
67884    struct cvmx_tra_trig0_did_s          cn52xxp1;
67885    struct cvmx_tra_trig0_did_s          cn56xx;
67886    struct cvmx_tra_trig0_did_s          cn56xxp1;
67887    struct cvmx_tra_trig0_did_s          cn58xx;
67888    struct cvmx_tra_trig0_did_s          cn58xxp1;
67889} cvmx_tra_trig0_did_t;
67890
67891
67892/**
67893 * cvmx_tra_trig0_sid
67894 *
67895 * TRA_TRIG0_SID = Trace Buffer Filter SourceId Mask
67896 *
67897 * Description:
67898 */
67899typedef union
67900{
67901    uint64_t u64;
67902    struct cvmx_tra_trig0_sid_s
67903    {
67904#if __BYTE_ORDER == __BIG_ENDIAN
67905        uint64_t reserved_20_63          : 44;
67906        uint64_t dwb                     : 1;       /**< Enable triggering on requests from the IOB DWB engine */
67907        uint64_t iobreq                  : 1;       /**< Enable triggering on requests from FPA,TIM,DFA,
67908                                                         PCI,ZIP,POW, and PKO (writes) */
67909        uint64_t pko                     : 1;       /**< Enable triggering on read requests from PKO */
67910        uint64_t pki                     : 1;       /**< Enable triggering on write requests from PIP/IPD */
67911        uint64_t pp                      : 16;      /**< Enable triggering from PP[N] with matching SourceID
67912                                                         0=disable, 1=enableper bit N where  0<=N<=15 */
67913#else
67914        uint64_t pp                      : 16;
67915        uint64_t pki                     : 1;
67916        uint64_t pko                     : 1;
67917        uint64_t iobreq                  : 1;
67918        uint64_t dwb                     : 1;
67919        uint64_t reserved_20_63          : 44;
67920#endif
67921    } s;
67922    struct cvmx_tra_trig0_sid_s          cn31xx;
67923    struct cvmx_tra_trig0_sid_s          cn38xx;
67924    struct cvmx_tra_trig0_sid_s          cn38xxp2;
67925    struct cvmx_tra_trig0_sid_s          cn52xx;
67926    struct cvmx_tra_trig0_sid_s          cn52xxp1;
67927    struct cvmx_tra_trig0_sid_s          cn56xx;
67928    struct cvmx_tra_trig0_sid_s          cn56xxp1;
67929    struct cvmx_tra_trig0_sid_s          cn58xx;
67930    struct cvmx_tra_trig0_sid_s          cn58xxp1;
67931} cvmx_tra_trig0_sid_t;
67932
67933
67934/**
67935 * cvmx_tra_trig1_adr_adr
67936 *
67937 * TRA_TRIG1_ADR_ADR = Trace Buffer Filter Address Address
67938 *
67939 * Description:
67940 */
67941typedef union
67942{
67943    uint64_t u64;
67944    struct cvmx_tra_trig1_adr_adr_s
67945    {
67946#if __BYTE_ORDER == __BIG_ENDIAN
67947        uint64_t reserved_36_63          : 28;
67948        uint64_t adr                     : 36;      /**< Unmasked Address
67949                                                         The combination of TRA_TRIG1_ADR_ADR and
67950                                                         TRA_TRIG1_ADR_MSK is a masked address to
67951                                                         enable tracing of only those commands whose
67952                                                         masked address matches */
67953#else
67954        uint64_t adr                     : 36;
67955        uint64_t reserved_36_63          : 28;
67956#endif
67957    } s;
67958    struct cvmx_tra_trig1_adr_adr_s      cn31xx;
67959    struct cvmx_tra_trig1_adr_adr_s      cn38xx;
67960    struct cvmx_tra_trig1_adr_adr_s      cn38xxp2;
67961    struct cvmx_tra_trig1_adr_adr_s      cn52xx;
67962    struct cvmx_tra_trig1_adr_adr_s      cn52xxp1;
67963    struct cvmx_tra_trig1_adr_adr_s      cn56xx;
67964    struct cvmx_tra_trig1_adr_adr_s      cn56xxp1;
67965    struct cvmx_tra_trig1_adr_adr_s      cn58xx;
67966    struct cvmx_tra_trig1_adr_adr_s      cn58xxp1;
67967} cvmx_tra_trig1_adr_adr_t;
67968
67969
67970/**
67971 * cvmx_tra_trig1_adr_msk
67972 *
67973 * TRA_TRIG1_ADR_MSK = Trace Buffer Filter Address Mask
67974 *
67975 * Description:
67976 */
67977typedef union
67978{
67979    uint64_t u64;
67980    struct cvmx_tra_trig1_adr_msk_s
67981    {
67982#if __BYTE_ORDER == __BIG_ENDIAN
67983        uint64_t reserved_36_63          : 28;
67984        uint64_t adr                     : 36;      /**< Address Mask
67985                                                         The combination of TRA_TRIG1_ADR_ADR and
67986                                                         TRA_TRIG1_ADR_MSK is a masked address to
67987                                                         enable tracing of only those commands whose
67988                                                         masked address matches.  When a mask bit is not
67989                                                         set, the corresponding address bits are assumed
67990                                                         to match.  Also, note that IOBDMAs do not have
67991                                                         proper addresses, so when TRA_TRIG1_CMD[IOBDMA]
67992                                                         is set, TRA_FILT_TRIG1_MSK must be zero to
67993                                                         guarantee that any IOBDMAs are recognized as
67994                                                         triggers. */
67995#else
67996        uint64_t adr                     : 36;
67997        uint64_t reserved_36_63          : 28;
67998#endif
67999    } s;
68000    struct cvmx_tra_trig1_adr_msk_s      cn31xx;
68001    struct cvmx_tra_trig1_adr_msk_s      cn38xx;
68002    struct cvmx_tra_trig1_adr_msk_s      cn38xxp2;
68003    struct cvmx_tra_trig1_adr_msk_s      cn52xx;
68004    struct cvmx_tra_trig1_adr_msk_s      cn52xxp1;
68005    struct cvmx_tra_trig1_adr_msk_s      cn56xx;
68006    struct cvmx_tra_trig1_adr_msk_s      cn56xxp1;
68007    struct cvmx_tra_trig1_adr_msk_s      cn58xx;
68008    struct cvmx_tra_trig1_adr_msk_s      cn58xxp1;
68009} cvmx_tra_trig1_adr_msk_t;
68010
68011
68012/**
68013 * cvmx_tra_trig1_cmd
68014 *
68015 * TRA_TRIG1_CMD = Trace Buffer Filter Command Mask
68016 *
68017 * Description:
68018 *
68019 * Notes:
68020 * Note that the trace buffer does not do proper IOBDMA address compares.  Thus, if IOBDMA is set, then
68021 * the address compare must be disabled (i.e. TRA_TRIG1_ADR_MSK set to zero) to guarantee that IOBDMAs
68022 * are recognized as triggers.
68023 */
68024typedef union
68025{
68026    uint64_t u64;
68027    struct cvmx_tra_trig1_cmd_s
68028    {
68029#if __BYTE_ORDER == __BIG_ENDIAN
68030        uint64_t reserved_17_63          : 47;
68031        uint64_t saa                     : 1;       /**< Enable SAA     tracing
68032                                                         0=disable, 1=enable */
68033        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
68034                                                         0=disable, 1=enable */
68035        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
68036                                                         0=disable, 1=enable */
68037        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
68038                                                         0=disable, 1=enable */
68039        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
68040                                                         0=disable, 1=enable */
68041        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
68042                                                         0=disable, 1=enable */
68043        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
68044                                                         0=disable, 1=enable */
68045        uint64_t stt                     : 1;       /**< Enable STT     tracing
68046                                                         0=disable, 1=enable */
68047        uint64_t stp                     : 1;       /**< Enable STP     tracing
68048                                                         0=disable, 1=enable */
68049        uint64_t stc                     : 1;       /**< Enable STC     tracing
68050                                                         0=disable, 1=enable */
68051        uint64_t stf                     : 1;       /**< Enable STF     tracing
68052                                                         0=disable, 1=enable */
68053        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
68054                                                         0=disable, 1=enable */
68055        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
68056                                                         0=disable, 1=enable */
68057        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
68058                                                         0=disable, 1=enable */
68059        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
68060                                                         0=disable, 1=enable */
68061        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
68062                                                         0=disable, 1=enable */
68063        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
68064                                                         0=disable, 1=enable */
68065#else
68066        uint64_t dwb                     : 1;
68067        uint64_t pl2                     : 1;
68068        uint64_t psl1                    : 1;
68069        uint64_t ldd                     : 1;
68070        uint64_t ldi                     : 1;
68071        uint64_t ldt                     : 1;
68072        uint64_t stf                     : 1;
68073        uint64_t stc                     : 1;
68074        uint64_t stp                     : 1;
68075        uint64_t stt                     : 1;
68076        uint64_t iobld8                  : 1;
68077        uint64_t iobld16                 : 1;
68078        uint64_t iobld32                 : 1;
68079        uint64_t iobld64                 : 1;
68080        uint64_t iobst                   : 1;
68081        uint64_t iobdma                  : 1;
68082        uint64_t saa                     : 1;
68083        uint64_t reserved_17_63          : 47;
68084#endif
68085    } s;
68086    struct cvmx_tra_trig1_cmd_cn31xx
68087    {
68088#if __BYTE_ORDER == __BIG_ENDIAN
68089        uint64_t reserved_16_63          : 48;
68090        uint64_t iobdma                  : 1;       /**< Enable IOBDMA  tracing
68091                                                         0=disable, 1=enable */
68092        uint64_t iobst                   : 1;       /**< Enable IOBST   tracing
68093                                                         0=disable, 1=enable */
68094        uint64_t iobld64                 : 1;       /**< Enable IOBLD64 tracing
68095                                                         0=disable, 1=enable */
68096        uint64_t iobld32                 : 1;       /**< Enable IOBLD32 tracing
68097                                                         0=disable, 1=enable */
68098        uint64_t iobld16                 : 1;       /**< Enable IOBLD16 tracing
68099                                                         0=disable, 1=enable */
68100        uint64_t iobld8                  : 1;       /**< Enable IOBLD8  tracing
68101                                                         0=disable, 1=enable */
68102        uint64_t stt                     : 1;       /**< Enable STT     tracing
68103                                                         0=disable, 1=enable */
68104        uint64_t stp                     : 1;       /**< Enable STP     tracing
68105                                                         0=disable, 1=enable */
68106        uint64_t stc                     : 1;       /**< Enable STC     tracing
68107                                                         0=disable, 1=enable */
68108        uint64_t stf                     : 1;       /**< Enable STF     tracing
68109                                                         0=disable, 1=enable */
68110        uint64_t ldt                     : 1;       /**< Enable LDT     tracing
68111                                                         0=disable, 1=enable */
68112        uint64_t ldi                     : 1;       /**< Enable LDI     tracing
68113                                                         0=disable, 1=enable */
68114        uint64_t ldd                     : 1;       /**< Enable LDD     tracing
68115                                                         0=disable, 1=enable */
68116        uint64_t psl1                    : 1;       /**< Enable PSL1    tracing
68117                                                         0=disable, 1=enable */
68118        uint64_t pl2                     : 1;       /**< Enable PL2     tracing
68119                                                         0=disable, 1=enable */
68120        uint64_t dwb                     : 1;       /**< Enable DWB     tracing
68121                                                         0=disable, 1=enable */
68122#else
68123        uint64_t dwb                     : 1;
68124        uint64_t pl2                     : 1;
68125        uint64_t psl1                    : 1;
68126        uint64_t ldd                     : 1;
68127        uint64_t ldi                     : 1;
68128        uint64_t ldt                     : 1;
68129        uint64_t stf                     : 1;
68130        uint64_t stc                     : 1;
68131        uint64_t stp                     : 1;
68132        uint64_t stt                     : 1;
68133        uint64_t iobld8                  : 1;
68134        uint64_t iobld16                 : 1;
68135        uint64_t iobld32                 : 1;
68136        uint64_t iobld64                 : 1;
68137        uint64_t iobst                   : 1;
68138        uint64_t iobdma                  : 1;
68139        uint64_t reserved_16_63          : 48;
68140#endif
68141    } cn31xx;
68142    struct cvmx_tra_trig1_cmd_cn31xx     cn38xx;
68143    struct cvmx_tra_trig1_cmd_cn31xx     cn38xxp2;
68144    struct cvmx_tra_trig1_cmd_s          cn52xx;
68145    struct cvmx_tra_trig1_cmd_s          cn52xxp1;
68146    struct cvmx_tra_trig1_cmd_s          cn56xx;
68147    struct cvmx_tra_trig1_cmd_s          cn56xxp1;
68148    struct cvmx_tra_trig1_cmd_s          cn58xx;
68149    struct cvmx_tra_trig1_cmd_s          cn58xxp1;
68150} cvmx_tra_trig1_cmd_t;
68151
68152
68153/**
68154 * cvmx_tra_trig1_did
68155 *
68156 * TRA_TRIG1_DID = Trace Buffer Filter DestinationId Mask
68157 *
68158 * Description:
68159 */
68160typedef union
68161{
68162    uint64_t u64;
68163    struct cvmx_tra_trig1_did_s
68164    {
68165#if __BYTE_ORDER == __BIG_ENDIAN
68166        uint64_t reserved_32_63          : 32;
68167        uint64_t illegal                 : 19;      /**< Illegal destinations */
68168        uint64_t pow                     : 1;       /**< Enable triggering on requests to POW
68169                                                         (get work, add work, status/memory/index
68170                                                         loads, NULLRd loads, CSR's) */
68171        uint64_t illegal2                : 3;       /**< Illegal destinations */
68172        uint64_t rng                     : 1;       /**< Enable triggering on requests to RNG
68173                                                         (loads/IOBDMA's are legal) */
68174        uint64_t zip                     : 1;       /**< Enable triggering on requests to ZIP
68175                                                         (doorbell stores are legal) */
68176        uint64_t dfa                     : 1;       /**< Enable triggering on requests to DFA
68177                                                         (CSR's and operations are legal) */
68178        uint64_t fpa                     : 1;       /**< Enable triggering on requests to FPA
68179                                                         (alloc's (loads/IOBDMA's), frees (stores) are legal) */
68180        uint64_t key                     : 1;       /**< Enable triggering on requests to KEY memory
68181                                                         (loads/IOBDMA's/stores are legal) */
68182        uint64_t pci                     : 1;       /**< Enable triggering on requests to PCI and RSL-type
68183                                                         CSR's (RSL CSR's, PCI bus operations, PCI
68184                                                         CSR's) */
68185        uint64_t illegal3                : 2;       /**< Illegal destinations */
68186        uint64_t mio                     : 1;       /**< Enable triggering on CIU and GPIO CSR's */
68187#else
68188        uint64_t mio                     : 1;
68189        uint64_t illegal3                : 2;
68190        uint64_t pci                     : 1;
68191        uint64_t key                     : 1;
68192        uint64_t fpa                     : 1;
68193        uint64_t dfa                     : 1;
68194        uint64_t zip                     : 1;
68195        uint64_t rng                     : 1;
68196        uint64_t illegal2                : 3;
68197        uint64_t pow                     : 1;
68198        uint64_t illegal                 : 19;
68199        uint64_t reserved_32_63          : 32;
68200#endif
68201    } s;
68202    struct cvmx_tra_trig1_did_s          cn31xx;
68203    struct cvmx_tra_trig1_did_s          cn38xx;
68204    struct cvmx_tra_trig1_did_s          cn38xxp2;
68205    struct cvmx_tra_trig1_did_s          cn52xx;
68206    struct cvmx_tra_trig1_did_s          cn52xxp1;
68207    struct cvmx_tra_trig1_did_s          cn56xx;
68208    struct cvmx_tra_trig1_did_s          cn56xxp1;
68209    struct cvmx_tra_trig1_did_s          cn58xx;
68210    struct cvmx_tra_trig1_did_s          cn58xxp1;
68211} cvmx_tra_trig1_did_t;
68212
68213
68214/**
68215 * cvmx_tra_trig1_sid
68216 *
68217 * TRA_TRIG1_SID = Trace Buffer Filter SourceId Mask
68218 *
68219 * Description:
68220 */
68221typedef union
68222{
68223    uint64_t u64;
68224    struct cvmx_tra_trig1_sid_s
68225    {
68226#if __BYTE_ORDER == __BIG_ENDIAN
68227        uint64_t reserved_20_63          : 44;
68228        uint64_t dwb                     : 1;       /**< Enable triggering on requests from the IOB DWB engine */
68229        uint64_t iobreq                  : 1;       /**< Enable triggering on requests from FPA,TIM,DFA,
68230                                                         PCI,ZIP,POW, and PKO (writes) */
68231        uint64_t pko                     : 1;       /**< Enable triggering on read requests from PKO */
68232        uint64_t pki                     : 1;       /**< Enable triggering on write requests from PIP/IPD */
68233        uint64_t pp                      : 16;      /**< Enable trigering from PP[N] with matching SourceID
68234                                                         0=disable, 1=enableper bit N where  0<=N<=15 */
68235#else
68236        uint64_t pp                      : 16;
68237        uint64_t pki                     : 1;
68238        uint64_t pko                     : 1;
68239        uint64_t iobreq                  : 1;
68240        uint64_t dwb                     : 1;
68241        uint64_t reserved_20_63          : 44;
68242#endif
68243    } s;
68244    struct cvmx_tra_trig1_sid_s          cn31xx;
68245    struct cvmx_tra_trig1_sid_s          cn38xx;
68246    struct cvmx_tra_trig1_sid_s          cn38xxp2;
68247    struct cvmx_tra_trig1_sid_s          cn52xx;
68248    struct cvmx_tra_trig1_sid_s          cn52xxp1;
68249    struct cvmx_tra_trig1_sid_s          cn56xx;
68250    struct cvmx_tra_trig1_sid_s          cn56xxp1;
68251    struct cvmx_tra_trig1_sid_s          cn58xx;
68252    struct cvmx_tra_trig1_sid_s          cn58xxp1;
68253} cvmx_tra_trig1_sid_t;
68254
68255
68256/**
68257 * cvmx_usbc#_daint
68258 *
68259 * Device All Endpoints Interrupt Register (DAINT)
68260 *
68261 * When a significant event occurs on an endpoint, a Device All Endpoints Interrupt register
68262 * interrupts the application using the Device OUT Endpoints Interrupt bit or Device IN Endpoints
68263 * Interrupt bit of the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt, respectively).
68264 * There is one interrupt bit per endpoint, up to a maximum of 16 bits for OUT endpoints and 16
68265 * bits for IN endpoints. For a bidirectional endpoint, the corresponding IN and OUT interrupt
68266 * bits are used. Bits in this register are set and cleared when the application sets and clears
68267 * bits in the corresponding Device Endpoint-n Interrupt register (DIEPINTn/DOEPINTn).
68268 */
68269typedef union
68270{
68271    uint32_t u32;
68272    struct cvmx_usbcx_daint_s
68273    {
68274#if __BYTE_ORDER == __BIG_ENDIAN
68275        uint32_t outepint                : 16;      /**< OUT Endpoint Interrupt Bits (OutEPInt)
68276                                                         One bit per OUT endpoint:
68277                                                         Bit 16 for OUT endpoint 0, bit 31 for OUT endpoint 15 */
68278        uint32_t inepint                 : 16;      /**< IN Endpoint Interrupt Bits (InEpInt)
68279                                                         One bit per IN Endpoint:
68280                                                         Bit 0 for IN endpoint 0, bit 15 for endpoint 15 */
68281#else
68282        uint32_t inepint                 : 16;
68283        uint32_t outepint                : 16;
68284#endif
68285    } s;
68286    struct cvmx_usbcx_daint_s            cn30xx;
68287    struct cvmx_usbcx_daint_s            cn31xx;
68288    struct cvmx_usbcx_daint_s            cn50xx;
68289    struct cvmx_usbcx_daint_s            cn52xx;
68290    struct cvmx_usbcx_daint_s            cn52xxp1;
68291    struct cvmx_usbcx_daint_s            cn56xx;
68292    struct cvmx_usbcx_daint_s            cn56xxp1;
68293} cvmx_usbcx_daint_t;
68294
68295
68296/**
68297 * cvmx_usbc#_daintmsk
68298 *
68299 * Device All Endpoints Interrupt Mask Register (DAINTMSK)
68300 *
68301 * The Device Endpoint Interrupt Mask register works with the Device Endpoint Interrupt register
68302 * to interrupt the application when an event occurs on a device endpoint. However, the Device
68303 * All Endpoints Interrupt (DAINT) register bit corresponding to that interrupt will still be set.
68304 * Mask Interrupt: 1'b0 Unmask Interrupt: 1'b1
68305 */
68306typedef union
68307{
68308    uint32_t u32;
68309    struct cvmx_usbcx_daintmsk_s
68310    {
68311#if __BYTE_ORDER == __BIG_ENDIAN
68312        uint32_t outepmsk                : 16;      /**< OUT EP Interrupt Mask Bits (OutEpMsk)
68313                                                         One per OUT Endpoint:
68314                                                         Bit 16 for OUT EP 0, bit 31 for OUT EP 15 */
68315        uint32_t inepmsk                 : 16;      /**< IN EP Interrupt Mask Bits (InEpMsk)
68316                                                         One bit per IN Endpoint:
68317                                                         Bit 0 for IN EP 0, bit 15 for IN EP 15 */
68318#else
68319        uint32_t inepmsk                 : 16;
68320        uint32_t outepmsk                : 16;
68321#endif
68322    } s;
68323    struct cvmx_usbcx_daintmsk_s         cn30xx;
68324    struct cvmx_usbcx_daintmsk_s         cn31xx;
68325    struct cvmx_usbcx_daintmsk_s         cn50xx;
68326    struct cvmx_usbcx_daintmsk_s         cn52xx;
68327    struct cvmx_usbcx_daintmsk_s         cn52xxp1;
68328    struct cvmx_usbcx_daintmsk_s         cn56xx;
68329    struct cvmx_usbcx_daintmsk_s         cn56xxp1;
68330} cvmx_usbcx_daintmsk_t;
68331
68332
68333/**
68334 * cvmx_usbc#_dcfg
68335 *
68336 * Device Configuration Register (DCFG)
68337 *
68338 * This register configures the core in Device mode after power-on or after certain control
68339 * commands or enumeration. Do not make changes to this register after initial programming.
68340 */
68341typedef union
68342{
68343    uint32_t u32;
68344    struct cvmx_usbcx_dcfg_s
68345    {
68346#if __BYTE_ORDER == __BIG_ENDIAN
68347        uint32_t reserved_23_31          : 9;
68348        uint32_t epmiscnt                : 5;       /**< IN Endpoint Mismatch Count (EPMisCnt)
68349                                                         The application programs this filed with a count that determines
68350                                                         when the core generates an Endpoint Mismatch interrupt
68351                                                         (GINTSTS.EPMis). The core loads this value into an internal
68352                                                         counter and decrements it. The counter is reloaded whenever
68353                                                         there is a match or when the counter expires. The width of this
68354                                                         counter depends on the depth of the Token Queue. */
68355        uint32_t reserved_13_17          : 5;
68356        uint32_t perfrint                : 2;       /**< Periodic Frame Interval (PerFrInt)
68357                                                         Indicates the time within a (micro)frame at which the application
68358                                                         must be notified using the End Of Periodic Frame Interrupt. This
68359                                                         can be used to determine if all the isochronous traffic for that
68360                                                         (micro)frame is complete.
68361                                                         * 2'b00: 80% of the (micro)frame interval
68362                                                         * 2'b01: 85%
68363                                                         * 2'b10: 90%
68364                                                         * 2'b11: 95% */
68365        uint32_t devaddr                 : 7;       /**< Device Address (DevAddr)
68366                                                         The application must program this field after every SetAddress
68367                                                         control command. */
68368        uint32_t reserved_3_3            : 1;
68369        uint32_t nzstsouthshk            : 1;       /**< Non-Zero-Length Status OUT Handshake (NZStsOUTHShk)
68370                                                         The application can use this field to select the handshake the
68371                                                         core sends on receiving a nonzero-length data packet during
68372                                                         the OUT transaction of a control transfer's Status stage.
68373                                                         * 1'b1: Send a STALL handshake on a nonzero-length status
68374                                                                 OUT transaction and do not send the received OUT packet to
68375                                                                 the application.
68376                                                         * 1'b0: Send the received OUT packet to the application (zero-
68377                                                                 length or nonzero-length) and send a handshake based on
68378                                                                 the NAK and STALL bits for the endpoint in the Device
68379                                                                 Endpoint Control register. */
68380        uint32_t devspd                  : 2;       /**< Device Speed (DevSpd)
68381                                                         Indicates the speed at which the application requires the core to
68382                                                         enumerate, or the maximum speed the application can support.
68383                                                         However, the actual bus speed is determined only after the
68384                                                         chirp sequence is completed, and is based on the speed of the
68385                                                         USB host to which the core is connected. See "Device
68386                                                         Initialization" on page 249 for details.
68387                                                         * 2'b00: High speed (USB 2.0 PHY clock is 30 MHz or 60 MHz)
68388                                                         * 2'b01: Full speed (USB 2.0 PHY clock is 30 MHz or 60 MHz)
68389                                                         * 2'b10: Low speed (USB 1.1 transceiver clock is 6 MHz). If
68390                                                                  you select 6 MHz LS mode, you must do a soft reset.
68391                                                         * 2'b11: Full speed (USB 1.1 transceiver clock is 48 MHz) */
68392#else
68393        uint32_t devspd                  : 2;
68394        uint32_t nzstsouthshk            : 1;
68395        uint32_t reserved_3_3            : 1;
68396        uint32_t devaddr                 : 7;
68397        uint32_t perfrint                : 2;
68398        uint32_t reserved_13_17          : 5;
68399        uint32_t epmiscnt                : 5;
68400        uint32_t reserved_23_31          : 9;
68401#endif
68402    } s;
68403    struct cvmx_usbcx_dcfg_s             cn30xx;
68404    struct cvmx_usbcx_dcfg_s             cn31xx;
68405    struct cvmx_usbcx_dcfg_s             cn50xx;
68406    struct cvmx_usbcx_dcfg_s             cn52xx;
68407    struct cvmx_usbcx_dcfg_s             cn52xxp1;
68408    struct cvmx_usbcx_dcfg_s             cn56xx;
68409    struct cvmx_usbcx_dcfg_s             cn56xxp1;
68410} cvmx_usbcx_dcfg_t;
68411
68412
68413/**
68414 * cvmx_usbc#_dctl
68415 *
68416 * Device Control Register (DCTL)
68417 *
68418 */
68419typedef union
68420{
68421    uint32_t u32;
68422    struct cvmx_usbcx_dctl_s
68423    {
68424#if __BYTE_ORDER == __BIG_ENDIAN
68425        uint32_t reserved_12_31          : 20;
68426        uint32_t pwronprgdone            : 1;       /**< Power-On Programming Done (PWROnPrgDone)
68427                                                         The application uses this bit to indicate that register
68428                                                         programming is completed after a wake-up from Power Down
68429                                                         mode. For more information, see "Device Mode Suspend and
68430                                                         Resume With Partial Power-Down" on page 357. */
68431        uint32_t cgoutnak                : 1;       /**< Clear Global OUT NAK (CGOUTNak)
68432                                                         A write to this field clears the Global OUT NAK. */
68433        uint32_t sgoutnak                : 1;       /**< Set Global OUT NAK (SGOUTNak)
68434                                                         A write to this field sets the Global OUT NAK.
68435                                                         The application uses this bit to send a NAK handshake on all
68436                                                         OUT endpoints.
68437                                                         The application should set the this bit only after making sure
68438                                                         that the Global OUT NAK Effective bit in the Core Interrupt
68439                                                         Register (GINTSTS.GOUTNakEff) is cleared. */
68440        uint32_t cgnpinnak               : 1;       /**< Clear Global Non-Periodic IN NAK (CGNPInNak)
68441                                                         A write to this field clears the Global Non-Periodic IN NAK. */
68442        uint32_t sgnpinnak               : 1;       /**< Set Global Non-Periodic IN NAK (SGNPInNak)
68443                                                         A write to this field sets the Global Non-Periodic IN NAK.The
68444                                                         application uses this bit to send a NAK handshake on all non-
68445                                                         periodic IN endpoints. The core can also set this bit when a
68446                                                         timeout condition is detected on a non-periodic endpoint.
68447                                                         The application should set this bit only after making sure that
68448                                                         the Global IN NAK Effective bit in the Core Interrupt Register
68449                                                         (GINTSTS.GINNakEff) is cleared. */
68450        uint32_t tstctl                  : 3;       /**< Test Control (TstCtl)
68451                                                         * 3'b000: Test mode disabled
68452                                                         * 3'b001: Test_J mode
68453                                                         * 3'b010: Test_K mode
68454                                                         * 3'b011: Test_SE0_NAK mode
68455                                                         * 3'b100: Test_Packet mode
68456                                                         * 3'b101: Test_Force_Enable
68457                                                         * Others: Reserved */
68458        uint32_t goutnaksts              : 1;       /**< Global OUT NAK Status (GOUTNakSts)
68459                                                         * 1'b0: A handshake is sent based on the FIFO Status and the
68460                                                                 NAK and STALL bit settings.
68461                                                         * 1'b1: No data is written to the RxFIFO, irrespective of space
68462                                                                 availability. Sends a NAK handshake on all packets, except
68463                                                                 on SETUP transactions. All isochronous OUT packets are
68464                                                                 dropped. */
68465        uint32_t gnpinnaksts             : 1;       /**< Global Non-Periodic IN NAK Status (GNPINNakSts)
68466                                                         * 1'b0: A handshake is sent out based on the data availability
68467                                                                 in the transmit FIFO.
68468                                                         * 1'b1: A NAK handshake is sent out on all non-periodic IN
68469                                                                 endpoints, irrespective of the data availability in the transmit
68470                                                                 FIFO. */
68471        uint32_t sftdiscon               : 1;       /**< Soft Disconnect (SftDiscon)
68472                                                         The application uses this bit to signal the O2P USB core to do a
68473                                                         soft disconnect. As long as this bit is set, the host will not see
68474                                                         that the device is connected, and the device will not receive
68475                                                         signals on the USB. The core stays in the disconnected state
68476                                                         until the application clears this bit.
68477                                                         The minimum duration for which the core must keep this bit set
68478                                                         is specified in Minimum Duration for Soft Disconnect  .
68479                                                         * 1'b0: Normal operation. When this bit is cleared after a soft
68480                                                         disconnect, the core drives the phy_opmode_o signal on the
68481                                                         UTMI+ to 2'b00, which generates a device connect event to
68482                                                         the USB host. When the device is reconnected, the USB host
68483                                                         restarts device enumeration.
68484                                                         * 1'b1: The core drives the phy_opmode_o signal on the
68485                                                         UTMI+ to 2'b01, which generates a device disconnect event
68486                                                         to the USB host. */
68487        uint32_t rmtwkupsig              : 1;       /**< Remote Wakeup Signaling (RmtWkUpSig)
68488                                                         When the application sets this bit, the core initiates remote
68489                                                         signaling to wake up the USB host.The application must set this
68490                                                         bit to get the core out of Suspended state and must clear this bit
68491                                                         after the core comes out of Suspended state. */
68492#else
68493        uint32_t rmtwkupsig              : 1;
68494        uint32_t sftdiscon               : 1;
68495        uint32_t gnpinnaksts             : 1;
68496        uint32_t goutnaksts              : 1;
68497        uint32_t tstctl                  : 3;
68498        uint32_t sgnpinnak               : 1;
68499        uint32_t cgnpinnak               : 1;
68500        uint32_t sgoutnak                : 1;
68501        uint32_t cgoutnak                : 1;
68502        uint32_t pwronprgdone            : 1;
68503        uint32_t reserved_12_31          : 20;
68504#endif
68505    } s;
68506    struct cvmx_usbcx_dctl_s             cn30xx;
68507    struct cvmx_usbcx_dctl_s             cn31xx;
68508    struct cvmx_usbcx_dctl_s             cn50xx;
68509    struct cvmx_usbcx_dctl_s             cn52xx;
68510    struct cvmx_usbcx_dctl_s             cn52xxp1;
68511    struct cvmx_usbcx_dctl_s             cn56xx;
68512    struct cvmx_usbcx_dctl_s             cn56xxp1;
68513} cvmx_usbcx_dctl_t;
68514
68515
68516/**
68517 * cvmx_usbc#_diepctl#
68518 *
68519 * Device IN Endpoint-n Control Register (DIEPCTLn)
68520 *
68521 * The application uses the register to control the behaviour of each logical endpoint other than endpoint 0.
68522 */
68523typedef union
68524{
68525    uint32_t u32;
68526    struct cvmx_usbcx_diepctlx_s
68527    {
68528#if __BYTE_ORDER == __BIG_ENDIAN
68529        uint32_t epena                   : 1;       /**< Endpoint Enable (EPEna)
68530                                                         Indicates that data is ready to be transmitted on the endpoint.
68531                                                         The core clears this bit before setting any of the following
68532                                                         interrupts on this endpoint:
68533                                                         * Endpoint Disabled
68534                                                         * Transfer Completed */
68535        uint32_t epdis                   : 1;       /**< Endpoint Disable (EPDis)
68536                                                         The application sets this bit to stop transmitting data on an
68537                                                         endpoint, even before the transfer for that endpoint is complete.
68538                                                         The application must wait for the Endpoint Disabled interrupt
68539                                                         before treating the endpoint as disabled. The core clears this bit
68540                                                         before setting the Endpoint Disabled Interrupt. The application
68541                                                         should set this bit only if Endpoint Enable is already set for this
68542                                                         endpoint. */
68543        uint32_t setd1pid                : 1;       /**< For Interrupt/BULK enpoints:
68544                                                          Set DATA1 PID (SetD1PID)
68545                                                          Writing to this field sets the Endpoint Data Pid (DPID) field in
68546                                                          this register to DATA1.
68547                                                         For Isochronous endpoints:
68548                                                          Set Odd (micro)frame (SetOddFr)
68549                                                          Writing to this field sets the Even/Odd (micro)frame (EO_FrNum)
68550                                                          field to odd (micro)frame. */
68551        uint32_t setd0pid                : 1;       /**< For Interrupt/BULK enpoints:
68552                                                          Writing to this field sets the Endpoint Data Pid (DPID) field in
68553                                                          this register to DATA0.
68554                                                         For Isochronous endpoints:
68555                                                          Set Odd (micro)frame (SetEvenFr)
68556                                                          Writing to this field sets the Even/Odd (micro)frame (EO_FrNum)
68557                                                          field to even (micro)frame. */
68558        uint32_t snak                    : 1;       /**< Set NAK (SNAK)
68559                                                         A write to this bit sets the NAK bit for the endpoint.
68560                                                         Using this bit, the application can control the transmission of
68561                                                         NAK handshakes on an endpoint. The core can also set this bit
68562                                                         for an endpoint after a SETUP packet is received on the
68563                                                         endpoint. */
68564        uint32_t cnak                    : 1;       /**< Clear NAK (CNAK)
68565                                                         A write to this bit clears the NAK bit for the endpoint. */
68566        uint32_t txfnum                  : 4;       /**< TxFIFO Number (TxFNum)
68567                                                         Non-periodic endpoints must set this bit to zero.  Periodic
68568                                                         endpoints must map this to the corresponding Periodic TxFIFO
68569                                                         number.
68570                                                         * 4'h0: Non-Periodic TxFIFO
68571                                                         * Others: Specified Periodic TxFIFO number */
68572        uint32_t stall                   : 1;       /**< STALL Handshake (Stall)
68573                                                         For non-control, non-isochronous endpoints:
68574                                                          The application sets this bit to stall all tokens from the USB host
68575                                                          to this endpoint.  If a NAK bit, Global Non-Periodic IN NAK, or
68576                                                          Global OUT NAK is set along with this bit, the STALL bit takes
68577                                                          priority.  Only the application can clear this bit, never the core.
68578                                                         For control endpoints:
68579                                                          The application can only set this bit, and the core clears it, when
68580                                                          a SETUP token i received for this endpoint.  If a NAK bit, Global
68581                                                          Non-Periodic IN NAK, or Global OUT NAK is set along with this
68582                                                          bit, the STALL bit takes priority.  Irrespective of this bit's setting,
68583                                                          the core always responds to SETUP data packets with an ACK handshake. */
68584        uint32_t reserved_20_20          : 1;
68585        uint32_t eptype                  : 2;       /**< Endpoint Type (EPType)
68586                                                         This is the transfer type supported by this logical endpoint.
68587                                                         * 2'b00: Control
68588                                                         * 2'b01: Isochronous
68589                                                         * 2'b10: Bulk
68590                                                         * 2'b11: Interrupt */
68591        uint32_t naksts                  : 1;       /**< NAK Status (NAKSts)
68592                                                         Indicates the following:
68593                                                         * 1'b0: The core is transmitting non-NAK handshakes based
68594                                                                 on the FIFO status
68595                                                         * 1'b1: The core is transmitting NAK handshakes on this
68596                                                                 endpoint.
68597                                                         When either the application or the core sets this bit:
68598                                                         * For non-isochronous IN endpoints: The core stops
68599                                                           transmitting any data on an IN endpoint, even if data is
68600                                                           available in the TxFIFO.
68601                                                         * For isochronous IN endpoints: The core sends out a zero-
68602                                                           length data packet, even if data is available in the TxFIFO.
68603                                                         Irrespective of this bit's setting, the core always responds to
68604                                                         SETUP data packets with an ACK handshake. */
68605        uint32_t dpid                    : 1;       /**< For interrupt/bulk IN and OUT endpoints:
68606                                                          Endpoint Data PID (DPID)
68607                                                          Contains the PID of the packet to be received or transmitted on
68608                                                          this endpoint.  The application should program the PID of the first
68609                                                          packet to be received or transmitted on this endpoint, after the
68610                                                          endpoint is activated.  Applications use the SetD1PID and
68611                                                          SetD0PID fields of this register to program either DATA0 or
68612                                                          DATA1 PID.
68613                                                          * 1'b0: DATA0
68614                                                          * 1'b1: DATA1
68615                                                         For isochronous IN and OUT endpoints:
68616                                                          Even/Odd (Micro)Frame (EO_FrNum)
68617                                                          Indicates the (micro)frame number in which the core transmits/
68618                                                          receives isochronous data for this endpoint.  The application
68619                                                          should program the even/odd (micro) frame number in which it
68620                                                          intends to transmit/receive isochronous data for this endpoint
68621                                                          using the SetEvnFr and SetOddFr fields in this register.
68622                                                          * 1'b0: Even (micro)frame
68623                                                          * 1'b1: Odd (micro)frame */
68624        uint32_t usbactep                : 1;       /**< USB Active Endpoint (USBActEP)
68625                                                         Indicates whether this endpoint is active in the current
68626                                                         configuration and interface.  The core clears this bit for all
68627                                                         endpoints (other than EP 0) after detecting a USB reset.  After
68628                                                         receiving the SetConfiguration and SetInterface commands, the
68629                                                         application must program endpoint registers accordingly and set
68630                                                         this bit. */
68631        uint32_t nextep                  : 4;       /**< Next Endpoint (NextEp)
68632                                                         Applies to non-periodic IN endpoints only.
68633                                                         Indicates the endpoint number to be fetched after the data for
68634                                                         the current endpoint is fetched. The core can access this field,
68635                                                         even when the Endpoint Enable (EPEna) bit is not set. This
68636                                                         field is not valid in Slave mode. */
68637        uint32_t mps                     : 11;      /**< Maximum Packet Size (MPS)
68638                                                         Applies to IN and OUT endpoints.
68639                                                         The application must program this field with the maximum
68640                                                         packet size for the current logical endpoint.  This value is in
68641                                                         bytes. */
68642#else
68643        uint32_t mps                     : 11;
68644        uint32_t nextep                  : 4;
68645        uint32_t usbactep                : 1;
68646        uint32_t dpid                    : 1;
68647        uint32_t naksts                  : 1;
68648        uint32_t eptype                  : 2;
68649        uint32_t reserved_20_20          : 1;
68650        uint32_t stall                   : 1;
68651        uint32_t txfnum                  : 4;
68652        uint32_t cnak                    : 1;
68653        uint32_t snak                    : 1;
68654        uint32_t setd0pid                : 1;
68655        uint32_t setd1pid                : 1;
68656        uint32_t epdis                   : 1;
68657        uint32_t epena                   : 1;
68658#endif
68659    } s;
68660    struct cvmx_usbcx_diepctlx_s         cn30xx;
68661    struct cvmx_usbcx_diepctlx_s         cn31xx;
68662    struct cvmx_usbcx_diepctlx_s         cn50xx;
68663    struct cvmx_usbcx_diepctlx_s         cn52xx;
68664    struct cvmx_usbcx_diepctlx_s         cn52xxp1;
68665    struct cvmx_usbcx_diepctlx_s         cn56xx;
68666    struct cvmx_usbcx_diepctlx_s         cn56xxp1;
68667} cvmx_usbcx_diepctlx_t;
68668
68669
68670/**
68671 * cvmx_usbc#_diepint#
68672 *
68673 * Device Endpoint-n Interrupt Register (DIEPINTn)
68674 *
68675 * This register indicates the status of an endpoint with respect to
68676 * USB- and AHB-related events. The application must read this register
68677 * when the OUT Endpoints Interrupt bit or IN Endpoints Interrupt bit of
68678 * the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt,
68679 * respectively) is set. Before the application can read this register,
68680 * it must first read the Device All Endpoints Interrupt (DAINT) register
68681 * to get the exact endpoint number for the Device Endpoint-n Interrupt
68682 * register. The application must clear the appropriate bit in this register
68683 * to clear the corresponding bits in the DAINT and GINTSTS registers.
68684 */
68685typedef union
68686{
68687    uint32_t u32;
68688    struct cvmx_usbcx_diepintx_s
68689    {
68690#if __BYTE_ORDER == __BIG_ENDIAN
68691        uint32_t reserved_7_31           : 25;
68692        uint32_t inepnakeff              : 1;       /**< IN Endpoint NAK Effective (INEPNakEff)
68693                                                         Applies to periodic IN endpoints only.
68694                                                         Indicates that the IN endpoint NAK bit set by the application has
68695                                                         taken effect in the core. This bit can be cleared when the
68696                                                         application clears the IN endpoint NAK by writing to
68697                                                         DIEPCTLn.CNAK.
68698                                                         This interrupt indicates that the core has sampled the NAK bit
68699                                                         set (either by the application or by the core).
68700                                                         This interrupt does not necessarily mean that a NAK handshake
68701                                                         is sent on the USB. A STALL bit takes priority over a NAK bit. */
68702        uint32_t intknepmis              : 1;       /**< IN Token Received with EP Mismatch (INTknEPMis)
68703                                                         Applies to non-periodic IN endpoints only.
68704                                                         Indicates that the data in the top of the non-periodic TxFIFO
68705                                                         belongs to an endpoint other than the one for which the IN
68706                                                         token was received. This interrupt is asserted on the endpoint
68707                                                         for which the IN token was received. */
68708        uint32_t intkntxfemp             : 1;       /**< IN Token Received When TxFIFO is Empty (INTknTXFEmp)
68709                                                         Applies only to non-periodic IN endpoints.
68710                                                         Indicates that an IN token was received when the associated
68711                                                         TxFIFO (periodic/non-periodic) was empty. This interrupt is
68712                                                         asserted on the endpoint for which the IN token was received. */
68713        uint32_t timeout                 : 1;       /**< Timeout Condition (TimeOUT)
68714                                                         Applies to non-isochronous IN endpoints only.
68715                                                         Indicates that the core has detected a timeout condition on the
68716                                                         USB for the last IN token on this endpoint. */
68717        uint32_t ahberr                  : 1;       /**< AHB Error (AHBErr)
68718                                                         This is generated only in Internal DMA mode when there is an
68719                                                         AHB error during an AHB read/write. The application can read
68720                                                         the corresponding endpoint DMA address register to get the
68721                                                         error address. */
68722        uint32_t epdisbld                : 1;       /**< Endpoint Disabled Interrupt (EPDisbld)
68723                                                         This bit indicates that the endpoint is disabled per the
68724                                                         application's request. */
68725        uint32_t xfercompl               : 1;       /**< Transfer Completed Interrupt (XferCompl)
68726                                                         Indicates that the programmed transfer is complete on the AHB
68727                                                         as well as on the USB, for this endpoint. */
68728#else
68729        uint32_t xfercompl               : 1;
68730        uint32_t epdisbld                : 1;
68731        uint32_t ahberr                  : 1;
68732        uint32_t timeout                 : 1;
68733        uint32_t intkntxfemp             : 1;
68734        uint32_t intknepmis              : 1;
68735        uint32_t inepnakeff              : 1;
68736        uint32_t reserved_7_31           : 25;
68737#endif
68738    } s;
68739    struct cvmx_usbcx_diepintx_s         cn30xx;
68740    struct cvmx_usbcx_diepintx_s         cn31xx;
68741    struct cvmx_usbcx_diepintx_s         cn50xx;
68742    struct cvmx_usbcx_diepintx_s         cn52xx;
68743    struct cvmx_usbcx_diepintx_s         cn52xxp1;
68744    struct cvmx_usbcx_diepintx_s         cn56xx;
68745    struct cvmx_usbcx_diepintx_s         cn56xxp1;
68746} cvmx_usbcx_diepintx_t;
68747
68748
68749/**
68750 * cvmx_usbc#_diepmsk
68751 *
68752 * Device IN Endpoint Common Interrupt Mask Register (DIEPMSK)
68753 *
68754 * This register works with each of the Device IN Endpoint Interrupt (DIEPINTn) registers
68755 * for all endpoints to generate an interrupt per IN endpoint. The IN endpoint interrupt
68756 * for a specific status in the DIEPINTn register can be masked by writing to the corresponding
68757 * bit in this register. Status bits are masked by default.
68758 * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
68759 */
68760typedef union
68761{
68762    uint32_t u32;
68763    struct cvmx_usbcx_diepmsk_s
68764    {
68765#if __BYTE_ORDER == __BIG_ENDIAN
68766        uint32_t reserved_7_31           : 25;
68767        uint32_t inepnakeffmsk           : 1;       /**< IN Endpoint NAK Effective Mask (INEPNakEffMsk) */
68768        uint32_t intknepmismsk           : 1;       /**< IN Token received with EP Mismatch Mask (INTknEPMisMsk) */
68769        uint32_t intkntxfempmsk          : 1;       /**< IN Token Received When TxFIFO Empty Mask
68770                                                         (INTknTXFEmpMsk) */
68771        uint32_t timeoutmsk              : 1;       /**< Timeout Condition Mask (TimeOUTMsk)
68772                                                         (Non-isochronous endpoints) */
68773        uint32_t ahberrmsk               : 1;       /**< AHB Error Mask (AHBErrMsk) */
68774        uint32_t epdisbldmsk             : 1;       /**< Endpoint Disabled Interrupt Mask (EPDisbldMsk) */
68775        uint32_t xfercomplmsk            : 1;       /**< Transfer Completed Interrupt Mask (XferComplMsk) */
68776#else
68777        uint32_t xfercomplmsk            : 1;
68778        uint32_t epdisbldmsk             : 1;
68779        uint32_t ahberrmsk               : 1;
68780        uint32_t timeoutmsk              : 1;
68781        uint32_t intkntxfempmsk          : 1;
68782        uint32_t intknepmismsk           : 1;
68783        uint32_t inepnakeffmsk           : 1;
68784        uint32_t reserved_7_31           : 25;
68785#endif
68786    } s;
68787    struct cvmx_usbcx_diepmsk_s          cn30xx;
68788    struct cvmx_usbcx_diepmsk_s          cn31xx;
68789    struct cvmx_usbcx_diepmsk_s          cn50xx;
68790    struct cvmx_usbcx_diepmsk_s          cn52xx;
68791    struct cvmx_usbcx_diepmsk_s          cn52xxp1;
68792    struct cvmx_usbcx_diepmsk_s          cn56xx;
68793    struct cvmx_usbcx_diepmsk_s          cn56xxp1;
68794} cvmx_usbcx_diepmsk_t;
68795
68796
68797/**
68798 * cvmx_usbc#_dieptsiz#
68799 *
68800 * Device Endpoint-n Transfer Size Register (DIEPTSIZn)
68801 *
68802 * The application must modify this register before enabling the endpoint.
68803 * Once the endpoint is enabled using Endpoint Enable bit of the Device Endpoint-n Control registers (DIEPCTLn.EPEna/DOEPCTLn.EPEna),
68804 * the core modifies this register. The application can only read this register once the core has cleared the Endpoint Enable bit.
68805 * This register is used only for endpoints other than Endpoint 0.
68806 */
68807typedef union
68808{
68809    uint32_t u32;
68810    struct cvmx_usbcx_dieptsizx_s
68811    {
68812#if __BYTE_ORDER == __BIG_ENDIAN
68813        uint32_t reserved_31_31          : 1;
68814        uint32_t mc                      : 2;       /**< Multi Count (MC)
68815                                                         Applies to IN endpoints only.
68816                                                         For periodic IN endpoints, this field indicates the number of
68817                                                         packets that must be transmitted per microframe on the USB.
68818                                                         The core uses this field to calculate the data PID for
68819                                                         isochronous IN endpoints.
68820                                                         * 2'b01: 1 packet
68821                                                         * 2'b10: 2 packets
68822                                                         * 2'b11: 3 packets
68823                                                         For non-periodic IN endpoints, this field is valid only in Internal
68824                                                         DMA mode. It specifies the number of packets the core should
68825                                                         fetch for an IN endpoint before it switches to the endpoint
68826                                                         pointed to by the Next Endpoint field of the Device Endpoint-n
68827                                                         Control register (DIEPCTLn.NextEp) */
68828        uint32_t pktcnt                  : 10;      /**< Packet Count (PktCnt)
68829                                                         Indicates the total number of USB packets that constitute the
68830                                                         Transfer Size amount of data for this endpoint.
68831                                                         IN Endpoints: This field is decremented every time a packet
68832                                                         (maximum size or short packet) is read from the TxFIFO. */
68833        uint32_t xfersize                : 19;      /**< Transfer Size (XferSize)
68834                                                         This field contains the transfer size in bytes for the current
68835                                                         endpoint.
68836                                                         The core only interrupts the application after it has exhausted
68837                                                         the transfer size amount of data. The transfer size can be set to
68838                                                         the maximum packet size of the endpoint, to be interrupted at
68839                                                         the end of each packet.
68840                                                         IN Endpoints: The core decrements this field every time a
68841                                                         packet from the external memory is written to the TxFIFO. */
68842#else
68843        uint32_t xfersize                : 19;
68844        uint32_t pktcnt                  : 10;
68845        uint32_t mc                      : 2;
68846        uint32_t reserved_31_31          : 1;
68847#endif
68848    } s;
68849    struct cvmx_usbcx_dieptsizx_s        cn30xx;
68850    struct cvmx_usbcx_dieptsizx_s        cn31xx;
68851    struct cvmx_usbcx_dieptsizx_s        cn50xx;
68852    struct cvmx_usbcx_dieptsizx_s        cn52xx;
68853    struct cvmx_usbcx_dieptsizx_s        cn52xxp1;
68854    struct cvmx_usbcx_dieptsizx_s        cn56xx;
68855    struct cvmx_usbcx_dieptsizx_s        cn56xxp1;
68856} cvmx_usbcx_dieptsizx_t;
68857
68858
68859/**
68860 * cvmx_usbc#_doepctl#
68861 *
68862 * Device OUT Endpoint-n Control Register (DOEPCTLn)
68863 *
68864 * The application uses the register to control the behaviour of each logical endpoint other than endpoint 0.
68865 */
68866typedef union
68867{
68868    uint32_t u32;
68869    struct cvmx_usbcx_doepctlx_s
68870    {
68871#if __BYTE_ORDER == __BIG_ENDIAN
68872        uint32_t epena                   : 1;       /**< Endpoint Enable (EPEna)
68873                                                         Indicates that the application has allocated the memory tp start
68874                                                         receiving data from the USB.
68875                                                         The core clears this bit before setting any of the following
68876                                                         interrupts on this endpoint:
68877                                                         * SETUP Phase Done
68878                                                         * Endpoint Disabled
68879                                                         * Transfer Completed
68880                                                         For control OUT endpoints in DMA mode, this bit must be set
68881                                                         to be able to transfer SETUP data packets in memory. */
68882        uint32_t epdis                   : 1;       /**< Endpoint Disable (EPDis)
68883                                                         The application sets this bit to stop transmitting data on an
68884                                                         endpoint, even before the transfer for that endpoint is complete.
68885                                                         The application must wait for the Endpoint Disabled interrupt
68886                                                         before treating the endpoint as disabled. The core clears this bit
68887                                                         before setting the Endpoint Disabled Interrupt. The application
68888                                                         should set this bit only if Endpoint Enable is already set for this
68889                                                         endpoint. */
68890        uint32_t setd1pid                : 1;       /**< For Interrupt/BULK enpoints:
68891                                                          Set DATA1 PID (SetD1PID)
68892                                                          Writing to this field sets the Endpoint Data Pid (DPID) field in
68893                                                          this register to DATA1.
68894                                                         For Isochronous endpoints:
68895                                                          Set Odd (micro)frame (SetOddFr)
68896                                                          Writing to this field sets the Even/Odd (micro)frame (EO_FrNum)
68897                                                          field to odd (micro)frame. */
68898        uint32_t setd0pid                : 1;       /**< For Interrupt/BULK enpoints:
68899                                                          Writing to this field sets the Endpoint Data Pid (DPID) field in
68900                                                          this register to DATA0.
68901                                                         For Isochronous endpoints:
68902                                                          Set Odd (micro)frame (SetEvenFr)
68903                                                          Writing to this field sets the Even/Odd (micro)frame (EO_FrNum)
68904                                                          field to even (micro)frame. */
68905        uint32_t snak                    : 1;       /**< Set NAK (SNAK)
68906                                                         A write to this bit sets the NAK bit for the endpoint.
68907                                                         Using this bit, the application can control the transmission of
68908                                                         NAK handshakes on an endpoint. The core can also set this bit
68909                                                         for an endpoint after a SETUP packet is received on the
68910                                                         endpoint. */
68911        uint32_t cnak                    : 1;       /**< Clear NAK (CNAK)
68912                                                         A write to this bit clears the NAK bit for the endpoint. */
68913        uint32_t reserved_22_25          : 4;
68914        uint32_t stall                   : 1;       /**< STALL Handshake (Stall)
68915                                                         For non-control, non-isochronous endpoints:
68916                                                          The application sets this bit to stall all tokens from the USB host
68917                                                          to this endpoint.  If a NAK bit, Global Non-Periodic IN NAK, or
68918                                                          Global OUT NAK is set along with this bit, the STALL bit takes
68919                                                          priority.  Only the application can clear this bit, never the core.
68920                                                         For control endpoints:
68921                                                          The application can only set this bit, and the core clears it, when
68922                                                          a SETUP token i received for this endpoint.  If a NAK bit, Global
68923                                                          Non-Periodic IN NAK, or Global OUT NAK is set along with this
68924                                                          bit, the STALL bit takes priority.  Irrespective of this bit's setting,
68925                                                          the core always responds to SETUP data packets with an ACK handshake. */
68926        uint32_t snp                     : 1;       /**< Snoop Mode (Snp)
68927                                                         This bit configures the endpoint to Snoop mode.  In Snoop mode,
68928                                                         the core does not check the correctness of OUT packets before
68929                                                         transferring them to application memory. */
68930        uint32_t eptype                  : 2;       /**< Endpoint Type (EPType)
68931                                                         This is the transfer type supported by this logical endpoint.
68932                                                         * 2'b00: Control
68933                                                         * 2'b01: Isochronous
68934                                                         * 2'b10: Bulk
68935                                                         * 2'b11: Interrupt */
68936        uint32_t naksts                  : 1;       /**< NAK Status (NAKSts)
68937                                                         Indicates the following:
68938                                                         * 1'b0: The core is transmitting non-NAK handshakes based
68939                                                                 on the FIFO status
68940                                                         * 1'b1: The core is transmitting NAK handshakes on this
68941                                                                 endpoint.
68942                                                         When either the application or the core sets this bit:
68943                                                         * The core stops receiving any data on an OUT endpoint, even
68944                                                           if there is space in the RxFIFO to accomodate the incoming
68945                                                           packet. */
68946        uint32_t dpid                    : 1;       /**< For interrupt/bulk IN and OUT endpoints:
68947                                                          Endpoint Data PID (DPID)
68948                                                          Contains the PID of the packet to be received or transmitted on
68949                                                          this endpoint.  The application should program the PID of the first
68950                                                          packet to be received or transmitted on this endpoint, after the
68951                                                          endpoint is activated.  Applications use the SetD1PID and
68952                                                          SetD0PID fields of this register to program either DATA0 or
68953                                                          DATA1 PID.
68954                                                          * 1'b0: DATA0
68955                                                          * 1'b1: DATA1
68956                                                         For isochronous IN and OUT endpoints:
68957                                                          Even/Odd (Micro)Frame (EO_FrNum)
68958                                                          Indicates the (micro)frame number in which the core transmits/
68959                                                          receives isochronous data for this endpoint.  The application
68960                                                          should program the even/odd (micro) frame number in which it
68961                                                          intends to transmit/receive isochronous data for this endpoint
68962                                                          using the SetEvnFr and SetOddFr fields in this register.
68963                                                          * 1'b0: Even (micro)frame
68964                                                          * 1'b1: Odd (micro)frame */
68965        uint32_t usbactep                : 1;       /**< USB Active Endpoint (USBActEP)
68966                                                         Indicates whether this endpoint is active in the current
68967                                                         configuration and interface.  The core clears this bit for all
68968                                                         endpoints (other than EP 0) after detecting a USB reset.  After
68969                                                         receiving the SetConfiguration and SetInterface commands, the
68970                                                         application must program endpoint registers accordingly and set
68971                                                         this bit. */
68972        uint32_t reserved_11_14          : 4;
68973        uint32_t mps                     : 11;      /**< Maximum Packet Size (MPS)
68974                                                         Applies to IN and OUT endpoints.
68975                                                         The application must program this field with the maximum
68976                                                         packet size for the current logical endpoint.  This value is in
68977                                                         bytes. */
68978#else
68979        uint32_t mps                     : 11;
68980        uint32_t reserved_11_14          : 4;
68981        uint32_t usbactep                : 1;
68982        uint32_t dpid                    : 1;
68983        uint32_t naksts                  : 1;
68984        uint32_t eptype                  : 2;
68985        uint32_t snp                     : 1;
68986        uint32_t stall                   : 1;
68987        uint32_t reserved_22_25          : 4;
68988        uint32_t cnak                    : 1;
68989        uint32_t snak                    : 1;
68990        uint32_t setd0pid                : 1;
68991        uint32_t setd1pid                : 1;
68992        uint32_t epdis                   : 1;
68993        uint32_t epena                   : 1;
68994#endif
68995    } s;
68996    struct cvmx_usbcx_doepctlx_s         cn30xx;
68997    struct cvmx_usbcx_doepctlx_s         cn31xx;
68998    struct cvmx_usbcx_doepctlx_s         cn50xx;
68999    struct cvmx_usbcx_doepctlx_s         cn52xx;
69000    struct cvmx_usbcx_doepctlx_s         cn52xxp1;
69001    struct cvmx_usbcx_doepctlx_s         cn56xx;
69002    struct cvmx_usbcx_doepctlx_s         cn56xxp1;
69003} cvmx_usbcx_doepctlx_t;
69004
69005
69006/**
69007 * cvmx_usbc#_doepint#
69008 *
69009 * Device Endpoint-n Interrupt Register (DOEPINTn)
69010 *
69011 * This register indicates the status of an endpoint with respect to USB- and AHB-related events.
69012 * The application must read this register when the OUT Endpoints Interrupt bit or IN Endpoints
69013 * Interrupt bit of the Core Interrupt register (GINTSTS.OEPInt or GINTSTS.IEPInt, respectively)
69014 * is set. Before the application can read this register, it must first read the Device All
69015 * Endpoints Interrupt (DAINT) register to get the exact endpoint number for the Device Endpoint-n
69016 * Interrupt register. The application must clear the appropriate bit in this register to clear the
69017 * corresponding bits in the DAINT and GINTSTS registers.
69018 */
69019typedef union
69020{
69021    uint32_t u32;
69022    struct cvmx_usbcx_doepintx_s
69023    {
69024#if __BYTE_ORDER == __BIG_ENDIAN
69025        uint32_t reserved_5_31           : 27;
69026        uint32_t outtknepdis             : 1;       /**< OUT Token Received When Endpoint Disabled (OUTTknEPdis)
69027                                                         Applies only to control OUT endpoints.
69028                                                         Indicates that an OUT token was received when the endpoint
69029                                                         was not yet enabled. This interrupt is asserted on the endpoint
69030                                                         for which the OUT token was received. */
69031        uint32_t setup                   : 1;       /**< SETUP Phase Done (SetUp)
69032                                                         Applies to control OUT endpoints only.
69033                                                         Indicates that the SETUP phase for the control endpoint is
69034                                                         complete and no more back-to-back SETUP packets were
69035                                                         received for the current control transfer. On this interrupt, the
69036                                                         application can decode the received SETUP data packet. */
69037        uint32_t ahberr                  : 1;       /**< AHB Error (AHBErr)
69038                                                         This is generated only in Internal DMA mode when there is an
69039                                                         AHB error during an AHB read/write. The application can read
69040                                                         the corresponding endpoint DMA address register to get the
69041                                                         error address. */
69042        uint32_t epdisbld                : 1;       /**< Endpoint Disabled Interrupt (EPDisbld)
69043                                                         This bit indicates that the endpoint is disabled per the
69044                                                         application's request. */
69045        uint32_t xfercompl               : 1;       /**< Transfer Completed Interrupt (XferCompl)
69046                                                         Indicates that the programmed transfer is complete on the AHB
69047                                                         as well as on the USB, for this endpoint. */
69048#else
69049        uint32_t xfercompl               : 1;
69050        uint32_t epdisbld                : 1;
69051        uint32_t ahberr                  : 1;
69052        uint32_t setup                   : 1;
69053        uint32_t outtknepdis             : 1;
69054        uint32_t reserved_5_31           : 27;
69055#endif
69056    } s;
69057    struct cvmx_usbcx_doepintx_s         cn30xx;
69058    struct cvmx_usbcx_doepintx_s         cn31xx;
69059    struct cvmx_usbcx_doepintx_s         cn50xx;
69060    struct cvmx_usbcx_doepintx_s         cn52xx;
69061    struct cvmx_usbcx_doepintx_s         cn52xxp1;
69062    struct cvmx_usbcx_doepintx_s         cn56xx;
69063    struct cvmx_usbcx_doepintx_s         cn56xxp1;
69064} cvmx_usbcx_doepintx_t;
69065
69066
69067/**
69068 * cvmx_usbc#_doepmsk
69069 *
69070 * Device OUT Endpoint Common Interrupt Mask Register (DOEPMSK)
69071 *
69072 * This register works with each of the Device OUT Endpoint Interrupt (DOEPINTn) registers
69073 * for all endpoints to generate an interrupt per OUT endpoint. The OUT endpoint interrupt
69074 * for a specific status in the DOEPINTn register can be masked by writing into the
69075 * corresponding bit in this register. Status bits are masked by default.
69076 * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
69077 */
69078typedef union
69079{
69080    uint32_t u32;
69081    struct cvmx_usbcx_doepmsk_s
69082    {
69083#if __BYTE_ORDER == __BIG_ENDIAN
69084        uint32_t reserved_5_31           : 27;
69085        uint32_t outtknepdismsk          : 1;       /**< OUT Token Received when Endpoint Disabled Mask
69086                                                         (OUTTknEPdisMsk)
69087                                                         Applies to control OUT endpoints only. */
69088        uint32_t setupmsk                : 1;       /**< SETUP Phase Done Mask (SetUPMsk)
69089                                                         Applies to control endpoints only. */
69090        uint32_t ahberrmsk               : 1;       /**< AHB Error (AHBErrMsk) */
69091        uint32_t epdisbldmsk             : 1;       /**< Endpoint Disabled Interrupt Mask (EPDisbldMsk) */
69092        uint32_t xfercomplmsk            : 1;       /**< Transfer Completed Interrupt Mask (XferComplMsk) */
69093#else
69094        uint32_t xfercomplmsk            : 1;
69095        uint32_t epdisbldmsk             : 1;
69096        uint32_t ahberrmsk               : 1;
69097        uint32_t setupmsk                : 1;
69098        uint32_t outtknepdismsk          : 1;
69099        uint32_t reserved_5_31           : 27;
69100#endif
69101    } s;
69102    struct cvmx_usbcx_doepmsk_s          cn30xx;
69103    struct cvmx_usbcx_doepmsk_s          cn31xx;
69104    struct cvmx_usbcx_doepmsk_s          cn50xx;
69105    struct cvmx_usbcx_doepmsk_s          cn52xx;
69106    struct cvmx_usbcx_doepmsk_s          cn52xxp1;
69107    struct cvmx_usbcx_doepmsk_s          cn56xx;
69108    struct cvmx_usbcx_doepmsk_s          cn56xxp1;
69109} cvmx_usbcx_doepmsk_t;
69110
69111
69112/**
69113 * cvmx_usbc#_doeptsiz#
69114 *
69115 * Device Endpoint-n Transfer Size Register (DOEPTSIZn)
69116 *
69117 * The application must modify this register before enabling the endpoint.
69118 * Once the endpoint is enabled using Endpoint Enable bit of the Device Endpoint-n Control
69119 * registers (DOEPCTLn.EPEna/DOEPCTLn.EPEna), the core modifies this register. The application
69120 * can only read this register once the core has cleared the Endpoint Enable bit.
69121 * This register is used only for endpoints other than Endpoint 0.
69122 */
69123typedef union
69124{
69125    uint32_t u32;
69126    struct cvmx_usbcx_doeptsizx_s
69127    {
69128#if __BYTE_ORDER == __BIG_ENDIAN
69129        uint32_t reserved_31_31          : 1;
69130        uint32_t mc                      : 2;       /**< Multi Count (MC)
69131                                                         Received Data PID (RxDPID)
69132                                                         Applies to isochronous OUT endpoints only.
69133                                                         This is the data PID received in the last packet for this endpoint.
69134                                                         2'b00: DATA0
69135                                                         2'b01: DATA1
69136                                                         2'b10: DATA2
69137                                                         2'b11: MDATA
69138                                                         SETUP Packet Count (SUPCnt)
69139                                                         Applies to control OUT Endpoints only.
69140                                                         This field specifies the number of back-to-back SETUP data
69141                                                         packets the endpoint can receive.
69142                                                         2'b01: 1 packet
69143                                                         2'b10: 2 packets
69144                                                         2'b11: 3 packets */
69145        uint32_t pktcnt                  : 10;      /**< Packet Count (PktCnt)
69146                                                         Indicates the total number of USB packets that constitute the
69147                                                         Transfer Size amount of data for this endpoint.
69148                                                         OUT Endpoints: This field is decremented every time a
69149                                                         packet (maximum size or short packet) is written to the
69150                                                         RxFIFO. */
69151        uint32_t xfersize                : 19;      /**< Transfer Size (XferSize)
69152                                                         This field contains the transfer size in bytes for the current
69153                                                         endpoint.
69154                                                         The core only interrupts the application after it has exhausted
69155                                                         the transfer size amount of data. The transfer size can be set to
69156                                                         the maximum packet size of the endpoint, to be interrupted at
69157                                                         the end of each packet.
69158                                                         OUT Endpoints: The core decrements this field every time a
69159                                                         packet is read from the RxFIFO and written to the external
69160                                                         memory. */
69161#else
69162        uint32_t xfersize                : 19;
69163        uint32_t pktcnt                  : 10;
69164        uint32_t mc                      : 2;
69165        uint32_t reserved_31_31          : 1;
69166#endif
69167    } s;
69168    struct cvmx_usbcx_doeptsizx_s        cn30xx;
69169    struct cvmx_usbcx_doeptsizx_s        cn31xx;
69170    struct cvmx_usbcx_doeptsizx_s        cn50xx;
69171    struct cvmx_usbcx_doeptsizx_s        cn52xx;
69172    struct cvmx_usbcx_doeptsizx_s        cn52xxp1;
69173    struct cvmx_usbcx_doeptsizx_s        cn56xx;
69174    struct cvmx_usbcx_doeptsizx_s        cn56xxp1;
69175} cvmx_usbcx_doeptsizx_t;
69176
69177
69178/**
69179 * cvmx_usbc#_dptxfsiz#
69180 *
69181 * Device Periodic Transmit FIFO-n Size Register (DPTXFSIZ)
69182 *
69183 * This register holds the memory start address of each periodic TxFIFO to implemented
69184 * in Device mode. Each periodic FIFO holds the data for one periodic IN endpoint.
69185 * This register is repeated for each periodic FIFO instantiated.
69186 */
69187typedef union
69188{
69189    uint32_t u32;
69190    struct cvmx_usbcx_dptxfsizx_s
69191    {
69192#if __BYTE_ORDER == __BIG_ENDIAN
69193        uint32_t dptxfsize               : 16;      /**< Device Periodic TxFIFO Size (DPTxFSize)
69194                                                         This value is in terms of 32-bit words.
69195                                                         * Minimum value is 4
69196                                                         * Maximum value is 768 */
69197        uint32_t dptxfstaddr             : 16;      /**< Device Periodic TxFIFO RAM Start Address (DPTxFStAddr)
69198                                                         Holds the start address in the RAM for this periodic FIFO. */
69199#else
69200        uint32_t dptxfstaddr             : 16;
69201        uint32_t dptxfsize               : 16;
69202#endif
69203    } s;
69204    struct cvmx_usbcx_dptxfsizx_s        cn30xx;
69205    struct cvmx_usbcx_dptxfsizx_s        cn31xx;
69206    struct cvmx_usbcx_dptxfsizx_s        cn50xx;
69207    struct cvmx_usbcx_dptxfsizx_s        cn52xx;
69208    struct cvmx_usbcx_dptxfsizx_s        cn52xxp1;
69209    struct cvmx_usbcx_dptxfsizx_s        cn56xx;
69210    struct cvmx_usbcx_dptxfsizx_s        cn56xxp1;
69211} cvmx_usbcx_dptxfsizx_t;
69212
69213
69214/**
69215 * cvmx_usbc#_dsts
69216 *
69217 * Device Status Register (DSTS)
69218 *
69219 * This register indicates the status of the core with respect to USB-related events.
69220 * It must be read on interrupts from Device All Interrupts (DAINT) register.
69221 */
69222typedef union
69223{
69224    uint32_t u32;
69225    struct cvmx_usbcx_dsts_s
69226    {
69227#if __BYTE_ORDER == __BIG_ENDIAN
69228        uint32_t reserved_22_31          : 10;
69229        uint32_t soffn                   : 14;      /**< Frame or Microframe Number of the Received SOF (SOFFN)
69230                                                         When the core is operating at high speed, this field contains a
69231                                                         microframe number. When the core is operating at full or low
69232                                                         speed, this field contains a frame number. */
69233        uint32_t reserved_4_7            : 4;
69234        uint32_t errticerr               : 1;       /**< Erratic Error (ErrticErr)
69235                                                         The core sets this bit to report any erratic errors
69236                                                         (phy_rxvalid_i/phy_rxvldh_i or phy_rxactive_i is asserted for at
69237                                                         least 2 ms, due to PHY error) seen on the UTMI+.
69238                                                         Due to erratic errors, the O2P USB core goes into Suspended
69239                                                         state and an interrupt is generated to the application with Early
69240                                                         Suspend bit of the Core Interrupt register (GINTSTS.ErlySusp).
69241                                                         If the early suspend is asserted due to an erratic error, the
69242                                                         application can only perform a soft disconnect recover. */
69243        uint32_t enumspd                 : 2;       /**< Enumerated Speed (EnumSpd)
69244                                                         Indicates the speed at which the O2P USB core has come up
69245                                                         after speed detection through a chirp sequence.
69246                                                         * 2'b00: High speed (PHY clock is running at 30 or 60 MHz)
69247                                                         * 2'b01: Full speed (PHY clock is running at 30 or 60 MHz)
69248                                                         * 2'b10: Low speed (PHY clock is running at 6 MHz)
69249                                                         * 2'b11: Full speed (PHY clock is running at 48 MHz)
69250                                                         Low speed is not supported for devices using a UTMI+ PHY. */
69251        uint32_t suspsts                 : 1;       /**< Suspend Status (SuspSts)
69252                                                         In Device mode, this bit is set as long as a Suspend condition is
69253                                                         detected on the USB. The core enters the Suspended state
69254                                                         when there is no activity on the phy_line_state_i signal for an
69255                                                         extended period of time. The core comes out of the suspend:
69256                                                         * When there is any activity on the phy_line_state_i signal
69257                                                         * When the application writes to the Remote Wakeup Signaling
69258                                                           bit in the Device Control register (DCTL.RmtWkUpSig). */
69259#else
69260        uint32_t suspsts                 : 1;
69261        uint32_t enumspd                 : 2;
69262        uint32_t errticerr               : 1;
69263        uint32_t reserved_4_7            : 4;
69264        uint32_t soffn                   : 14;
69265        uint32_t reserved_22_31          : 10;
69266#endif
69267    } s;
69268    struct cvmx_usbcx_dsts_s             cn30xx;
69269    struct cvmx_usbcx_dsts_s             cn31xx;
69270    struct cvmx_usbcx_dsts_s             cn50xx;
69271    struct cvmx_usbcx_dsts_s             cn52xx;
69272    struct cvmx_usbcx_dsts_s             cn52xxp1;
69273    struct cvmx_usbcx_dsts_s             cn56xx;
69274    struct cvmx_usbcx_dsts_s             cn56xxp1;
69275} cvmx_usbcx_dsts_t;
69276
69277
69278/**
69279 * cvmx_usbc#_dtknqr1
69280 *
69281 * Device IN Token Sequence Learning Queue Read Register 1 (DTKNQR1)
69282 *
69283 * The depth of the IN Token Sequence Learning Queue is specified for Device Mode IN Token
69284 * Sequence Learning Queue Depth. The queue is 4 bits wide to store the endpoint number.
69285 * A read from this register returns the first 5 endpoint entries of the IN Token Sequence
69286 * Learning Queue. When the queue is full, the new token is pushed into the queue and oldest
69287 * token is discarded.
69288 */
69289typedef union
69290{
69291    uint32_t u32;
69292    struct cvmx_usbcx_dtknqr1_s
69293    {
69294#if __BYTE_ORDER == __BIG_ENDIAN
69295        uint32_t eptkn                   : 24;      /**< Endpoint Token (EPTkn)
69296                                                         Four bits per token represent the endpoint number of the token:
69297                                                         * Bits [31:28]: Endpoint number of Token 5
69298                                                         * Bits [27:24]: Endpoint number of Token 4
69299                                                         - .......
69300                                                         * Bits [15:12]: Endpoint number of Token 1
69301                                                         * Bits [11:8]: Endpoint number of Token 0 */
69302        uint32_t wrapbit                 : 1;       /**< Wrap Bit (WrapBit)
69303                                                         This bit is set when the write pointer wraps. It is cleared when
69304                                                         the learning queue is cleared. */
69305        uint32_t reserved_5_6            : 2;
69306        uint32_t intknwptr               : 5;       /**< IN Token Queue Write Pointer (INTknWPtr) */
69307#else
69308        uint32_t intknwptr               : 5;
69309        uint32_t reserved_5_6            : 2;
69310        uint32_t wrapbit                 : 1;
69311        uint32_t eptkn                   : 24;
69312#endif
69313    } s;
69314    struct cvmx_usbcx_dtknqr1_s          cn30xx;
69315    struct cvmx_usbcx_dtknqr1_s          cn31xx;
69316    struct cvmx_usbcx_dtknqr1_s          cn50xx;
69317    struct cvmx_usbcx_dtknqr1_s          cn52xx;
69318    struct cvmx_usbcx_dtknqr1_s          cn52xxp1;
69319    struct cvmx_usbcx_dtknqr1_s          cn56xx;
69320    struct cvmx_usbcx_dtknqr1_s          cn56xxp1;
69321} cvmx_usbcx_dtknqr1_t;
69322
69323
69324/**
69325 * cvmx_usbc#_dtknqr2
69326 *
69327 * Device IN Token Sequence Learning Queue Read Register 2 (DTKNQR2)
69328 *
69329 * A read from this register returns the next 8 endpoint entries of the learning queue.
69330 */
69331typedef union
69332{
69333    uint32_t u32;
69334    struct cvmx_usbcx_dtknqr2_s
69335    {
69336#if __BYTE_ORDER == __BIG_ENDIAN
69337        uint32_t eptkn                   : 32;      /**< Endpoint Token (EPTkn)
69338                                                         Four bits per token represent the endpoint number of the token:
69339                                                         * Bits [31:28]: Endpoint number of Token 13
69340                                                         * Bits [27:24]: Endpoint number of Token 12
69341                                                         - .......
69342                                                         * Bits [7:4]: Endpoint number of Token 7
69343                                                         * Bits [3:0]: Endpoint number of Token 6 */
69344#else
69345        uint32_t eptkn                   : 32;
69346#endif
69347    } s;
69348    struct cvmx_usbcx_dtknqr2_s          cn30xx;
69349    struct cvmx_usbcx_dtknqr2_s          cn31xx;
69350    struct cvmx_usbcx_dtknqr2_s          cn50xx;
69351    struct cvmx_usbcx_dtknqr2_s          cn52xx;
69352    struct cvmx_usbcx_dtknqr2_s          cn52xxp1;
69353    struct cvmx_usbcx_dtknqr2_s          cn56xx;
69354    struct cvmx_usbcx_dtknqr2_s          cn56xxp1;
69355} cvmx_usbcx_dtknqr2_t;
69356
69357
69358/**
69359 * cvmx_usbc#_dtknqr3
69360 *
69361 * Device IN Token Sequence Learning Queue Read Register 3 (DTKNQR3)
69362 *
69363 * A read from this register returns the next 8 endpoint entries of the learning queue.
69364 */
69365typedef union
69366{
69367    uint32_t u32;
69368    struct cvmx_usbcx_dtknqr3_s
69369    {
69370#if __BYTE_ORDER == __BIG_ENDIAN
69371        uint32_t eptkn                   : 32;      /**< Endpoint Token (EPTkn)
69372                                                         Four bits per token represent the endpoint number of the token:
69373                                                         * Bits [31:28]: Endpoint number of Token 21
69374                                                         * Bits [27:24]: Endpoint number of Token 20
69375                                                         - .......
69376                                                         * Bits [7:4]: Endpoint number of Token 15
69377                                                         * Bits [3:0]: Endpoint number of Token 14 */
69378#else
69379        uint32_t eptkn                   : 32;
69380#endif
69381    } s;
69382    struct cvmx_usbcx_dtknqr3_s          cn30xx;
69383    struct cvmx_usbcx_dtknqr3_s          cn31xx;
69384    struct cvmx_usbcx_dtknqr3_s          cn50xx;
69385    struct cvmx_usbcx_dtknqr3_s          cn52xx;
69386    struct cvmx_usbcx_dtknqr3_s          cn52xxp1;
69387    struct cvmx_usbcx_dtknqr3_s          cn56xx;
69388    struct cvmx_usbcx_dtknqr3_s          cn56xxp1;
69389} cvmx_usbcx_dtknqr3_t;
69390
69391
69392/**
69393 * cvmx_usbc#_dtknqr4
69394 *
69395 * Device IN Token Sequence Learning Queue Read Register 4 (DTKNQR4)
69396 *
69397 * A read from this register returns the last 8 endpoint entries of the learning queue.
69398 */
69399typedef union
69400{
69401    uint32_t u32;
69402    struct cvmx_usbcx_dtknqr4_s
69403    {
69404#if __BYTE_ORDER == __BIG_ENDIAN
69405        uint32_t eptkn                   : 32;      /**< Endpoint Token (EPTkn)
69406                                                         Four bits per token represent the endpoint number of the token:
69407                                                         * Bits [31:28]: Endpoint number of Token 29
69408                                                         * Bits [27:24]: Endpoint number of Token 28
69409                                                         - .......
69410                                                         * Bits [7:4]: Endpoint number of Token 23
69411                                                         * Bits [3:0]: Endpoint number of Token 22 */
69412#else
69413        uint32_t eptkn                   : 32;
69414#endif
69415    } s;
69416    struct cvmx_usbcx_dtknqr4_s          cn30xx;
69417    struct cvmx_usbcx_dtknqr4_s          cn31xx;
69418    struct cvmx_usbcx_dtknqr4_s          cn50xx;
69419    struct cvmx_usbcx_dtknqr4_s          cn52xx;
69420    struct cvmx_usbcx_dtknqr4_s          cn52xxp1;
69421    struct cvmx_usbcx_dtknqr4_s          cn56xx;
69422    struct cvmx_usbcx_dtknqr4_s          cn56xxp1;
69423} cvmx_usbcx_dtknqr4_t;
69424
69425
69426/**
69427 * cvmx_usbc#_gahbcfg
69428 *
69429 * Core AHB Configuration Register (GAHBCFG)
69430 *
69431 * This register can be used to configure the core after power-on or a change in mode of operation.
69432 * This register mainly contains AHB system-related configuration parameters. The AHB is the processor
69433 * interface to the O2P USB core. In general, software need not know about this interface except to
69434 * program the values as specified.
69435 *
69436 * The application must program this register as part of the O2P USB core initialization.
69437 * Do not change this register after the initial programming.
69438 */
69439typedef union
69440{
69441    uint32_t u32;
69442    struct cvmx_usbcx_gahbcfg_s
69443    {
69444#if __BYTE_ORDER == __BIG_ENDIAN
69445        uint32_t reserved_9_31           : 23;
69446        uint32_t ptxfemplvl              : 1;       /**< Periodic TxFIFO Empty Level (PTxFEmpLvl)
69447                                                         Software should set this bit to 0x1.
69448                                                         Indicates when the Periodic TxFIFO Empty Interrupt bit in the
69449                                                         Core Interrupt register (GINTSTS.PTxFEmp) is triggered. This
69450                                                         bit is used only in Slave mode.
69451                                                         * 1'b0: GINTSTS.PTxFEmp interrupt indicates that the Periodic
69452                                                           TxFIFO is half empty
69453                                                         * 1'b1: GINTSTS.PTxFEmp interrupt indicates that the Periodic
69454                                                           TxFIFO is completely empty */
69455        uint32_t nptxfemplvl             : 1;       /**< Non-Periodic TxFIFO Empty Level (NPTxFEmpLvl)
69456                                                         Software should set this bit to 0x1.
69457                                                         Indicates when the Non-Periodic TxFIFO Empty Interrupt bit in
69458                                                         the Core Interrupt register (GINTSTS.NPTxFEmp) is triggered.
69459                                                         This bit is used only in Slave mode.
69460                                                         * 1'b0: GINTSTS.NPTxFEmp interrupt indicates that the Non-
69461                                                            Periodic TxFIFO is half empty
69462                                                         * 1'b1: GINTSTS.NPTxFEmp interrupt indicates that the Non-
69463                                                            Periodic TxFIFO is completely empty */
69464        uint32_t reserved_6_6            : 1;
69465        uint32_t dmaen                   : 1;       /**< DMA Enable (DMAEn)
69466                                                         * 1'b0: Core operates in Slave mode
69467                                                         * 1'b1: Core operates in a DMA mode */
69468        uint32_t hbstlen                 : 4;       /**< Burst Length/Type (HBstLen)
69469                                                         This field has not effect and should be left as 0x0. */
69470        uint32_t glblintrmsk             : 1;       /**< Global Interrupt Mask (GlblIntrMsk)
69471                                                         Software should set this field to 0x1.
69472                                                         The application uses this bit to mask  or unmask the interrupt
69473                                                         line assertion to itself. Irrespective of this bit's setting, the
69474                                                         interrupt status registers are updated by the core.
69475                                                         * 1'b0: Mask the interrupt assertion to the application.
69476                                                         * 1'b1: Unmask the interrupt assertion to the application. */
69477#else
69478        uint32_t glblintrmsk             : 1;
69479        uint32_t hbstlen                 : 4;
69480        uint32_t dmaen                   : 1;
69481        uint32_t reserved_6_6            : 1;
69482        uint32_t nptxfemplvl             : 1;
69483        uint32_t ptxfemplvl              : 1;
69484        uint32_t reserved_9_31           : 23;
69485#endif
69486    } s;
69487    struct cvmx_usbcx_gahbcfg_s          cn30xx;
69488    struct cvmx_usbcx_gahbcfg_s          cn31xx;
69489    struct cvmx_usbcx_gahbcfg_s          cn50xx;
69490    struct cvmx_usbcx_gahbcfg_s          cn52xx;
69491    struct cvmx_usbcx_gahbcfg_s          cn52xxp1;
69492    struct cvmx_usbcx_gahbcfg_s          cn56xx;
69493    struct cvmx_usbcx_gahbcfg_s          cn56xxp1;
69494} cvmx_usbcx_gahbcfg_t;
69495
69496
69497/**
69498 * cvmx_usbc#_ghwcfg1
69499 *
69500 * User HW Config1 Register (GHWCFG1)
69501 *
69502 * This register contains the logical endpoint direction(s) of the O2P USB core.
69503 */
69504typedef union
69505{
69506    uint32_t u32;
69507    struct cvmx_usbcx_ghwcfg1_s
69508    {
69509#if __BYTE_ORDER == __BIG_ENDIAN
69510        uint32_t epdir                   : 32;      /**< Endpoint Direction (epdir)
69511                                                         Two bits per endpoint represent the direction.
69512                                                         * 2'b00: BIDIR (IN and OUT) endpoint
69513                                                         * 2'b01: IN endpoint
69514                                                         * 2'b10: OUT endpoint
69515                                                         * 2'b11: Reserved
69516                                                         Bits [31:30]: Endpoint 15 direction
69517                                                         Bits [29:28]: Endpoint 14 direction
69518                                                         - ...
69519                                                         Bits [3:2]: Endpoint 1 direction
69520                                                         Bits[1:0]: Endpoint 0 direction (always BIDIR) */
69521#else
69522        uint32_t epdir                   : 32;
69523#endif
69524    } s;
69525    struct cvmx_usbcx_ghwcfg1_s          cn30xx;
69526    struct cvmx_usbcx_ghwcfg1_s          cn31xx;
69527    struct cvmx_usbcx_ghwcfg1_s          cn50xx;
69528    struct cvmx_usbcx_ghwcfg1_s          cn52xx;
69529    struct cvmx_usbcx_ghwcfg1_s          cn52xxp1;
69530    struct cvmx_usbcx_ghwcfg1_s          cn56xx;
69531    struct cvmx_usbcx_ghwcfg1_s          cn56xxp1;
69532} cvmx_usbcx_ghwcfg1_t;
69533
69534
69535/**
69536 * cvmx_usbc#_ghwcfg2
69537 *
69538 * User HW Config2 Register (GHWCFG2)
69539 *
69540 * This register contains configuration options of the O2P USB core.
69541 */
69542typedef union
69543{
69544    uint32_t u32;
69545    struct cvmx_usbcx_ghwcfg2_s
69546    {
69547#if __BYTE_ORDER == __BIG_ENDIAN
69548        uint32_t reserved_31_31          : 1;
69549        uint32_t tknqdepth               : 5;       /**< Device Mode IN Token Sequence Learning Queue Depth
69550                                                         (TknQDepth)
69551                                                         Range: 0-30 */
69552        uint32_t ptxqdepth               : 2;       /**< Host Mode Periodic Request Queue Depth (PTxQDepth)
69553                                                         * 2'b00: 2
69554                                                         * 2'b01: 4
69555                                                         * 2'b10: 8
69556                                                         * Others: Reserved */
69557        uint32_t nptxqdepth              : 2;       /**< Non-Periodic Request Queue Depth (NPTxQDepth)
69558                                                         * 2'b00: 2
69559                                                         * 2'b01: 4
69560                                                         * 2'b10: 8
69561                                                         * Others: Reserved */
69562        uint32_t reserved_20_21          : 2;
69563        uint32_t dynfifosizing           : 1;       /**< Dynamic FIFO Sizing Enabled (DynFifoSizing)
69564                                                         * 1'b0: No
69565                                                         * 1'b1: Yes */
69566        uint32_t periosupport            : 1;       /**< Periodic OUT Channels Supported in Host Mode
69567                                                         (PerioSupport)
69568                                                         * 1'b0: No
69569                                                         * 1'b1: Yes */
69570        uint32_t numhstchnl              : 4;       /**< Number of Host Channels (NumHstChnl)
69571                                                         Indicates the number of host channels supported by the core in
69572                                                         Host mode. The range of this field is 0-15: 0 specifies 1
69573                                                         channel, 15 specifies 16 channels. */
69574        uint32_t numdeveps               : 4;       /**< Number of Device Endpoints (NumDevEps)
69575                                                         Indicates the number of device endpoints supported by the core
69576                                                         in Device mode in addition to control endpoint 0. The range of
69577                                                         this field is 1-15. */
69578        uint32_t fsphytype               : 2;       /**< Full-Speed PHY Interface Type (FSPhyType)
69579                                                         * 2'b00: Full-speed interface not supported
69580                                                         * 2'b01: Dedicated full-speed interface
69581                                                         * 2'b10: FS pins shared with UTMI+ pins
69582                                                         * 2'b11: FS pins shared with ULPI pins */
69583        uint32_t hsphytype               : 2;       /**< High-Speed PHY Interface Type (HSPhyType)
69584                                                         * 2'b00: High-Speed interface not supported
69585                                                         * 2'b01: UTMI+
69586                                                         * 2'b10: ULPI
69587                                                         * 2'b11: UTMI+ and ULPI */
69588        uint32_t singpnt                 : 1;       /**< Point-to-Point (SingPnt)
69589                                                         * 1'b0: Multi-point application
69590                                                         * 1'b1: Single-point application */
69591        uint32_t otgarch                 : 2;       /**< Architecture (OtgArch)
69592                                                         * 2'b00: Slave-Only
69593                                                         * 2'b01: External DMA
69594                                                         * 2'b10: Internal DMA
69595                                                         * Others: Reserved */
69596        uint32_t otgmode                 : 3;       /**< Mode of Operation (OtgMode)
69597                                                         * 3'b000: HNP- and SRP-Capable OTG (Host & Device)
69598                                                         * 3'b001: SRP-Capable OTG (Host & Device)
69599                                                         * 3'b010: Non-HNP and Non-SRP Capable OTG (Host &
69600                                                         Device)
69601                                                         * 3'b011: SRP-Capable Device
69602                                                         * 3'b100: Non-OTG Device
69603                                                         * 3'b101: SRP-Capable Host
69604                                                         * 3'b110: Non-OTG Host
69605                                                         * Others: Reserved */
69606#else
69607        uint32_t otgmode                 : 3;
69608        uint32_t otgarch                 : 2;
69609        uint32_t singpnt                 : 1;
69610        uint32_t hsphytype               : 2;
69611        uint32_t fsphytype               : 2;
69612        uint32_t numdeveps               : 4;
69613        uint32_t numhstchnl              : 4;
69614        uint32_t periosupport            : 1;
69615        uint32_t dynfifosizing           : 1;
69616        uint32_t reserved_20_21          : 2;
69617        uint32_t nptxqdepth              : 2;
69618        uint32_t ptxqdepth               : 2;
69619        uint32_t tknqdepth               : 5;
69620        uint32_t reserved_31_31          : 1;
69621#endif
69622    } s;
69623    struct cvmx_usbcx_ghwcfg2_s          cn30xx;
69624    struct cvmx_usbcx_ghwcfg2_s          cn31xx;
69625    struct cvmx_usbcx_ghwcfg2_s          cn50xx;
69626    struct cvmx_usbcx_ghwcfg2_s          cn52xx;
69627    struct cvmx_usbcx_ghwcfg2_s          cn52xxp1;
69628    struct cvmx_usbcx_ghwcfg2_s          cn56xx;
69629    struct cvmx_usbcx_ghwcfg2_s          cn56xxp1;
69630} cvmx_usbcx_ghwcfg2_t;
69631
69632
69633/**
69634 * cvmx_usbc#_ghwcfg3
69635 *
69636 * User HW Config3 Register (GHWCFG3)
69637 *
69638 * This register contains the configuration options of the O2P USB core.
69639 */
69640typedef union
69641{
69642    uint32_t u32;
69643    struct cvmx_usbcx_ghwcfg3_s
69644    {
69645#if __BYTE_ORDER == __BIG_ENDIAN
69646        uint32_t dfifodepth              : 16;      /**< DFIFO Depth (DfifoDepth)
69647                                                         This value is in terms of 32-bit words.
69648                                                         * Minimum value is 32
69649                                                         * Maximum value is 32768 */
69650        uint32_t reserved_13_15          : 3;
69651        uint32_t ahbphysync              : 1;       /**< AHB and PHY Synchronous (AhbPhySync)
69652                                                         Indicates whether AHB and PHY clocks are synchronous to
69653                                                         each other.
69654                                                         * 1'b0: No
69655                                                         * 1'b1: Yes
69656                                                         This bit is tied to 1. */
69657        uint32_t rsttype                 : 1;       /**< Reset Style for Clocked always Blocks in RTL (RstType)
69658                                                         * 1'b0: Asynchronous reset is used in the core
69659                                                         * 1'b1: Synchronous reset is used in the core */
69660        uint32_t optfeature              : 1;       /**< Optional Features Removed (OptFeature)
69661                                                         Indicates whether the User ID register, GPIO interface ports,
69662                                                         and SOF toggle and counter ports were removed for gate count
69663                                                         optimization. */
69664        uint32_t vendor_control_interface_support : 1;/**< Vendor Control Interface Support
69665                                                         * 1'b0: Vendor Control Interface is not available on the core.
69666                                                         * 1'b1: Vendor Control Interface is available. */
69667        uint32_t i2c_selection           : 1;       /**< I2C Selection
69668                                                         * 1'b0: I2C Interface is not available on the core.
69669                                                         * 1'b1: I2C Interface is available on the core. */
69670        uint32_t otgen                   : 1;       /**< OTG Function Enabled (OtgEn)
69671                                                         The application uses this bit to indicate the O2P USB core's
69672                                                         OTG capabilities.
69673                                                         * 1'b0: Not OTG capable
69674                                                         * 1'b1: OTG Capable */
69675        uint32_t pktsizewidth            : 3;       /**< Width of Packet Size Counters (PktSizeWidth)
69676                                                         * 3'b000: 4 bits
69677                                                         * 3'b001: 5 bits
69678                                                         * 3'b010: 6 bits
69679                                                         * 3'b011: 7 bits
69680                                                         * 3'b100: 8 bits
69681                                                         * 3'b101: 9 bits
69682                                                         * 3'b110: 10 bits
69683                                                         * Others: Reserved */
69684        uint32_t xfersizewidth           : 4;       /**< Width of Transfer Size Counters (XferSizeWidth)
69685                                                         * 4'b0000: 11 bits
69686                                                         * 4'b0001: 12 bits
69687                                                         - ...
69688                                                         * 4'b1000: 19 bits
69689                                                         * Others: Reserved */
69690#else
69691        uint32_t xfersizewidth           : 4;
69692        uint32_t pktsizewidth            : 3;
69693        uint32_t otgen                   : 1;
69694        uint32_t i2c_selection           : 1;
69695        uint32_t vendor_control_interface_support : 1;
69696        uint32_t optfeature              : 1;
69697        uint32_t rsttype                 : 1;
69698        uint32_t ahbphysync              : 1;
69699        uint32_t reserved_13_15          : 3;
69700        uint32_t dfifodepth              : 16;
69701#endif
69702    } s;
69703    struct cvmx_usbcx_ghwcfg3_s          cn30xx;
69704    struct cvmx_usbcx_ghwcfg3_s          cn31xx;
69705    struct cvmx_usbcx_ghwcfg3_s          cn50xx;
69706    struct cvmx_usbcx_ghwcfg3_s          cn52xx;
69707    struct cvmx_usbcx_ghwcfg3_s          cn52xxp1;
69708    struct cvmx_usbcx_ghwcfg3_s          cn56xx;
69709    struct cvmx_usbcx_ghwcfg3_s          cn56xxp1;
69710} cvmx_usbcx_ghwcfg3_t;
69711
69712
69713/**
69714 * cvmx_usbc#_ghwcfg4
69715 *
69716 * User HW Config4 Register (GHWCFG4)
69717 *
69718 * This register contains the configuration options of the O2P USB core.
69719 */
69720typedef union
69721{
69722    uint32_t u32;
69723    struct cvmx_usbcx_ghwcfg4_s
69724    {
69725#if __BYTE_ORDER == __BIG_ENDIAN
69726        uint32_t reserved_30_31          : 2;
69727        uint32_t numdevmodinend          : 4;       /**< Enable dedicatd transmit FIFO for device IN endpoints. */
69728        uint32_t endedtrfifo             : 1;       /**< Enable dedicatd transmit FIFO for device IN endpoints. */
69729        uint32_t sessendfltr             : 1;       /**< "session_end" Filter Enabled (SessEndFltr)
69730                                                         * 1'b0: No filter
69731                                                         * 1'b1: Filter */
69732        uint32_t bvalidfltr              : 1;       /**< "b_valid" Filter Enabled (BValidFltr)
69733                                                         * 1'b0: No filter
69734                                                         * 1'b1: Filter */
69735        uint32_t avalidfltr              : 1;       /**< "a_valid" Filter Enabled (AValidFltr)
69736                                                         * 1'b0: No filter
69737                                                         * 1'b1: Filter */
69738        uint32_t vbusvalidfltr           : 1;       /**< "vbus_valid" Filter Enabled (VBusValidFltr)
69739                                                         * 1'b0: No filter
69740                                                         * 1'b1: Filter */
69741        uint32_t iddgfltr                : 1;       /**< "iddig" Filter Enable (IddgFltr)
69742                                                         * 1'b0: No filter
69743                                                         * 1'b1: Filter */
69744        uint32_t numctleps               : 4;       /**< Number of Device Mode Control Endpoints in Addition to
69745                                                         Endpoint 0 (NumCtlEps)
69746                                                         Range: 1-15 */
69747        uint32_t phydatawidth            : 2;       /**< UTMI+ PHY/ULPI-to-Internal UTMI+ Wrapper Data Width
69748                                                         (PhyDataWidth)
69749                                                         When a ULPI PHY is used, an internal wrapper converts ULPI
69750                                                         to UTMI+.
69751                                                         * 2'b00: 8 bits
69752                                                         * 2'b01: 16 bits
69753                                                         * 2'b10: 8/16 bits, software selectable
69754                                                         * Others: Reserved */
69755        uint32_t reserved_6_13           : 8;
69756        uint32_t ahbfreq                 : 1;       /**< Minimum AHB Frequency Less Than 60 MHz (AhbFreq)
69757                                                         * 1'b0: No
69758                                                         * 1'b1: Yes */
69759        uint32_t enablepwropt            : 1;       /**< Enable Power Optimization? (EnablePwrOpt)
69760                                                         * 1'b0: No
69761                                                         * 1'b1: Yes */
69762        uint32_t numdevperioeps          : 4;       /**< Number of Device Mode Periodic IN Endpoints
69763                                                         (NumDevPerioEps)
69764                                                         Range: 0-15 */
69765#else
69766        uint32_t numdevperioeps          : 4;
69767        uint32_t enablepwropt            : 1;
69768        uint32_t ahbfreq                 : 1;
69769        uint32_t reserved_6_13           : 8;
69770        uint32_t phydatawidth            : 2;
69771        uint32_t numctleps               : 4;
69772        uint32_t iddgfltr                : 1;
69773        uint32_t vbusvalidfltr           : 1;
69774        uint32_t avalidfltr              : 1;
69775        uint32_t bvalidfltr              : 1;
69776        uint32_t sessendfltr             : 1;
69777        uint32_t endedtrfifo             : 1;
69778        uint32_t numdevmodinend          : 4;
69779        uint32_t reserved_30_31          : 2;
69780#endif
69781    } s;
69782    struct cvmx_usbcx_ghwcfg4_cn30xx
69783    {
69784#if __BYTE_ORDER == __BIG_ENDIAN
69785        uint32_t reserved_25_31          : 7;
69786        uint32_t sessendfltr             : 1;       /**< "session_end" Filter Enabled (SessEndFltr)
69787                                                         * 1'b0: No filter
69788                                                         * 1'b1: Filter */
69789        uint32_t bvalidfltr              : 1;       /**< "b_valid" Filter Enabled (BValidFltr)
69790                                                         * 1'b0: No filter
69791                                                         * 1'b1: Filter */
69792        uint32_t avalidfltr              : 1;       /**< "a_valid" Filter Enabled (AValidFltr)
69793                                                         * 1'b0: No filter
69794                                                         * 1'b1: Filter */
69795        uint32_t vbusvalidfltr           : 1;       /**< "vbus_valid" Filter Enabled (VBusValidFltr)
69796                                                         * 1'b0: No filter
69797                                                         * 1'b1: Filter */
69798        uint32_t iddgfltr                : 1;       /**< "iddig" Filter Enable (IddgFltr)
69799                                                         * 1'b0: No filter
69800                                                         * 1'b1: Filter */
69801        uint32_t numctleps               : 4;       /**< Number of Device Mode Control Endpoints in Addition to
69802                                                         Endpoint 0 (NumCtlEps)
69803                                                         Range: 1-15 */
69804        uint32_t phydatawidth            : 2;       /**< UTMI+ PHY/ULPI-to-Internal UTMI+ Wrapper Data Width
69805                                                         (PhyDataWidth)
69806                                                         When a ULPI PHY is used, an internal wrapper converts ULPI
69807                                                         to UTMI+.
69808                                                         * 2'b00: 8 bits
69809                                                         * 2'b01: 16 bits
69810                                                         * 2'b10: 8/16 bits, software selectable
69811                                                         * Others: Reserved */
69812        uint32_t reserved_6_13           : 8;
69813        uint32_t ahbfreq                 : 1;       /**< Minimum AHB Frequency Less Than 60 MHz (AhbFreq)
69814                                                         * 1'b0: No
69815                                                         * 1'b1: Yes */
69816        uint32_t enablepwropt            : 1;       /**< Enable Power Optimization? (EnablePwrOpt)
69817                                                         * 1'b0: No
69818                                                         * 1'b1: Yes */
69819        uint32_t numdevperioeps          : 4;       /**< Number of Device Mode Periodic IN Endpoints
69820                                                         (NumDevPerioEps)
69821                                                         Range: 0-15 */
69822#else
69823        uint32_t numdevperioeps          : 4;
69824        uint32_t enablepwropt            : 1;
69825        uint32_t ahbfreq                 : 1;
69826        uint32_t reserved_6_13           : 8;
69827        uint32_t phydatawidth            : 2;
69828        uint32_t numctleps               : 4;
69829        uint32_t iddgfltr                : 1;
69830        uint32_t vbusvalidfltr           : 1;
69831        uint32_t avalidfltr              : 1;
69832        uint32_t bvalidfltr              : 1;
69833        uint32_t sessendfltr             : 1;
69834        uint32_t reserved_25_31          : 7;
69835#endif
69836    } cn30xx;
69837    struct cvmx_usbcx_ghwcfg4_cn30xx     cn31xx;
69838    struct cvmx_usbcx_ghwcfg4_s          cn50xx;
69839    struct cvmx_usbcx_ghwcfg4_s          cn52xx;
69840    struct cvmx_usbcx_ghwcfg4_s          cn52xxp1;
69841    struct cvmx_usbcx_ghwcfg4_s          cn56xx;
69842    struct cvmx_usbcx_ghwcfg4_s          cn56xxp1;
69843} cvmx_usbcx_ghwcfg4_t;
69844
69845
69846/**
69847 * cvmx_usbc#_gintmsk
69848 *
69849 * Core Interrupt Mask Register (GINTMSK)
69850 *
69851 * This register works with the Core Interrupt register to interrupt the application.
69852 * When an interrupt bit is masked, the interrupt associated with that bit will not be generated.
69853 * However, the Core Interrupt (GINTSTS) register bit corresponding to that interrupt will still be set.
69854 * Mask interrupt: 1'b0, Unmask interrupt: 1'b1
69855 */
69856typedef union
69857{
69858    uint32_t u32;
69859    struct cvmx_usbcx_gintmsk_s
69860    {
69861#if __BYTE_ORDER == __BIG_ENDIAN
69862        uint32_t wkupintmsk              : 1;       /**< Resume/Remote Wakeup Detected Interrupt Mask
69863                                                         (WkUpIntMsk) */
69864        uint32_t sessreqintmsk           : 1;       /**< Session Request/New Session Detected Interrupt Mask
69865                                                         (SessReqIntMsk) */
69866        uint32_t disconnintmsk           : 1;       /**< Disconnect Detected Interrupt Mask (DisconnIntMsk) */
69867        uint32_t conidstschngmsk         : 1;       /**< Connector ID Status Change Mask (ConIDStsChngMsk) */
69868        uint32_t reserved_27_27          : 1;
69869        uint32_t ptxfempmsk              : 1;       /**< Periodic TxFIFO Empty Mask (PTxFEmpMsk) */
69870        uint32_t hchintmsk               : 1;       /**< Host Channels Interrupt Mask (HChIntMsk) */
69871        uint32_t prtintmsk               : 1;       /**< Host Port Interrupt Mask (PrtIntMsk) */
69872        uint32_t reserved_23_23          : 1;
69873        uint32_t fetsuspmsk              : 1;       /**< Data Fetch Suspended Mask (FetSuspMsk) */
69874        uint32_t incomplpmsk             : 1;       /**< Incomplete Periodic Transfer Mask (incomplPMsk)
69875                                                         Incomplete Isochronous OUT Transfer Mask
69876                                                         (incompISOOUTMsk) */
69877        uint32_t incompisoinmsk          : 1;       /**< Incomplete Isochronous IN Transfer Mask (incompISOINMsk) */
69878        uint32_t oepintmsk               : 1;       /**< OUT Endpoints Interrupt Mask (OEPIntMsk) */
69879        uint32_t inepintmsk              : 1;       /**< IN Endpoints Interrupt Mask (INEPIntMsk) */
69880        uint32_t epmismsk                : 1;       /**< Endpoint Mismatch Interrupt Mask (EPMisMsk) */
69881        uint32_t reserved_16_16          : 1;
69882        uint32_t eopfmsk                 : 1;       /**< End of Periodic Frame Interrupt Mask (EOPFMsk) */
69883        uint32_t isooutdropmsk           : 1;       /**< Isochronous OUT Packet Dropped Interrupt Mask
69884                                                         (ISOOutDropMsk) */
69885        uint32_t enumdonemsk             : 1;       /**< Enumeration Done Mask (EnumDoneMsk) */
69886        uint32_t usbrstmsk               : 1;       /**< USB Reset Mask (USBRstMsk) */
69887        uint32_t usbsuspmsk              : 1;       /**< USB Suspend Mask (USBSuspMsk) */
69888        uint32_t erlysuspmsk             : 1;       /**< Early Suspend Mask (ErlySuspMsk) */
69889        uint32_t i2cint                  : 1;       /**< I2C Interrupt Mask (I2CINT) */
69890        uint32_t ulpickintmsk            : 1;       /**< ULPI Carkit Interrupt Mask (ULPICKINTMsk)
69891                                                         I2C Carkit Interrupt Mask (I2CCKINTMsk) */
69892        uint32_t goutnakeffmsk           : 1;       /**< Global OUT NAK Effective Mask (GOUTNakEffMsk) */
69893        uint32_t ginnakeffmsk            : 1;       /**< Global Non-Periodic IN NAK Effective Mask (GINNakEffMsk) */
69894        uint32_t nptxfempmsk             : 1;       /**< Non-Periodic TxFIFO Empty Mask (NPTxFEmpMsk) */
69895        uint32_t rxflvlmsk               : 1;       /**< Receive FIFO Non-Empty Mask (RxFLvlMsk) */
69896        uint32_t sofmsk                  : 1;       /**< Start of (micro)Frame Mask (SofMsk) */
69897        uint32_t otgintmsk               : 1;       /**< OTG Interrupt Mask (OTGIntMsk) */
69898        uint32_t modemismsk              : 1;       /**< Mode Mismatch Interrupt Mask (ModeMisMsk) */
69899        uint32_t reserved_0_0            : 1;
69900#else
69901        uint32_t reserved_0_0            : 1;
69902        uint32_t modemismsk              : 1;
69903        uint32_t otgintmsk               : 1;
69904        uint32_t sofmsk                  : 1;
69905        uint32_t rxflvlmsk               : 1;
69906        uint32_t nptxfempmsk             : 1;
69907        uint32_t ginnakeffmsk            : 1;
69908        uint32_t goutnakeffmsk           : 1;
69909        uint32_t ulpickintmsk            : 1;
69910        uint32_t i2cint                  : 1;
69911        uint32_t erlysuspmsk             : 1;
69912        uint32_t usbsuspmsk              : 1;
69913        uint32_t usbrstmsk               : 1;
69914        uint32_t enumdonemsk             : 1;
69915        uint32_t isooutdropmsk           : 1;
69916        uint32_t eopfmsk                 : 1;
69917        uint32_t reserved_16_16          : 1;
69918        uint32_t epmismsk                : 1;
69919        uint32_t inepintmsk              : 1;
69920        uint32_t oepintmsk               : 1;
69921        uint32_t incompisoinmsk          : 1;
69922        uint32_t incomplpmsk             : 1;
69923        uint32_t fetsuspmsk              : 1;
69924        uint32_t reserved_23_23          : 1;
69925        uint32_t prtintmsk               : 1;
69926        uint32_t hchintmsk               : 1;
69927        uint32_t ptxfempmsk              : 1;
69928        uint32_t reserved_27_27          : 1;
69929        uint32_t conidstschngmsk         : 1;
69930        uint32_t disconnintmsk           : 1;
69931        uint32_t sessreqintmsk           : 1;
69932        uint32_t wkupintmsk              : 1;
69933#endif
69934    } s;
69935    struct cvmx_usbcx_gintmsk_s          cn30xx;
69936    struct cvmx_usbcx_gintmsk_s          cn31xx;
69937    struct cvmx_usbcx_gintmsk_s          cn50xx;
69938    struct cvmx_usbcx_gintmsk_s          cn52xx;
69939    struct cvmx_usbcx_gintmsk_s          cn52xxp1;
69940    struct cvmx_usbcx_gintmsk_s          cn56xx;
69941    struct cvmx_usbcx_gintmsk_s          cn56xxp1;
69942} cvmx_usbcx_gintmsk_t;
69943
69944
69945/**
69946 * cvmx_usbc#_gintsts
69947 *
69948 * Core Interrupt Register (GINTSTS)
69949 *
69950 * This register interrupts the application for system-level events in the current mode of operation
69951 * (Device mode or Host mode). It is shown in Interrupt. Some of the bits in this register are valid only in Host mode,
69952 * while others are valid in Device mode only. This register also indicates the current mode of operation.
69953 * In order to clear the interrupt status bits of type R_SS_WC, the application must write 1'b1 into the bit.
69954 * The FIFO status interrupts are read only; once software reads from or writes to the FIFO while servicing these
69955 * interrupts, FIFO interrupt conditions are cleared automatically.
69956 */
69957typedef union
69958{
69959    uint32_t u32;
69960    struct cvmx_usbcx_gintsts_s
69961    {
69962#if __BYTE_ORDER == __BIG_ENDIAN
69963        uint32_t wkupint                 : 1;       /**< Resume/Remote Wakeup Detected Interrupt (WkUpInt)
69964                                                         In Device mode, this interrupt is asserted when a resume is
69965                                                         detected on the USB. In Host mode, this interrupt is asserted
69966                                                         when a remote wakeup is detected on the USB.
69967                                                         For more information on how to use this interrupt, see "Partial
69968                                                         Power-Down and Clock Gating Programming Model" on
69969                                                         page 353. */
69970        uint32_t sessreqint              : 1;       /**< Session Request/New Session Detected Interrupt (SessReqInt)
69971                                                         In Host mode, this interrupt is asserted when a session request
69972                                                         is detected from the device. In Device mode, this interrupt is
69973                                                         asserted when the utmiotg_bvalid signal goes high.
69974                                                         For more information on how to use this interrupt, see "Partial
69975                                                         Power-Down and Clock Gating Programming Model" on
69976                                                         page 353. */
69977        uint32_t disconnint              : 1;       /**< Disconnect Detected Interrupt (DisconnInt)
69978                                                         Asserted when a device disconnect is detected. */
69979        uint32_t conidstschng            : 1;       /**< Connector ID Status Change (ConIDStsChng)
69980                                                         The core sets this bit when there is a change in connector ID
69981                                                         status. */
69982        uint32_t reserved_27_27          : 1;
69983        uint32_t ptxfemp                 : 1;       /**< Periodic TxFIFO Empty (PTxFEmp)
69984                                                         Asserted when the Periodic Transmit FIFO is either half or
69985                                                         completely empty and there is space for at least one entry to be
69986                                                         written in the Periodic Request Queue. The half or completely
69987                                                         empty status is determined by the Periodic TxFIFO Empty Level
69988                                                         bit in the Core AHB Configuration register
69989                                                         (GAHBCFG.PTxFEmpLvl). */
69990        uint32_t hchint                  : 1;       /**< Host Channels Interrupt (HChInt)
69991                                                         The core sets this bit to indicate that an interrupt is pending on
69992                                                         one of the channels of the core (in Host mode). The application
69993                                                         must read the Host All Channels Interrupt (HAINT) register to
69994                                                         determine the exact number of the channel on which the
69995                                                         interrupt occurred, and then read the corresponding Host
69996                                                         Channel-n Interrupt (HCINTn) register to determine the exact
69997                                                         cause of the interrupt. The application must clear the
69998                                                         appropriate status bit in the HCINTn register to clear this bit. */
69999        uint32_t prtint                  : 1;       /**< Host Port Interrupt (PrtInt)
70000                                                         The core sets this bit to indicate a change in port status of one
70001                                                         of the O2P USB core ports in Host mode. The application must
70002                                                         read the Host Port Control and Status (HPRT) register to
70003                                                         determine the exact event that caused this interrupt. The
70004                                                         application must clear the appropriate status bit in the Host Port
70005                                                         Control and Status register to clear this bit. */
70006        uint32_t reserved_23_23          : 1;
70007        uint32_t fetsusp                 : 1;       /**< Data Fetch Suspended (FetSusp)
70008                                                         This interrupt is valid only in DMA mode. This interrupt indicates
70009                                                         that the core has stopped fetching data for IN endpoints due to
70010                                                         the unavailability of TxFIFO space or Request Queue space.
70011                                                         This interrupt is used by the application for an endpoint
70012                                                         mismatch algorithm. */
70013        uint32_t incomplp                : 1;       /**< Incomplete Periodic Transfer (incomplP)
70014                                                         In Host mode, the core sets this interrupt bit when there are
70015                                                         incomplete periodic transactions still pending which are
70016                                                         scheduled for the current microframe.
70017                                                         Incomplete Isochronous OUT Transfer (incompISOOUT)
70018                                                         The Device mode, the core sets this interrupt to indicate that
70019                                                         there is at least one isochronous OUT endpoint on which the
70020                                                         transfer is not completed in the current microframe. This
70021                                                         interrupt is asserted along with the End of Periodic Frame
70022                                                         Interrupt (EOPF) bit in this register. */
70023        uint32_t incompisoin             : 1;       /**< Incomplete Isochronous IN Transfer (incompISOIN)
70024                                                         The core sets this interrupt to indicate that there is at least one
70025                                                         isochronous IN endpoint on which the transfer is not completed
70026                                                         in the current microframe. This interrupt is asserted along with
70027                                                         the End of Periodic Frame Interrupt (EOPF) bit in this register. */
70028        uint32_t oepint                  : 1;       /**< OUT Endpoints Interrupt (OEPInt)
70029                                                         The core sets this bit to indicate that an interrupt is pending on
70030                                                         one of the OUT endpoints of the core (in Device mode). The
70031                                                         application must read the Device All Endpoints Interrupt
70032                                                         (DAINT) register to determine the exact number of the OUT
70033                                                         endpoint on which the interrupt occurred, and then read the
70034                                                         corresponding Device OUT Endpoint-n Interrupt (DOEPINTn)
70035                                                         register to determine the exact cause of the interrupt. The
70036                                                         application must clear the appropriate status bit in the
70037                                                         corresponding DOEPINTn register to clear this bit. */
70038        uint32_t iepint                  : 1;       /**< IN Endpoints Interrupt (IEPInt)
70039                                                         The core sets this bit to indicate that an interrupt is pending on
70040                                                         one of the IN endpoints of the core (in Device mode). The
70041                                                         application must read the Device All Endpoints Interrupt
70042                                                         (DAINT) register to determine the exact number of the IN
70043                                                         endpoint on which the interrupt occurred, and then read the
70044                                                         corresponding Device IN Endpoint-n Interrupt (DIEPINTn)
70045                                                         register to determine the exact cause of the interrupt. The
70046                                                         application must clear the appropriate status bit in the
70047                                                         corresponding DIEPINTn register to clear this bit. */
70048        uint32_t epmis                   : 1;       /**< Endpoint Mismatch Interrupt (EPMis)
70049                                                         Indicates that an IN token has been received for a non-periodic
70050                                                         endpoint, but the data for another endpoint is present in the top
70051                                                         of the Non-Periodic Transmit FIFO and the IN endpoint
70052                                                         mismatch count programmed by the application has expired. */
70053        uint32_t reserved_16_16          : 1;
70054        uint32_t eopf                    : 1;       /**< End of Periodic Frame Interrupt (EOPF)
70055                                                         Indicates that the period specified in the Periodic Frame Interval
70056                                                         field of the Device Configuration register (DCFG.PerFrInt) has
70057                                                         been reached in the current microframe. */
70058        uint32_t isooutdrop              : 1;       /**< Isochronous OUT Packet Dropped Interrupt (ISOOutDrop)
70059                                                         The core sets this bit when it fails to write an isochronous OUT
70060                                                         packet into the RxFIFO because the RxFIFO doesn't have
70061                                                         enough space to accommodate a maximum packet size packet
70062                                                         for the isochronous OUT endpoint. */
70063        uint32_t enumdone                : 1;       /**< Enumeration Done (EnumDone)
70064                                                         The core sets this bit to indicate that speed enumeration is
70065                                                         complete. The application must read the Device Status (DSTS)
70066                                                         register to obtain the enumerated speed. */
70067        uint32_t usbrst                  : 1;       /**< USB Reset (USBRst)
70068                                                         The core sets this bit to indicate that a reset is detected on the
70069                                                         USB. */
70070        uint32_t usbsusp                 : 1;       /**< USB Suspend (USBSusp)
70071                                                         The core sets this bit to indicate that a suspend was detected
70072                                                         on the USB. The core enters the Suspended state when there
70073                                                         is no activity on the phy_line_state_i signal for an extended
70074                                                         period of time. */
70075        uint32_t erlysusp                : 1;       /**< Early Suspend (ErlySusp)
70076                                                         The core sets this bit to indicate that an Idle state has been
70077                                                         detected on the USB for 3 ms. */
70078        uint32_t i2cint                  : 1;       /**< I2C Interrupt (I2CINT)
70079                                                         This bit is always 0x0. */
70080        uint32_t ulpickint               : 1;       /**< ULPI Carkit Interrupt (ULPICKINT)
70081                                                         This bit is always 0x0. */
70082        uint32_t goutnakeff              : 1;       /**< Global OUT NAK Effective (GOUTNakEff)
70083                                                         Indicates that the Set Global OUT NAK bit in the Device Control
70084                                                         register (DCTL.SGOUTNak), set by the application, has taken
70085                                                         effect in the core. This bit can be cleared by writing the Clear
70086                                                         Global OUT NAK bit in the Device Control register
70087                                                         (DCTL.CGOUTNak). */
70088        uint32_t ginnakeff               : 1;       /**< Global IN Non-Periodic NAK Effective (GINNakEff)
70089                                                         Indicates that the Set Global Non-Periodic IN NAK bit in the
70090                                                         Device Control register (DCTL.SGNPInNak), set by the
70091                                                         application, has taken effect in the core. That is, the core has
70092                                                         sampled the Global IN NAK bit set by the application. This bit
70093                                                         can be cleared by clearing the Clear Global Non-Periodic IN
70094                                                         NAK bit in the Device Control register (DCTL.CGNPInNak).
70095                                                         This interrupt does not necessarily mean that a NAK handshake
70096                                                         is sent out on the USB. The STALL bit takes precedence over
70097                                                         the NAK bit. */
70098        uint32_t nptxfemp                : 1;       /**< Non-Periodic TxFIFO Empty (NPTxFEmp)
70099                                                         This interrupt is asserted when the Non-Periodic TxFIFO is
70100                                                         either half or completely empty, and there is space for at least
70101                                                         one entry to be written to the Non-Periodic Transmit Request
70102                                                         Queue. The half or completely empty status is determined by
70103                                                         the Non-Periodic TxFIFO Empty Level bit in the Core AHB
70104                                                         Configuration register (GAHBCFG.NPTxFEmpLvl). */
70105        uint32_t rxflvl                  : 1;       /**< RxFIFO Non-Empty (RxFLvl)
70106                                                         Indicates that there is at least one packet pending to be read
70107                                                         from the RxFIFO. */
70108        uint32_t sof                     : 1;       /**< Start of (micro)Frame (Sof)
70109                                                         In Host mode, the core sets this bit to indicate that an SOF
70110                                                         (FS), micro-SOF (HS), or Keep-Alive (LS) is transmitted on the
70111                                                         USB. The application must write a 1 to this bit to clear the
70112                                                         interrupt.
70113                                                         In Device mode, in the core sets this bit to indicate that an SOF
70114                                                         token has been received on the USB. The application can read
70115                                                         the Device Status register to get the current (micro)frame
70116                                                         number. This interrupt is seen only when the core is operating
70117                                                         at either HS or FS. */
70118        uint32_t otgint                  : 1;       /**< OTG Interrupt (OTGInt)
70119                                                         The core sets this bit to indicate an OTG protocol event. The
70120                                                         application must read the OTG Interrupt Status (GOTGINT)
70121                                                         register to determine the exact event that caused this interrupt.
70122                                                         The application must clear the appropriate status bit in the
70123                                                         GOTGINT register to clear this bit. */
70124        uint32_t modemis                 : 1;       /**< Mode Mismatch Interrupt (ModeMis)
70125                                                         The core sets this bit when the application is trying to access:
70126                                                         * A Host mode register, when the core is operating in Device
70127                                                         mode
70128                                                         * A Device mode register, when the core is operating in Host
70129                                                           mode
70130                                                           The register access is completed on the AHB with an OKAY
70131                                                           response, but is ignored by the core internally and doesn't
70132                                                         affect the operation of the core. */
70133        uint32_t curmod                  : 1;       /**< Current Mode of Operation (CurMod)
70134                                                         Indicates the current mode of operation.
70135                                                         * 1'b0: Device mode
70136                                                         * 1'b1: Host mode */
70137#else
70138        uint32_t curmod                  : 1;
70139        uint32_t modemis                 : 1;
70140        uint32_t otgint                  : 1;
70141        uint32_t sof                     : 1;
70142        uint32_t rxflvl                  : 1;
70143        uint32_t nptxfemp                : 1;
70144        uint32_t ginnakeff               : 1;
70145        uint32_t goutnakeff              : 1;
70146        uint32_t ulpickint               : 1;
70147        uint32_t i2cint                  : 1;
70148        uint32_t erlysusp                : 1;
70149        uint32_t usbsusp                 : 1;
70150        uint32_t usbrst                  : 1;
70151        uint32_t enumdone                : 1;
70152        uint32_t isooutdrop              : 1;
70153        uint32_t eopf                    : 1;
70154        uint32_t reserved_16_16          : 1;
70155        uint32_t epmis                   : 1;
70156        uint32_t iepint                  : 1;
70157        uint32_t oepint                  : 1;
70158        uint32_t incompisoin             : 1;
70159        uint32_t incomplp                : 1;
70160        uint32_t fetsusp                 : 1;
70161        uint32_t reserved_23_23          : 1;
70162        uint32_t prtint                  : 1;
70163        uint32_t hchint                  : 1;
70164        uint32_t ptxfemp                 : 1;
70165        uint32_t reserved_27_27          : 1;
70166        uint32_t conidstschng            : 1;
70167        uint32_t disconnint              : 1;
70168        uint32_t sessreqint              : 1;
70169        uint32_t wkupint                 : 1;
70170#endif
70171    } s;
70172    struct cvmx_usbcx_gintsts_s          cn30xx;
70173    struct cvmx_usbcx_gintsts_s          cn31xx;
70174    struct cvmx_usbcx_gintsts_s          cn50xx;
70175    struct cvmx_usbcx_gintsts_s          cn52xx;
70176    struct cvmx_usbcx_gintsts_s          cn52xxp1;
70177    struct cvmx_usbcx_gintsts_s          cn56xx;
70178    struct cvmx_usbcx_gintsts_s          cn56xxp1;
70179} cvmx_usbcx_gintsts_t;
70180
70181
70182/**
70183 * cvmx_usbc#_gnptxfsiz
70184 *
70185 * Non-Periodic Transmit FIFO Size Register (GNPTXFSIZ)
70186 *
70187 * The application can program the RAM size and the memory start address for the Non-Periodic TxFIFO.
70188 */
70189typedef union
70190{
70191    uint32_t u32;
70192    struct cvmx_usbcx_gnptxfsiz_s
70193    {
70194#if __BYTE_ORDER == __BIG_ENDIAN
70195        uint32_t nptxfdep                : 16;      /**< Non-Periodic TxFIFO Depth (NPTxFDep)
70196                                                         This value is in terms of 32-bit words.
70197                                                         Minimum value is 16
70198                                                         Maximum value is 32768 */
70199        uint32_t nptxfstaddr             : 16;      /**< Non-Periodic Transmit RAM Start Address (NPTxFStAddr)
70200                                                         This field contains the memory start address for Non-Periodic
70201                                                         Transmit FIFO RAM. */
70202#else
70203        uint32_t nptxfstaddr             : 16;
70204        uint32_t nptxfdep                : 16;
70205#endif
70206    } s;
70207    struct cvmx_usbcx_gnptxfsiz_s        cn30xx;
70208    struct cvmx_usbcx_gnptxfsiz_s        cn31xx;
70209    struct cvmx_usbcx_gnptxfsiz_s        cn50xx;
70210    struct cvmx_usbcx_gnptxfsiz_s        cn52xx;
70211    struct cvmx_usbcx_gnptxfsiz_s        cn52xxp1;
70212    struct cvmx_usbcx_gnptxfsiz_s        cn56xx;
70213    struct cvmx_usbcx_gnptxfsiz_s        cn56xxp1;
70214} cvmx_usbcx_gnptxfsiz_t;
70215
70216
70217/**
70218 * cvmx_usbc#_gnptxsts
70219 *
70220 * Non-Periodic Transmit FIFO/Queue Status Register (GNPTXSTS)
70221 *
70222 * This read-only register contains the free space information for the Non-Periodic TxFIFO and
70223 * the Non-Periodic Transmit Request Queue
70224 */
70225typedef union
70226{
70227    uint32_t u32;
70228    struct cvmx_usbcx_gnptxsts_s
70229    {
70230#if __BYTE_ORDER == __BIG_ENDIAN
70231        uint32_t reserved_31_31          : 1;
70232        uint32_t nptxqtop                : 7;       /**< Top of the Non-Periodic Transmit Request Queue (NPTxQTop)
70233                                                         Entry in the Non-Periodic Tx Request Queue that is currently
70234                                                         being processed by the MAC.
70235                                                         * Bits [30:27]: Channel/endpoint number
70236                                                         * Bits [26:25]:
70237                                                           - 2'b00: IN/OUT token
70238                                                           - 2'b01: Zero-length transmit packet (device IN/host OUT)
70239                                                           - 2'b10: PING/CSPLIT token
70240                                                           - 2'b11: Channel halt command
70241                                                         * Bit [24]: Terminate (last entry for selected channel/endpoint) */
70242        uint32_t nptxqspcavail           : 8;       /**< Non-Periodic Transmit Request Queue Space Available
70243                                                         (NPTxQSpcAvail)
70244                                                         Indicates the amount of free space available in the Non-
70245                                                         Periodic Transmit Request Queue. This queue holds both IN
70246                                                         and OUT requests in Host mode. Device mode has only IN
70247                                                         requests.
70248                                                         * 8'h0: Non-Periodic Transmit Request Queue is full
70249                                                         * 8'h1: 1 location available
70250                                                         * 8'h2: 2 locations available
70251                                                         * n: n locations available (0..8)
70252                                                         * Others: Reserved */
70253        uint32_t nptxfspcavail           : 16;      /**< Non-Periodic TxFIFO Space Avail (NPTxFSpcAvail)
70254                                                         Indicates the amount of free space available in the Non-
70255                                                         Periodic TxFIFO.
70256                                                         Values are in terms of 32-bit words.
70257                                                         * 16'h0: Non-Periodic TxFIFO is full
70258                                                         * 16'h1: 1 word available
70259                                                         * 16'h2: 2 words available
70260                                                         * 16'hn: n words available (where 0..32768)
70261                                                         * 16'h8000: 32768 words available
70262                                                         * Others: Reserved */
70263#else
70264        uint32_t nptxfspcavail           : 16;
70265        uint32_t nptxqspcavail           : 8;
70266        uint32_t nptxqtop                : 7;
70267        uint32_t reserved_31_31          : 1;
70268#endif
70269    } s;
70270    struct cvmx_usbcx_gnptxsts_s         cn30xx;
70271    struct cvmx_usbcx_gnptxsts_s         cn31xx;
70272    struct cvmx_usbcx_gnptxsts_s         cn50xx;
70273    struct cvmx_usbcx_gnptxsts_s         cn52xx;
70274    struct cvmx_usbcx_gnptxsts_s         cn52xxp1;
70275    struct cvmx_usbcx_gnptxsts_s         cn56xx;
70276    struct cvmx_usbcx_gnptxsts_s         cn56xxp1;
70277} cvmx_usbcx_gnptxsts_t;
70278
70279
70280/**
70281 * cvmx_usbc#_gotgctl
70282 *
70283 * OTG Control and Status Register (GOTGCTL)
70284 *
70285 * The OTG Control and Status register controls the behavior and reflects the status of the OTG function of the core.:
70286 */
70287typedef union
70288{
70289    uint32_t u32;
70290    struct cvmx_usbcx_gotgctl_s
70291    {
70292#if __BYTE_ORDER == __BIG_ENDIAN
70293        uint32_t reserved_20_31          : 12;
70294        uint32_t bsesvld                 : 1;       /**< B-Session Valid (BSesVld)
70295                                                         Valid only when O2P USB core is configured as a USB device.
70296                                                         Indicates the Device mode transceiver status.
70297                                                         * 1'b0: B-session is not valid.
70298                                                         * 1'b1: B-session is valid. */
70299        uint32_t asesvld                 : 1;       /**< A-Session Valid (ASesVld)
70300                                                         Valid only when O2P USB core is configured as a USB host.
70301                                                         Indicates the Host mode transceiver status.
70302                                                         * 1'b0: A-session is not valid
70303                                                         * 1'b1: A-session is valid */
70304        uint32_t dbnctime                : 1;       /**< Long/Short Debounce Time (DbncTime)
70305                                                         In the present version of the core this bit will only read as '0'. */
70306        uint32_t conidsts                : 1;       /**< Connector ID Status (ConIDSts)
70307                                                         Indicates the connector ID status on a connect event.
70308                                                         * 1'b0: The O2P USB core is in A-device mode
70309                                                         * 1'b1: The O2P USB core is in B-device mode */
70310        uint32_t reserved_12_15          : 4;
70311        uint32_t devhnpen                : 1;       /**< Device HNP Enabled (DevHNPEn)
70312                                                         Since O2P USB core is not HNP capable this bit is 0x0. */
70313        uint32_t hstsethnpen             : 1;       /**< Host Set HNP Enable (HstSetHNPEn)
70314                                                         Since O2P USB core is not HNP capable this bit is 0x0. */
70315        uint32_t hnpreq                  : 1;       /**< HNP Request (HNPReq)
70316                                                         Since O2P USB core is not HNP capable this bit is 0x0. */
70317        uint32_t hstnegscs               : 1;       /**< Host Negotiation Success (HstNegScs)
70318                                                         Since O2P USB core is not HNP capable this bit is 0x0. */
70319        uint32_t reserved_2_7            : 6;
70320        uint32_t sesreq                  : 1;       /**< Session Request (SesReq)
70321                                                         Since O2P USB core is not SRP capable this bit is 0x0. */
70322        uint32_t sesreqscs               : 1;       /**< Session Request Success (SesReqScs)
70323                                                         Since O2P USB core is not SRP capable this bit is 0x0. */
70324#else
70325        uint32_t sesreqscs               : 1;
70326        uint32_t sesreq                  : 1;
70327        uint32_t reserved_2_7            : 6;
70328        uint32_t hstnegscs               : 1;
70329        uint32_t hnpreq                  : 1;
70330        uint32_t hstsethnpen             : 1;
70331        uint32_t devhnpen                : 1;
70332        uint32_t reserved_12_15          : 4;
70333        uint32_t conidsts                : 1;
70334        uint32_t dbnctime                : 1;
70335        uint32_t asesvld                 : 1;
70336        uint32_t bsesvld                 : 1;
70337        uint32_t reserved_20_31          : 12;
70338#endif
70339    } s;
70340    struct cvmx_usbcx_gotgctl_s          cn30xx;
70341    struct cvmx_usbcx_gotgctl_s          cn31xx;
70342    struct cvmx_usbcx_gotgctl_s          cn50xx;
70343    struct cvmx_usbcx_gotgctl_s          cn52xx;
70344    struct cvmx_usbcx_gotgctl_s          cn52xxp1;
70345    struct cvmx_usbcx_gotgctl_s          cn56xx;
70346    struct cvmx_usbcx_gotgctl_s          cn56xxp1;
70347} cvmx_usbcx_gotgctl_t;
70348
70349
70350/**
70351 * cvmx_usbc#_gotgint
70352 *
70353 * OTG Interrupt Register (GOTGINT)
70354 *
70355 * The application reads this register whenever there is an OTG interrupt and clears the bits in this register
70356 * to clear the OTG interrupt. It is shown in Interrupt .:
70357 */
70358typedef union
70359{
70360    uint32_t u32;
70361    struct cvmx_usbcx_gotgint_s
70362    {
70363#if __BYTE_ORDER == __BIG_ENDIAN
70364        uint32_t reserved_20_31          : 12;
70365        uint32_t dbncedone               : 1;       /**< Debounce Done (DbnceDone)
70366                                                         In the present version of the code this bit is tied to '0'. */
70367        uint32_t adevtoutchg             : 1;       /**< A-Device Timeout Change (ADevTOUTChg)
70368                                                         Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */
70369        uint32_t hstnegdet               : 1;       /**< Host Negotiation Detected (HstNegDet)
70370                                                         Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */
70371        uint32_t reserved_10_16          : 7;
70372        uint32_t hstnegsucstschng        : 1;       /**< Host Negotiation Success Status Change (HstNegSucStsChng)
70373                                                         Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */
70374        uint32_t sesreqsucstschng        : 1;       /**< Session Request Success Status Change
70375                                                         Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */
70376        uint32_t reserved_3_7            : 5;
70377        uint32_t sesenddet               : 1;       /**< Session End Detected (SesEndDet)
70378                                                         Since O2P USB core is not HNP or SRP capable this bit is always 0x0. */
70379        uint32_t reserved_0_1            : 2;
70380#else
70381        uint32_t reserved_0_1            : 2;
70382        uint32_t sesenddet               : 1;
70383        uint32_t reserved_3_7            : 5;
70384        uint32_t sesreqsucstschng        : 1;
70385        uint32_t hstnegsucstschng        : 1;
70386        uint32_t reserved_10_16          : 7;
70387        uint32_t hstnegdet               : 1;
70388        uint32_t adevtoutchg             : 1;
70389        uint32_t dbncedone               : 1;
70390        uint32_t reserved_20_31          : 12;
70391#endif
70392    } s;
70393    struct cvmx_usbcx_gotgint_s          cn30xx;
70394    struct cvmx_usbcx_gotgint_s          cn31xx;
70395    struct cvmx_usbcx_gotgint_s          cn50xx;
70396    struct cvmx_usbcx_gotgint_s          cn52xx;
70397    struct cvmx_usbcx_gotgint_s          cn52xxp1;
70398    struct cvmx_usbcx_gotgint_s          cn56xx;
70399    struct cvmx_usbcx_gotgint_s          cn56xxp1;
70400} cvmx_usbcx_gotgint_t;
70401
70402
70403/**
70404 * cvmx_usbc#_grstctl
70405 *
70406 * Core Reset Register (GRSTCTL)
70407 *
70408 * The application uses this register to reset various hardware features inside the core.
70409 */
70410typedef union
70411{
70412    uint32_t u32;
70413    struct cvmx_usbcx_grstctl_s
70414    {
70415#if __BYTE_ORDER == __BIG_ENDIAN
70416        uint32_t ahbidle                 : 1;       /**< AHB Master Idle (AHBIdle)
70417                                                         Indicates that the AHB Master State Machine is in the IDLE
70418                                                         condition. */
70419        uint32_t dmareq                  : 1;       /**< DMA Request Signal (DMAReq)
70420                                                         Indicates that the DMA request is in progress. Used for debug. */
70421        uint32_t reserved_11_29          : 19;
70422        uint32_t txfnum                  : 5;       /**< TxFIFO Number (TxFNum)
70423                                                         This is the FIFO number that must be flushed using the TxFIFO
70424                                                         Flush bit. This field must not be changed until the core clears
70425                                                         the TxFIFO Flush bit.
70426                                                         * 5'h0: Non-Periodic TxFIFO flush
70427                                                         * 5'h1: Periodic TxFIFO 1 flush in Device mode or Periodic
70428                                                         TxFIFO flush in Host mode
70429                                                         * 5'h2: Periodic TxFIFO 2 flush in Device mode
70430                                                         - ...
70431                                                         * 5'hF: Periodic TxFIFO 15 flush in Device mode
70432                                                         * 5'h10: Flush all the Periodic and Non-Periodic TxFIFOs in the
70433                                                         core */
70434        uint32_t txfflsh                 : 1;       /**< TxFIFO Flush (TxFFlsh)
70435                                                         This bit selectively flushes a single or all transmit FIFOs, but
70436                                                         cannot do so if the core is in the midst of a transaction.
70437                                                         The application must only write this bit after checking that the
70438                                                         core is neither writing to the TxFIFO nor reading from the
70439                                                         TxFIFO.
70440                                                         The application must wait until the core clears this bit before
70441                                                         performing any operations. This bit takes 8 clocks (of phy_clk or
70442                                                         hclk, whichever is slower) to clear. */
70443        uint32_t rxfflsh                 : 1;       /**< RxFIFO Flush (RxFFlsh)
70444                                                         The application can flush the entire RxFIFO using this bit, but
70445                                                         must first ensure that the core is not in the middle of a
70446                                                         transaction.
70447                                                         The application must only write to this bit after checking that the
70448                                                         core is neither reading from the RxFIFO nor writing to the
70449                                                         RxFIFO.
70450                                                         The application must wait until the bit is cleared before
70451                                                         performing any other operations. This bit will take 8 clocks
70452                                                         (slowest of PHY or AHB clock) to clear. */
70453        uint32_t intknqflsh              : 1;       /**< IN Token Sequence Learning Queue Flush (INTknQFlsh)
70454                                                         The application writes this bit to flush the IN Token Sequence
70455                                                         Learning Queue. */
70456        uint32_t frmcntrrst              : 1;       /**< Host Frame Counter Reset (FrmCntrRst)
70457                                                         The application writes this bit to reset the (micro)frame number
70458                                                         counter inside the core. When the (micro)frame counter is reset,
70459                                                         the subsequent SOF sent out by the core will have a
70460                                                         (micro)frame number of 0. */
70461        uint32_t hsftrst                 : 1;       /**< HClk Soft Reset (HSftRst)
70462                                                         The application uses this bit to flush the control logic in the AHB
70463                                                         Clock domain. Only AHB Clock Domain pipelines are reset.
70464                                                         * FIFOs are not flushed with this bit.
70465                                                         * All state machines in the AHB clock domain are reset to the
70466                                                           Idle state after terminating the transactions on the AHB,
70467                                                           following the protocol.
70468                                                         * CSR control bits used by the AHB clock domain state
70469                                                           machines are cleared.
70470                                                         * To clear this interrupt, status mask bits that control the
70471                                                           interrupt status and are generated by the AHB clock domain
70472                                                           state machine are cleared.
70473                                                         * Because interrupt status bits are not cleared, the application
70474                                                           can get the status of any core events that occurred after it set
70475                                                           this bit.
70476                                                           This is a self-clearing bit that the core clears after all necessary
70477                                                           logic is reset in the core. This may take several clocks,
70478                                                           depending on the core's current state. */
70479        uint32_t csftrst                 : 1;       /**< Core Soft Reset (CSftRst)
70480                                                         Resets the hclk and phy_clock domains as follows:
70481                                                         * Clears the interrupts and all the CSR registers except the
70482                                                           following register bits:
70483                                                           - PCGCCTL.RstPdwnModule
70484                                                           - PCGCCTL.GateHclk
70485                                                           - PCGCCTL.PwrClmp
70486                                                           - PCGCCTL.StopPPhyLPwrClkSelclk
70487                                                           - GUSBCFG.PhyLPwrClkSel
70488                                                           - GUSBCFG.DDRSel
70489                                                           - GUSBCFG.PHYSel
70490                                                           - GUSBCFG.FSIntf
70491                                                           - GUSBCFG.ULPI_UTMI_Sel
70492                                                           - GUSBCFG.PHYIf
70493                                                           - HCFG.FSLSPclkSel
70494                                                           - DCFG.DevSpd
70495                                                         * All module state machines (except the AHB Slave Unit) are
70496                                                           reset to the IDLE state, and all the transmit FIFOs and the
70497                                                           receive FIFO are flushed.
70498                                                         * Any transactions on the AHB Master are terminated as soon
70499                                                           as possible, after gracefully completing the last data phase of
70500                                                           an AHB transfer. Any transactions on the USB are terminated
70501                                                           immediately.
70502                                                           The application can write to this bit any time it wants to reset
70503                                                           the core. This is a self-clearing bit and the core clears this bit
70504                                                           after all the necessary logic is reset in the core, which may take
70505                                                           several clocks, depending on the current state of the core.
70506                                                           Once this bit is cleared software should wait at least 3 PHY
70507                                                           clocks before doing any access to the PHY domain
70508                                                           (synchronization delay). Software should also should check that
70509                                                           bit 31 of this register is 1 (AHB Master is IDLE) before starting
70510                                                           any operation.
70511                                                           Typically software reset is used during software development
70512                                                           and also when you dynamically change the PHY selection bits
70513                                                           in the USB configuration registers listed above. When you
70514                                                           change the PHY, the corresponding clock for the PHY is
70515                                                           selected and used in the PHY domain. Once a new clock is
70516                                                           selected, the PHY domain has to be reset for proper operation. */
70517#else
70518        uint32_t csftrst                 : 1;
70519        uint32_t hsftrst                 : 1;
70520        uint32_t frmcntrrst              : 1;
70521        uint32_t intknqflsh              : 1;
70522        uint32_t rxfflsh                 : 1;
70523        uint32_t txfflsh                 : 1;
70524        uint32_t txfnum                  : 5;
70525        uint32_t reserved_11_29          : 19;
70526        uint32_t dmareq                  : 1;
70527        uint32_t ahbidle                 : 1;
70528#endif
70529    } s;
70530    struct cvmx_usbcx_grstctl_s          cn30xx;
70531    struct cvmx_usbcx_grstctl_s          cn31xx;
70532    struct cvmx_usbcx_grstctl_s          cn50xx;
70533    struct cvmx_usbcx_grstctl_s          cn52xx;
70534    struct cvmx_usbcx_grstctl_s          cn52xxp1;
70535    struct cvmx_usbcx_grstctl_s          cn56xx;
70536    struct cvmx_usbcx_grstctl_s          cn56xxp1;
70537} cvmx_usbcx_grstctl_t;
70538
70539
70540/**
70541 * cvmx_usbc#_grxfsiz
70542 *
70543 * Receive FIFO Size Register (GRXFSIZ)
70544 *
70545 * The application can program the RAM size that must be allocated to the RxFIFO.
70546 */
70547typedef union
70548{
70549    uint32_t u32;
70550    struct cvmx_usbcx_grxfsiz_s
70551    {
70552#if __BYTE_ORDER == __BIG_ENDIAN
70553        uint32_t reserved_16_31          : 16;
70554        uint32_t rxfdep                  : 16;      /**< RxFIFO Depth (RxFDep)
70555                                                         This value is in terms of 32-bit words.
70556                                                         * Minimum value is 16
70557                                                         * Maximum value is 32768 */
70558#else
70559        uint32_t rxfdep                  : 16;
70560        uint32_t reserved_16_31          : 16;
70561#endif
70562    } s;
70563    struct cvmx_usbcx_grxfsiz_s          cn30xx;
70564    struct cvmx_usbcx_grxfsiz_s          cn31xx;
70565    struct cvmx_usbcx_grxfsiz_s          cn50xx;
70566    struct cvmx_usbcx_grxfsiz_s          cn52xx;
70567    struct cvmx_usbcx_grxfsiz_s          cn52xxp1;
70568    struct cvmx_usbcx_grxfsiz_s          cn56xx;
70569    struct cvmx_usbcx_grxfsiz_s          cn56xxp1;
70570} cvmx_usbcx_grxfsiz_t;
70571
70572
70573/**
70574 * cvmx_usbc#_grxstspd
70575 *
70576 * Receive Status Debug Read Register, Device Mode (GRXSTSPD)
70577 *
70578 * A read to the Receive Status Read and Pop register returns and additionally pops the top data entry out of the RxFIFO.
70579 * This Description is only valid when the core is in Device Mode.  For Host Mode use USBC_GRXSTSPH instead.
70580 * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the same offset in the O2P USB core.
70581 *       The offset difference shown in this document is for software clarity and is actually ignored by the
70582 *       hardware.
70583 */
70584typedef union
70585{
70586    uint32_t u32;
70587    struct cvmx_usbcx_grxstspd_s
70588    {
70589#if __BYTE_ORDER == __BIG_ENDIAN
70590        uint32_t reserved_25_31          : 7;
70591        uint32_t fn                      : 4;       /**< Frame Number (FN)
70592                                                         This is the least significant 4 bits of the (micro)frame number in
70593                                                         which the packet is received on the USB.  This field is supported
70594                                                         only when the isochronous OUT endpoints are supported. */
70595        uint32_t pktsts                  : 4;       /**< Packet Status (PktSts)
70596                                                         Indicates the status of the received packet
70597                                                         * 4'b0001: Glogal OUT NAK (triggers an interrupt)
70598                                                         * 4'b0010: OUT data packet received
70599                                                         * 4'b0100: SETUP transaction completed (triggers an interrupt)
70600                                                         * 4'b0110: SETUP data packet received
70601                                                         * Others: Reserved */
70602        uint32_t dpid                    : 2;       /**< Data PID (DPID)
70603                                                         * 2'b00: DATA0
70604                                                         * 2'b10: DATA1
70605                                                         * 2'b01: DATA2
70606                                                         * 2'b11: MDATA */
70607        uint32_t bcnt                    : 11;      /**< Byte Count (BCnt)
70608                                                         Indicates the byte count of the received data packet */
70609        uint32_t epnum                   : 4;       /**< Endpoint Number (EPNum)
70610                                                         Indicates the endpoint number to which the current received
70611                                                         packet belongs. */
70612#else
70613        uint32_t epnum                   : 4;
70614        uint32_t bcnt                    : 11;
70615        uint32_t dpid                    : 2;
70616        uint32_t pktsts                  : 4;
70617        uint32_t fn                      : 4;
70618        uint32_t reserved_25_31          : 7;
70619#endif
70620    } s;
70621    struct cvmx_usbcx_grxstspd_s         cn30xx;
70622    struct cvmx_usbcx_grxstspd_s         cn31xx;
70623    struct cvmx_usbcx_grxstspd_s         cn50xx;
70624    struct cvmx_usbcx_grxstspd_s         cn52xx;
70625    struct cvmx_usbcx_grxstspd_s         cn52xxp1;
70626    struct cvmx_usbcx_grxstspd_s         cn56xx;
70627    struct cvmx_usbcx_grxstspd_s         cn56xxp1;
70628} cvmx_usbcx_grxstspd_t;
70629
70630
70631/**
70632 * cvmx_usbc#_grxstsph
70633 *
70634 * Receive Status Read and Pop Register, Host Mode (GRXSTSPH)
70635 *
70636 * A read to the Receive Status Read and Pop register returns and additionally pops the top data entry out of the RxFIFO.
70637 * This Description is only valid when the core is in Host Mode.  For Device Mode use USBC_GRXSTSPD instead.
70638 * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the same offset in the O2P USB core.
70639 *       The offset difference shown in this document is for software clarity and is actually ignored by the
70640 *       hardware.
70641 */
70642typedef union
70643{
70644    uint32_t u32;
70645    struct cvmx_usbcx_grxstsph_s
70646    {
70647#if __BYTE_ORDER == __BIG_ENDIAN
70648        uint32_t reserved_21_31          : 11;
70649        uint32_t pktsts                  : 4;       /**< Packet Status (PktSts)
70650                                                         Indicates the status of the received packet
70651                                                         * 4'b0010: IN data packet received
70652                                                         * 4'b0011: IN transfer completed (triggers an interrupt)
70653                                                         * 4'b0101: Data toggle error (triggers an interrupt)
70654                                                         * 4'b0111: Channel halted (triggers an interrupt)
70655                                                         * Others: Reserved */
70656        uint32_t dpid                    : 2;       /**< Data PID (DPID)
70657                                                         * 2'b00: DATA0
70658                                                         * 2'b10: DATA1
70659                                                         * 2'b01: DATA2
70660                                                         * 2'b11: MDATA */
70661        uint32_t bcnt                    : 11;      /**< Byte Count (BCnt)
70662                                                         Indicates the byte count of the received IN data packet */
70663        uint32_t chnum                   : 4;       /**< Channel Number (ChNum)
70664                                                         Indicates the channel number to which the current received
70665                                                         packet belongs. */
70666#else
70667        uint32_t chnum                   : 4;
70668        uint32_t bcnt                    : 11;
70669        uint32_t dpid                    : 2;
70670        uint32_t pktsts                  : 4;
70671        uint32_t reserved_21_31          : 11;
70672#endif
70673    } s;
70674    struct cvmx_usbcx_grxstsph_s         cn30xx;
70675    struct cvmx_usbcx_grxstsph_s         cn31xx;
70676    struct cvmx_usbcx_grxstsph_s         cn50xx;
70677    struct cvmx_usbcx_grxstsph_s         cn52xx;
70678    struct cvmx_usbcx_grxstsph_s         cn52xxp1;
70679    struct cvmx_usbcx_grxstsph_s         cn56xx;
70680    struct cvmx_usbcx_grxstsph_s         cn56xxp1;
70681} cvmx_usbcx_grxstsph_t;
70682
70683
70684/**
70685 * cvmx_usbc#_grxstsrd
70686 *
70687 * Receive Status Debug Read Register, Device Mode (GRXSTSRD)
70688 *
70689 * A read to the Receive Status Debug Read register returns the contents of the top of the Receive FIFO.
70690 * This Description is only valid when the core is in Device Mode.  For Host Mode use USBC_GRXSTSRH instead.
70691 * NOTE: GRXSTSRH and GRXSTSRD are physically the same register and share the same offset in the O2P USB core.
70692 *       The offset difference shown in this document is for software clarity and is actually ignored by the
70693 *       hardware.
70694 */
70695typedef union
70696{
70697    uint32_t u32;
70698    struct cvmx_usbcx_grxstsrd_s
70699    {
70700#if __BYTE_ORDER == __BIG_ENDIAN
70701        uint32_t reserved_25_31          : 7;
70702        uint32_t fn                      : 4;       /**< Frame Number (FN)
70703                                                         This is the least significant 4 bits of the (micro)frame number in
70704                                                         which the packet is received on the USB.  This field is supported
70705                                                         only when the isochronous OUT endpoints are supported. */
70706        uint32_t pktsts                  : 4;       /**< Packet Status (PktSts)
70707                                                         Indicates the status of the received packet
70708                                                         * 4'b0001: Glogal OUT NAK (triggers an interrupt)
70709                                                         * 4'b0010: OUT data packet received
70710                                                         * 4'b0100: SETUP transaction completed (triggers an interrupt)
70711                                                         * 4'b0110: SETUP data packet received
70712                                                         * Others: Reserved */
70713        uint32_t dpid                    : 2;       /**< Data PID (DPID)
70714                                                         * 2'b00: DATA0
70715                                                         * 2'b10: DATA1
70716                                                         * 2'b01: DATA2
70717                                                         * 2'b11: MDATA */
70718        uint32_t bcnt                    : 11;      /**< Byte Count (BCnt)
70719                                                         Indicates the byte count of the received data packet */
70720        uint32_t epnum                   : 4;       /**< Endpoint Number (EPNum)
70721                                                         Indicates the endpoint number to which the current received
70722                                                         packet belongs. */
70723#else
70724        uint32_t epnum                   : 4;
70725        uint32_t bcnt                    : 11;
70726        uint32_t dpid                    : 2;
70727        uint32_t pktsts                  : 4;
70728        uint32_t fn                      : 4;
70729        uint32_t reserved_25_31          : 7;
70730#endif
70731    } s;
70732    struct cvmx_usbcx_grxstsrd_s         cn30xx;
70733    struct cvmx_usbcx_grxstsrd_s         cn31xx;
70734    struct cvmx_usbcx_grxstsrd_s         cn50xx;
70735    struct cvmx_usbcx_grxstsrd_s         cn52xx;
70736    struct cvmx_usbcx_grxstsrd_s         cn52xxp1;
70737    struct cvmx_usbcx_grxstsrd_s         cn56xx;
70738    struct cvmx_usbcx_grxstsrd_s         cn56xxp1;
70739} cvmx_usbcx_grxstsrd_t;
70740
70741
70742/**
70743 * cvmx_usbc#_grxstsrh
70744 *
70745 * Receive Status Debug Read Register, Host Mode (GRXSTSRH)
70746 *
70747 * A read to the Receive Status Debug Read register returns the contents of the top of the Receive FIFO.
70748 * This Description is only valid when the core is in Host Mode.  For Device Mode use USBC_GRXSTSRD instead.
70749 * NOTE: GRXSTSRH and GRXSTSRD are physically the same register and share the same offset in the O2P USB core.
70750 *       The offset difference shown in this document is for software clarity and is actually ignored by the
70751 *       hardware.
70752 */
70753typedef union
70754{
70755    uint32_t u32;
70756    struct cvmx_usbcx_grxstsrh_s
70757    {
70758#if __BYTE_ORDER == __BIG_ENDIAN
70759        uint32_t reserved_21_31          : 11;
70760        uint32_t pktsts                  : 4;       /**< Packet Status (PktSts)
70761                                                         Indicates the status of the received packet
70762                                                         * 4'b0010: IN data packet received
70763                                                         * 4'b0011: IN transfer completed (triggers an interrupt)
70764                                                         * 4'b0101: Data toggle error (triggers an interrupt)
70765                                                         * 4'b0111: Channel halted (triggers an interrupt)
70766                                                         * Others: Reserved */
70767        uint32_t dpid                    : 2;       /**< Data PID (DPID)
70768                                                         * 2'b00: DATA0
70769                                                         * 2'b10: DATA1
70770                                                         * 2'b01: DATA2
70771                                                         * 2'b11: MDATA */
70772        uint32_t bcnt                    : 11;      /**< Byte Count (BCnt)
70773                                                         Indicates the byte count of the received IN data packet */
70774        uint32_t chnum                   : 4;       /**< Channel Number (ChNum)
70775                                                         Indicates the channel number to which the current received
70776                                                         packet belongs. */
70777#else
70778        uint32_t chnum                   : 4;
70779        uint32_t bcnt                    : 11;
70780        uint32_t dpid                    : 2;
70781        uint32_t pktsts                  : 4;
70782        uint32_t reserved_21_31          : 11;
70783#endif
70784    } s;
70785    struct cvmx_usbcx_grxstsrh_s         cn30xx;
70786    struct cvmx_usbcx_grxstsrh_s         cn31xx;
70787    struct cvmx_usbcx_grxstsrh_s         cn50xx;
70788    struct cvmx_usbcx_grxstsrh_s         cn52xx;
70789    struct cvmx_usbcx_grxstsrh_s         cn52xxp1;
70790    struct cvmx_usbcx_grxstsrh_s         cn56xx;
70791    struct cvmx_usbcx_grxstsrh_s         cn56xxp1;
70792} cvmx_usbcx_grxstsrh_t;
70793
70794
70795/**
70796 * cvmx_usbc#_gsnpsid
70797 *
70798 * Synopsys ID Register (GSNPSID)
70799 *
70800 * This is a read-only register that contains the release number of the core being used.
70801 */
70802typedef union
70803{
70804    uint32_t u32;
70805    struct cvmx_usbcx_gsnpsid_s
70806    {
70807#if __BYTE_ORDER == __BIG_ENDIAN
70808        uint32_t synopsysid              : 32;      /**< 0x4F54\<version\>A, release number of the core being used.
70809                                                         0x4F54220A => pass1.x,  0x4F54240A => pass2.x */
70810#else
70811        uint32_t synopsysid              : 32;
70812#endif
70813    } s;
70814    struct cvmx_usbcx_gsnpsid_s          cn30xx;
70815    struct cvmx_usbcx_gsnpsid_s          cn31xx;
70816    struct cvmx_usbcx_gsnpsid_s          cn50xx;
70817    struct cvmx_usbcx_gsnpsid_s          cn52xx;
70818    struct cvmx_usbcx_gsnpsid_s          cn52xxp1;
70819    struct cvmx_usbcx_gsnpsid_s          cn56xx;
70820    struct cvmx_usbcx_gsnpsid_s          cn56xxp1;
70821} cvmx_usbcx_gsnpsid_t;
70822
70823
70824/**
70825 * cvmx_usbc#_gusbcfg
70826 *
70827 * Core USB Configuration Register (GUSBCFG)
70828 *
70829 * This register can be used to configure the core after power-on or a changing to Host mode or Device mode.
70830 * It contains USB and USB-PHY related configuration parameters. The application must program this register
70831 * before starting any transactions on either the AHB or the USB.
70832 * Do not make changes to this register after the initial programming.
70833 */
70834typedef union
70835{
70836    uint32_t u32;
70837    struct cvmx_usbcx_gusbcfg_s
70838    {
70839#if __BYTE_ORDER == __BIG_ENDIAN
70840        uint32_t reserved_17_31          : 15;
70841        uint32_t otgi2csel               : 1;       /**< UTMIFS or I2C Interface Select (OtgI2CSel)
70842                                                         This bit is always 0x0. */
70843        uint32_t phylpwrclksel           : 1;       /**< PHY Low-Power Clock Select (PhyLPwrClkSel)
70844                                                         Software should set this bit to 0x0.
70845                                                         Selects either 480-MHz or 48-MHz (low-power) PHY mode. In
70846                                                         FS and LS modes, the PHY can usually operate on a 48-MHz
70847                                                         clock to save power.
70848                                                         * 1'b0: 480-MHz Internal PLL clock
70849                                                         * 1'b1: 48-MHz External Clock
70850                                                         In 480 MHz mode, the UTMI interface operates at either 60 or
70851                                                         30-MHz, depending upon whether 8- or 16-bit data width is
70852                                                         selected. In 48-MHz mode, the UTMI interface operates at 48
70853                                                         MHz in FS mode and at either 48 or 6 MHz in LS mode
70854                                                         (depending on the PHY vendor).
70855                                                         This bit drives the utmi_fsls_low_power core output signal, and
70856                                                         is valid only for UTMI+ PHYs. */
70857        uint32_t reserved_14_14          : 1;
70858        uint32_t usbtrdtim               : 4;       /**< USB Turnaround Time (USBTrdTim)
70859                                                         Sets the turnaround time in PHY clocks.
70860                                                         Specifies the response time for a MAC request to the Packet
70861                                                         FIFO Controller (PFC) to fetch data from the DFIFO (SPRAM).
70862                                                         This must be programmed to 0x5. */
70863        uint32_t hnpcap                  : 1;       /**< HNP-Capable (HNPCap)
70864                                                         This bit is always 0x0. */
70865        uint32_t srpcap                  : 1;       /**< SRP-Capable (SRPCap)
70866                                                         This bit is always 0x0. */
70867        uint32_t ddrsel                  : 1;       /**< ULPI DDR Select (DDRSel)
70868                                                         Software should set this bit to 0x0. */
70869        uint32_t physel                  : 1;       /**< USB 2.0 High-Speed PHY or USB 1.1 Full-Speed Serial
70870                                                         Software should set this bit to 0x0. */
70871        uint32_t fsintf                  : 1;       /**< Full-Speed Serial Interface Select (FSIntf)
70872                                                         Software should set this bit to 0x0. */
70873        uint32_t ulpi_utmi_sel           : 1;       /**< ULPI or UTMI+ Select (ULPI_UTMI_Sel)
70874                                                         This bit is always 0x0. */
70875        uint32_t phyif                   : 1;       /**< PHY Interface (PHYIf)
70876                                                         This bit is always 0x1. */
70877        uint32_t toutcal                 : 3;       /**< HS/FS Timeout Calibration (TOutCal)
70878                                                         The number of PHY clocks that the application programs in this
70879                                                         field is added to the high-speed/full-speed interpacket timeout
70880                                                         duration in the core to account for any additional delays
70881                                                         introduced by the PHY. This may be required, since the delay
70882                                                         introduced by the PHY in generating the linestate condition may
70883                                                         vary from one PHY to another.
70884                                                         The USB standard timeout value for high-speed operation is
70885                                                         736 to 816 (inclusive) bit times. The USB standard timeout
70886                                                         value for full-speed operation is 16 to 18 (inclusive) bit times.
70887                                                         The application must program this field based on the speed of
70888                                                         enumeration. The number of bit times added per PHY clock are:
70889                                                         High-speed operation:
70890                                                         * One 30-MHz PHY clock = 16 bit times
70891                                                         * One 60-MHz PHY clock = 8 bit times
70892                                                         Full-speed operation:
70893                                                         * One 30-MHz PHY clock = 0.4 bit times
70894                                                         * One 60-MHz PHY clock = 0.2 bit times
70895                                                         * One 48-MHz PHY clock = 0.25 bit times */
70896#else
70897        uint32_t toutcal                 : 3;
70898        uint32_t phyif                   : 1;
70899        uint32_t ulpi_utmi_sel           : 1;
70900        uint32_t fsintf                  : 1;
70901        uint32_t physel                  : 1;
70902        uint32_t ddrsel                  : 1;
70903        uint32_t srpcap                  : 1;
70904        uint32_t hnpcap                  : 1;
70905        uint32_t usbtrdtim               : 4;
70906        uint32_t reserved_14_14          : 1;
70907        uint32_t phylpwrclksel           : 1;
70908        uint32_t otgi2csel               : 1;
70909        uint32_t reserved_17_31          : 15;
70910#endif
70911    } s;
70912    struct cvmx_usbcx_gusbcfg_s          cn30xx;
70913    struct cvmx_usbcx_gusbcfg_s          cn31xx;
70914    struct cvmx_usbcx_gusbcfg_s          cn50xx;
70915    struct cvmx_usbcx_gusbcfg_s          cn52xx;
70916    struct cvmx_usbcx_gusbcfg_s          cn52xxp1;
70917    struct cvmx_usbcx_gusbcfg_s          cn56xx;
70918    struct cvmx_usbcx_gusbcfg_s          cn56xxp1;
70919} cvmx_usbcx_gusbcfg_t;
70920
70921
70922/**
70923 * cvmx_usbc#_haint
70924 *
70925 * Host All Channels Interrupt Register (HAINT)
70926 *
70927 * When a significant event occurs on a channel, the Host All Channels Interrupt register
70928 * interrupts the application using the Host Channels Interrupt bit of the Core Interrupt
70929 * register (GINTSTS.HChInt). This is shown in Interrupt . There is one interrupt bit per
70930 * channel, up to a maximum of 16 bits. Bits in this register are set and cleared when the
70931 * application sets and clears bits in the corresponding Host Channel-n Interrupt register.
70932 */
70933typedef union
70934{
70935    uint32_t u32;
70936    struct cvmx_usbcx_haint_s
70937    {
70938#if __BYTE_ORDER == __BIG_ENDIAN
70939        uint32_t reserved_16_31          : 16;
70940        uint32_t haint                   : 16;      /**< Channel Interrupts (HAINT)
70941                                                         One bit per channel: Bit 0 for Channel 0, bit 15 for Channel 15 */
70942#else
70943        uint32_t haint                   : 16;
70944        uint32_t reserved_16_31          : 16;
70945#endif
70946    } s;
70947    struct cvmx_usbcx_haint_s            cn30xx;
70948    struct cvmx_usbcx_haint_s            cn31xx;
70949    struct cvmx_usbcx_haint_s            cn50xx;
70950    struct cvmx_usbcx_haint_s            cn52xx;
70951    struct cvmx_usbcx_haint_s            cn52xxp1;
70952    struct cvmx_usbcx_haint_s            cn56xx;
70953    struct cvmx_usbcx_haint_s            cn56xxp1;
70954} cvmx_usbcx_haint_t;
70955
70956
70957/**
70958 * cvmx_usbc#_haintmsk
70959 *
70960 * Host All Channels Interrupt Mask Register (HAINTMSK)
70961 *
70962 * The Host All Channel Interrupt Mask register works with the Host All Channel Interrupt
70963 * register to interrupt the application when an event occurs on a channel. There is one
70964 * interrupt mask bit per channel, up to a maximum of 16 bits.
70965 * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
70966 */
70967typedef union
70968{
70969    uint32_t u32;
70970    struct cvmx_usbcx_haintmsk_s
70971    {
70972#if __BYTE_ORDER == __BIG_ENDIAN
70973        uint32_t reserved_16_31          : 16;
70974        uint32_t haintmsk                : 16;      /**< Channel Interrupt Mask (HAINTMsk)
70975                                                         One bit per channel: Bit 0 for channel 0, bit 15 for channel 15 */
70976#else
70977        uint32_t haintmsk                : 16;
70978        uint32_t reserved_16_31          : 16;
70979#endif
70980    } s;
70981    struct cvmx_usbcx_haintmsk_s         cn30xx;
70982    struct cvmx_usbcx_haintmsk_s         cn31xx;
70983    struct cvmx_usbcx_haintmsk_s         cn50xx;
70984    struct cvmx_usbcx_haintmsk_s         cn52xx;
70985    struct cvmx_usbcx_haintmsk_s         cn52xxp1;
70986    struct cvmx_usbcx_haintmsk_s         cn56xx;
70987    struct cvmx_usbcx_haintmsk_s         cn56xxp1;
70988} cvmx_usbcx_haintmsk_t;
70989
70990
70991/**
70992 * cvmx_usbc#_hcchar#
70993 *
70994 * Host Channel-n Characteristics Register (HCCHAR)
70995 *
70996 */
70997typedef union
70998{
70999    uint32_t u32;
71000    struct cvmx_usbcx_hccharx_s
71001    {
71002#if __BYTE_ORDER == __BIG_ENDIAN
71003        uint32_t chena                   : 1;       /**< Channel Enable (ChEna)
71004                                                         This field is set by the application and cleared by the OTG host.
71005                                                         * 1'b0: Channel disabled
71006                                                         * 1'b1: Channel enabled */
71007        uint32_t chdis                   : 1;       /**< Channel Disable (ChDis)
71008                                                         The application sets this bit to stop transmitting/receiving data
71009                                                         on a channel, even before the transfer for that channel is
71010                                                         complete. The application must wait for the Channel Disabled
71011                                                         interrupt before treating the channel as disabled. */
71012        uint32_t oddfrm                  : 1;       /**< Odd Frame (OddFrm)
71013                                                         This field is set (reset) by the application to indicate that the
71014                                                         OTG host must perform a transfer in an odd (micro)frame. This
71015                                                         field is applicable for only periodic (isochronous and interrupt)
71016                                                         transactions.
71017                                                         * 1'b0: Even (micro)frame
71018                                                         * 1'b1: Odd (micro)frame */
71019        uint32_t devaddr                 : 7;       /**< Device Address (DevAddr)
71020                                                         This field selects the specific device serving as the data source
71021                                                         or sink. */
71022        uint32_t ec                      : 2;       /**< Multi Count (MC) / Error Count (EC)
71023                                                         When the Split Enable bit of the Host Channel-n Split Control
71024                                                         register (HCSPLTn.SpltEna) is reset (1'b0), this field indicates
71025                                                         to the host the number of transactions that should be executed
71026                                                         per microframe for this endpoint.
71027                                                         * 2'b00: Reserved. This field yields undefined results.
71028                                                         * 2'b01: 1 transaction
71029                                                         * 2'b10: 2 transactions to be issued for this endpoint per
71030                                                                  microframe
71031                                                         * 2'b11: 3 transactions to be issued for this endpoint per
71032                                                                  microframe
71033                                                         When HCSPLTn.SpltEna is set (1'b1), this field indicates the
71034                                                         number of immediate retries to be performed for a periodic split
71035                                                         transactions on transaction errors. This field must be set to at
71036                                                         least 2'b01. */
71037        uint32_t eptype                  : 2;       /**< Endpoint Type (EPType)
71038                                                         Indicates the transfer type selected.
71039                                                         * 2'b00: Control
71040                                                         * 2'b01: Isochronous
71041                                                         * 2'b10: Bulk
71042                                                         * 2'b11: Interrupt */
71043        uint32_t lspddev                 : 1;       /**< Low-Speed Device (LSpdDev)
71044                                                         This field is set by the application to indicate that this channel is
71045                                                         communicating to a low-speed device. */
71046        uint32_t reserved_16_16          : 1;
71047        uint32_t epdir                   : 1;       /**< Endpoint Direction (EPDir)
71048                                                         Indicates whether the transaction is IN or OUT.
71049                                                         * 1'b0: OUT
71050                                                         * 1'b1: IN */
71051        uint32_t epnum                   : 4;       /**< Endpoint Number (EPNum)
71052                                                         Indicates the endpoint number on the device serving as the
71053                                                         data source or sink. */
71054        uint32_t mps                     : 11;      /**< Maximum Packet Size (MPS)
71055                                                         Indicates the maximum packet size of the associated endpoint. */
71056#else
71057        uint32_t mps                     : 11;
71058        uint32_t epnum                   : 4;
71059        uint32_t epdir                   : 1;
71060        uint32_t reserved_16_16          : 1;
71061        uint32_t lspddev                 : 1;
71062        uint32_t eptype                  : 2;
71063        uint32_t ec                      : 2;
71064        uint32_t devaddr                 : 7;
71065        uint32_t oddfrm                  : 1;
71066        uint32_t chdis                   : 1;
71067        uint32_t chena                   : 1;
71068#endif
71069    } s;
71070    struct cvmx_usbcx_hccharx_s          cn30xx;
71071    struct cvmx_usbcx_hccharx_s          cn31xx;
71072    struct cvmx_usbcx_hccharx_s          cn50xx;
71073    struct cvmx_usbcx_hccharx_s          cn52xx;
71074    struct cvmx_usbcx_hccharx_s          cn52xxp1;
71075    struct cvmx_usbcx_hccharx_s          cn56xx;
71076    struct cvmx_usbcx_hccharx_s          cn56xxp1;
71077} cvmx_usbcx_hccharx_t;
71078
71079
71080/**
71081 * cvmx_usbc#_hcfg
71082 *
71083 * Host Configuration Register (HCFG)
71084 *
71085 * This register configures the core after power-on. Do not make changes to this register after initializing the host.
71086 */
71087typedef union
71088{
71089    uint32_t u32;
71090    struct cvmx_usbcx_hcfg_s
71091    {
71092#if __BYTE_ORDER == __BIG_ENDIAN
71093        uint32_t reserved_3_31           : 29;
71094        uint32_t fslssupp                : 1;       /**< FS- and LS-Only Support (FSLSSupp)
71095                                                         The application uses this bit to control the core's enumeration
71096                                                         speed. Using this bit, the application can make the core
71097                                                         enumerate as a FS host, even if the connected device supports
71098                                                         HS traffic. Do not make changes to this field after initial
71099                                                         programming.
71100                                                         * 1'b0: HS/FS/LS, based on the maximum speed supported by
71101                                                           the connected device
71102                                                         * 1'b1: FS/LS-only, even if the connected device can support HS */
71103        uint32_t fslspclksel             : 2;       /**< FS/LS PHY Clock Select (FSLSPclkSel)
71104                                                         When the core is in FS Host mode
71105                                                         * 2'b00: PHY clock is running at 30/60 MHz
71106                                                         * 2'b01: PHY clock is running at 48 MHz
71107                                                         * Others: Reserved
71108                                                         When the core is in LS Host mode
71109                                                         * 2'b00: PHY clock is running at 30/60 MHz. When the
71110                                                                  UTMI+/ULPI PHY Low Power mode is not selected, use
71111                                                                  30/60 MHz.
71112                                                         * 2'b01: PHY clock is running at 48 MHz. When the UTMI+
71113                                                                  PHY Low Power mode is selected, use 48MHz if the PHY
71114                                                                  supplies a 48 MHz clock during LS mode.
71115                                                         * 2'b10: PHY clock is running at 6 MHz. In USB 1.1 FS mode,
71116                                                                  use 6 MHz when the UTMI+ PHY Low Power mode is
71117                                                                  selected and the PHY supplies a 6 MHz clock during LS
71118                                                                  mode. If you select a 6 MHz clock during LS mode, you must
71119                                                                  do a soft reset.
71120                                                         * 2'b11: Reserved */
71121#else
71122        uint32_t fslspclksel             : 2;
71123        uint32_t fslssupp                : 1;
71124        uint32_t reserved_3_31           : 29;
71125#endif
71126    } s;
71127    struct cvmx_usbcx_hcfg_s             cn30xx;
71128    struct cvmx_usbcx_hcfg_s             cn31xx;
71129    struct cvmx_usbcx_hcfg_s             cn50xx;
71130    struct cvmx_usbcx_hcfg_s             cn52xx;
71131    struct cvmx_usbcx_hcfg_s             cn52xxp1;
71132    struct cvmx_usbcx_hcfg_s             cn56xx;
71133    struct cvmx_usbcx_hcfg_s             cn56xxp1;
71134} cvmx_usbcx_hcfg_t;
71135
71136
71137/**
71138 * cvmx_usbc#_hcint#
71139 *
71140 * Host Channel-n Interrupt Register (HCINT)
71141 *
71142 * This register indicates the status of a channel with respect to USB- and AHB-related events.
71143 * The application must read this register when the Host Channels Interrupt bit of the Core Interrupt
71144 * register (GINTSTS.HChInt) is set. Before the application can read this register, it must first read
71145 * the Host All Channels Interrupt (HAINT) register to get the exact channel number for the Host Channel-n
71146 * Interrupt register. The application must clear the appropriate bit in this register to clear the
71147 * corresponding bits in the HAINT and GINTSTS registers.
71148 */
71149typedef union
71150{
71151    uint32_t u32;
71152    struct cvmx_usbcx_hcintx_s
71153    {
71154#if __BYTE_ORDER == __BIG_ENDIAN
71155        uint32_t reserved_11_31          : 21;
71156        uint32_t datatglerr              : 1;       /**< Data Toggle Error (DataTglErr) */
71157        uint32_t frmovrun                : 1;       /**< Frame Overrun (FrmOvrun) */
71158        uint32_t bblerr                  : 1;       /**< Babble Error (BblErr) */
71159        uint32_t xacterr                 : 1;       /**< Transaction Error (XactErr) */
71160        uint32_t nyet                    : 1;       /**< NYET Response Received Interrupt (NYET) */
71161        uint32_t ack                     : 1;       /**< ACK Response Received Interrupt (ACK) */
71162        uint32_t nak                     : 1;       /**< NAK Response Received Interrupt (NAK) */
71163        uint32_t stall                   : 1;       /**< STALL Response Received Interrupt (STALL) */
71164        uint32_t ahberr                  : 1;       /**< This bit is always 0x0. */
71165        uint32_t chhltd                  : 1;       /**< Channel Halted (ChHltd)
71166                                                         Indicates the transfer completed abnormally either because of
71167                                                         any USB transaction error or in response to disable request by
71168                                                         the application. */
71169        uint32_t xfercompl               : 1;       /**< Transfer Completed (XferCompl)
71170                                                         Transfer completed normally without any errors. */
71171#else
71172        uint32_t xfercompl               : 1;
71173        uint32_t chhltd                  : 1;
71174        uint32_t ahberr                  : 1;
71175        uint32_t stall                   : 1;
71176        uint32_t nak                     : 1;
71177        uint32_t ack                     : 1;
71178        uint32_t nyet                    : 1;
71179        uint32_t xacterr                 : 1;
71180        uint32_t bblerr                  : 1;
71181        uint32_t frmovrun                : 1;
71182        uint32_t datatglerr              : 1;
71183        uint32_t reserved_11_31          : 21;
71184#endif
71185    } s;
71186    struct cvmx_usbcx_hcintx_s           cn30xx;
71187    struct cvmx_usbcx_hcintx_s           cn31xx;
71188    struct cvmx_usbcx_hcintx_s           cn50xx;
71189    struct cvmx_usbcx_hcintx_s           cn52xx;
71190    struct cvmx_usbcx_hcintx_s           cn52xxp1;
71191    struct cvmx_usbcx_hcintx_s           cn56xx;
71192    struct cvmx_usbcx_hcintx_s           cn56xxp1;
71193} cvmx_usbcx_hcintx_t;
71194
71195
71196/**
71197 * cvmx_usbc#_hcintmsk#
71198 *
71199 * Host Channel-n Interrupt Mask Register (HCINTMSKn)
71200 *
71201 * This register reflects the mask for each channel status described in the previous section.
71202 * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
71203 */
71204typedef union
71205{
71206    uint32_t u32;
71207    struct cvmx_usbcx_hcintmskx_s
71208    {
71209#if __BYTE_ORDER == __BIG_ENDIAN
71210        uint32_t reserved_11_31          : 21;
71211        uint32_t datatglerrmsk           : 1;       /**< Data Toggle Error Mask (DataTglErrMsk) */
71212        uint32_t frmovrunmsk             : 1;       /**< Frame Overrun Mask (FrmOvrunMsk) */
71213        uint32_t bblerrmsk               : 1;       /**< Babble Error Mask (BblErrMsk) */
71214        uint32_t xacterrmsk              : 1;       /**< Transaction Error Mask (XactErrMsk) */
71215        uint32_t nyetmsk                 : 1;       /**< NYET Response Received Interrupt Mask (NyetMsk) */
71216        uint32_t ackmsk                  : 1;       /**< ACK Response Received Interrupt Mask (AckMsk) */
71217        uint32_t nakmsk                  : 1;       /**< NAK Response Received Interrupt Mask (NakMsk) */
71218        uint32_t stallmsk                : 1;       /**< STALL Response Received Interrupt Mask (StallMsk) */
71219        uint32_t ahberrmsk               : 1;       /**< AHB Error Mask (AHBErrMsk) */
71220        uint32_t chhltdmsk               : 1;       /**< Channel Halted Mask (ChHltdMsk) */
71221        uint32_t xfercomplmsk            : 1;       /**< Transfer Completed Mask (XferComplMsk) */
71222#else
71223        uint32_t xfercomplmsk            : 1;
71224        uint32_t chhltdmsk               : 1;
71225        uint32_t ahberrmsk               : 1;
71226        uint32_t stallmsk                : 1;
71227        uint32_t nakmsk                  : 1;
71228        uint32_t ackmsk                  : 1;
71229        uint32_t nyetmsk                 : 1;
71230        uint32_t xacterrmsk              : 1;
71231        uint32_t bblerrmsk               : 1;
71232        uint32_t frmovrunmsk             : 1;
71233        uint32_t datatglerrmsk           : 1;
71234        uint32_t reserved_11_31          : 21;
71235#endif
71236    } s;
71237    struct cvmx_usbcx_hcintmskx_s        cn30xx;
71238    struct cvmx_usbcx_hcintmskx_s        cn31xx;
71239    struct cvmx_usbcx_hcintmskx_s        cn50xx;
71240    struct cvmx_usbcx_hcintmskx_s        cn52xx;
71241    struct cvmx_usbcx_hcintmskx_s        cn52xxp1;
71242    struct cvmx_usbcx_hcintmskx_s        cn56xx;
71243    struct cvmx_usbcx_hcintmskx_s        cn56xxp1;
71244} cvmx_usbcx_hcintmskx_t;
71245
71246
71247/**
71248 * cvmx_usbc#_hcsplt#
71249 *
71250 * Host Channel-n Split Control Register (HCSPLT)
71251 *
71252 */
71253typedef union
71254{
71255    uint32_t u32;
71256    struct cvmx_usbcx_hcspltx_s
71257    {
71258#if __BYTE_ORDER == __BIG_ENDIAN
71259        uint32_t spltena                 : 1;       /**< Split Enable (SpltEna)
71260                                                         The application sets this field to indicate that this channel is
71261                                                         enabled to perform split transactions. */
71262        uint32_t reserved_17_30          : 14;
71263        uint32_t compsplt                : 1;       /**< Do Complete Split (CompSplt)
71264                                                         The application sets this field to request the OTG host to
71265                                                         perform a complete split transaction. */
71266        uint32_t xactpos                 : 2;       /**< Transaction Position (XactPos)
71267                                                         This field is used to determine whether to send all, first, middle,
71268                                                         or last payloads with each OUT transaction.
71269                                                         * 2'b11: All. This is the entire data payload is of this transaction
71270                                                                  (which is less than or equal to 188 bytes).
71271                                                         * 2'b10: Begin. This is the first data payload of this transaction
71272                                                                  (which is larger than 188 bytes).
71273                                                         * 2'b00: Mid. This is the middle payload of this transaction
71274                                                                  (which is larger than 188 bytes).
71275                                                         * 2'b01: End. This is the last payload of this transaction (which
71276                                                                  is larger than 188 bytes). */
71277        uint32_t hubaddr                 : 7;       /**< Hub Address (HubAddr)
71278                                                         This field holds the device address of the transaction
71279                                                         translator's hub. */
71280        uint32_t prtaddr                 : 7;       /**< Port Address (PrtAddr)
71281                                                         This field is the port number of the recipient transaction
71282                                                         translator. */
71283#else
71284        uint32_t prtaddr                 : 7;
71285        uint32_t hubaddr                 : 7;
71286        uint32_t xactpos                 : 2;
71287        uint32_t compsplt                : 1;
71288        uint32_t reserved_17_30          : 14;
71289        uint32_t spltena                 : 1;
71290#endif
71291    } s;
71292    struct cvmx_usbcx_hcspltx_s          cn30xx;
71293    struct cvmx_usbcx_hcspltx_s          cn31xx;
71294    struct cvmx_usbcx_hcspltx_s          cn50xx;
71295    struct cvmx_usbcx_hcspltx_s          cn52xx;
71296    struct cvmx_usbcx_hcspltx_s          cn52xxp1;
71297    struct cvmx_usbcx_hcspltx_s          cn56xx;
71298    struct cvmx_usbcx_hcspltx_s          cn56xxp1;
71299} cvmx_usbcx_hcspltx_t;
71300
71301
71302/**
71303 * cvmx_usbc#_hctsiz#
71304 *
71305 * Host Channel-n Transfer Size Register (HCTSIZ)
71306 *
71307 */
71308typedef union
71309{
71310    uint32_t u32;
71311    struct cvmx_usbcx_hctsizx_s
71312    {
71313#if __BYTE_ORDER == __BIG_ENDIAN
71314        uint32_t dopng                   : 1;       /**< Do Ping (DoPng)
71315                                                         Setting this field to 1 directs the host to do PING protocol. */
71316        uint32_t pid                     : 2;       /**< PID (Pid)
71317                                                         The application programs this field with the type of PID to use
71318                                                         for the initial transaction. The host will maintain this field for the
71319                                                         rest of the transfer.
71320                                                         * 2'b00: DATA0
71321                                                         * 2'b01: DATA2
71322                                                         * 2'b10: DATA1
71323                                                         * 2'b11: MDATA (non-control)/SETUP (control) */
71324        uint32_t pktcnt                  : 10;      /**< Packet Count (PktCnt)
71325                                                         This field is programmed by the application with the expected
71326                                                         number of packets to be transmitted (OUT) or received (IN).
71327                                                         The host decrements this count on every successful
71328                                                         transmission or reception of an OUT/IN packet. Once this count
71329                                                         reaches zero, the application is interrupted to indicate normal
71330                                                         completion. */
71331        uint32_t xfersize                : 19;      /**< Transfer Size (XferSize)
71332                                                         For an OUT, this field is the number of data bytes the host will
71333                                                         send during the transfer.
71334                                                         For an IN, this field is the buffer size that the application has
71335                                                         reserved for the transfer. The application is expected to
71336                                                         program this field as an integer multiple of the maximum packet
71337                                                         size for IN transactions (periodic and non-periodic). */
71338#else
71339        uint32_t xfersize                : 19;
71340        uint32_t pktcnt                  : 10;
71341        uint32_t pid                     : 2;
71342        uint32_t dopng                   : 1;
71343#endif
71344    } s;
71345    struct cvmx_usbcx_hctsizx_s          cn30xx;
71346    struct cvmx_usbcx_hctsizx_s          cn31xx;
71347    struct cvmx_usbcx_hctsizx_s          cn50xx;
71348    struct cvmx_usbcx_hctsizx_s          cn52xx;
71349    struct cvmx_usbcx_hctsizx_s          cn52xxp1;
71350    struct cvmx_usbcx_hctsizx_s          cn56xx;
71351    struct cvmx_usbcx_hctsizx_s          cn56xxp1;
71352} cvmx_usbcx_hctsizx_t;
71353
71354
71355/**
71356 * cvmx_usbc#_hfir
71357 *
71358 * Host Frame Interval Register (HFIR)
71359 *
71360 * This register stores the frame interval information for the current speed to which the O2P USB core has enumerated.
71361 */
71362typedef union
71363{
71364    uint32_t u32;
71365    struct cvmx_usbcx_hfir_s
71366    {
71367#if __BYTE_ORDER == __BIG_ENDIAN
71368        uint32_t reserved_16_31          : 16;
71369        uint32_t frint                   : 16;      /**< Frame Interval (FrInt)
71370                                                         The value that the application programs to this field specifies
71371                                                         the interval between two consecutive SOFs (FS) or micro-
71372                                                         SOFs (HS) or Keep-Alive tokens (HS). This field contains the
71373                                                         number of PHY clocks that constitute the required frame
71374                                                         interval. The default value set in this field for a FS operation
71375                                                         when the PHY clock frequency is 60 MHz. The application can
71376                                                         write a value to this register only after the Port Enable bit of
71377                                                         the Host Port Control and Status register (HPRT.PrtEnaPort)
71378                                                         has been set. If no value is programmed, the core calculates
71379                                                         the value based on the PHY clock specified in the FS/LS PHY
71380                                                         Clock Select field of the Host Configuration register
71381                                                         (HCFG.FSLSPclkSel). Do not change the value of this field
71382                                                         after the initial configuration.
71383                                                         * 125 us (PHY clock frequency for HS)
71384                                                         * 1 ms (PHY clock frequency for FS/LS) */
71385#else
71386        uint32_t frint                   : 16;
71387        uint32_t reserved_16_31          : 16;
71388#endif
71389    } s;
71390    struct cvmx_usbcx_hfir_s             cn30xx;
71391    struct cvmx_usbcx_hfir_s             cn31xx;
71392    struct cvmx_usbcx_hfir_s             cn50xx;
71393    struct cvmx_usbcx_hfir_s             cn52xx;
71394    struct cvmx_usbcx_hfir_s             cn52xxp1;
71395    struct cvmx_usbcx_hfir_s             cn56xx;
71396    struct cvmx_usbcx_hfir_s             cn56xxp1;
71397} cvmx_usbcx_hfir_t;
71398
71399
71400/**
71401 * cvmx_usbc#_hfnum
71402 *
71403 * Host Frame Number/Frame Time Remaining Register (HFNUM)
71404 *
71405 * This register indicates the current frame number.
71406 * It also indicates the time remaining (in terms of the number of PHY clocks)
71407 * in the current (micro)frame.
71408 */
71409typedef union
71410{
71411    uint32_t u32;
71412    struct cvmx_usbcx_hfnum_s
71413    {
71414#if __BYTE_ORDER == __BIG_ENDIAN
71415        uint32_t frrem                   : 16;      /**< Frame Time Remaining (FrRem)
71416                                                         Indicates the amount of time remaining in the current
71417                                                         microframe (HS) or frame (FS/LS), in terms of PHY clocks.
71418                                                         This field decrements on each PHY clock. When it reaches
71419                                                         zero, this field is reloaded with the value in the Frame Interval
71420                                                         register and a new SOF is transmitted on the USB. */
71421        uint32_t frnum                   : 16;      /**< Frame Number (FrNum)
71422                                                         This field increments when a new SOF is transmitted on the
71423                                                         USB, and is reset to 0 when it reaches 16'h3FFF. */
71424#else
71425        uint32_t frnum                   : 16;
71426        uint32_t frrem                   : 16;
71427#endif
71428    } s;
71429    struct cvmx_usbcx_hfnum_s            cn30xx;
71430    struct cvmx_usbcx_hfnum_s            cn31xx;
71431    struct cvmx_usbcx_hfnum_s            cn50xx;
71432    struct cvmx_usbcx_hfnum_s            cn52xx;
71433    struct cvmx_usbcx_hfnum_s            cn52xxp1;
71434    struct cvmx_usbcx_hfnum_s            cn56xx;
71435    struct cvmx_usbcx_hfnum_s            cn56xxp1;
71436} cvmx_usbcx_hfnum_t;
71437
71438
71439/**
71440 * cvmx_usbc#_hprt
71441 *
71442 * Host Port Control and Status Register (HPRT)
71443 *
71444 * This register is available in both Host and Device modes.
71445 * Currently, the OTG Host supports only one port.
71446 * A single register holds USB port-related information such as USB reset, enable, suspend, resume,
71447 * connect status, and test mode for each port. The R_SS_WC bits in this register can trigger an
71448 * interrupt to the application through the Host Port Interrupt bit of the Core Interrupt
71449 * register (GINTSTS.PrtInt). On a Port Interrupt, the application must read this register and clear
71450 * the bit that caused the interrupt. For the R_SS_WC bits, the application must write a 1 to the bit
71451 * to clear the interrupt.
71452 */
71453typedef union
71454{
71455    uint32_t u32;
71456    struct cvmx_usbcx_hprt_s
71457    {
71458#if __BYTE_ORDER == __BIG_ENDIAN
71459        uint32_t reserved_19_31          : 13;
71460        uint32_t prtspd                  : 2;       /**< Port Speed (PrtSpd)
71461                                                         Indicates the speed of the device attached to this port.
71462                                                         * 2'b00: High speed
71463                                                         * 2'b01: Full speed
71464                                                         * 2'b10: Low speed
71465                                                         * 2'b11: Reserved */
71466        uint32_t prttstctl               : 4;       /**< Port Test Control (PrtTstCtl)
71467                                                         The application writes a nonzero value to this field to put
71468                                                         the port into a Test mode, and the corresponding pattern is
71469                                                         signaled on the port.
71470                                                         * 4'b0000: Test mode disabled
71471                                                         * 4'b0001: Test_J mode
71472                                                         * 4'b0010: Test_K mode
71473                                                         * 4'b0011: Test_SE0_NAK mode
71474                                                         * 4'b0100: Test_Packet mode
71475                                                         * 4'b0101: Test_Force_Enable
71476                                                         * Others: Reserved
71477                                                         PrtSpd must be zero (i.e. the interface must be in high-speed
71478                                                         mode) to use the PrtTstCtl test modes. */
71479        uint32_t prtpwr                  : 1;       /**< Port Power (PrtPwr)
71480                                                         The application uses this field to control power to this port,
71481                                                         and the core clears this bit on an overcurrent condition.
71482                                                         * 1'b0: Power off
71483                                                         * 1'b1: Power on */
71484        uint32_t prtlnsts                : 2;       /**< Port Line Status (PrtLnSts)
71485                                                         Indicates the current logic level USB data lines
71486                                                         * Bit [10]: Logic level of D-
71487                                                         * Bit [11]: Logic level of D+ */
71488        uint32_t reserved_9_9            : 1;
71489        uint32_t prtrst                  : 1;       /**< Port Reset (PrtRst)
71490                                                         When the application sets this bit, a reset sequence is
71491                                                         started on this port. The application must time the reset
71492                                                         period and clear this bit after the reset sequence is
71493                                                         complete.
71494                                                         * 1'b0: Port not in reset
71495                                                         * 1'b1: Port in reset
71496                                                         The application must leave this bit set for at least a
71497                                                         minimum duration mentioned below to start a reset on the
71498                                                         port. The application can leave it set for another 10 ms in
71499                                                         addition to the required minimum duration, before clearing
71500                                                         the bit, even though there is no maximum limit set by the
71501                                                         USB standard.
71502                                                         * High speed: 50 ms
71503                                                         * Full speed/Low speed: 10 ms */
71504        uint32_t prtsusp                 : 1;       /**< Port Suspend (PrtSusp)
71505                                                         The application sets this bit to put this port in Suspend
71506                                                         mode. The core only stops sending SOFs when this is set.
71507                                                         To stop the PHY clock, the application must set the Port
71508                                                         Clock Stop bit, which will assert the suspend input pin of
71509                                                         the PHY.
71510                                                         The read value of this bit reflects the current suspend
71511                                                         status of the port. This bit is cleared by the core after a
71512                                                         remote wakeup signal is detected or the application sets
71513                                                         the Port Reset bit or Port Resume bit in this register or the
71514                                                         Resume/Remote Wakeup Detected Interrupt bit or
71515                                                         Disconnect Detected Interrupt bit in the Core Interrupt
71516                                                         register (GINTSTS.WkUpInt or GINTSTS.DisconnInt,
71517                                                         respectively).
71518                                                         * 1'b0: Port not in Suspend mode
71519                                                         * 1'b1: Port in Suspend mode */
71520        uint32_t prtres                  : 1;       /**< Port Resume (PrtRes)
71521                                                         The application sets this bit to drive resume signaling on
71522                                                         the port. The core continues to drive the resume signal
71523                                                         until the application clears this bit.
71524                                                         If the core detects a USB remote wakeup sequence, as
71525                                                         indicated by the Port Resume/Remote Wakeup Detected
71526                                                         Interrupt bit of the Core Interrupt register
71527                                                         (GINTSTS.WkUpInt), the core starts driving resume
71528                                                         signaling without application intervention and clears this bit
71529                                                         when it detects a disconnect condition. The read value of
71530                                                         this bit indicates whether the core is currently driving
71531                                                         resume signaling.
71532                                                         * 1'b0: No resume driven
71533                                                         * 1'b1: Resume driven */
71534        uint32_t prtovrcurrchng          : 1;       /**< Port Overcurrent Change (PrtOvrCurrChng)
71535                                                         The core sets this bit when the status of the Port
71536                                                         Overcurrent Active bit (bit 4) in this register changes. */
71537        uint32_t prtovrcurract           : 1;       /**< Port Overcurrent Active (PrtOvrCurrAct)
71538                                                         Indicates the overcurrent condition of the port.
71539                                                         * 1'b0: No overcurrent condition
71540                                                         * 1'b1: Overcurrent condition */
71541        uint32_t prtenchng               : 1;       /**< Port Enable/Disable Change (PrtEnChng)
71542                                                         The core sets this bit when the status of the Port Enable bit
71543                                                         [2] of this register changes. */
71544        uint32_t prtena                  : 1;       /**< Port Enable (PrtEna)
71545                                                         A port is enabled only by the core after a reset sequence,
71546                                                         and is disabled by an overcurrent condition, a disconnect
71547                                                         condition, or by the application clearing this bit. The
71548                                                         application cannot set this bit by a register write. It can only
71549                                                         clear it to disable the port. This bit does not trigger any
71550                                                         interrupt to the application.
71551                                                         * 1'b0: Port disabled
71552                                                         * 1'b1: Port enabled */
71553        uint32_t prtconndet              : 1;       /**< Port Connect Detected (PrtConnDet)
71554                                                         The core sets this bit when a device connection is detected
71555                                                         to trigger an interrupt to the application using the Host Port
71556                                                         Interrupt bit of the Core Interrupt register (GINTSTS.PrtInt).
71557                                                         The application must write a 1 to this bit to clear the
71558                                                         interrupt. */
71559        uint32_t prtconnsts              : 1;       /**< Port Connect Status (PrtConnSts)
71560                                                         * 0: No device is attached to the port.
71561                                                         * 1: A device is attached to the port. */
71562#else
71563        uint32_t prtconnsts              : 1;
71564        uint32_t prtconndet              : 1;
71565        uint32_t prtena                  : 1;
71566        uint32_t prtenchng               : 1;
71567        uint32_t prtovrcurract           : 1;
71568        uint32_t prtovrcurrchng          : 1;
71569        uint32_t prtres                  : 1;
71570        uint32_t prtsusp                 : 1;
71571        uint32_t prtrst                  : 1;
71572        uint32_t reserved_9_9            : 1;
71573        uint32_t prtlnsts                : 2;
71574        uint32_t prtpwr                  : 1;
71575        uint32_t prttstctl               : 4;
71576        uint32_t prtspd                  : 2;
71577        uint32_t reserved_19_31          : 13;
71578#endif
71579    } s;
71580    struct cvmx_usbcx_hprt_s             cn30xx;
71581    struct cvmx_usbcx_hprt_s             cn31xx;
71582    struct cvmx_usbcx_hprt_s             cn50xx;
71583    struct cvmx_usbcx_hprt_s             cn52xx;
71584    struct cvmx_usbcx_hprt_s             cn52xxp1;
71585    struct cvmx_usbcx_hprt_s             cn56xx;
71586    struct cvmx_usbcx_hprt_s             cn56xxp1;
71587} cvmx_usbcx_hprt_t;
71588
71589
71590/**
71591 * cvmx_usbc#_hptxfsiz
71592 *
71593 * Host Periodic Transmit FIFO Size Register (HPTXFSIZ)
71594 *
71595 * This register holds the size and the memory start address of the Periodic TxFIFO, as shown in Figures 310 and 311.
71596 */
71597typedef union
71598{
71599    uint32_t u32;
71600    struct cvmx_usbcx_hptxfsiz_s
71601    {
71602#if __BYTE_ORDER == __BIG_ENDIAN
71603        uint32_t ptxfsize                : 16;      /**< Host Periodic TxFIFO Depth (PTxFSize)
71604                                                         This value is in terms of 32-bit words.
71605                                                         * Minimum value is 16
71606                                                         * Maximum value is 32768 */
71607        uint32_t ptxfstaddr              : 16;      /**< Host Periodic TxFIFO Start Address (PTxFStAddr) */
71608#else
71609        uint32_t ptxfstaddr              : 16;
71610        uint32_t ptxfsize                : 16;
71611#endif
71612    } s;
71613    struct cvmx_usbcx_hptxfsiz_s         cn30xx;
71614    struct cvmx_usbcx_hptxfsiz_s         cn31xx;
71615    struct cvmx_usbcx_hptxfsiz_s         cn50xx;
71616    struct cvmx_usbcx_hptxfsiz_s         cn52xx;
71617    struct cvmx_usbcx_hptxfsiz_s         cn52xxp1;
71618    struct cvmx_usbcx_hptxfsiz_s         cn56xx;
71619    struct cvmx_usbcx_hptxfsiz_s         cn56xxp1;
71620} cvmx_usbcx_hptxfsiz_t;
71621
71622
71623/**
71624 * cvmx_usbc#_hptxsts
71625 *
71626 * Host Periodic Transmit FIFO/Queue Status Register (HPTXSTS)
71627 *
71628 * This read-only register contains the free space information for the Periodic TxFIFO and
71629 * the Periodic Transmit Request Queue
71630 */
71631typedef union
71632{
71633    uint32_t u32;
71634    struct cvmx_usbcx_hptxsts_s
71635    {
71636#if __BYTE_ORDER == __BIG_ENDIAN
71637        uint32_t ptxqtop                 : 8;       /**< Top of the Periodic Transmit Request Queue (PTxQTop)
71638                                                         This indicates the entry in the Periodic Tx Request Queue that
71639                                                         is currently being processes by the MAC.
71640                                                         This register is used for debugging.
71641                                                         * Bit [31]: Odd/Even (micro)frame
71642                                                           - 1'b0: send in even (micro)frame
71643                                                           - 1'b1: send in odd (micro)frame
71644                                                         * Bits [30:27]: Channel/endpoint number
71645                                                         * Bits [26:25]: Type
71646                                                           - 2'b00: IN/OUT
71647                                                           - 2'b01: Zero-length packet
71648                                                           - 2'b10: CSPLIT
71649                                                           - 2'b11: Disable channel command
71650                                                         * Bit [24]: Terminate (last entry for the selected
71651                                                           channel/endpoint) */
71652        uint32_t ptxqspcavail            : 8;       /**< Periodic Transmit Request Queue Space Available
71653                                                         (PTxQSpcAvail)
71654                                                         Indicates the number of free locations available to be written in
71655                                                         the Periodic Transmit Request Queue. This queue holds both
71656                                                         IN and OUT requests.
71657                                                         * 8'h0: Periodic Transmit Request Queue is full
71658                                                         * 8'h1: 1 location available
71659                                                         * 8'h2: 2 locations available
71660                                                         * n: n locations available (0..8)
71661                                                         * Others: Reserved */
71662        uint32_t ptxfspcavail            : 16;      /**< Periodic Transmit Data FIFO Space Available (PTxFSpcAvail)
71663                                                         Indicates the number of free locations available to be written to
71664                                                         in the Periodic TxFIFO.
71665                                                         Values are in terms of 32-bit words
71666                                                         * 16'h0: Periodic TxFIFO is full
71667                                                         * 16'h1: 1 word available
71668                                                         * 16'h2: 2 words available
71669                                                         * 16'hn: n words available (where 0..32768)
71670                                                         * 16'h8000: 32768 words available
71671                                                         * Others: Reserved */
71672#else
71673        uint32_t ptxfspcavail            : 16;
71674        uint32_t ptxqspcavail            : 8;
71675        uint32_t ptxqtop                 : 8;
71676#endif
71677    } s;
71678    struct cvmx_usbcx_hptxsts_s          cn30xx;
71679    struct cvmx_usbcx_hptxsts_s          cn31xx;
71680    struct cvmx_usbcx_hptxsts_s          cn50xx;
71681    struct cvmx_usbcx_hptxsts_s          cn52xx;
71682    struct cvmx_usbcx_hptxsts_s          cn52xxp1;
71683    struct cvmx_usbcx_hptxsts_s          cn56xx;
71684    struct cvmx_usbcx_hptxsts_s          cn56xxp1;
71685} cvmx_usbcx_hptxsts_t;
71686
71687
71688/**
71689 * cvmx_usbc#_nptxdfifo#
71690 *
71691 * NPTX Data Fifo (NPTXDFIFO)
71692 *
71693 * A slave mode application uses this register to access the Tx FIFO for channel n.
71694 */
71695typedef union
71696{
71697    uint32_t u32;
71698    struct cvmx_usbcx_nptxdfifox_s
71699    {
71700#if __BYTE_ORDER == __BIG_ENDIAN
71701        uint32_t data                    : 32;      /**< Reserved */
71702#else
71703        uint32_t data                    : 32;
71704#endif
71705    } s;
71706    struct cvmx_usbcx_nptxdfifox_s       cn30xx;
71707    struct cvmx_usbcx_nptxdfifox_s       cn31xx;
71708    struct cvmx_usbcx_nptxdfifox_s       cn50xx;
71709    struct cvmx_usbcx_nptxdfifox_s       cn52xx;
71710    struct cvmx_usbcx_nptxdfifox_s       cn52xxp1;
71711    struct cvmx_usbcx_nptxdfifox_s       cn56xx;
71712    struct cvmx_usbcx_nptxdfifox_s       cn56xxp1;
71713} cvmx_usbcx_nptxdfifox_t;
71714
71715
71716/**
71717 * cvmx_usbc#_pcgcctl
71718 *
71719 * Power and Clock Gating Control Register (PCGCCTL)
71720 *
71721 * The application can use this register to control the core's power-down and clock gating features.
71722 */
71723typedef union
71724{
71725    uint32_t u32;
71726    struct cvmx_usbcx_pcgcctl_s
71727    {
71728#if __BYTE_ORDER == __BIG_ENDIAN
71729        uint32_t reserved_5_31           : 27;
71730        uint32_t physuspended            : 1;       /**< PHY Suspended. (PhySuspended)
71731                                                         Indicates that the PHY has been suspended. After the
71732                                                         application sets the Stop Pclk bit (bit 0), this bit is updated once
71733                                                         the PHY is suspended.
71734                                                         Since the UTMI+ PHY suspend is controlled through a port, the
71735                                                         UTMI+ PHY is suspended immediately after Stop Pclk is set.
71736                                                         However, the ULPI PHY takes a few clocks to suspend,
71737                                                         because the suspend information is conveyed through the ULPI
71738                                                         protocol to the ULPI PHY. */
71739        uint32_t rstpdwnmodule           : 1;       /**< Reset Power-Down Modules (RstPdwnModule)
71740                                                         This bit is valid only in Partial Power-Down mode. The
71741                                                         application sets this bit when the power is turned off. The
71742                                                         application clears this bit after the power is turned on and the
71743                                                         PHY clock is up. */
71744        uint32_t pwrclmp                 : 1;       /**< Power Clamp (PwrClmp)
71745                                                         This bit is only valid in Partial Power-Down mode. The
71746                                                         application sets this bit before the power is turned off to clamp
71747                                                         the signals between the power-on modules and the power-off
71748                                                         modules. The application clears the bit to disable the clamping
71749                                                         before the power is turned on. */
71750        uint32_t gatehclk                : 1;       /**< Gate Hclk (GateHclk)
71751                                                         The application sets this bit to gate hclk to modules other than
71752                                                         the AHB Slave and Master and wakeup logic when the USB is
71753                                                         suspended or the session is not valid. The application clears
71754                                                         this bit when the USB is resumed or a new session starts. */
71755        uint32_t stoppclk                : 1;       /**< Stop Pclk (StopPclk)
71756                                                         The application sets this bit to stop the PHY clock (phy_clk)
71757                                                         when the USB is suspended, the session is not valid, or the
71758                                                         device is disconnected. The application clears this bit when the
71759                                                         USB is resumed or a new session starts. */
71760#else
71761        uint32_t stoppclk                : 1;
71762        uint32_t gatehclk                : 1;
71763        uint32_t pwrclmp                 : 1;
71764        uint32_t rstpdwnmodule           : 1;
71765        uint32_t physuspended            : 1;
71766        uint32_t reserved_5_31           : 27;
71767#endif
71768    } s;
71769    struct cvmx_usbcx_pcgcctl_s          cn30xx;
71770    struct cvmx_usbcx_pcgcctl_s          cn31xx;
71771    struct cvmx_usbcx_pcgcctl_s          cn50xx;
71772    struct cvmx_usbcx_pcgcctl_s          cn52xx;
71773    struct cvmx_usbcx_pcgcctl_s          cn52xxp1;
71774    struct cvmx_usbcx_pcgcctl_s          cn56xx;
71775    struct cvmx_usbcx_pcgcctl_s          cn56xxp1;
71776} cvmx_usbcx_pcgcctl_t;
71777
71778
71779/**
71780 * cvmx_usbn#_bist_status
71781 *
71782 * USBN_BIST_STATUS = USBN's Control and Status
71783 *
71784 * Contain general control bits and status information for the USBN.
71785 */
71786typedef union
71787{
71788    uint64_t u64;
71789    struct cvmx_usbnx_bist_status_s
71790    {
71791#if __BYTE_ORDER == __BIG_ENDIAN
71792        uint64_t reserved_7_63           : 57;
71793        uint64_t u2nc_bis                : 1;       /**< Bist status U2N CTL FIFO Memory. */
71794        uint64_t u2nf_bis                : 1;       /**< Bist status U2N FIFO Memory. */
71795        uint64_t e2hc_bis                : 1;       /**< Bist status E2H CTL FIFO Memory. */
71796        uint64_t n2uf_bis                : 1;       /**< Bist status N2U  FIFO Memory. */
71797        uint64_t usbc_bis                : 1;       /**< Bist status USBC FIFO Memory. */
71798        uint64_t nif_bis                 : 1;       /**< Bist status for Inbound Memory. */
71799        uint64_t nof_bis                 : 1;       /**< Bist status for Outbound Memory. */
71800#else
71801        uint64_t nof_bis                 : 1;
71802        uint64_t nif_bis                 : 1;
71803        uint64_t usbc_bis                : 1;
71804        uint64_t n2uf_bis                : 1;
71805        uint64_t e2hc_bis                : 1;
71806        uint64_t u2nf_bis                : 1;
71807        uint64_t u2nc_bis                : 1;
71808        uint64_t reserved_7_63           : 57;
71809#endif
71810    } s;
71811    struct cvmx_usbnx_bist_status_cn30xx
71812    {
71813#if __BYTE_ORDER == __BIG_ENDIAN
71814        uint64_t reserved_3_63           : 61;
71815        uint64_t usbc_bis                : 1;       /**< Bist status USBC FIFO Memory. */
71816        uint64_t nif_bis                 : 1;       /**< Bist status for Inbound Memory. */
71817        uint64_t nof_bis                 : 1;       /**< Bist status for Outbound Memory. */
71818#else
71819        uint64_t nof_bis                 : 1;
71820        uint64_t nif_bis                 : 1;
71821        uint64_t usbc_bis                : 1;
71822        uint64_t reserved_3_63           : 61;
71823#endif
71824    } cn30xx;
71825    struct cvmx_usbnx_bist_status_cn30xx cn31xx;
71826    struct cvmx_usbnx_bist_status_s      cn50xx;
71827    struct cvmx_usbnx_bist_status_s      cn52xx;
71828    struct cvmx_usbnx_bist_status_s      cn52xxp1;
71829    struct cvmx_usbnx_bist_status_s      cn56xx;
71830    struct cvmx_usbnx_bist_status_s      cn56xxp1;
71831} cvmx_usbnx_bist_status_t;
71832
71833
71834/**
71835 * cvmx_usbn#_clk_ctl
71836 *
71837 * USBN_CLK_CTL = USBN's Clock Control
71838 *
71839 * This register is used to control the frequency of the hclk and the hreset and phy_rst signals.
71840 */
71841typedef union
71842{
71843    uint64_t u64;
71844    struct cvmx_usbnx_clk_ctl_s
71845    {
71846#if __BYTE_ORDER == __BIG_ENDIAN
71847        uint64_t reserved_20_63          : 44;
71848        uint64_t divide2                 : 2;       /**< The 'hclk' used by the USB subsystem is derived
71849                                                         from the eclk.
71850                                                         Also see the field DIVIDE. DIVIDE2<1> must currently
71851                                                         be zero because it is not implemented, so the maximum
71852                                                         ratio of eclk/hclk is currently 16.
71853                                                         The actual divide number for hclk is:
71854                                                         (DIVIDE2 + 1) * (DIVIDE + 1) */
71855        uint64_t hclk_rst                : 1;       /**< When this field is '0' the HCLK-DIVIDER used to
71856                                                         generate the hclk in the USB Subsystem is held
71857                                                         in reset. This bit must be set to '0' before
71858                                                         changing the value os DIVIDE in this register.
71859                                                         The reset to the HCLK_DIVIDERis also asserted
71860                                                         when core reset is asserted. */
71861        uint64_t p_x_on                  : 1;       /**< Force USB-PHY on during suspend.
71862                                                         '1' USB-PHY XO block is powered-down during
71863                                                             suspend.
71864                                                         '0' USB-PHY XO block is powered-up during
71865                                                             suspend.
71866                                                         The value of this field must be set while POR is
71867                                                         active. */
71868        uint64_t reserved_14_15          : 2;
71869        uint64_t p_com_on                : 1;       /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to
71870                                                             remain powered in Suspend Mode.
71871                                                         '1' The USB-PHY XO Bias, Bandgap and PLL are
71872                                                             powered down in suspend mode.
71873                                                         The value of this field must be set while POR is
71874                                                         active. */
71875        uint64_t p_c_sel                 : 2;       /**< Phy clock speed select.
71876                                                         Selects the reference clock / crystal frequency.
71877                                                         '11': Reserved
71878                                                         '10': 48 MHz (reserved when a crystal is used)
71879                                                         '01': 24 MHz (reserved when a crystal is used)
71880                                                         '00': 12 MHz
71881                                                         The value of this field must be set while POR is
71882                                                         active.
71883                                                         NOTE: if a crystal is used as a reference clock,
71884                                                         this field must be set to 12 MHz. */
71885        uint64_t cdiv_byp                : 1;       /**< Used to enable the bypass input to the USB_CLK_DIV. */
71886        uint64_t sd_mode                 : 2;       /**< Scaledown mode for the USBC. Control timing events
71887                                                         in the USBC, for normal operation this must be '0'. */
71888        uint64_t s_bist                  : 1;       /**< Starts bist on the hclk memories, during the '0'
71889                                                         to '1' transition. */
71890        uint64_t por                     : 1;       /**< Power On Reset for the PHY.
71891                                                         Resets all the PHYS registers and state machines. */
71892        uint64_t enable                  : 1;       /**< When '1' allows the generation of the hclk. When
71893                                                         '0' the hclk will not be generated. SEE DIVIDE
71894                                                         field of this register. */
71895        uint64_t prst                    : 1;       /**< When this field is '0' the reset associated with
71896                                                         the phy_clk functionality in the USB Subsystem is
71897                                                         help in reset. This bit should not be set to '1'
71898                                                         until the time it takes 6 clocks (hclk or phy_clk,
71899                                                         whichever is slower) has passed. Under normal
71900                                                         operation once this bit is set to '1' it should not
71901                                                         be set to '0'. */
71902        uint64_t hrst                    : 1;       /**< When this field is '0' the reset associated with
71903                                                         the hclk functioanlity in the USB Subsystem is
71904                                                         held in reset.This bit should not be set to '1'
71905                                                         until 12ms after phy_clk is stable. Under normal
71906                                                         operation, once this bit is set to '1' it should
71907                                                         not be set to '0'. */
71908        uint64_t divide                  : 3;       /**< The frequency of 'hclk' used by the USB subsystem
71909                                                         is the eclk frequency divided by the value of
71910                                                         (DIVIDE2 + 1) * (DIVIDE + 1), also see the field
71911                                                         DIVIDE2 of this register.
71912                                                         The hclk frequency should be less than 125Mhz.
71913                                                         After writing a value to this field the SW should
71914                                                         read the field for the value written.
71915                                                         The ENABLE field of this register should not be set
71916                                                         until AFTER this field is set and then read. */
71917#else
71918        uint64_t divide                  : 3;
71919        uint64_t hrst                    : 1;
71920        uint64_t prst                    : 1;
71921        uint64_t enable                  : 1;
71922        uint64_t por                     : 1;
71923        uint64_t s_bist                  : 1;
71924        uint64_t sd_mode                 : 2;
71925        uint64_t cdiv_byp                : 1;
71926        uint64_t p_c_sel                 : 2;
71927        uint64_t p_com_on                : 1;
71928        uint64_t reserved_14_15          : 2;
71929        uint64_t p_x_on                  : 1;
71930        uint64_t hclk_rst                : 1;
71931        uint64_t divide2                 : 2;
71932        uint64_t reserved_20_63          : 44;
71933#endif
71934    } s;
71935    struct cvmx_usbnx_clk_ctl_cn30xx
71936    {
71937#if __BYTE_ORDER == __BIG_ENDIAN
71938        uint64_t reserved_18_63          : 46;
71939        uint64_t hclk_rst                : 1;       /**< When this field is '0' the HCLK-DIVIDER used to
71940                                                         generate the hclk in the USB Subsystem is held
71941                                                         in reset. This bit must be set to '0' before
71942                                                         changing the value os DIVIDE in this register.
71943                                                         The reset to the HCLK_DIVIDERis also asserted
71944                                                         when core reset is asserted. */
71945        uint64_t p_x_on                  : 1;       /**< Force USB-PHY on during suspend.
71946                                                         '1' USB-PHY XO block is powered-down during
71947                                                             suspend.
71948                                                         '0' USB-PHY XO block is powered-up during
71949                                                             suspend.
71950                                                         The value of this field must be set while POR is
71951                                                         active. */
71952        uint64_t p_rclk                  : 1;       /**< Phy refrence clock enable.
71953                                                         '1' The PHY PLL uses the XO block output as a
71954                                                         reference.
71955                                                         '0' Reserved. */
71956        uint64_t p_xenbn                 : 1;       /**< Phy external clock enable.
71957                                                         '1' The XO block uses the clock from a crystal.
71958                                                         '0' The XO block uses an external clock supplied
71959                                                             on the XO pin. USB_XI should be tied to
71960                                                             ground for this usage. */
71961        uint64_t p_com_on                : 1;       /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to
71962                                                             remain powered in Suspend Mode.
71963                                                         '1' The USB-PHY XO Bias, Bandgap and PLL are
71964                                                             powered down in suspend mode.
71965                                                         The value of this field must be set while POR is
71966                                                         active. */
71967        uint64_t p_c_sel                 : 2;       /**< Phy clock speed select.
71968                                                         Selects the reference clock / crystal frequency.
71969                                                         '11': Reserved
71970                                                         '10': 48 MHz
71971                                                         '01': 24 MHz
71972                                                         '00': 12 MHz
71973                                                         The value of this field must be set while POR is
71974                                                         active. */
71975        uint64_t cdiv_byp                : 1;       /**< Used to enable the bypass input to the USB_CLK_DIV. */
71976        uint64_t sd_mode                 : 2;       /**< Scaledown mode for the USBC. Control timing events
71977                                                         in the USBC, for normal operation this must be '0'. */
71978        uint64_t s_bist                  : 1;       /**< Starts bist on the hclk memories, during the '0'
71979                                                         to '1' transition. */
71980        uint64_t por                     : 1;       /**< Power On Reset for the PHY.
71981                                                         Resets all the PHYS registers and state machines. */
71982        uint64_t enable                  : 1;       /**< When '1' allows the generation of the hclk. When
71983                                                         '0' the hclk will not be generated. */
71984        uint64_t prst                    : 1;       /**< When this field is '0' the reset associated with
71985                                                         the phy_clk functionality in the USB Subsystem is
71986                                                         help in reset. This bit should not be set to '1'
71987                                                         until the time it takes 6 clocks (hclk or phy_clk,
71988                                                         whichever is slower) has passed. Under normal
71989                                                         operation once this bit is set to '1' it should not
71990                                                         be set to '0'. */
71991        uint64_t hrst                    : 1;       /**< When this field is '0' the reset associated with
71992                                                         the hclk functioanlity in the USB Subsystem is
71993                                                         held in reset.This bit should not be set to '1'
71994                                                         until 12ms after phy_clk is stable. Under normal
71995                                                         operation, once this bit is set to '1' it should
71996                                                         not be set to '0'. */
71997        uint64_t divide                  : 3;       /**< The 'hclk' used by the USB subsystem is derived
71998                                                         from the eclk. The eclk will be divided by the
71999                                                         value of this field +1 to determine the hclk
72000                                                         frequency. (Also see HRST of this register).
72001                                                         The hclk frequency must be less than 125 MHz. */
72002#else
72003        uint64_t divide                  : 3;
72004        uint64_t hrst                    : 1;
72005        uint64_t prst                    : 1;
72006        uint64_t enable                  : 1;
72007        uint64_t por                     : 1;
72008        uint64_t s_bist                  : 1;
72009        uint64_t sd_mode                 : 2;
72010        uint64_t cdiv_byp                : 1;
72011        uint64_t p_c_sel                 : 2;
72012        uint64_t p_com_on                : 1;
72013        uint64_t p_xenbn                 : 1;
72014        uint64_t p_rclk                  : 1;
72015        uint64_t p_x_on                  : 1;
72016        uint64_t hclk_rst                : 1;
72017        uint64_t reserved_18_63          : 46;
72018#endif
72019    } cn30xx;
72020    struct cvmx_usbnx_clk_ctl_cn30xx     cn31xx;
72021    struct cvmx_usbnx_clk_ctl_cn50xx
72022    {
72023#if __BYTE_ORDER == __BIG_ENDIAN
72024        uint64_t reserved_20_63          : 44;
72025        uint64_t divide2                 : 2;       /**< The 'hclk' used by the USB subsystem is derived
72026                                                         from the eclk.
72027                                                         Also see the field DIVIDE. DIVIDE2<1> must currently
72028                                                         be zero because it is not implemented, so the maximum
72029                                                         ratio of eclk/hclk is currently 16.
72030                                                         The actual divide number for hclk is:
72031                                                         (DIVIDE2 + 1) * (DIVIDE + 1) */
72032        uint64_t hclk_rst                : 1;       /**< When this field is '0' the HCLK-DIVIDER used to
72033                                                         generate the hclk in the USB Subsystem is held
72034                                                         in reset. This bit must be set to '0' before
72035                                                         changing the value os DIVIDE in this register.
72036                                                         The reset to the HCLK_DIVIDERis also asserted
72037                                                         when core reset is asserted. */
72038        uint64_t reserved_16_16          : 1;
72039        uint64_t p_rtype                 : 2;       /**< PHY reference clock type
72040                                                         '0' The USB-PHY uses a 12MHz crystal as a clock
72041                                                             source at the USB_XO and USB_XI pins
72042                                                         '1' Reserved
72043                                                         '2' The USB_PHY uses 12/24/48MHz 2.5V board clock
72044                                                             at the USB_XO pin. USB_XI should be tied to
72045                                                             ground in this case.
72046                                                         '3' Reserved
72047                                                         (bit 14 was P_XENBN on 3xxx)
72048                                                         (bit 15 was P_RCLK on 3xxx) */
72049        uint64_t p_com_on                : 1;       /**< '0' Force USB-PHY XO Bias, Bandgap and PLL to
72050                                                             remain powered in Suspend Mode.
72051                                                         '1' The USB-PHY XO Bias, Bandgap and PLL are
72052                                                             powered down in suspend mode.
72053                                                         The value of this field must be set while POR is
72054                                                         active. */
72055        uint64_t p_c_sel                 : 2;       /**< Phy clock speed select.
72056                                                         Selects the reference clock / crystal frequency.
72057                                                         '11': Reserved
72058                                                         '10': 48 MHz (reserved when a crystal is used)
72059                                                         '01': 24 MHz (reserved when a crystal is used)
72060                                                         '00': 12 MHz
72061                                                         The value of this field must be set while POR is
72062                                                         active.
72063                                                         NOTE: if a crystal is used as a reference clock,
72064                                                         this field must be set to 12 MHz. */
72065        uint64_t cdiv_byp                : 1;       /**< Used to enable the bypass input to the USB_CLK_DIV. */
72066        uint64_t sd_mode                 : 2;       /**< Scaledown mode for the USBC. Control timing events
72067                                                         in the USBC, for normal operation this must be '0'. */
72068        uint64_t s_bist                  : 1;       /**< Starts bist on the hclk memories, during the '0'
72069                                                         to '1' transition. */
72070        uint64_t por                     : 1;       /**< Power On Reset for the PHY.
72071                                                         Resets all the PHYS registers and state machines. */
72072        uint64_t enable                  : 1;       /**< When '1' allows the generation of the hclk. When
72073                                                         '0' the hclk will not be generated. SEE DIVIDE
72074                                                         field of this register. */
72075        uint64_t prst                    : 1;       /**< When this field is '0' the reset associated with
72076                                                         the phy_clk functionality in the USB Subsystem is
72077                                                         help in reset. This bit should not be set to '1'
72078                                                         until the time it takes 6 clocks (hclk or phy_clk,
72079                                                         whichever is slower) has passed. Under normal
72080                                                         operation once this bit is set to '1' it should not
72081                                                         be set to '0'. */
72082        uint64_t hrst                    : 1;       /**< When this field is '0' the reset associated with
72083                                                         the hclk functioanlity in the USB Subsystem is
72084                                                         held in reset.This bit should not be set to '1'
72085                                                         until 12ms after phy_clk is stable. Under normal
72086                                                         operation, once this bit is set to '1' it should
72087                                                         not be set to '0'. */
72088        uint64_t divide                  : 3;       /**< The frequency of 'hclk' used by the USB subsystem
72089                                                         is the eclk frequency divided by the value of
72090                                                         (DIVIDE2 + 1) * (DIVIDE + 1), also see the field
72091                                                         DIVIDE2 of this register.
72092                                                         The hclk frequency should be less than 125Mhz.
72093                                                         After writing a value to this field the SW should
72094                                                         read the field for the value written.
72095                                                         The ENABLE field of this register should not be set
72096                                                         until AFTER this field is set and then read. */
72097#else
72098        uint64_t divide                  : 3;
72099        uint64_t hrst                    : 1;
72100        uint64_t prst                    : 1;
72101        uint64_t enable                  : 1;
72102        uint64_t por                     : 1;
72103        uint64_t s_bist                  : 1;
72104        uint64_t sd_mode                 : 2;
72105        uint64_t cdiv_byp                : 1;
72106        uint64_t p_c_sel                 : 2;
72107        uint64_t p_com_on                : 1;
72108        uint64_t p_rtype                 : 2;
72109        uint64_t reserved_16_16          : 1;
72110        uint64_t hclk_rst                : 1;
72111        uint64_t divide2                 : 2;
72112        uint64_t reserved_20_63          : 44;
72113#endif
72114    } cn50xx;
72115    struct cvmx_usbnx_clk_ctl_cn50xx     cn52xx;
72116    struct cvmx_usbnx_clk_ctl_cn50xx     cn52xxp1;
72117    struct cvmx_usbnx_clk_ctl_cn50xx     cn56xx;
72118    struct cvmx_usbnx_clk_ctl_cn50xx     cn56xxp1;
72119} cvmx_usbnx_clk_ctl_t;
72120
72121
72122/**
72123 * cvmx_usbn#_ctl_status
72124 *
72125 * USBN_CTL_STATUS = USBN's Control And Status Register
72126 *
72127 * Contains general control and status information for the USBN block.
72128 */
72129typedef union
72130{
72131    uint64_t u64;
72132    struct cvmx_usbnx_ctl_status_s
72133    {
72134#if __BYTE_ORDER == __BIG_ENDIAN
72135        uint64_t reserved_6_63           : 58;
72136        uint64_t dma_0pag                : 1;       /**< When '1' sets the DMA engine will set the zero-Page
72137                                                         bit in the L2C store operation to the IOB. */
72138        uint64_t dma_stt                 : 1;       /**< When '1' sets the DMA engine to use STT operations. */
72139        uint64_t dma_test                : 1;       /**< When '1' sets the DMA engine into Test-Mode.
72140                                                         For normal operation this bit should be '0'. */
72141        uint64_t inv_a2                  : 1;       /**< When '1' causes the address[2] driven on the AHB
72142                                                         for USB-CORE FIFO access to be inverted. Also data
72143                                                         writen to and read from the AHB will have it byte
72144                                                         order swapped. If the orginal order was A-B-C-D the
72145                                                         new byte order will be D-C-B-A. */
72146        uint64_t l2c_emod                : 2;       /**< Endian format for data from/to the L2C.
72147                                                         IN:   A-B-C-D-E-F-G-H
72148                                                         OUT0: A-B-C-D-E-F-G-H
72149                                                         OUT1: H-G-F-E-D-C-B-A
72150                                                         OUT2: D-C-B-A-H-G-F-E
72151                                                         OUT3: E-F-G-H-A-B-C-D */
72152#else
72153        uint64_t l2c_emod                : 2;
72154        uint64_t inv_a2                  : 1;
72155        uint64_t dma_test                : 1;
72156        uint64_t dma_stt                 : 1;
72157        uint64_t dma_0pag                : 1;
72158        uint64_t reserved_6_63           : 58;
72159#endif
72160    } s;
72161    struct cvmx_usbnx_ctl_status_s       cn30xx;
72162    struct cvmx_usbnx_ctl_status_s       cn31xx;
72163    struct cvmx_usbnx_ctl_status_s       cn50xx;
72164    struct cvmx_usbnx_ctl_status_s       cn52xx;
72165    struct cvmx_usbnx_ctl_status_s       cn52xxp1;
72166    struct cvmx_usbnx_ctl_status_s       cn56xx;
72167    struct cvmx_usbnx_ctl_status_s       cn56xxp1;
72168} cvmx_usbnx_ctl_status_t;
72169
72170
72171/**
72172 * cvmx_usbn#_dma0_inb_chn0
72173 *
72174 * USBN_DMA0_INB_CHN0 = USBN's Inbound DMA for USB0 Channel0
72175 *
72176 * Contains the starting address for use when USB0 writes to L2C via Channel0.
72177 * Writing of this register sets the base address.
72178 */
72179typedef union
72180{
72181    uint64_t u64;
72182    struct cvmx_usbnx_dma0_inb_chn0_s
72183    {
72184#if __BYTE_ORDER == __BIG_ENDIAN
72185        uint64_t reserved_36_63          : 28;
72186        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72187#else
72188        uint64_t addr                    : 36;
72189        uint64_t reserved_36_63          : 28;
72190#endif
72191    } s;
72192    struct cvmx_usbnx_dma0_inb_chn0_s    cn30xx;
72193    struct cvmx_usbnx_dma0_inb_chn0_s    cn31xx;
72194    struct cvmx_usbnx_dma0_inb_chn0_s    cn50xx;
72195    struct cvmx_usbnx_dma0_inb_chn0_s    cn52xx;
72196    struct cvmx_usbnx_dma0_inb_chn0_s    cn52xxp1;
72197    struct cvmx_usbnx_dma0_inb_chn0_s    cn56xx;
72198    struct cvmx_usbnx_dma0_inb_chn0_s    cn56xxp1;
72199} cvmx_usbnx_dma0_inb_chn0_t;
72200
72201
72202/**
72203 * cvmx_usbn#_dma0_inb_chn1
72204 *
72205 * USBN_DMA0_INB_CHN1 = USBN's Inbound DMA for USB0 Channel1
72206 *
72207 * Contains the starting address for use when USB0 writes to L2C via Channel1.
72208 * Writing of this register sets the base address.
72209 */
72210typedef union
72211{
72212    uint64_t u64;
72213    struct cvmx_usbnx_dma0_inb_chn1_s
72214    {
72215#if __BYTE_ORDER == __BIG_ENDIAN
72216        uint64_t reserved_36_63          : 28;
72217        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72218#else
72219        uint64_t addr                    : 36;
72220        uint64_t reserved_36_63          : 28;
72221#endif
72222    } s;
72223    struct cvmx_usbnx_dma0_inb_chn1_s    cn30xx;
72224    struct cvmx_usbnx_dma0_inb_chn1_s    cn31xx;
72225    struct cvmx_usbnx_dma0_inb_chn1_s    cn50xx;
72226    struct cvmx_usbnx_dma0_inb_chn1_s    cn52xx;
72227    struct cvmx_usbnx_dma0_inb_chn1_s    cn52xxp1;
72228    struct cvmx_usbnx_dma0_inb_chn1_s    cn56xx;
72229    struct cvmx_usbnx_dma0_inb_chn1_s    cn56xxp1;
72230} cvmx_usbnx_dma0_inb_chn1_t;
72231
72232
72233/**
72234 * cvmx_usbn#_dma0_inb_chn2
72235 *
72236 * USBN_DMA0_INB_CHN2 = USBN's Inbound DMA for USB0 Channel2
72237 *
72238 * Contains the starting address for use when USB0 writes to L2C via Channel2.
72239 * Writing of this register sets the base address.
72240 */
72241typedef union
72242{
72243    uint64_t u64;
72244    struct cvmx_usbnx_dma0_inb_chn2_s
72245    {
72246#if __BYTE_ORDER == __BIG_ENDIAN
72247        uint64_t reserved_36_63          : 28;
72248        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72249#else
72250        uint64_t addr                    : 36;
72251        uint64_t reserved_36_63          : 28;
72252#endif
72253    } s;
72254    struct cvmx_usbnx_dma0_inb_chn2_s    cn30xx;
72255    struct cvmx_usbnx_dma0_inb_chn2_s    cn31xx;
72256    struct cvmx_usbnx_dma0_inb_chn2_s    cn50xx;
72257    struct cvmx_usbnx_dma0_inb_chn2_s    cn52xx;
72258    struct cvmx_usbnx_dma0_inb_chn2_s    cn52xxp1;
72259    struct cvmx_usbnx_dma0_inb_chn2_s    cn56xx;
72260    struct cvmx_usbnx_dma0_inb_chn2_s    cn56xxp1;
72261} cvmx_usbnx_dma0_inb_chn2_t;
72262
72263
72264/**
72265 * cvmx_usbn#_dma0_inb_chn3
72266 *
72267 * USBN_DMA0_INB_CHN3 = USBN's Inbound DMA for USB0 Channel3
72268 *
72269 * Contains the starting address for use when USB0 writes to L2C via Channel3.
72270 * Writing of this register sets the base address.
72271 */
72272typedef union
72273{
72274    uint64_t u64;
72275    struct cvmx_usbnx_dma0_inb_chn3_s
72276    {
72277#if __BYTE_ORDER == __BIG_ENDIAN
72278        uint64_t reserved_36_63          : 28;
72279        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72280#else
72281        uint64_t addr                    : 36;
72282        uint64_t reserved_36_63          : 28;
72283#endif
72284    } s;
72285    struct cvmx_usbnx_dma0_inb_chn3_s    cn30xx;
72286    struct cvmx_usbnx_dma0_inb_chn3_s    cn31xx;
72287    struct cvmx_usbnx_dma0_inb_chn3_s    cn50xx;
72288    struct cvmx_usbnx_dma0_inb_chn3_s    cn52xx;
72289    struct cvmx_usbnx_dma0_inb_chn3_s    cn52xxp1;
72290    struct cvmx_usbnx_dma0_inb_chn3_s    cn56xx;
72291    struct cvmx_usbnx_dma0_inb_chn3_s    cn56xxp1;
72292} cvmx_usbnx_dma0_inb_chn3_t;
72293
72294
72295/**
72296 * cvmx_usbn#_dma0_inb_chn4
72297 *
72298 * USBN_DMA0_INB_CHN4 = USBN's Inbound DMA for USB0 Channel4
72299 *
72300 * Contains the starting address for use when USB0 writes to L2C via Channel4.
72301 * Writing of this register sets the base address.
72302 */
72303typedef union
72304{
72305    uint64_t u64;
72306    struct cvmx_usbnx_dma0_inb_chn4_s
72307    {
72308#if __BYTE_ORDER == __BIG_ENDIAN
72309        uint64_t reserved_36_63          : 28;
72310        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72311#else
72312        uint64_t addr                    : 36;
72313        uint64_t reserved_36_63          : 28;
72314#endif
72315    } s;
72316    struct cvmx_usbnx_dma0_inb_chn4_s    cn30xx;
72317    struct cvmx_usbnx_dma0_inb_chn4_s    cn31xx;
72318    struct cvmx_usbnx_dma0_inb_chn4_s    cn50xx;
72319    struct cvmx_usbnx_dma0_inb_chn4_s    cn52xx;
72320    struct cvmx_usbnx_dma0_inb_chn4_s    cn52xxp1;
72321    struct cvmx_usbnx_dma0_inb_chn4_s    cn56xx;
72322    struct cvmx_usbnx_dma0_inb_chn4_s    cn56xxp1;
72323} cvmx_usbnx_dma0_inb_chn4_t;
72324
72325
72326/**
72327 * cvmx_usbn#_dma0_inb_chn5
72328 *
72329 * USBN_DMA0_INB_CHN5 = USBN's Inbound DMA for USB0 Channel5
72330 *
72331 * Contains the starting address for use when USB0 writes to L2C via Channel5.
72332 * Writing of this register sets the base address.
72333 */
72334typedef union
72335{
72336    uint64_t u64;
72337    struct cvmx_usbnx_dma0_inb_chn5_s
72338    {
72339#if __BYTE_ORDER == __BIG_ENDIAN
72340        uint64_t reserved_36_63          : 28;
72341        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72342#else
72343        uint64_t addr                    : 36;
72344        uint64_t reserved_36_63          : 28;
72345#endif
72346    } s;
72347    struct cvmx_usbnx_dma0_inb_chn5_s    cn30xx;
72348    struct cvmx_usbnx_dma0_inb_chn5_s    cn31xx;
72349    struct cvmx_usbnx_dma0_inb_chn5_s    cn50xx;
72350    struct cvmx_usbnx_dma0_inb_chn5_s    cn52xx;
72351    struct cvmx_usbnx_dma0_inb_chn5_s    cn52xxp1;
72352    struct cvmx_usbnx_dma0_inb_chn5_s    cn56xx;
72353    struct cvmx_usbnx_dma0_inb_chn5_s    cn56xxp1;
72354} cvmx_usbnx_dma0_inb_chn5_t;
72355
72356
72357/**
72358 * cvmx_usbn#_dma0_inb_chn6
72359 *
72360 * USBN_DMA0_INB_CHN6 = USBN's Inbound DMA for USB0 Channel6
72361 *
72362 * Contains the starting address for use when USB0 writes to L2C via Channel6.
72363 * Writing of this register sets the base address.
72364 */
72365typedef union
72366{
72367    uint64_t u64;
72368    struct cvmx_usbnx_dma0_inb_chn6_s
72369    {
72370#if __BYTE_ORDER == __BIG_ENDIAN
72371        uint64_t reserved_36_63          : 28;
72372        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72373#else
72374        uint64_t addr                    : 36;
72375        uint64_t reserved_36_63          : 28;
72376#endif
72377    } s;
72378    struct cvmx_usbnx_dma0_inb_chn6_s    cn30xx;
72379    struct cvmx_usbnx_dma0_inb_chn6_s    cn31xx;
72380    struct cvmx_usbnx_dma0_inb_chn6_s    cn50xx;
72381    struct cvmx_usbnx_dma0_inb_chn6_s    cn52xx;
72382    struct cvmx_usbnx_dma0_inb_chn6_s    cn52xxp1;
72383    struct cvmx_usbnx_dma0_inb_chn6_s    cn56xx;
72384    struct cvmx_usbnx_dma0_inb_chn6_s    cn56xxp1;
72385} cvmx_usbnx_dma0_inb_chn6_t;
72386
72387
72388/**
72389 * cvmx_usbn#_dma0_inb_chn7
72390 *
72391 * USBN_DMA0_INB_CHN7 = USBN's Inbound DMA for USB0 Channel7
72392 *
72393 * Contains the starting address for use when USB0 writes to L2C via Channel7.
72394 * Writing of this register sets the base address.
72395 */
72396typedef union
72397{
72398    uint64_t u64;
72399    struct cvmx_usbnx_dma0_inb_chn7_s
72400    {
72401#if __BYTE_ORDER == __BIG_ENDIAN
72402        uint64_t reserved_36_63          : 28;
72403        uint64_t addr                    : 36;      /**< Base address for DMA Write to L2C. */
72404#else
72405        uint64_t addr                    : 36;
72406        uint64_t reserved_36_63          : 28;
72407#endif
72408    } s;
72409    struct cvmx_usbnx_dma0_inb_chn7_s    cn30xx;
72410    struct cvmx_usbnx_dma0_inb_chn7_s    cn31xx;
72411    struct cvmx_usbnx_dma0_inb_chn7_s    cn50xx;
72412    struct cvmx_usbnx_dma0_inb_chn7_s    cn52xx;
72413    struct cvmx_usbnx_dma0_inb_chn7_s    cn52xxp1;
72414    struct cvmx_usbnx_dma0_inb_chn7_s    cn56xx;
72415    struct cvmx_usbnx_dma0_inb_chn7_s    cn56xxp1;
72416} cvmx_usbnx_dma0_inb_chn7_t;
72417
72418
72419/**
72420 * cvmx_usbn#_dma0_outb_chn0
72421 *
72422 * USBN_DMA0_OUTB_CHN0 = USBN's Outbound DMA for USB0 Channel0
72423 *
72424 * Contains the starting address for use when USB0 reads from L2C via Channel0.
72425 * Writing of this register sets the base address.
72426 */
72427typedef union
72428{
72429    uint64_t u64;
72430    struct cvmx_usbnx_dma0_outb_chn0_s
72431    {
72432#if __BYTE_ORDER == __BIG_ENDIAN
72433        uint64_t reserved_36_63          : 28;
72434        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72435#else
72436        uint64_t addr                    : 36;
72437        uint64_t reserved_36_63          : 28;
72438#endif
72439    } s;
72440    struct cvmx_usbnx_dma0_outb_chn0_s   cn30xx;
72441    struct cvmx_usbnx_dma0_outb_chn0_s   cn31xx;
72442    struct cvmx_usbnx_dma0_outb_chn0_s   cn50xx;
72443    struct cvmx_usbnx_dma0_outb_chn0_s   cn52xx;
72444    struct cvmx_usbnx_dma0_outb_chn0_s   cn52xxp1;
72445    struct cvmx_usbnx_dma0_outb_chn0_s   cn56xx;
72446    struct cvmx_usbnx_dma0_outb_chn0_s   cn56xxp1;
72447} cvmx_usbnx_dma0_outb_chn0_t;
72448
72449
72450/**
72451 * cvmx_usbn#_dma0_outb_chn1
72452 *
72453 * USBN_DMA0_OUTB_CHN1 = USBN's Outbound DMA for USB0 Channel1
72454 *
72455 * Contains the starting address for use when USB0 reads from L2C via Channel1.
72456 * Writing of this register sets the base address.
72457 */
72458typedef union
72459{
72460    uint64_t u64;
72461    struct cvmx_usbnx_dma0_outb_chn1_s
72462    {
72463#if __BYTE_ORDER == __BIG_ENDIAN
72464        uint64_t reserved_36_63          : 28;
72465        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72466#else
72467        uint64_t addr                    : 36;
72468        uint64_t reserved_36_63          : 28;
72469#endif
72470    } s;
72471    struct cvmx_usbnx_dma0_outb_chn1_s   cn30xx;
72472    struct cvmx_usbnx_dma0_outb_chn1_s   cn31xx;
72473    struct cvmx_usbnx_dma0_outb_chn1_s   cn50xx;
72474    struct cvmx_usbnx_dma0_outb_chn1_s   cn52xx;
72475    struct cvmx_usbnx_dma0_outb_chn1_s   cn52xxp1;
72476    struct cvmx_usbnx_dma0_outb_chn1_s   cn56xx;
72477    struct cvmx_usbnx_dma0_outb_chn1_s   cn56xxp1;
72478} cvmx_usbnx_dma0_outb_chn1_t;
72479
72480
72481/**
72482 * cvmx_usbn#_dma0_outb_chn2
72483 *
72484 * USBN_DMA0_OUTB_CHN2 = USBN's Outbound DMA for USB0 Channel2
72485 *
72486 * Contains the starting address for use when USB0 reads from L2C via Channel2.
72487 * Writing of this register sets the base address.
72488 */
72489typedef union
72490{
72491    uint64_t u64;
72492    struct cvmx_usbnx_dma0_outb_chn2_s
72493    {
72494#if __BYTE_ORDER == __BIG_ENDIAN
72495        uint64_t reserved_36_63          : 28;
72496        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72497#else
72498        uint64_t addr                    : 36;
72499        uint64_t reserved_36_63          : 28;
72500#endif
72501    } s;
72502    struct cvmx_usbnx_dma0_outb_chn2_s   cn30xx;
72503    struct cvmx_usbnx_dma0_outb_chn2_s   cn31xx;
72504    struct cvmx_usbnx_dma0_outb_chn2_s   cn50xx;
72505    struct cvmx_usbnx_dma0_outb_chn2_s   cn52xx;
72506    struct cvmx_usbnx_dma0_outb_chn2_s   cn52xxp1;
72507    struct cvmx_usbnx_dma0_outb_chn2_s   cn56xx;
72508    struct cvmx_usbnx_dma0_outb_chn2_s   cn56xxp1;
72509} cvmx_usbnx_dma0_outb_chn2_t;
72510
72511
72512/**
72513 * cvmx_usbn#_dma0_outb_chn3
72514 *
72515 * USBN_DMA0_OUTB_CHN3 = USBN's Outbound DMA for USB0 Channel3
72516 *
72517 * Contains the starting address for use when USB0 reads from L2C via Channel3.
72518 * Writing of this register sets the base address.
72519 */
72520typedef union
72521{
72522    uint64_t u64;
72523    struct cvmx_usbnx_dma0_outb_chn3_s
72524    {
72525#if __BYTE_ORDER == __BIG_ENDIAN
72526        uint64_t reserved_36_63          : 28;
72527        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72528#else
72529        uint64_t addr                    : 36;
72530        uint64_t reserved_36_63          : 28;
72531#endif
72532    } s;
72533    struct cvmx_usbnx_dma0_outb_chn3_s   cn30xx;
72534    struct cvmx_usbnx_dma0_outb_chn3_s   cn31xx;
72535    struct cvmx_usbnx_dma0_outb_chn3_s   cn50xx;
72536    struct cvmx_usbnx_dma0_outb_chn3_s   cn52xx;
72537    struct cvmx_usbnx_dma0_outb_chn3_s   cn52xxp1;
72538    struct cvmx_usbnx_dma0_outb_chn3_s   cn56xx;
72539    struct cvmx_usbnx_dma0_outb_chn3_s   cn56xxp1;
72540} cvmx_usbnx_dma0_outb_chn3_t;
72541
72542
72543/**
72544 * cvmx_usbn#_dma0_outb_chn4
72545 *
72546 * USBN_DMA0_OUTB_CHN4 = USBN's Outbound DMA for USB0 Channel4
72547 *
72548 * Contains the starting address for use when USB0 reads from L2C via Channel4.
72549 * Writing of this register sets the base address.
72550 */
72551typedef union
72552{
72553    uint64_t u64;
72554    struct cvmx_usbnx_dma0_outb_chn4_s
72555    {
72556#if __BYTE_ORDER == __BIG_ENDIAN
72557        uint64_t reserved_36_63          : 28;
72558        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72559#else
72560        uint64_t addr                    : 36;
72561        uint64_t reserved_36_63          : 28;
72562#endif
72563    } s;
72564    struct cvmx_usbnx_dma0_outb_chn4_s   cn30xx;
72565    struct cvmx_usbnx_dma0_outb_chn4_s   cn31xx;
72566    struct cvmx_usbnx_dma0_outb_chn4_s   cn50xx;
72567    struct cvmx_usbnx_dma0_outb_chn4_s   cn52xx;
72568    struct cvmx_usbnx_dma0_outb_chn4_s   cn52xxp1;
72569    struct cvmx_usbnx_dma0_outb_chn4_s   cn56xx;
72570    struct cvmx_usbnx_dma0_outb_chn4_s   cn56xxp1;
72571} cvmx_usbnx_dma0_outb_chn4_t;
72572
72573
72574/**
72575 * cvmx_usbn#_dma0_outb_chn5
72576 *
72577 * USBN_DMA0_OUTB_CHN5 = USBN's Outbound DMA for USB0 Channel5
72578 *
72579 * Contains the starting address for use when USB0 reads from L2C via Channel5.
72580 * Writing of this register sets the base address.
72581 */
72582typedef union
72583{
72584    uint64_t u64;
72585    struct cvmx_usbnx_dma0_outb_chn5_s
72586    {
72587#if __BYTE_ORDER == __BIG_ENDIAN
72588        uint64_t reserved_36_63          : 28;
72589        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72590#else
72591        uint64_t addr                    : 36;
72592        uint64_t reserved_36_63          : 28;
72593#endif
72594    } s;
72595    struct cvmx_usbnx_dma0_outb_chn5_s   cn30xx;
72596    struct cvmx_usbnx_dma0_outb_chn5_s   cn31xx;
72597    struct cvmx_usbnx_dma0_outb_chn5_s   cn50xx;
72598    struct cvmx_usbnx_dma0_outb_chn5_s   cn52xx;
72599    struct cvmx_usbnx_dma0_outb_chn5_s   cn52xxp1;
72600    struct cvmx_usbnx_dma0_outb_chn5_s   cn56xx;
72601    struct cvmx_usbnx_dma0_outb_chn5_s   cn56xxp1;
72602} cvmx_usbnx_dma0_outb_chn5_t;
72603
72604
72605/**
72606 * cvmx_usbn#_dma0_outb_chn6
72607 *
72608 * USBN_DMA0_OUTB_CHN6 = USBN's Outbound DMA for USB0 Channel6
72609 *
72610 * Contains the starting address for use when USB0 reads from L2C via Channel6.
72611 * Writing of this register sets the base address.
72612 */
72613typedef union
72614{
72615    uint64_t u64;
72616    struct cvmx_usbnx_dma0_outb_chn6_s
72617    {
72618#if __BYTE_ORDER == __BIG_ENDIAN
72619        uint64_t reserved_36_63          : 28;
72620        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72621#else
72622        uint64_t addr                    : 36;
72623        uint64_t reserved_36_63          : 28;
72624#endif
72625    } s;
72626    struct cvmx_usbnx_dma0_outb_chn6_s   cn30xx;
72627    struct cvmx_usbnx_dma0_outb_chn6_s   cn31xx;
72628    struct cvmx_usbnx_dma0_outb_chn6_s   cn50xx;
72629    struct cvmx_usbnx_dma0_outb_chn6_s   cn52xx;
72630    struct cvmx_usbnx_dma0_outb_chn6_s   cn52xxp1;
72631    struct cvmx_usbnx_dma0_outb_chn6_s   cn56xx;
72632    struct cvmx_usbnx_dma0_outb_chn6_s   cn56xxp1;
72633} cvmx_usbnx_dma0_outb_chn6_t;
72634
72635
72636/**
72637 * cvmx_usbn#_dma0_outb_chn7
72638 *
72639 * USBN_DMA0_OUTB_CHN7 = USBN's Outbound DMA for USB0 Channel7
72640 *
72641 * Contains the starting address for use when USB0 reads from L2C via Channel7.
72642 * Writing of this register sets the base address.
72643 */
72644typedef union
72645{
72646    uint64_t u64;
72647    struct cvmx_usbnx_dma0_outb_chn7_s
72648    {
72649#if __BYTE_ORDER == __BIG_ENDIAN
72650        uint64_t reserved_36_63          : 28;
72651        uint64_t addr                    : 36;      /**< Base address for DMA Read from L2C. */
72652#else
72653        uint64_t addr                    : 36;
72654        uint64_t reserved_36_63          : 28;
72655#endif
72656    } s;
72657    struct cvmx_usbnx_dma0_outb_chn7_s   cn30xx;
72658    struct cvmx_usbnx_dma0_outb_chn7_s   cn31xx;
72659    struct cvmx_usbnx_dma0_outb_chn7_s   cn50xx;
72660    struct cvmx_usbnx_dma0_outb_chn7_s   cn52xx;
72661    struct cvmx_usbnx_dma0_outb_chn7_s   cn52xxp1;
72662    struct cvmx_usbnx_dma0_outb_chn7_s   cn56xx;
72663    struct cvmx_usbnx_dma0_outb_chn7_s   cn56xxp1;
72664} cvmx_usbnx_dma0_outb_chn7_t;
72665
72666
72667/**
72668 * cvmx_usbn#_dma_test
72669 *
72670 * USBN_DMA_TEST = USBN's DMA TestRegister
72671 *
72672 * This register can cause the external DMA engine to the USB-Core to make transfers from/to L2C/USB-FIFOs
72673 */
72674typedef union
72675{
72676    uint64_t u64;
72677    struct cvmx_usbnx_dma_test_s
72678    {
72679#if __BYTE_ORDER == __BIG_ENDIAN
72680        uint64_t reserved_40_63          : 24;
72681        uint64_t done                    : 1;       /**< This field is set when a DMA completes. Writing a
72682                                                         '1' to this field clears this bit. */
72683        uint64_t req                     : 1;       /**< DMA Request. Writing a 1 to this register
72684                                                         will cause a DMA request as specified in the other
72685                                                         fields of this register to take place. This field
72686                                                         will always read as '0'. */
72687        uint64_t f_addr                  : 18;      /**< The address to read from in the Data-Fifo. */
72688        uint64_t count                   : 11;      /**< DMA Request Count. */
72689        uint64_t channel                 : 5;       /**< DMA Channel/Enpoint. */
72690        uint64_t burst                   : 4;       /**< DMA Burst Size. */
72691#else
72692        uint64_t burst                   : 4;
72693        uint64_t channel                 : 5;
72694        uint64_t count                   : 11;
72695        uint64_t f_addr                  : 18;
72696        uint64_t req                     : 1;
72697        uint64_t done                    : 1;
72698        uint64_t reserved_40_63          : 24;
72699#endif
72700    } s;
72701    struct cvmx_usbnx_dma_test_s         cn30xx;
72702    struct cvmx_usbnx_dma_test_s         cn31xx;
72703    struct cvmx_usbnx_dma_test_s         cn50xx;
72704    struct cvmx_usbnx_dma_test_s         cn52xx;
72705    struct cvmx_usbnx_dma_test_s         cn52xxp1;
72706    struct cvmx_usbnx_dma_test_s         cn56xx;
72707    struct cvmx_usbnx_dma_test_s         cn56xxp1;
72708} cvmx_usbnx_dma_test_t;
72709
72710
72711/**
72712 * cvmx_usbn#_int_enb
72713 *
72714 * USBN_INT_ENB = USBN's Interrupt Enable
72715 *
72716 * The USBN's interrupt enable register.
72717 */
72718typedef union
72719{
72720    uint64_t u64;
72721    struct cvmx_usbnx_int_enb_s
72722    {
72723#if __BYTE_ORDER == __BIG_ENDIAN
72724        uint64_t reserved_38_63          : 26;
72725        uint64_t nd4o_dpf                : 1;       /**< When set (1) and bit 37 of the USBN_INT_SUM
72726                                                         register is asserted the USBN will assert an
72727                                                         interrupt. */
72728        uint64_t nd4o_dpe                : 1;       /**< When set (1) and bit 36 of the USBN_INT_SUM
72729                                                         register is asserted the USBN will assert an
72730                                                         interrupt. */
72731        uint64_t nd4o_rpf                : 1;       /**< When set (1) and bit 35 of the USBN_INT_SUM
72732                                                         register is asserted the USBN will assert an
72733                                                         interrupt. */
72734        uint64_t nd4o_rpe                : 1;       /**< When set (1) and bit 34 of the USBN_INT_SUM
72735                                                         register is asserted the USBN will assert an
72736                                                         interrupt. */
72737        uint64_t ltl_f_pf                : 1;       /**< When set (1) and bit 33 of the USBN_INT_SUM
72738                                                         register is asserted the USBN will assert an
72739                                                         interrupt. */
72740        uint64_t ltl_f_pe                : 1;       /**< When set (1) and bit 32 of the USBN_INT_SUM
72741                                                         register is asserted the USBN will assert an
72742                                                         interrupt. */
72743        uint64_t u2n_c_pe                : 1;       /**< When set (1) and bit 31 of the USBN_INT_SUM
72744                                                         register is asserted the USBN will assert an
72745                                                         interrupt. */
72746        uint64_t u2n_c_pf                : 1;       /**< When set (1) and bit 30 of the USBN_INT_SUM
72747                                                         register is asserted the USBN will assert an
72748                                                         interrupt. */
72749        uint64_t u2n_d_pf                : 1;       /**< When set (1) and bit 29 of the USBN_INT_SUM
72750                                                         register is asserted the USBN will assert an
72751                                                         interrupt. */
72752        uint64_t u2n_d_pe                : 1;       /**< When set (1) and bit 28 of the USBN_INT_SUM
72753                                                         register is asserted the USBN will assert an
72754                                                         interrupt. */
72755        uint64_t n2u_pe                  : 1;       /**< When set (1) and bit 27 of the USBN_INT_SUM
72756                                                         register is asserted the USBN will assert an
72757                                                         interrupt. */
72758        uint64_t n2u_pf                  : 1;       /**< When set (1) and bit 26 of the USBN_INT_SUM
72759                                                         register is asserted the USBN will assert an
72760                                                         interrupt. */
72761        uint64_t uod_pf                  : 1;       /**< When set (1) and bit 25 of the USBN_INT_SUM
72762                                                         register is asserted the USBN will assert an
72763                                                         interrupt. */
72764        uint64_t uod_pe                  : 1;       /**< When set (1) and bit 24 of the USBN_INT_SUM
72765                                                         register is asserted the USBN will assert an
72766                                                         interrupt. */
72767        uint64_t rq_q3_e                 : 1;       /**< When set (1) and bit 23 of the USBN_INT_SUM
72768                                                         register is asserted the USBN will assert an
72769                                                         interrupt. */
72770        uint64_t rq_q3_f                 : 1;       /**< When set (1) and bit 22 of the USBN_INT_SUM
72771                                                         register is asserted the USBN will assert an
72772                                                         interrupt. */
72773        uint64_t rq_q2_e                 : 1;       /**< When set (1) and bit 21 of the USBN_INT_SUM
72774                                                         register is asserted the USBN will assert an
72775                                                         interrupt. */
72776        uint64_t rq_q2_f                 : 1;       /**< When set (1) and bit 20 of the USBN_INT_SUM
72777                                                         register is asserted the USBN will assert an
72778                                                         interrupt. */
72779        uint64_t rg_fi_f                 : 1;       /**< When set (1) and bit 19 of the USBN_INT_SUM
72780                                                         register is asserted the USBN will assert an
72781                                                         interrupt. */
72782        uint64_t rg_fi_e                 : 1;       /**< When set (1) and bit 18 of the USBN_INT_SUM
72783                                                         register is asserted the USBN will assert an
72784                                                         interrupt. */
72785        uint64_t l2_fi_f                 : 1;       /**< When set (1) and bit 17 of the USBN_INT_SUM
72786                                                         register is asserted the USBN will assert an
72787                                                         interrupt. */
72788        uint64_t l2_fi_e                 : 1;       /**< When set (1) and bit 16 of the USBN_INT_SUM
72789                                                         register is asserted the USBN will assert an
72790                                                         interrupt. */
72791        uint64_t l2c_a_f                 : 1;       /**< When set (1) and bit 15 of the USBN_INT_SUM
72792                                                         register is asserted the USBN will assert an
72793                                                         interrupt. */
72794        uint64_t l2c_s_e                 : 1;       /**< When set (1) and bit 14 of the USBN_INT_SUM
72795                                                         register is asserted the USBN will assert an
72796                                                         interrupt. */
72797        uint64_t dcred_f                 : 1;       /**< When set (1) and bit 13 of the USBN_INT_SUM
72798                                                         register is asserted the USBN will assert an
72799                                                         interrupt. */
72800        uint64_t dcred_e                 : 1;       /**< When set (1) and bit 12 of the USBN_INT_SUM
72801                                                         register is asserted the USBN will assert an
72802                                                         interrupt. */
72803        uint64_t lt_pu_f                 : 1;       /**< When set (1) and bit 11 of the USBN_INT_SUM
72804                                                         register is asserted the USBN will assert an
72805                                                         interrupt. */
72806        uint64_t lt_po_e                 : 1;       /**< When set (1) and bit 10 of the USBN_INT_SUM
72807                                                         register is asserted the USBN will assert an
72808                                                         interrupt. */
72809        uint64_t nt_pu_f                 : 1;       /**< When set (1) and bit 9 of the USBN_INT_SUM
72810                                                         register is asserted the USBN will assert an
72811                                                         interrupt. */
72812        uint64_t nt_po_e                 : 1;       /**< When set (1) and bit 8 of the USBN_INT_SUM
72813                                                         register is asserted the USBN will assert an
72814                                                         interrupt. */
72815        uint64_t pt_pu_f                 : 1;       /**< When set (1) and bit 7 of the USBN_INT_SUM
72816                                                         register is asserted the USBN will assert an
72817                                                         interrupt. */
72818        uint64_t pt_po_e                 : 1;       /**< When set (1) and bit 6 of the USBN_INT_SUM
72819                                                         register is asserted the USBN will assert an
72820                                                         interrupt. */
72821        uint64_t lr_pu_f                 : 1;       /**< When set (1) and bit 5 of the USBN_INT_SUM
72822                                                         register is asserted the USBN will assert an
72823                                                         interrupt. */
72824        uint64_t lr_po_e                 : 1;       /**< When set (1) and bit 4 of the USBN_INT_SUM
72825                                                         register is asserted the USBN will assert an
72826                                                         interrupt. */
72827        uint64_t nr_pu_f                 : 1;       /**< When set (1) and bit 3 of the USBN_INT_SUM
72828                                                         register is asserted the USBN will assert an
72829                                                         interrupt. */
72830        uint64_t nr_po_e                 : 1;       /**< When set (1) and bit 2 of the USBN_INT_SUM
72831                                                         register is asserted the USBN will assert an
72832                                                         interrupt. */
72833        uint64_t pr_pu_f                 : 1;       /**< When set (1) and bit 1 of the USBN_INT_SUM
72834                                                         register is asserted the USBN will assert an
72835                                                         interrupt. */
72836        uint64_t pr_po_e                 : 1;       /**< When set (1) and bit 0 of the USBN_INT_SUM
72837                                                         register is asserted the USBN will assert an
72838                                                         interrupt. */
72839#else
72840        uint64_t pr_po_e                 : 1;
72841        uint64_t pr_pu_f                 : 1;
72842        uint64_t nr_po_e                 : 1;
72843        uint64_t nr_pu_f                 : 1;
72844        uint64_t lr_po_e                 : 1;
72845        uint64_t lr_pu_f                 : 1;
72846        uint64_t pt_po_e                 : 1;
72847        uint64_t pt_pu_f                 : 1;
72848        uint64_t nt_po_e                 : 1;
72849        uint64_t nt_pu_f                 : 1;
72850        uint64_t lt_po_e                 : 1;
72851        uint64_t lt_pu_f                 : 1;
72852        uint64_t dcred_e                 : 1;
72853        uint64_t dcred_f                 : 1;
72854        uint64_t l2c_s_e                 : 1;
72855        uint64_t l2c_a_f                 : 1;
72856        uint64_t l2_fi_e                 : 1;
72857        uint64_t l2_fi_f                 : 1;
72858        uint64_t rg_fi_e                 : 1;
72859        uint64_t rg_fi_f                 : 1;
72860        uint64_t rq_q2_f                 : 1;
72861        uint64_t rq_q2_e                 : 1;
72862        uint64_t rq_q3_f                 : 1;
72863        uint64_t rq_q3_e                 : 1;
72864        uint64_t uod_pe                  : 1;
72865        uint64_t uod_pf                  : 1;
72866        uint64_t n2u_pf                  : 1;
72867        uint64_t n2u_pe                  : 1;
72868        uint64_t u2n_d_pe                : 1;
72869        uint64_t u2n_d_pf                : 1;
72870        uint64_t u2n_c_pf                : 1;
72871        uint64_t u2n_c_pe                : 1;
72872        uint64_t ltl_f_pe                : 1;
72873        uint64_t ltl_f_pf                : 1;
72874        uint64_t nd4o_rpe                : 1;
72875        uint64_t nd4o_rpf                : 1;
72876        uint64_t nd4o_dpe                : 1;
72877        uint64_t nd4o_dpf                : 1;
72878        uint64_t reserved_38_63          : 26;
72879#endif
72880    } s;
72881    struct cvmx_usbnx_int_enb_s          cn30xx;
72882    struct cvmx_usbnx_int_enb_s          cn31xx;
72883    struct cvmx_usbnx_int_enb_cn50xx
72884    {
72885#if __BYTE_ORDER == __BIG_ENDIAN
72886        uint64_t reserved_38_63          : 26;
72887        uint64_t nd4o_dpf                : 1;       /**< When set (1) and bit 37 of the USBN_INT_SUM
72888                                                         register is asserted the USBN will assert an
72889                                                         interrupt. */
72890        uint64_t nd4o_dpe                : 1;       /**< When set (1) and bit 36 of the USBN_INT_SUM
72891                                                         register is asserted the USBN will assert an
72892                                                         interrupt. */
72893        uint64_t nd4o_rpf                : 1;       /**< When set (1) and bit 35 of the USBN_INT_SUM
72894                                                         register is asserted the USBN will assert an
72895                                                         interrupt. */
72896        uint64_t nd4o_rpe                : 1;       /**< When set (1) and bit 34 of the USBN_INT_SUM
72897                                                         register is asserted the USBN will assert an
72898                                                         interrupt. */
72899        uint64_t ltl_f_pf                : 1;       /**< When set (1) and bit 33 of the USBN_INT_SUM
72900                                                         register is asserted the USBN will assert an
72901                                                         interrupt. */
72902        uint64_t ltl_f_pe                : 1;       /**< When set (1) and bit 32 of the USBN_INT_SUM
72903                                                         register is asserted the USBN will assert an
72904                                                         interrupt. */
72905        uint64_t reserved_26_31          : 6;
72906        uint64_t uod_pf                  : 1;       /**< When set (1) and bit 25 of the USBN_INT_SUM
72907                                                         register is asserted the USBN will assert an
72908                                                         interrupt. */
72909        uint64_t uod_pe                  : 1;       /**< When set (1) and bit 24 of the USBN_INT_SUM
72910                                                         register is asserted the USBN will assert an
72911                                                         interrupt. */
72912        uint64_t rq_q3_e                 : 1;       /**< When set (1) and bit 23 of the USBN_INT_SUM
72913                                                         register is asserted the USBN will assert an
72914                                                         interrupt. */
72915        uint64_t rq_q3_f                 : 1;       /**< When set (1) and bit 22 of the USBN_INT_SUM
72916                                                         register is asserted the USBN will assert an
72917                                                         interrupt. */
72918        uint64_t rq_q2_e                 : 1;       /**< When set (1) and bit 21 of the USBN_INT_SUM
72919                                                         register is asserted the USBN will assert an
72920                                                         interrupt. */
72921        uint64_t rq_q2_f                 : 1;       /**< When set (1) and bit 20 of the USBN_INT_SUM
72922                                                         register is asserted the USBN will assert an
72923                                                         interrupt. */
72924        uint64_t rg_fi_f                 : 1;       /**< When set (1) and bit 19 of the USBN_INT_SUM
72925                                                         register is asserted the USBN will assert an
72926                                                         interrupt. */
72927        uint64_t rg_fi_e                 : 1;       /**< When set (1) and bit 18 of the USBN_INT_SUM
72928                                                         register is asserted the USBN will assert an
72929                                                         interrupt. */
72930        uint64_t l2_fi_f                 : 1;       /**< When set (1) and bit 17 of the USBN_INT_SUM
72931                                                         register is asserted the USBN will assert an
72932                                                         interrupt. */
72933        uint64_t l2_fi_e                 : 1;       /**< When set (1) and bit 16 of the USBN_INT_SUM
72934                                                         register is asserted the USBN will assert an
72935                                                         interrupt. */
72936        uint64_t l2c_a_f                 : 1;       /**< When set (1) and bit 15 of the USBN_INT_SUM
72937                                                         register is asserted the USBN will assert an
72938                                                         interrupt. */
72939        uint64_t l2c_s_e                 : 1;       /**< When set (1) and bit 14 of the USBN_INT_SUM
72940                                                         register is asserted the USBN will assert an
72941                                                         interrupt. */
72942        uint64_t dcred_f                 : 1;       /**< When set (1) and bit 13 of the USBN_INT_SUM
72943                                                         register is asserted the USBN will assert an
72944                                                         interrupt. */
72945        uint64_t dcred_e                 : 1;       /**< When set (1) and bit 12 of the USBN_INT_SUM
72946                                                         register is asserted the USBN will assert an
72947                                                         interrupt. */
72948        uint64_t lt_pu_f                 : 1;       /**< When set (1) and bit 11 of the USBN_INT_SUM
72949                                                         register is asserted the USBN will assert an
72950                                                         interrupt. */
72951        uint64_t lt_po_e                 : 1;       /**< When set (1) and bit 10 of the USBN_INT_SUM
72952                                                         register is asserted the USBN will assert an
72953                                                         interrupt. */
72954        uint64_t nt_pu_f                 : 1;       /**< When set (1) and bit 9 of the USBN_INT_SUM
72955                                                         register is asserted the USBN will assert an
72956                                                         interrupt. */
72957        uint64_t nt_po_e                 : 1;       /**< When set (1) and bit 8 of the USBN_INT_SUM
72958                                                         register is asserted the USBN will assert an
72959                                                         interrupt. */
72960        uint64_t pt_pu_f                 : 1;       /**< When set (1) and bit 7 of the USBN_INT_SUM
72961                                                         register is asserted the USBN will assert an
72962                                                         interrupt. */
72963        uint64_t pt_po_e                 : 1;       /**< When set (1) and bit 6 of the USBN_INT_SUM
72964                                                         register is asserted the USBN will assert an
72965                                                         interrupt. */
72966        uint64_t lr_pu_f                 : 1;       /**< When set (1) and bit 5 of the USBN_INT_SUM
72967                                                         register is asserted the USBN will assert an
72968                                                         interrupt. */
72969        uint64_t lr_po_e                 : 1;       /**< When set (1) and bit 4 of the USBN_INT_SUM
72970                                                         register is asserted the USBN will assert an
72971                                                         interrupt. */
72972        uint64_t nr_pu_f                 : 1;       /**< When set (1) and bit 3 of the USBN_INT_SUM
72973                                                         register is asserted the USBN will assert an
72974                                                         interrupt. */
72975        uint64_t nr_po_e                 : 1;       /**< When set (1) and bit 2 of the USBN_INT_SUM
72976                                                         register is asserted the USBN will assert an
72977                                                         interrupt. */
72978        uint64_t pr_pu_f                 : 1;       /**< When set (1) and bit 1 of the USBN_INT_SUM
72979                                                         register is asserted the USBN will assert an
72980                                                         interrupt. */
72981        uint64_t pr_po_e                 : 1;       /**< When set (1) and bit 0 of the USBN_INT_SUM
72982                                                         register is asserted the USBN will assert an
72983                                                         interrupt. */
72984#else
72985        uint64_t pr_po_e                 : 1;
72986        uint64_t pr_pu_f                 : 1;
72987        uint64_t nr_po_e                 : 1;
72988        uint64_t nr_pu_f                 : 1;
72989        uint64_t lr_po_e                 : 1;
72990        uint64_t lr_pu_f                 : 1;
72991        uint64_t pt_po_e                 : 1;
72992        uint64_t pt_pu_f                 : 1;
72993        uint64_t nt_po_e                 : 1;
72994        uint64_t nt_pu_f                 : 1;
72995        uint64_t lt_po_e                 : 1;
72996        uint64_t lt_pu_f                 : 1;
72997        uint64_t dcred_e                 : 1;
72998        uint64_t dcred_f                 : 1;
72999        uint64_t l2c_s_e                 : 1;
73000        uint64_t l2c_a_f                 : 1;
73001        uint64_t l2_fi_e                 : 1;
73002        uint64_t l2_fi_f                 : 1;
73003        uint64_t rg_fi_e                 : 1;
73004        uint64_t rg_fi_f                 : 1;
73005        uint64_t rq_q2_f                 : 1;
73006        uint64_t rq_q2_e                 : 1;
73007        uint64_t rq_q3_f                 : 1;
73008        uint64_t rq_q3_e                 : 1;
73009        uint64_t uod_pe                  : 1;
73010        uint64_t uod_pf                  : 1;
73011        uint64_t reserved_26_31          : 6;
73012        uint64_t ltl_f_pe                : 1;
73013        uint64_t ltl_f_pf                : 1;
73014        uint64_t nd4o_rpe                : 1;
73015        uint64_t nd4o_rpf                : 1;
73016        uint64_t nd4o_dpe                : 1;
73017        uint64_t nd4o_dpf                : 1;
73018        uint64_t reserved_38_63          : 26;
73019#endif
73020    } cn50xx;
73021    struct cvmx_usbnx_int_enb_cn50xx     cn52xx;
73022    struct cvmx_usbnx_int_enb_cn50xx     cn52xxp1;
73023    struct cvmx_usbnx_int_enb_cn50xx     cn56xx;
73024    struct cvmx_usbnx_int_enb_cn50xx     cn56xxp1;
73025} cvmx_usbnx_int_enb_t;
73026
73027
73028/**
73029 * cvmx_usbn#_int_sum
73030 *
73031 * USBN_INT_SUM = USBN's Interrupt Summary Register
73032 *
73033 * Contains the diffrent interrupt summary bits of the USBN.
73034 */
73035typedef union
73036{
73037    uint64_t u64;
73038    struct cvmx_usbnx_int_sum_s
73039    {
73040#if __BYTE_ORDER == __BIG_ENDIAN
73041        uint64_t reserved_38_63          : 26;
73042        uint64_t nd4o_dpf                : 1;       /**< NCB DMA Out Data Fifo Push Full. */
73043        uint64_t nd4o_dpe                : 1;       /**< NCB DMA Out Data Fifo Pop Empty. */
73044        uint64_t nd4o_rpf                : 1;       /**< NCB DMA Out Request Fifo Push Full. */
73045        uint64_t nd4o_rpe                : 1;       /**< NCB DMA Out Request Fifo Pop Empty. */
73046        uint64_t ltl_f_pf                : 1;       /**< L2C Transfer Length Fifo Push Full. */
73047        uint64_t ltl_f_pe                : 1;       /**< L2C Transfer Length Fifo Pop Empty. */
73048        uint64_t u2n_c_pe                : 1;       /**< U2N Control Fifo Pop Empty. */
73049        uint64_t u2n_c_pf                : 1;       /**< U2N Control Fifo Push Full. */
73050        uint64_t u2n_d_pf                : 1;       /**< U2N Data Fifo Push Full. */
73051        uint64_t u2n_d_pe                : 1;       /**< U2N Data Fifo Pop Empty. */
73052        uint64_t n2u_pe                  : 1;       /**< N2U Fifo Pop Empty. */
73053        uint64_t n2u_pf                  : 1;       /**< N2U Fifo Push Full. */
73054        uint64_t uod_pf                  : 1;       /**< UOD Fifo Push Full. */
73055        uint64_t uod_pe                  : 1;       /**< UOD Fifo Pop Empty. */
73056        uint64_t rq_q3_e                 : 1;       /**< Request Queue-3 Fifo Pushed When Full. */
73057        uint64_t rq_q3_f                 : 1;       /**< Request Queue-3 Fifo Pushed When Full. */
73058        uint64_t rq_q2_e                 : 1;       /**< Request Queue-2 Fifo Pushed When Full. */
73059        uint64_t rq_q2_f                 : 1;       /**< Request Queue-2 Fifo Pushed When Full. */
73060        uint64_t rg_fi_f                 : 1;       /**< Register Request Fifo Pushed When Full. */
73061        uint64_t rg_fi_e                 : 1;       /**< Register Request Fifo Pushed When Full. */
73062        uint64_t lt_fi_f                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73063        uint64_t lt_fi_e                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73064        uint64_t l2c_a_f                 : 1;       /**< L2C Credit Count Added When Full. */
73065        uint64_t l2c_s_e                 : 1;       /**< L2C Credit Count Subtracted When Empty. */
73066        uint64_t dcred_f                 : 1;       /**< Data CreditFifo Pushed When Full. */
73067        uint64_t dcred_e                 : 1;       /**< Data Credit Fifo Pushed When Full. */
73068        uint64_t lt_pu_f                 : 1;       /**< L2C Trasaction Fifo Pushed When Full. */
73069        uint64_t lt_po_e                 : 1;       /**< L2C Trasaction Fifo Popped When Full. */
73070        uint64_t nt_pu_f                 : 1;       /**< NPI Trasaction Fifo Pushed When Full. */
73071        uint64_t nt_po_e                 : 1;       /**< NPI Trasaction Fifo Popped When Full. */
73072        uint64_t pt_pu_f                 : 1;       /**< PP  Trasaction Fifo Pushed When Full. */
73073        uint64_t pt_po_e                 : 1;       /**< PP  Trasaction Fifo Popped When Full. */
73074        uint64_t lr_pu_f                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73075        uint64_t lr_po_e                 : 1;       /**< L2C Request Fifo Popped When Empty. */
73076        uint64_t nr_pu_f                 : 1;       /**< NPI Request Fifo Pushed When Full. */
73077        uint64_t nr_po_e                 : 1;       /**< NPI Request Fifo Popped When Empty. */
73078        uint64_t pr_pu_f                 : 1;       /**< PP  Request Fifo Pushed When Full. */
73079        uint64_t pr_po_e                 : 1;       /**< PP  Request Fifo Popped When Empty. */
73080#else
73081        uint64_t pr_po_e                 : 1;
73082        uint64_t pr_pu_f                 : 1;
73083        uint64_t nr_po_e                 : 1;
73084        uint64_t nr_pu_f                 : 1;
73085        uint64_t lr_po_e                 : 1;
73086        uint64_t lr_pu_f                 : 1;
73087        uint64_t pt_po_e                 : 1;
73088        uint64_t pt_pu_f                 : 1;
73089        uint64_t nt_po_e                 : 1;
73090        uint64_t nt_pu_f                 : 1;
73091        uint64_t lt_po_e                 : 1;
73092        uint64_t lt_pu_f                 : 1;
73093        uint64_t dcred_e                 : 1;
73094        uint64_t dcred_f                 : 1;
73095        uint64_t l2c_s_e                 : 1;
73096        uint64_t l2c_a_f                 : 1;
73097        uint64_t lt_fi_e                 : 1;
73098        uint64_t lt_fi_f                 : 1;
73099        uint64_t rg_fi_e                 : 1;
73100        uint64_t rg_fi_f                 : 1;
73101        uint64_t rq_q2_f                 : 1;
73102        uint64_t rq_q2_e                 : 1;
73103        uint64_t rq_q3_f                 : 1;
73104        uint64_t rq_q3_e                 : 1;
73105        uint64_t uod_pe                  : 1;
73106        uint64_t uod_pf                  : 1;
73107        uint64_t n2u_pf                  : 1;
73108        uint64_t n2u_pe                  : 1;
73109        uint64_t u2n_d_pe                : 1;
73110        uint64_t u2n_d_pf                : 1;
73111        uint64_t u2n_c_pf                : 1;
73112        uint64_t u2n_c_pe                : 1;
73113        uint64_t ltl_f_pe                : 1;
73114        uint64_t ltl_f_pf                : 1;
73115        uint64_t nd4o_rpe                : 1;
73116        uint64_t nd4o_rpf                : 1;
73117        uint64_t nd4o_dpe                : 1;
73118        uint64_t nd4o_dpf                : 1;
73119        uint64_t reserved_38_63          : 26;
73120#endif
73121    } s;
73122    struct cvmx_usbnx_int_sum_s          cn30xx;
73123    struct cvmx_usbnx_int_sum_s          cn31xx;
73124    struct cvmx_usbnx_int_sum_cn50xx
73125    {
73126#if __BYTE_ORDER == __BIG_ENDIAN
73127        uint64_t reserved_38_63          : 26;
73128        uint64_t nd4o_dpf                : 1;       /**< NCB DMA Out Data Fifo Push Full. */
73129        uint64_t nd4o_dpe                : 1;       /**< NCB DMA Out Data Fifo Pop Empty. */
73130        uint64_t nd4o_rpf                : 1;       /**< NCB DMA Out Request Fifo Push Full. */
73131        uint64_t nd4o_rpe                : 1;       /**< NCB DMA Out Request Fifo Pop Empty. */
73132        uint64_t ltl_f_pf                : 1;       /**< L2C Transfer Length Fifo Push Full. */
73133        uint64_t ltl_f_pe                : 1;       /**< L2C Transfer Length Fifo Pop Empty. */
73134        uint64_t reserved_26_31          : 6;
73135        uint64_t uod_pf                  : 1;       /**< UOD Fifo Push Full. */
73136        uint64_t uod_pe                  : 1;       /**< UOD Fifo Pop Empty. */
73137        uint64_t rq_q3_e                 : 1;       /**< Request Queue-3 Fifo Pushed When Full. */
73138        uint64_t rq_q3_f                 : 1;       /**< Request Queue-3 Fifo Pushed When Full. */
73139        uint64_t rq_q2_e                 : 1;       /**< Request Queue-2 Fifo Pushed When Full. */
73140        uint64_t rq_q2_f                 : 1;       /**< Request Queue-2 Fifo Pushed When Full. */
73141        uint64_t rg_fi_f                 : 1;       /**< Register Request Fifo Pushed When Full. */
73142        uint64_t rg_fi_e                 : 1;       /**< Register Request Fifo Pushed When Full. */
73143        uint64_t lt_fi_f                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73144        uint64_t lt_fi_e                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73145        uint64_t l2c_a_f                 : 1;       /**< L2C Credit Count Added When Full. */
73146        uint64_t l2c_s_e                 : 1;       /**< L2C Credit Count Subtracted When Empty. */
73147        uint64_t dcred_f                 : 1;       /**< Data CreditFifo Pushed When Full. */
73148        uint64_t dcred_e                 : 1;       /**< Data Credit Fifo Pushed When Full. */
73149        uint64_t lt_pu_f                 : 1;       /**< L2C Trasaction Fifo Pushed When Full. */
73150        uint64_t lt_po_e                 : 1;       /**< L2C Trasaction Fifo Popped When Full. */
73151        uint64_t nt_pu_f                 : 1;       /**< NPI Trasaction Fifo Pushed When Full. */
73152        uint64_t nt_po_e                 : 1;       /**< NPI Trasaction Fifo Popped When Full. */
73153        uint64_t pt_pu_f                 : 1;       /**< PP  Trasaction Fifo Pushed When Full. */
73154        uint64_t pt_po_e                 : 1;       /**< PP  Trasaction Fifo Popped When Full. */
73155        uint64_t lr_pu_f                 : 1;       /**< L2C Request Fifo Pushed When Full. */
73156        uint64_t lr_po_e                 : 1;       /**< L2C Request Fifo Popped When Empty. */
73157        uint64_t nr_pu_f                 : 1;       /**< NPI Request Fifo Pushed When Full. */
73158        uint64_t nr_po_e                 : 1;       /**< NPI Request Fifo Popped When Empty. */
73159        uint64_t pr_pu_f                 : 1;       /**< PP  Request Fifo Pushed When Full. */
73160        uint64_t pr_po_e                 : 1;       /**< PP  Request Fifo Popped When Empty. */
73161#else
73162        uint64_t pr_po_e                 : 1;
73163        uint64_t pr_pu_f                 : 1;
73164        uint64_t nr_po_e                 : 1;
73165        uint64_t nr_pu_f                 : 1;
73166        uint64_t lr_po_e                 : 1;
73167        uint64_t lr_pu_f                 : 1;
73168        uint64_t pt_po_e                 : 1;
73169        uint64_t pt_pu_f                 : 1;
73170        uint64_t nt_po_e                 : 1;
73171        uint64_t nt_pu_f                 : 1;
73172        uint64_t lt_po_e                 : 1;
73173        uint64_t lt_pu_f                 : 1;
73174        uint64_t dcred_e                 : 1;
73175        uint64_t dcred_f                 : 1;
73176        uint64_t l2c_s_e                 : 1;
73177        uint64_t l2c_a_f                 : 1;
73178        uint64_t lt_fi_e                 : 1;
73179        uint64_t lt_fi_f                 : 1;
73180        uint64_t rg_fi_e                 : 1;
73181        uint64_t rg_fi_f                 : 1;
73182        uint64_t rq_q2_f                 : 1;
73183        uint64_t rq_q2_e                 : 1;
73184        uint64_t rq_q3_f                 : 1;
73185        uint64_t rq_q3_e                 : 1;
73186        uint64_t uod_pe                  : 1;
73187        uint64_t uod_pf                  : 1;
73188        uint64_t reserved_26_31          : 6;
73189        uint64_t ltl_f_pe                : 1;
73190        uint64_t ltl_f_pf                : 1;
73191        uint64_t nd4o_rpe                : 1;
73192        uint64_t nd4o_rpf                : 1;
73193        uint64_t nd4o_dpe                : 1;
73194        uint64_t nd4o_dpf                : 1;
73195        uint64_t reserved_38_63          : 26;
73196#endif
73197    } cn50xx;
73198    struct cvmx_usbnx_int_sum_cn50xx     cn52xx;
73199    struct cvmx_usbnx_int_sum_cn50xx     cn52xxp1;
73200    struct cvmx_usbnx_int_sum_cn50xx     cn56xx;
73201    struct cvmx_usbnx_int_sum_cn50xx     cn56xxp1;
73202} cvmx_usbnx_int_sum_t;
73203
73204
73205/**
73206 * cvmx_usbn#_usbp_ctl_status
73207 *
73208 * USBN_USBP_CTL_STATUS = USBP Control And Status Register
73209 *
73210 * Contains general control and status information for the USBN block.
73211 */
73212typedef union
73213{
73214    uint64_t u64;
73215    struct cvmx_usbnx_usbp_ctl_status_s
73216    {
73217#if __BYTE_ORDER == __BIG_ENDIAN
73218        uint64_t txrisetune              : 1;       /**< HS Transmitter Rise/Fall Time Adjustment */
73219        uint64_t txvreftune              : 4;       /**< HS DC Voltage Level Adjustment */
73220        uint64_t txfslstune              : 4;       /**< FS/LS Source Impedence Adjustment */
73221        uint64_t txhsxvtune              : 2;       /**< Transmitter High-Speed Crossover Adjustment */
73222        uint64_t sqrxtune                : 3;       /**< Squelch Threshold Adjustment */
73223        uint64_t compdistune             : 3;       /**< Disconnect Threshold Adjustment */
73224        uint64_t otgtune                 : 3;       /**< VBUS Valid Threshold Adjustment */
73225        uint64_t otgdisable              : 1;       /**< OTG Block Disable */
73226        uint64_t portreset               : 1;       /**< Per_Port Reset */
73227        uint64_t drvvbus                 : 1;       /**< Drive VBUS */
73228        uint64_t lsbist                  : 1;       /**< Low-Speed BIST Enable. */
73229        uint64_t fsbist                  : 1;       /**< Full-Speed BIST Enable. */
73230        uint64_t hsbist                  : 1;       /**< High-Speed BIST Enable. */
73231        uint64_t bist_done               : 1;       /**< PHY Bist Done.
73232                                                         Asserted at the end of the PHY BIST sequence. */
73233        uint64_t bist_err                : 1;       /**< PHY Bist Error.
73234                                                         Indicates an internal error was detected during
73235                                                         the BIST sequence. */
73236        uint64_t tdata_out               : 4;       /**< PHY Test Data Out.
73237                                                         Presents either internaly generated signals or
73238                                                         test register contents, based upon the value of
73239                                                         test_data_out_sel. */
73240        uint64_t siddq                   : 1;       /**< Drives the USBP (USB-PHY) SIDDQ input.
73241                                                         Normally should be set to zero.
73242                                                         When customers have no intent to use USB PHY
73243                                                         interface, they should:
73244                                                           - still provide 3.3V to USB_VDD33, and
73245                                                           - tie USB_REXT to 3.3V supply, and
73246                                                           - set USBN*_USBP_CTL_STATUS[SIDDQ]=1 */
73247        uint64_t txpreemphasistune       : 1;       /**< HS Transmitter Pre-Emphasis Enable */
73248        uint64_t dma_bmode               : 1;       /**< When set to 1 the L2C DMA address will be updated
73249                                                         with byte-counts between packets. When set to 0
73250                                                         the L2C DMA address is incremented to the next
73251                                                         4-byte aligned address after adding byte-count. */
73252        uint64_t usbc_end                : 1;       /**< Bigendian input to the USB Core. This should be
73253                                                         set to '0' for operation. */
73254        uint64_t usbp_bist               : 1;       /**< PHY, This is cleared '0' to run BIST on the USBP. */
73255        uint64_t tclk                    : 1;       /**< PHY Test Clock, used to load TDATA_IN to the USBP. */
73256        uint64_t dp_pulld                : 1;       /**< PHY DP_PULLDOWN input to the USB-PHY.
73257                                                         This signal enables the pull-down resistance on
73258                                                         the D+ line. '1' pull down-resistance is connected
73259                                                         to D+/ '0' pull down resistance is not connected
73260                                                         to D+. When an A/B device is acting as a host
73261                                                         (downstream-facing port), dp_pulldown and
73262                                                         dm_pulldown are enabled. This must not toggle
73263                                                         during normal opeartion. */
73264        uint64_t dm_pulld                : 1;       /**< PHY DM_PULLDOWN input to the USB-PHY.
73265                                                         This signal enables the pull-down resistance on
73266                                                         the D- line. '1' pull down-resistance is connected
73267                                                         to D-. '0' pull down resistance is not connected
73268                                                         to D-. When an A/B device is acting as a host
73269                                                         (downstream-facing port), dp_pulldown and
73270                                                         dm_pulldown are enabled. This must not toggle
73271                                                         during normal opeartion. */
73272        uint64_t hst_mode                : 1;       /**< When '0' the USB is acting as HOST, when '1'
73273                                                         USB is acting as device. This field needs to be
73274                                                         set while the USB is in reset. */
73275        uint64_t tuning                  : 4;       /**< Transmitter Tuning for High-Speed Operation.
73276                                                         Tunes the current supply and rise/fall output
73277                                                         times for high-speed operation.
73278                                                         [20:19] == 11: Current supply increased
73279                                                         approximately 9%
73280                                                         [20:19] == 10: Current supply increased
73281                                                         approximately 4.5%
73282                                                         [20:19] == 01: Design default.
73283                                                         [20:19] == 00: Current supply decreased
73284                                                         approximately 4.5%
73285                                                         [22:21] == 11: Rise and fall times are increased.
73286                                                         [22:21] == 10: Design default.
73287                                                         [22:21] == 01: Rise and fall times are decreased.
73288                                                         [22:21] == 00: Rise and fall times are decreased
73289                                                         further as compared to the 01 setting. */
73290        uint64_t tx_bs_enh               : 1;       /**< Transmit Bit Stuffing on [15:8].
73291                                                         Enables or disables bit stuffing on data[15:8]
73292                                                         when bit-stuffing is enabled. */
73293        uint64_t tx_bs_en                : 1;       /**< Transmit Bit Stuffing on [7:0].
73294                                                         Enables or disables bit stuffing on data[7:0]
73295                                                         when bit-stuffing is enabled. */
73296        uint64_t loop_enb                : 1;       /**< PHY Loopback Test Enable.
73297                                                         '1': During data transmission the receive is
73298                                                         enabled.
73299                                                         '0': During data transmission the receive is
73300                                                         disabled.
73301                                                         Must be '0' for normal operation. */
73302        uint64_t vtest_enb               : 1;       /**< Analog Test Pin Enable.
73303                                                         '1' The PHY's analog_test pin is enabled for the
73304                                                         input and output of applicable analog test signals.
73305                                                         '0' THe analog_test pin is disabled. */
73306        uint64_t bist_enb                : 1;       /**< Built-In Self Test Enable.
73307                                                         Used to activate BIST in the PHY. */
73308        uint64_t tdata_sel               : 1;       /**< Test Data Out Select.
73309                                                         '1' test_data_out[3:0] (PHY) register contents
73310                                                         are output. '0' internaly generated signals are
73311                                                         output. */
73312        uint64_t taddr_in                : 4;       /**< Mode Address for Test Interface.
73313                                                         Specifies the register address for writing to or
73314                                                         reading from the PHY test interface register. */
73315        uint64_t tdata_in                : 8;       /**< Internal Testing Register Input Data and Select
73316                                                         This is a test bus. Data is present on [3:0],
73317                                                         and its corresponding select (enable) is present
73318                                                         on bits [7:4]. */
73319        uint64_t ate_reset               : 1;       /**< Reset input from automatic test equipment.
73320                                                         This is a test signal. When the USB Core is
73321                                                         powered up (not in Susned Mode), an automatic
73322                                                         tester can use this to disable phy_clock and
73323                                                         free_clk, then re-eanable them with an aligned
73324                                                         phase.
73325                                                         '1': The phy_clk and free_clk outputs are
73326                                                         disabled. "0": The phy_clock and free_clk outputs
73327                                                         are available within a specific period after the
73328                                                         de-assertion. */
73329#else
73330        uint64_t ate_reset               : 1;
73331        uint64_t tdata_in                : 8;
73332        uint64_t taddr_in                : 4;
73333        uint64_t tdata_sel               : 1;
73334        uint64_t bist_enb                : 1;
73335        uint64_t vtest_enb               : 1;
73336        uint64_t loop_enb                : 1;
73337        uint64_t tx_bs_en                : 1;
73338        uint64_t tx_bs_enh               : 1;
73339        uint64_t tuning                  : 4;
73340        uint64_t hst_mode                : 1;
73341        uint64_t dm_pulld                : 1;
73342        uint64_t dp_pulld                : 1;
73343        uint64_t tclk                    : 1;
73344        uint64_t usbp_bist               : 1;
73345        uint64_t usbc_end                : 1;
73346        uint64_t dma_bmode               : 1;
73347        uint64_t txpreemphasistune       : 1;
73348        uint64_t siddq                   : 1;
73349        uint64_t tdata_out               : 4;
73350        uint64_t bist_err                : 1;
73351        uint64_t bist_done               : 1;
73352        uint64_t hsbist                  : 1;
73353        uint64_t fsbist                  : 1;
73354        uint64_t lsbist                  : 1;
73355        uint64_t drvvbus                 : 1;
73356        uint64_t portreset               : 1;
73357        uint64_t otgdisable              : 1;
73358        uint64_t otgtune                 : 3;
73359        uint64_t compdistune             : 3;
73360        uint64_t sqrxtune                : 3;
73361        uint64_t txhsxvtune              : 2;
73362        uint64_t txfslstune              : 4;
73363        uint64_t txvreftune              : 4;
73364        uint64_t txrisetune              : 1;
73365#endif
73366    } s;
73367    struct cvmx_usbnx_usbp_ctl_status_cn30xx
73368    {
73369#if __BYTE_ORDER == __BIG_ENDIAN
73370        uint64_t reserved_38_63          : 26;
73371        uint64_t bist_done               : 1;       /**< PHY Bist Done.
73372                                                         Asserted at the end of the PHY BIST sequence. */
73373        uint64_t bist_err                : 1;       /**< PHY Bist Error.
73374                                                         Indicates an internal error was detected during
73375                                                         the BIST sequence. */
73376        uint64_t tdata_out               : 4;       /**< PHY Test Data Out.
73377                                                         Presents either internaly generated signals or
73378                                                         test register contents, based upon the value of
73379                                                         test_data_out_sel. */
73380        uint64_t reserved_30_31          : 2;
73381        uint64_t dma_bmode               : 1;       /**< When set to 1 the L2C DMA address will be updated
73382                                                         with byte-counts between packets. When set to 0
73383                                                         the L2C DMA address is incremented to the next
73384                                                         4-byte aligned address after adding byte-count. */
73385        uint64_t usbc_end                : 1;       /**< Bigendian input to the USB Core. This should be
73386                                                         set to '0' for operation. */
73387        uint64_t usbp_bist               : 1;       /**< PHY, This is cleared '0' to run BIST on the USBP. */
73388        uint64_t tclk                    : 1;       /**< PHY Test Clock, used to load TDATA_IN to the USBP. */
73389        uint64_t dp_pulld                : 1;       /**< PHY DP_PULLDOWN input to the USB-PHY.
73390                                                         This signal enables the pull-down resistance on
73391                                                         the D+ line. '1' pull down-resistance is connected
73392                                                         to D+/ '0' pull down resistance is not connected
73393                                                         to D+. When an A/B device is acting as a host
73394                                                         (downstream-facing port), dp_pulldown and
73395                                                         dm_pulldown are enabled. This must not toggle
73396                                                         during normal opeartion. */
73397        uint64_t dm_pulld                : 1;       /**< PHY DM_PULLDOWN input to the USB-PHY.
73398                                                         This signal enables the pull-down resistance on
73399                                                         the D- line. '1' pull down-resistance is connected
73400                                                         to D-. '0' pull down resistance is not connected
73401                                                         to D-. When an A/B device is acting as a host
73402                                                         (downstream-facing port), dp_pulldown and
73403                                                         dm_pulldown are enabled. This must not toggle
73404                                                         during normal opeartion. */
73405        uint64_t hst_mode                : 1;       /**< When '0' the USB is acting as HOST, when '1'
73406                                                         USB is acting as device. This field needs to be
73407                                                         set while the USB is in reset. */
73408        uint64_t tuning                  : 4;       /**< Transmitter Tuning for High-Speed Operation.
73409                                                         Tunes the current supply and rise/fall output
73410                                                         times for high-speed operation.
73411                                                         [20:19] == 11: Current supply increased
73412                                                         approximately 9%
73413                                                         [20:19] == 10: Current supply increased
73414                                                         approximately 4.5%
73415                                                         [20:19] == 01: Design default.
73416                                                         [20:19] == 00: Current supply decreased
73417                                                         approximately 4.5%
73418                                                         [22:21] == 11: Rise and fall times are increased.
73419                                                         [22:21] == 10: Design default.
73420                                                         [22:21] == 01: Rise and fall times are decreased.
73421                                                         [22:21] == 00: Rise and fall times are decreased
73422                                                         further as compared to the 01 setting. */
73423        uint64_t tx_bs_enh               : 1;       /**< Transmit Bit Stuffing on [15:8].
73424                                                         Enables or disables bit stuffing on data[15:8]
73425                                                         when bit-stuffing is enabled. */
73426        uint64_t tx_bs_en                : 1;       /**< Transmit Bit Stuffing on [7:0].
73427                                                         Enables or disables bit stuffing on data[7:0]
73428                                                         when bit-stuffing is enabled. */
73429        uint64_t loop_enb                : 1;       /**< PHY Loopback Test Enable.
73430                                                         '1': During data transmission the receive is
73431                                                         enabled.
73432                                                         '0': During data transmission the receive is
73433                                                         disabled.
73434                                                         Must be '0' for normal operation. */
73435        uint64_t vtest_enb               : 1;       /**< Analog Test Pin Enable.
73436                                                         '1' The PHY's analog_test pin is enabled for the
73437                                                         input and output of applicable analog test signals.
73438                                                         '0' THe analog_test pin is disabled. */
73439        uint64_t bist_enb                : 1;       /**< Built-In Self Test Enable.
73440                                                         Used to activate BIST in the PHY. */
73441        uint64_t tdata_sel               : 1;       /**< Test Data Out Select.
73442                                                         '1' test_data_out[3:0] (PHY) register contents
73443                                                         are output. '0' internaly generated signals are
73444                                                         output. */
73445        uint64_t taddr_in                : 4;       /**< Mode Address for Test Interface.
73446                                                         Specifies the register address for writing to or
73447                                                         reading from the PHY test interface register. */
73448        uint64_t tdata_in                : 8;       /**< Internal Testing Register Input Data and Select
73449                                                         This is a test bus. Data is present on [3:0],
73450                                                         and its corresponding select (enable) is present
73451                                                         on bits [7:4]. */
73452        uint64_t ate_reset               : 1;       /**< Reset input from automatic test equipment.
73453                                                         This is a test signal. When the USB Core is
73454                                                         powered up (not in Susned Mode), an automatic
73455                                                         tester can use this to disable phy_clock and
73456                                                         free_clk, then re-eanable them with an aligned
73457                                                         phase.
73458                                                         '1': The phy_clk and free_clk outputs are
73459                                                         disabled. "0": The phy_clock and free_clk outputs
73460                                                         are available within a specific period after the
73461                                                         de-assertion. */
73462#else
73463        uint64_t ate_reset               : 1;
73464        uint64_t tdata_in                : 8;
73465        uint64_t taddr_in                : 4;
73466        uint64_t tdata_sel               : 1;
73467        uint64_t bist_enb                : 1;
73468        uint64_t vtest_enb               : 1;
73469        uint64_t loop_enb                : 1;
73470        uint64_t tx_bs_en                : 1;
73471        uint64_t tx_bs_enh               : 1;
73472        uint64_t tuning                  : 4;
73473        uint64_t hst_mode                : 1;
73474        uint64_t dm_pulld                : 1;
73475        uint64_t dp_pulld                : 1;
73476        uint64_t tclk                    : 1;
73477        uint64_t usbp_bist               : 1;
73478        uint64_t usbc_end                : 1;
73479        uint64_t dma_bmode               : 1;
73480        uint64_t reserved_30_31          : 2;
73481        uint64_t tdata_out               : 4;
73482        uint64_t bist_err                : 1;
73483        uint64_t bist_done               : 1;
73484        uint64_t reserved_38_63          : 26;
73485#endif
73486    } cn30xx;
73487    struct cvmx_usbnx_usbp_ctl_status_cn30xx cn31xx;
73488    struct cvmx_usbnx_usbp_ctl_status_cn50xx
73489    {
73490#if __BYTE_ORDER == __BIG_ENDIAN
73491        uint64_t txrisetune              : 1;       /**< HS Transmitter Rise/Fall Time Adjustment */
73492        uint64_t txvreftune              : 4;       /**< HS DC Voltage Level Adjustment */
73493        uint64_t txfslstune              : 4;       /**< FS/LS Source Impedence Adjustment */
73494        uint64_t txhsxvtune              : 2;       /**< Transmitter High-Speed Crossover Adjustment */
73495        uint64_t sqrxtune                : 3;       /**< Squelch Threshold Adjustment */
73496        uint64_t compdistune             : 3;       /**< Disconnect Threshold Adjustment */
73497        uint64_t otgtune                 : 3;       /**< VBUS Valid Threshold Adjustment */
73498        uint64_t otgdisable              : 1;       /**< OTG Block Disable */
73499        uint64_t portreset               : 1;       /**< Per_Port Reset */
73500        uint64_t drvvbus                 : 1;       /**< Drive VBUS */
73501        uint64_t lsbist                  : 1;       /**< Low-Speed BIST Enable. */
73502        uint64_t fsbist                  : 1;       /**< Full-Speed BIST Enable. */
73503        uint64_t hsbist                  : 1;       /**< High-Speed BIST Enable. */
73504        uint64_t bist_done               : 1;       /**< PHY Bist Done.
73505                                                         Asserted at the end of the PHY BIST sequence. */
73506        uint64_t bist_err                : 1;       /**< PHY Bist Error.
73507                                                         Indicates an internal error was detected during
73508                                                         the BIST sequence. */
73509        uint64_t tdata_out               : 4;       /**< PHY Test Data Out.
73510                                                         Presents either internaly generated signals or
73511                                                         test register contents, based upon the value of
73512                                                         test_data_out_sel. */
73513        uint64_t reserved_31_31          : 1;
73514        uint64_t txpreemphasistune       : 1;       /**< HS Transmitter Pre-Emphasis Enable */
73515        uint64_t dma_bmode               : 1;       /**< When set to 1 the L2C DMA address will be updated
73516                                                         with byte-counts between packets. When set to 0
73517                                                         the L2C DMA address is incremented to the next
73518                                                         4-byte aligned address after adding byte-count. */
73519        uint64_t usbc_end                : 1;       /**< Bigendian input to the USB Core. This should be
73520                                                         set to '0' for operation. */
73521        uint64_t usbp_bist               : 1;       /**< PHY, This is cleared '0' to run BIST on the USBP. */
73522        uint64_t tclk                    : 1;       /**< PHY Test Clock, used to load TDATA_IN to the USBP. */
73523        uint64_t dp_pulld                : 1;       /**< PHY DP_PULLDOWN input to the USB-PHY.
73524                                                         This signal enables the pull-down resistance on
73525                                                         the D+ line. '1' pull down-resistance is connected
73526                                                         to D+/ '0' pull down resistance is not connected
73527                                                         to D+. When an A/B device is acting as a host
73528                                                         (downstream-facing port), dp_pulldown and
73529                                                         dm_pulldown are enabled. This must not toggle
73530                                                         during normal opeartion. */
73531        uint64_t dm_pulld                : 1;       /**< PHY DM_PULLDOWN input to the USB-PHY.
73532                                                         This signal enables the pull-down resistance on
73533                                                         the D- line. '1' pull down-resistance is connected
73534                                                         to D-. '0' pull down resistance is not connected
73535                                                         to D-. When an A/B device is acting as a host
73536                                                         (downstream-facing port), dp_pulldown and
73537                                                         dm_pulldown are enabled. This must not toggle
73538                                                         during normal opeartion. */
73539        uint64_t hst_mode                : 1;       /**< When '0' the USB is acting as HOST, when '1'
73540                                                         USB is acting as device. This field needs to be
73541                                                         set while the USB is in reset. */
73542        uint64_t reserved_19_22          : 4;
73543        uint64_t tx_bs_enh               : 1;       /**< Transmit Bit Stuffing on [15:8].
73544                                                         Enables or disables bit stuffing on data[15:8]
73545                                                         when bit-stuffing is enabled. */
73546        uint64_t tx_bs_en                : 1;       /**< Transmit Bit Stuffing on [7:0].
73547                                                         Enables or disables bit stuffing on data[7:0]
73548                                                         when bit-stuffing is enabled. */
73549        uint64_t loop_enb                : 1;       /**< PHY Loopback Test Enable.
73550                                                         '1': During data transmission the receive is
73551                                                         enabled.
73552                                                         '0': During data transmission the receive is
73553                                                         disabled.
73554                                                         Must be '0' for normal operation. */
73555        uint64_t vtest_enb               : 1;       /**< Analog Test Pin Enable.
73556                                                         '1' The PHY's analog_test pin is enabled for the
73557                                                         input and output of applicable analog test signals.
73558                                                         '0' THe analog_test pin is disabled. */
73559        uint64_t bist_enb                : 1;       /**< Built-In Self Test Enable.
73560                                                         Used to activate BIST in the PHY. */
73561        uint64_t tdata_sel               : 1;       /**< Test Data Out Select.
73562                                                         '1' test_data_out[3:0] (PHY) register contents
73563                                                         are output. '0' internaly generated signals are
73564                                                         output. */
73565        uint64_t taddr_in                : 4;       /**< Mode Address for Test Interface.
73566                                                         Specifies the register address for writing to or
73567                                                         reading from the PHY test interface register. */
73568        uint64_t tdata_in                : 8;       /**< Internal Testing Register Input Data and Select
73569                                                         This is a test bus. Data is present on [3:0],
73570                                                         and its corresponding select (enable) is present
73571                                                         on bits [7:4]. */
73572        uint64_t ate_reset               : 1;       /**< Reset input from automatic test equipment.
73573                                                         This is a test signal. When the USB Core is
73574                                                         powered up (not in Susned Mode), an automatic
73575                                                         tester can use this to disable phy_clock and
73576                                                         free_clk, then re-eanable them with an aligned
73577                                                         phase.
73578                                                         '1': The phy_clk and free_clk outputs are
73579                                                         disabled. "0": The phy_clock and free_clk outputs
73580                                                         are available within a specific period after the
73581                                                         de-assertion. */
73582#else
73583        uint64_t ate_reset               : 1;
73584        uint64_t tdata_in                : 8;
73585        uint64_t taddr_in                : 4;
73586        uint64_t tdata_sel               : 1;
73587        uint64_t bist_enb                : 1;
73588        uint64_t vtest_enb               : 1;
73589        uint64_t loop_enb                : 1;
73590        uint64_t tx_bs_en                : 1;
73591        uint64_t tx_bs_enh               : 1;
73592        uint64_t reserved_19_22          : 4;
73593        uint64_t hst_mode                : 1;
73594        uint64_t dm_pulld                : 1;
73595        uint64_t dp_pulld                : 1;
73596        uint64_t tclk                    : 1;
73597        uint64_t usbp_bist               : 1;
73598        uint64_t usbc_end                : 1;
73599        uint64_t dma_bmode               : 1;
73600        uint64_t txpreemphasistune       : 1;
73601        uint64_t reserved_31_31          : 1;
73602        uint64_t tdata_out               : 4;
73603        uint64_t bist_err                : 1;
73604        uint64_t bist_done               : 1;
73605        uint64_t hsbist                  : 1;
73606        uint64_t fsbist                  : 1;
73607        uint64_t lsbist                  : 1;
73608        uint64_t drvvbus                 : 1;
73609        uint64_t portreset               : 1;
73610        uint64_t otgdisable              : 1;
73611        uint64_t otgtune                 : 3;
73612        uint64_t compdistune             : 3;
73613        uint64_t sqrxtune                : 3;
73614        uint64_t txhsxvtune              : 2;
73615        uint64_t txfslstune              : 4;
73616        uint64_t txvreftune              : 4;
73617        uint64_t txrisetune              : 1;
73618#endif
73619    } cn50xx;
73620    struct cvmx_usbnx_usbp_ctl_status_cn52xx
73621    {
73622#if __BYTE_ORDER == __BIG_ENDIAN
73623        uint64_t txrisetune              : 1;       /**< HS Transmitter Rise/Fall Time Adjustment */
73624        uint64_t txvreftune              : 4;       /**< HS DC Voltage Level Adjustment */
73625        uint64_t txfslstune              : 4;       /**< FS/LS Source Impedence Adjustment */
73626        uint64_t txhsxvtune              : 2;       /**< Transmitter High-Speed Crossover Adjustment */
73627        uint64_t sqrxtune                : 3;       /**< Squelch Threshold Adjustment */
73628        uint64_t compdistune             : 3;       /**< Disconnect Threshold Adjustment */
73629        uint64_t otgtune                 : 3;       /**< VBUS Valid Threshold Adjustment */
73630        uint64_t otgdisable              : 1;       /**< OTG Block Disable */
73631        uint64_t portreset               : 1;       /**< Per_Port Reset */
73632        uint64_t drvvbus                 : 1;       /**< Drive VBUS */
73633        uint64_t lsbist                  : 1;       /**< Low-Speed BIST Enable. */
73634        uint64_t fsbist                  : 1;       /**< Full-Speed BIST Enable. */
73635        uint64_t hsbist                  : 1;       /**< High-Speed BIST Enable. */
73636        uint64_t bist_done               : 1;       /**< PHY Bist Done.
73637                                                         Asserted at the end of the PHY BIST sequence. */
73638        uint64_t bist_err                : 1;       /**< PHY Bist Error.
73639                                                         Indicates an internal error was detected during
73640                                                         the BIST sequence. */
73641        uint64_t tdata_out               : 4;       /**< PHY Test Data Out.
73642                                                         Presents either internaly generated signals or
73643                                                         test register contents, based upon the value of
73644                                                         test_data_out_sel. */
73645        uint64_t siddq                   : 1;       /**< Drives the USBP (USB-PHY) SIDDQ input.
73646                                                         Normally should be set to zero.
73647                                                         When customers have no intent to use USB PHY
73648                                                         interface, they should:
73649                                                           - still provide 3.3V to USB_VDD33, and
73650                                                           - tie USB_REXT to 3.3V supply, and
73651                                                           - set USBN*_USBP_CTL_STATUS[SIDDQ]=1 */
73652        uint64_t txpreemphasistune       : 1;       /**< HS Transmitter Pre-Emphasis Enable */
73653        uint64_t dma_bmode               : 1;       /**< When set to 1 the L2C DMA address will be updated
73654                                                         with byte-counts between packets. When set to 0
73655                                                         the L2C DMA address is incremented to the next
73656                                                         4-byte aligned address after adding byte-count. */
73657        uint64_t usbc_end                : 1;       /**< Bigendian input to the USB Core. This should be
73658                                                         set to '0' for operation. */
73659        uint64_t usbp_bist               : 1;       /**< PHY, This is cleared '0' to run BIST on the USBP. */
73660        uint64_t tclk                    : 1;       /**< PHY Test Clock, used to load TDATA_IN to the USBP. */
73661        uint64_t dp_pulld                : 1;       /**< PHY DP_PULLDOWN input to the USB-PHY.
73662                                                         This signal enables the pull-down resistance on
73663                                                         the D+ line. '1' pull down-resistance is connected
73664                                                         to D+/ '0' pull down resistance is not connected
73665                                                         to D+. When an A/B device is acting as a host
73666                                                         (downstream-facing port), dp_pulldown and
73667                                                         dm_pulldown are enabled. This must not toggle
73668                                                         during normal opeartion. */
73669        uint64_t dm_pulld                : 1;       /**< PHY DM_PULLDOWN input to the USB-PHY.
73670                                                         This signal enables the pull-down resistance on
73671                                                         the D- line. '1' pull down-resistance is connected
73672                                                         to D-. '0' pull down resistance is not connected
73673                                                         to D-. When an A/B device is acting as a host
73674                                                         (downstream-facing port), dp_pulldown and
73675                                                         dm_pulldown are enabled. This must not toggle
73676                                                         during normal opeartion. */
73677        uint64_t hst_mode                : 1;       /**< When '0' the USB is acting as HOST, when '1'
73678                                                         USB is acting as device. This field needs to be
73679                                                         set while the USB is in reset. */
73680        uint64_t reserved_19_22          : 4;
73681        uint64_t tx_bs_enh               : 1;       /**< Transmit Bit Stuffing on [15:8].
73682                                                         Enables or disables bit stuffing on data[15:8]
73683                                                         when bit-stuffing is enabled. */
73684        uint64_t tx_bs_en                : 1;       /**< Transmit Bit Stuffing on [7:0].
73685                                                         Enables or disables bit stuffing on data[7:0]
73686                                                         when bit-stuffing is enabled. */
73687        uint64_t loop_enb                : 1;       /**< PHY Loopback Test Enable.
73688                                                         '1': During data transmission the receive is
73689                                                         enabled.
73690                                                         '0': During data transmission the receive is
73691                                                         disabled.
73692                                                         Must be '0' for normal operation. */
73693        uint64_t vtest_enb               : 1;       /**< Analog Test Pin Enable.
73694                                                         '1' The PHY's analog_test pin is enabled for the
73695                                                         input and output of applicable analog test signals.
73696                                                         '0' THe analog_test pin is disabled. */
73697        uint64_t bist_enb                : 1;       /**< Built-In Self Test Enable.
73698                                                         Used to activate BIST in the PHY. */
73699        uint64_t tdata_sel               : 1;       /**< Test Data Out Select.
73700                                                         '1' test_data_out[3:0] (PHY) register contents
73701                                                         are output. '0' internaly generated signals are
73702                                                         output. */
73703        uint64_t taddr_in                : 4;       /**< Mode Address for Test Interface.
73704                                                         Specifies the register address for writing to or
73705                                                         reading from the PHY test interface register. */
73706        uint64_t tdata_in                : 8;       /**< Internal Testing Register Input Data and Select
73707                                                         This is a test bus. Data is present on [3:0],
73708                                                         and its corresponding select (enable) is present
73709                                                         on bits [7:4]. */
73710        uint64_t ate_reset               : 1;       /**< Reset input from automatic test equipment.
73711                                                         This is a test signal. When the USB Core is
73712                                                         powered up (not in Susned Mode), an automatic
73713                                                         tester can use this to disable phy_clock and
73714                                                         free_clk, then re-eanable them with an aligned
73715                                                         phase.
73716                                                         '1': The phy_clk and free_clk outputs are
73717                                                         disabled. "0": The phy_clock and free_clk outputs
73718                                                         are available within a specific period after the
73719                                                         de-assertion. */
73720#else
73721        uint64_t ate_reset               : 1;
73722        uint64_t tdata_in                : 8;
73723        uint64_t taddr_in                : 4;
73724        uint64_t tdata_sel               : 1;
73725        uint64_t bist_enb                : 1;
73726        uint64_t vtest_enb               : 1;
73727        uint64_t loop_enb                : 1;
73728        uint64_t tx_bs_en                : 1;
73729        uint64_t tx_bs_enh               : 1;
73730        uint64_t reserved_19_22          : 4;
73731        uint64_t hst_mode                : 1;
73732        uint64_t dm_pulld                : 1;
73733        uint64_t dp_pulld                : 1;
73734        uint64_t tclk                    : 1;
73735        uint64_t usbp_bist               : 1;
73736        uint64_t usbc_end                : 1;
73737        uint64_t dma_bmode               : 1;
73738        uint64_t txpreemphasistune       : 1;
73739        uint64_t siddq                   : 1;
73740        uint64_t tdata_out               : 4;
73741        uint64_t bist_err                : 1;
73742        uint64_t bist_done               : 1;
73743        uint64_t hsbist                  : 1;
73744        uint64_t fsbist                  : 1;
73745        uint64_t lsbist                  : 1;
73746        uint64_t drvvbus                 : 1;
73747        uint64_t portreset               : 1;
73748        uint64_t otgdisable              : 1;
73749        uint64_t otgtune                 : 3;
73750        uint64_t compdistune             : 3;
73751        uint64_t sqrxtune                : 3;
73752        uint64_t txhsxvtune              : 2;
73753        uint64_t txfslstune              : 4;
73754        uint64_t txvreftune              : 4;
73755        uint64_t txrisetune              : 1;
73756#endif
73757    } cn52xx;
73758    struct cvmx_usbnx_usbp_ctl_status_cn50xx cn52xxp1;
73759    struct cvmx_usbnx_usbp_ctl_status_cn52xx cn56xx;
73760    struct cvmx_usbnx_usbp_ctl_status_cn50xx cn56xxp1;
73761} cvmx_usbnx_usbp_ctl_status_t;
73762
73763
73764/**
73765 * cvmx_zip_cmd_bist_result
73766 *
73767 * Notes:
73768 * Access to the internal BiST results
73769 * Each bit is the BiST result of an individual memory (per bit, 0=pass and 1=fail).
73770 */
73771typedef union
73772{
73773    uint64_t u64;
73774    struct cvmx_zip_cmd_bist_result_s
73775    {
73776#if __BYTE_ORDER == __BIG_ENDIAN
73777        uint64_t reserved_31_63          : 33;
73778        uint64_t zip_core                : 27;      /**< BiST result of the ZIP_CORE memories */
73779        uint64_t zip_ctl                 : 4;       /**< BiST result of the ZIP_CTL  memories */
73780#else
73781        uint64_t zip_ctl                 : 4;
73782        uint64_t zip_core                : 27;
73783        uint64_t reserved_31_63          : 33;
73784#endif
73785    } s;
73786    struct cvmx_zip_cmd_bist_result_s    cn31xx;
73787    struct cvmx_zip_cmd_bist_result_s    cn38xx;
73788    struct cvmx_zip_cmd_bist_result_s    cn38xxp2;
73789    struct cvmx_zip_cmd_bist_result_s    cn56xx;
73790    struct cvmx_zip_cmd_bist_result_s    cn56xxp1;
73791    struct cvmx_zip_cmd_bist_result_s    cn58xx;
73792    struct cvmx_zip_cmd_bist_result_s    cn58xxp1;
73793} cvmx_zip_cmd_bist_result_t;
73794
73795
73796/**
73797 * cvmx_zip_cmd_buf
73798 *
73799 * Notes:
73800 * Sets the command buffer parameters
73801 * The size of the command buffer segments is measured in uint64s.  The pool specifies (1 of 8 free
73802 * lists to be used when freeing command buffer segments.  The PTR field is overwritten with the next
73803 * pointer each time that the command buffer segment is exhausted.
73804 * When quiescent (i.e. outstanding doorbell count is 0), it is safe to rewrite
73805 * this register to effectively reset the command buffer state machine.  New commands will then be
73806 * read from the newly specified command buffer pointer.
73807 */
73808typedef union
73809{
73810    uint64_t u64;
73811    struct cvmx_zip_cmd_buf_s
73812    {
73813#if __BYTE_ORDER == __BIG_ENDIAN
73814        uint64_t reserved_58_63          : 6;
73815        uint64_t dwb                     : 9;       /**< Number of DontWriteBacks */
73816        uint64_t pool                    : 3;       /**< Free list used to free command buffer segments */
73817        uint64_t size                    : 13;      /**< Number of uint64s per command buffer segment */
73818        uint64_t ptr                     : 33;      /**< Initial command buffer pointer[39:7] (128B-aligned) */
73819#else
73820        uint64_t ptr                     : 33;
73821        uint64_t size                    : 13;
73822        uint64_t pool                    : 3;
73823        uint64_t dwb                     : 9;
73824        uint64_t reserved_58_63          : 6;
73825#endif
73826    } s;
73827    struct cvmx_zip_cmd_buf_s            cn31xx;
73828    struct cvmx_zip_cmd_buf_s            cn38xx;
73829    struct cvmx_zip_cmd_buf_s            cn38xxp2;
73830    struct cvmx_zip_cmd_buf_s            cn56xx;
73831    struct cvmx_zip_cmd_buf_s            cn56xxp1;
73832    struct cvmx_zip_cmd_buf_s            cn58xx;
73833    struct cvmx_zip_cmd_buf_s            cn58xxp1;
73834} cvmx_zip_cmd_buf_t;
73835
73836
73837/**
73838 * cvmx_zip_cmd_ctl
73839 */
73840typedef union
73841{
73842    uint64_t u64;
73843    struct cvmx_zip_cmd_ctl_s
73844    {
73845#if __BYTE_ORDER == __BIG_ENDIAN
73846        uint64_t reserved_2_63           : 62;
73847        uint64_t forceclk                : 1;       /**< Force zip_ctl__clock_on_b == 1 when set */
73848        uint64_t reset                   : 1;       /**< Reset oneshot pulse for zip core */
73849#else
73850        uint64_t reset                   : 1;
73851        uint64_t forceclk                : 1;
73852        uint64_t reserved_2_63           : 62;
73853#endif
73854    } s;
73855    struct cvmx_zip_cmd_ctl_s            cn31xx;
73856    struct cvmx_zip_cmd_ctl_s            cn38xx;
73857    struct cvmx_zip_cmd_ctl_s            cn38xxp2;
73858    struct cvmx_zip_cmd_ctl_s            cn56xx;
73859    struct cvmx_zip_cmd_ctl_s            cn56xxp1;
73860    struct cvmx_zip_cmd_ctl_s            cn58xx;
73861    struct cvmx_zip_cmd_ctl_s            cn58xxp1;
73862} cvmx_zip_cmd_ctl_t;
73863
73864
73865/**
73866 * cvmx_zip_constants
73867 *
73868 * Notes:
73869 * Note that this CSR is present only in chip revisions beginning with pass2.
73870 *
73871 */
73872typedef union
73873{
73874    uint64_t u64;
73875    struct cvmx_zip_constants_s
73876    {
73877#if __BYTE_ORDER == __BIG_ENDIAN
73878        uint64_t reserved_48_63          : 16;
73879        uint64_t depth                   : 16;      /**< Maximum search depth for compression */
73880        uint64_t onfsize                 : 12;      /**< Output near full threshhold in bytes */
73881        uint64_t ctxsize                 : 12;      /**< Context size in bytes */
73882        uint64_t reserved_1_7            : 7;
73883        uint64_t disabled                : 1;       /**< 1=zip unit isdisabled, 0=zip unit not disabled */
73884#else
73885        uint64_t disabled                : 1;
73886        uint64_t reserved_1_7            : 7;
73887        uint64_t ctxsize                 : 12;
73888        uint64_t onfsize                 : 12;
73889        uint64_t depth                   : 16;
73890        uint64_t reserved_48_63          : 16;
73891#endif
73892    } s;
73893    struct cvmx_zip_constants_s          cn31xx;
73894    struct cvmx_zip_constants_s          cn38xx;
73895    struct cvmx_zip_constants_s          cn38xxp2;
73896    struct cvmx_zip_constants_s          cn56xx;
73897    struct cvmx_zip_constants_s          cn56xxp1;
73898    struct cvmx_zip_constants_s          cn58xx;
73899    struct cvmx_zip_constants_s          cn58xxp1;
73900} cvmx_zip_constants_t;
73901
73902
73903/**
73904 * cvmx_zip_debug0
73905 *
73906 * Notes:
73907 * Note that this CSR is present only in chip revisions beginning with pass2.
73908 *
73909 */
73910typedef union
73911{
73912    uint64_t u64;
73913    struct cvmx_zip_debug0_s
73914    {
73915#if __BYTE_ORDER == __BIG_ENDIAN
73916        uint64_t reserved_14_63          : 50;
73917        uint64_t asserts                 : 14;      /**< FIFO assertion checks */
73918#else
73919        uint64_t asserts                 : 14;
73920        uint64_t reserved_14_63          : 50;
73921#endif
73922    } s;
73923    struct cvmx_zip_debug0_s             cn31xx;
73924    struct cvmx_zip_debug0_s             cn38xx;
73925    struct cvmx_zip_debug0_s             cn38xxp2;
73926    struct cvmx_zip_debug0_s             cn56xx;
73927    struct cvmx_zip_debug0_s             cn56xxp1;
73928    struct cvmx_zip_debug0_s             cn58xx;
73929    struct cvmx_zip_debug0_s             cn58xxp1;
73930} cvmx_zip_debug0_t;
73931
73932
73933/**
73934 * cvmx_zip_error
73935 *
73936 * Notes:
73937 * Note that this CSR is present only in chip revisions beginning with pass2.
73938 *
73939 */
73940typedef union
73941{
73942    uint64_t u64;
73943    struct cvmx_zip_error_s
73944    {
73945#if __BYTE_ORDER == __BIG_ENDIAN
73946        uint64_t reserved_1_63           : 63;
73947        uint64_t doorbell                : 1;       /**< A doorbell count has overflowed */
73948#else
73949        uint64_t doorbell                : 1;
73950        uint64_t reserved_1_63           : 63;
73951#endif
73952    } s;
73953    struct cvmx_zip_error_s              cn31xx;
73954    struct cvmx_zip_error_s              cn38xx;
73955    struct cvmx_zip_error_s              cn38xxp2;
73956    struct cvmx_zip_error_s              cn56xx;
73957    struct cvmx_zip_error_s              cn56xxp1;
73958    struct cvmx_zip_error_s              cn58xx;
73959    struct cvmx_zip_error_s              cn58xxp1;
73960} cvmx_zip_error_t;
73961
73962
73963/**
73964 * cvmx_zip_int_mask
73965 *
73966 * Notes:
73967 * Note that this CSR is present only in chip revisions beginning with pass2.
73968 * When a mask bit is set, the corresponding interrupt is enabled.
73969 */
73970typedef union
73971{
73972    uint64_t u64;
73973    struct cvmx_zip_int_mask_s
73974    {
73975#if __BYTE_ORDER == __BIG_ENDIAN
73976        uint64_t reserved_1_63           : 63;
73977        uint64_t doorbell                : 1;       /**< Bit mask corresponding to PKO_REG_ERROR[1] above */
73978#else
73979        uint64_t doorbell                : 1;
73980        uint64_t reserved_1_63           : 63;
73981#endif
73982    } s;
73983    struct cvmx_zip_int_mask_s           cn31xx;
73984    struct cvmx_zip_int_mask_s           cn38xx;
73985    struct cvmx_zip_int_mask_s           cn38xxp2;
73986    struct cvmx_zip_int_mask_s           cn56xx;
73987    struct cvmx_zip_int_mask_s           cn56xxp1;
73988    struct cvmx_zip_int_mask_s           cn58xx;
73989    struct cvmx_zip_int_mask_s           cn58xxp1;
73990} cvmx_zip_int_mask_t;
73991#endif /* __CVMX_CSR_TYPEDEFS_H__ */
73992