]> CyberLeo.Net >> Repos - FreeBSD/releng/8.2.git/blob - sys/contrib/octeon-sdk/cvmx-csr-typedefs.h
Copy stable/8 to releng/8.2 in preparation for FreeBSD-8.2 release.
[FreeBSD/releng/8.2.git] / sys / contrib / octeon-sdk / cvmx-csr-typedefs.h
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  */
65 typedef 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  */
148 typedef 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  */
189 typedef 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  */
256 typedef 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  */
288 typedef 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  */
347 typedef 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  */
380 typedef 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  */
413 typedef 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  */
446 typedef 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  */
479 typedef 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  */
512 typedef 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  */
545 typedef 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  */
609 typedef 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  */
668 typedef 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  */
700 typedef 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  */
778 typedef 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  */
851 typedef 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  */
884 typedef 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  */
916 typedef 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  */
946 typedef 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  */
1062 typedef 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  */
1141 typedef 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  */
1175 typedef 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  */
1205 typedef 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  */
1233 typedef 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  */
1261 typedef 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  */
1289 typedef 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  */
1317 typedef 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  */
1351 typedef 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  */
1384 typedef 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  */
1422 typedef 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  */
1461 typedef 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  */
1496 typedef 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  */
1549 typedef 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  */
1587 typedef 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  */
1622 typedef 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  */
1652 typedef 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  */
1682 typedef 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  */
1729 typedef 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  */
1776 typedef 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  */
1807 typedef 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  */
1840 typedef 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  */
1880 typedef 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  */
1914 typedef 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  */
1965 typedef 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  */
2016 typedef 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  */
2048 typedef 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  */
2078 typedef 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  */
2110 typedef 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  */
2142 typedef 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  */
2176 typedef 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  */
2211 typedef 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  */
2244 typedef 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  */
2280 typedef 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  */
2315 typedef 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  */
2351 typedef 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  */
2387 typedef 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  */
2425 typedef 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  */
2458 typedef 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  */
2490 typedef 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  */
2520 typedef 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  */
2555 typedef 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  */
2598 typedef 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  */
2643 typedef 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  */
2682 typedef 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  */
2754 typedef 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  */
2825 typedef 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  */
2855 typedef 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  */
2887 typedef 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  */
2946 typedef 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  */
2976 typedef 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  */
3002 typedef 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  */
3029 typedef 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  */
3056 typedef 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  */
3106 typedef 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  */
3156 typedef 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  */
3182 typedef 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  */
3253 typedef 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  */
3280 typedef 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  */
3306 typedef 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  */
3350 typedef 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  */
3382 typedef 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  */
3408 typedef 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  */
3434 typedef 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  */
3460 typedef 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  */
3486 typedef 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  */
3512 typedef 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  */
3593 typedef 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  */
3622 typedef 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  */
3666 typedef 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  */
3692 typedef 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  */
3714 typedef 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  */
3738 typedef 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  */
3796 typedef 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  */
3825 typedef 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  */
3906 typedef 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  */
3952 typedef 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  */
3996 typedef 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  */
4039 typedef 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  */
4062 typedef 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  */
4116 typedef 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  */
4182 typedef 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  */
4248 typedef 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  */
4287 typedef 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  */
4578 typedef 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  */
4726 typedef 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  */
4887 typedef 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  */
5001 typedef 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  */
5072 typedef 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  */
5145 typedef 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  */
5389 typedef 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  */
5537 typedef 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  */
5685 typedef 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  */
5786 typedef 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  */
5857 typedef 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  */
5924 typedef 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  */
6303 typedef 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  */
6603 typedef 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  */
6713 typedef 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  */
6744 typedef 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  */
6775 typedef 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  */
6841 typedef 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  */
6872 typedef 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  */
6950 typedef 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  */
6981 typedef 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  */
7060 typedef 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  */
7096 typedef 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  */
7150 typedef 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  */
7234 typedef 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  */
7264 typedef 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  */
7314 typedef 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  */
7340 typedef 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  */
7373 typedef 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  */
7408 typedef 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  */
7465 typedef 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  */
7554 typedef 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  */
7605 typedef 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  */
7739 typedef 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  */
7856 typedef 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  */
7897 typedef 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  */
7978 typedef 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  */
8002 typedef 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  */
8204 typedef 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  */
8245 typedef 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  */
8309 typedef 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  */
8344 typedef 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  */
8395 typedef 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  */
8424 typedef 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  */
8485 typedef 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  */
8666 typedef 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  */
8727 typedef 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  */
8773 typedef 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  */
8876 typedef 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  */
9062 typedef 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  */
9913 typedef 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  */
10094 typedef 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  */
10161 typedef 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  */
10296 typedef 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  */
10338 typedef 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  */
10394 typedef 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  */
10503 typedef 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  */
10542 typedef 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  */
10603 typedef 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  */
10639 typedef 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  */
10673 typedef 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  */
10702 typedef 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  */
10744 typedef 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  */
10800 typedef 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  */
10843 typedef 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  */
10884 typedef 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  */
10927 typedef 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  */
10966 typedef 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  */
11110 typedef 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  */
11230 typedef 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  */
11266 typedef 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  */
11301 typedef 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  */
11338 typedef 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  */
11374 typedef 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  */
11408 typedef 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  */
11445 typedef 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  */
11537 typedef 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  */
11644 typedef 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  */
11687 typedef 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  */
11727 typedef 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  */
11856 typedef 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  */
11896 typedef 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  */
11951 typedef 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  */
12049 typedef 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  */
12085 typedef 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  */
12121 typedef 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  */
12157 typedef 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  */
12193 typedef 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  */
12229 typedef 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  */
12265 typedef 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  */
12334 typedef 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  */
12398 typedef 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  */
12437 typedef 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  */
12573 typedef 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  */
12798 typedef 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  */
12833 typedef 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  */
12863 typedef 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  */
12906 typedef 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  */
13353 typedef 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  */
13791 typedef 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  */
13828 typedef 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  */
13862 typedef 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  */
13903 typedef 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  */
13937 typedef 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  */
13971 typedef 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  */
14005 typedef 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  */
14039 typedef 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  */
14079 typedef 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  */
14118 typedef 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  */
14162 typedef 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  */
14207 typedef 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  */
14248 typedef 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  */
14306 typedef 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  */
14354 typedef 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  */
14398 typedef 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  */
14435 typedef 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  */
14477 typedef 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  */
14525 typedef 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  */
14551 typedef 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  */
14581 typedef 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  */
14647 typedef 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  */
14685 typedef 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  */
14711 typedef 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  */
14748 typedef 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  */
14779 typedef 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  */
14813 typedef 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  */
14849 typedef 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  */
14891 typedef 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  */
14923 typedef 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  */
14947 typedef 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  */
14988 typedef 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  */
15023 typedef 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  */
15062 typedef 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  */
15116 typedef 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  */
15172 typedef 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  */
15207 typedef 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  */
15253 typedef 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  */
15285 typedef 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  */
15317 typedef 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  */
15352 typedef 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  */
15389 typedef 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  */
15429 typedef 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  */
15470 typedef 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  */
15509 typedef 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  */
15551 typedef 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  */
15592 typedef 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  */
15634 typedef 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  */
15676 typedef 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  */
15720 typedef 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  */
15759 typedef 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  */
15794 typedef 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  */
15833 typedef 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  */
15892 typedef 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  */
15938 typedef 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  */
15962 typedef 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  */
16004 typedef 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  */
16054 typedef 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  */
16087 typedef 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  */
16133 typedef 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  */
16178 typedef 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  */
16321 typedef 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  */
16460 typedef 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  */
16493 typedef 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  */
16538 typedef 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  */
16617 typedef 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  */
16650 typedef 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  */
16691 typedef 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  */
16724 typedef 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  */
16755 typedef 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  */
16786 typedef 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  */
16845 typedef 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  */
16882 typedef 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  */
16913 typedef 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  */
16971 typedef 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  */
17004 typedef 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  */
17071 typedef 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  */
17095 typedef 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  */
17122 typedef 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  */
17144 typedef 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  */
17174 typedef 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  */
17213 typedef 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  */
17252 typedef 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  */
17291 typedef 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  */
17325 typedef 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  */
17393 typedef 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  */
17463 typedef 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  */
17499 typedef 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  */
17545 typedef 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  */
17580 typedef 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  */
17620 typedef 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  */
17660 typedef 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  */
17692 typedef 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  */
17724 typedef 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  */
17803 typedef 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  */
17902 typedef 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  */
17937 typedef 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  */
17972 typedef 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  */
18007 typedef 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  */
18047 typedef 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  */
18087 typedef 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  */
18119 typedef 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  */
18151 typedef 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  */
18186 typedef 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  */
18221 typedef 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  */
18256 typedef 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  */
18292 typedef 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  */
18323 typedef 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  */
18361 typedef 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  */
18395 typedef 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  */
18429 typedef 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  */
18537 typedef 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  */
18590 typedef 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  */
18624 typedef 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  */
18905 typedef 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  */
19042 typedef 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  */
19173 typedef 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  */
19212 typedef 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  */
19250 typedef 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  */
19283 typedef 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  */
19324 typedef 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  */
19357 typedef 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  */
19383 typedef 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  */
19419 typedef 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  */
19455 typedef 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  */
19480 typedef 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  */
19505 typedef 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  */
19554 typedef 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  */
19602 typedef 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  */
19655 typedef 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  */
19707 typedef 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  */
19744 typedef 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  */
19778 typedef 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  */
19826 typedef 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  */
19855 typedef 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  */
19930 typedef 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  */
19969 typedef 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  */
20034 typedef 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  */
20064 typedef 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  */
20099 typedef 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  */
20132 typedef 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  */
20165 typedef 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  */
20200 typedef 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  */
20243 typedef 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  */
20277 typedef 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  */
20454 typedef 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  */
20617 typedef 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  */
20768 typedef 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  */
21345 typedef 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  */
21856 typedef 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  */
21928 typedef 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  */
21969 typedef 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  */
22006 typedef 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  */
22062 typedef 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  */
22151 typedef 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  */
22228 typedef 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  */
22266 typedef 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  */
22439 typedef 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  */
22509 typedef 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  */
22596 typedef 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  */
22690 typedef 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  */
22732 typedef 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  */
22786 typedef 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  */
22840 typedef 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  */
22893 typedef 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  */
22987 typedef 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  */
23103 typedef 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  */
23174 typedef 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  */
23254 typedef 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  */
23296 typedef 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  */
23338 typedef 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  */
23378 typedef 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  */
23420 typedef 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  */
23473 typedef 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  */
23520 typedef 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  */
23567 typedef 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  */
23615 typedef 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  */
23679 typedef 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  */
23818 typedef 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  */
23878 typedef 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  */
23913 typedef 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  */
23960 typedef 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  */
24007 typedef 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  */
24054 typedef 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  */
24408 typedef 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  */
25000 typedef 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  */
25036 typedef 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  */
25064 typedef 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  */
25093 typedef 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  */
25151 typedef 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  */
25179 typedef 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  */
25214 typedef 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  */
25252 typedef 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  */
25291 typedef 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  */
25325 typedef 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  */
25359 typedef 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  */
25389 typedef 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  */
25418 typedef 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  */
25448 typedef 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  */
25476 typedef 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  */
25532 typedef 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  */
25638 typedef 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  */
26343 typedef 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  */
26498 typedef 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  */
26532 typedef 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  */
26570 typedef 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  */
26607 typedef 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  */
26875 typedef 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  */
26927 typedef 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  */
27019 typedef 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  */
27060 typedef 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  */
27116 typedef 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  */
27160 typedef 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  */
27195 typedef 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  */
27233 typedef 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  */
27398 typedef 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  */
27625 typedef 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  */
27658 typedef 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  */
27693 typedef 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  */
27728 typedef 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  */
27772 typedef 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  */
27900 typedef 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  */
27952 typedef 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  */
27996 typedef 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  */
28034 typedef 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  */
28083 typedef 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  */
28135 typedef 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  */
28186 typedef 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  */
28281 typedef 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  */
28316 typedef 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  */
28436 typedef 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  */
28476 typedef 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  */
28518 typedef 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  */
28546 typedef 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  */
28595 typedef 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  */
28650 typedef 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  */
28686 typedef 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  */
28726 typedef 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  */
28765 typedef 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  */
28806 typedef 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  */
28837 typedef 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  */
28916 typedef 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  */
29039 typedef 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  */
29133 typedef 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  */
29188 typedef 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  */
29214 typedef 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  */
29244 typedef 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  */
29286 typedef 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  */
29534 typedef 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  */
29666 typedef 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  */
29705 typedef 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  */
29728 typedef 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  */
29763 typedef 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  */
29800 typedef 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  */
29842 typedef 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  */
29913 typedef 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  */
29950 typedef 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  */
29979 typedef 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  */
30001 typedef 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  */
30055 typedef 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  */
30094 typedef 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  */
30117 typedef 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  */
30137 typedef 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  */
30158 typedef 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  */
30196 typedef 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  */
30281 typedef 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  */
30406 typedef 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  */
30448 typedef 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  */
30501 typedef 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;
30526 typedef 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  */
30550 typedef 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;
30575 typedef 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  */
30589 typedef 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;
30614 typedef 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  */
30661 typedef 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;
30696 typedef 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  */
30708 typedef 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;
30733 typedef 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  */
30754 typedef 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;
30789 typedef 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  */
30841 typedef 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;
30870 typedef 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  */
30915 typedef 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;
30952 typedef 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  */
31017 typedef 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;
31056 typedef 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  */
31129 typedef 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;
31164 typedef 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  */
31197 typedef 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;
31236 typedef 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  */
31258 typedef 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;
31283 typedef 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  */
31293 typedef 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;
31318 typedef 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  */
31331 typedef 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;
31360 typedef 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  */
31371 typedef 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;
31396 typedef 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  */
31407 typedef 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;
31432 typedef 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  */
31444 typedef 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;
31469 typedef 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  */
31490 typedef 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;
31519 typedef 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  */
31531 typedef 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;
31556 typedef 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  */
31567 typedef 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;
31592 typedef 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  */
31604 typedef 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;
31629 typedef 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  */
31639 typedef 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;
31664 typedef 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  */
31677 typedef 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;
31702 typedef 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  */
31727 typedef 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;
31752 typedef 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  */
31770 typedef 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;
31803 typedef cvmx_mio_uartx_usr_t cvmx_uart_usr_t;
31804
31805
31806 /**
31807  * cvmx_mio_uart2_dlh
31808  */
31809 typedef 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  */
31830 typedef 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  */
31851 typedef 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  */
31872 typedef 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  */
31903 typedef 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  */
31924 typedef 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  */
31955 typedef 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  */
31980 typedef 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  */
32013 typedef 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  */
32048 typedef 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  */
32079 typedef 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  */
32114 typedef 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  */
32135 typedef 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  */
32156 typedef 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  */
32181 typedef 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  */
32202 typedef 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  */
32223 typedef 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  */
32244 typedef 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  */
32269 typedef 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  */
32290 typedef 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  */
32311 typedef 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  */
32332 typedef 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  */
32353 typedef 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  */
32374 typedef 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  */
32395 typedef 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  */
32429 typedef 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  */
32472 typedef 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  */
32576 typedef 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  */
32645 typedef 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  */
32689 typedef 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  */
32733 typedef 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  */
32774 typedef 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  */
32823 typedef 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  */
32945 typedef 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  */
32986 typedef 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  */
33021 typedef 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  */
33062 typedef 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  */
33112 typedef 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  */
33163 typedef 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  */
33280 typedef 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  */
33302 typedef 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  */
33329 typedef 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  */
33374 typedef 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  */
33407 typedef 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  */
33444 typedef 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  */
33471 typedef 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  */
33503 typedef 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  */
33540 typedef 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  */
33613 typedef 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  */
33662 typedef 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  */
33739 typedef 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  */
33772 typedef 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  */
34236 typedef 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  */
34287 typedef 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  */
34362 typedef 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  */
34438 typedef 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  */
34583 typedef 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  */
34695 typedef 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  */
34738 typedef 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  */
34847 typedef 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  */
34875 typedef 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  */
34904 typedef 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  */
34933 typedef 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  */
34979 typedef 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  */
35007 typedef 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  */
35039 typedef 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  */
35071 typedef 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  */
35116 typedef 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  */
35328 typedef 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  */
35415 typedef 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  */
35447 typedef 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  */
35517 typedef 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  */
35549 typedef 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  */
35599 typedef 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  */
35630 typedef 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  */
35661 typedef 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  */
35687 typedef 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  */
35754 typedef 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  */
35822 typedef 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  */
35887 typedef 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  */
36485 typedef 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  */
37074 typedef 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  */
37118 typedef 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  */
37714 typedef 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  */
37917 typedef 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  */
37942 typedef 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  */
37967 typedef 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  */
38002 typedef 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  */
38048 typedef 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  */
38073 typedef 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  */
38098 typedef 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  */
38123 typedef 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  */
38148 typedef 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  */
38173 typedef 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  */
38198 typedef 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  */
38223 typedef 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  */
38248 typedef 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  */
38279 typedef 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  */
38304 typedef 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  */
38329 typedef 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  */
38354 typedef 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  */
38379 typedef 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  */
38404 typedef 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  */
38429 typedef 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  */
38454 typedef 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  */
38479 typedef 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  */
38514 typedef 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  */
38555 typedef 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  */
38586 typedef 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  */
38619 typedef 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  */
38652 typedef 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  */
38685 typedef 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  */
38726 typedef 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  */
38762 typedef 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  */
38787 typedef 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  */
38816 typedef 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  */
38847 typedef 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  */
38899 typedef 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  */
38924 typedef 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  */
38957 typedef 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  */
38983 typedef 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  */
39010 typedef 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  */
39036 typedef 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  */
39061 typedef 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  */
39087 typedef 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  */
39113 typedef 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  */
39146 typedef 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  */
39176 typedef 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  */
39203 typedef 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  */
39230 typedef 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  */
39257 typedef 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  */
39312 typedef 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  */
39338 typedef 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  */
39371 typedef 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  */
39400 typedef 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  */
39429 typedef 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  */
39456 typedef 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  */
39485 typedef 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  */
39514 typedef 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  */
39540 typedef 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  */
39567 typedef 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  */
39594 typedef 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  */
39619 typedef 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  */
39646 typedef 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  */
39672 typedef 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  */
39698 typedef 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  */
39725 typedef 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  */
39753 typedef 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  */
39834 typedef 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  */
39859 typedef 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  */
39890 typedef 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  */
39927 typedef 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  */
39960 typedef 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  */
40003 typedef 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  */
40029 typedef 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  */
40070 typedef 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  */
40097 typedef 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  */
40130 typedef 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  */
40161 typedef 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  */
40193 typedef 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  */
40225 typedef 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  */
40381 typedef 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  */
40416 typedef 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  */
40447 typedef 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  */
40664 typedef 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  */
40695 typedef 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  */
40776 typedef 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  */
40808 typedef 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  */
40842 typedef 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  */
40874 typedef 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  */
40908 typedef 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  */
40940 typedef 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  */
40970 typedef 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  */
41065 typedef 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  */
41699 typedef 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  */
42293 typedef 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  */
42325 typedef 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  */
42358 typedef 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  */
42435 typedef 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  */
42463 typedef 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  */
42493 typedef 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  */
42955 typedef 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  */
42989 typedef 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  */
43021 typedef 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  */
43053 typedef 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  */
43085 typedef 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  */
43128 typedef 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  */
43240 typedef 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  */
43274 typedef 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  */
43332 typedef 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  */
43389 typedef 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  */
43444 typedef 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  */
43499 typedef 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  */
43533 typedef 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  */
43826 typedef 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  */
43858 typedef 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  */
43890 typedef 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  */
43926 typedef 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  */
44014 typedef 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  */
44043 typedef 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  */
44130 typedef 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  */
44161 typedef 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  */
44210 typedef 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  */
44247 typedef 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  */
44280 typedef 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  */
44321 typedef 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  */
44353 typedef 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  */
44386 typedef 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  */
44415 typedef 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  */
44442 typedef 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  */
44471 typedef 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  */
44504 typedef 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  */
44533 typedef 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  */
44566 typedef 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  */
44661 typedef 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  */
44696 typedef 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  */
44732 typedef 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  */
44875 typedef 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  */
44905 typedef 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  */
44936 typedef 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  */
45004 typedef 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  */
45057 typedef 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  */
45113 typedef 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  */
45163 typedef 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  */
45218 typedef 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  */
45257 typedef 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  */
45286 typedef 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  */
45313 typedef 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  */
45343 typedef 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  */
45465 typedef 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  */
45844 typedef 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  */
45878 typedef 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  */
45910 typedef 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  */
45939 typedef 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  */
45971 typedef 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  */
46002 typedef 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  */
46236 typedef 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  */
46470 typedef 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  */
46864 typedef 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  */
47208 typedef 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  */
47245 typedef 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  */
47277 typedef 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  */
47308 typedef 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  */
47338 typedef 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  */
47370 typedef 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  */
47413 typedef 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  */
47456 typedef 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  */
47499 typedef 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  */
47535 typedef 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  */
47576 typedef 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  */
47621 typedef 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  */
47701 typedef 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  */
47730 typedef 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  */
47774 typedef 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  */
47804 typedef 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  */
47834 typedef 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  */
47868 typedef 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  */
47948 typedef 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  */
47982 typedef 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  */
48025 typedef 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  */
48068 typedef 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  */
48100 typedef 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  */
48125 typedef 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  */
48149 typedef 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  */
48192 typedef 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  */
48224 typedef 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  */
48249 typedef 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  */
48273 typedef 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  */
48314 typedef 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  */
48346 typedef 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  */
48373 typedef 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  */
48397 typedef 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  */
48422 typedef 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  */
48451 typedef 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  */
48480 typedef 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  */
48512 typedef 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  */
48541 typedef 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  */
48578 typedef 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  */
48635 typedef 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  */
48694 typedef 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  */
48739 typedef 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  */
48765 typedef 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  */
48789 typedef 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  */
48818 typedef 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  */
48861 typedef 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  */
48916 typedef 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  */
49023 typedef 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  */
49087 typedef 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  */
49160 typedef 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  */
49218 typedef 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  */
49288 typedef 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  */
49319 typedef 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  */
49349 typedef 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  */
49373 typedef 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  */
49397 typedef 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  */
49421 typedef 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  */
49445 typedef 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  */
49473 typedef 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  */
49523 typedef 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  */
49573 typedef 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  */
49623 typedef 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  */
49663 typedef 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  */
49703 typedef 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  */
49737 typedef 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  */
49761 typedef 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  */
49785 typedef 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  */
49809 typedef 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  */
49833 typedef 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  */
49867 typedef 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  */
49902 typedef 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  */
49983 typedef 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  */
50047 typedef 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  */
50130 typedef 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  */
50170 typedef 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  */
50216 typedef 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  */
50277 typedef 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  */
50305 typedef 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  */
50329 typedef 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  */
50353 typedef 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  */
50385 typedef 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  */
50417 typedef 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  */
50449 typedef 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  */
50485 typedef 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  */
50515 typedef 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  */
50545 typedef 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  */
50610 typedef 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  */
50657 typedef 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  */
50704 typedef 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  */
50742 typedef 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  */
50780 typedef 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  */
50818 typedef 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  */
50842 typedef 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  */
50866 typedef 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  */
50894 typedef 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  */
50974 typedef 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  */
51008 typedef 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  */
51049 typedef 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  */
51073 typedef 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  */
51097 typedef 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  */
51128 typedef 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  */
51192 typedef 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  */
51222 typedef 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  */
51263 typedef 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  */
51289 typedef 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  */
51315 typedef 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  */
51343 typedef 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  */
51372 typedef 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  */
51396 typedef 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  */
51467 typedef 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  */
51526 typedef 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  */
51585 typedef 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  */
51633 typedef 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  */
51659 typedef 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  */
51683 typedef 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  */
51712 typedef 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  */
51755 typedef 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  */
51810 typedef 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  */
51919 typedef 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  */
51986 typedef 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  */
52064 typedef 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  */
52120 typedef 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  */
52186 typedef 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  */
52226 typedef 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  */
52256 typedef 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  */
52287 typedef 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  */
52317 typedef 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  */
52341 typedef 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  */
52365 typedef 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  */
52389 typedef 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  */
52413 typedef 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  */
52441 typedef 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  */
52491 typedef 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  */
52541 typedef 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  */
52591 typedef 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  */
52631 typedef 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  */
52671 typedef 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  */
52707 typedef 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  */
52733 typedef 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  */
52759 typedef 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  */
52785 typedef 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  */
52809 typedef 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  */
52839 typedef 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  */
52880 typedef 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  */
52906 typedef 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  */
52940 typedef 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  */
52975 typedef 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  */
53055 typedef 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  */
53119 typedef 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  */
53199 typedef 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  */
53239 typedef 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  */
53285 typedef 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  */
53346 typedef 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  */
53374 typedef 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  */
53398 typedef 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  */
53422 typedef 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  */
53454 typedef 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  */
53486 typedef 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  */
53518 typedef 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  */
53554 typedef 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  */
53584 typedef 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  */
53614 typedef 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  */
53679 typedef 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  */
53726 typedef 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  */
53773 typedef 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  */
53811 typedef 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  */
53849 typedef 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  */
53887 typedef 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  */
53911 typedef 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  */
53932 typedef 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  */
53989 typedef 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  */
54033 typedef 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  */
54069 typedef 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  */
54092 typedef 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  */
54114 typedef 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  */
54135 typedef 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  */
54156 typedef 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  */
54177 typedef 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  */
54198 typedef 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  */
54219 typedef 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  */
54240 typedef 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  */
54261 typedef 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  */
54282 typedef 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  */
54306 typedef 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  */
54346 typedef 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  */
54366 typedef 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  */
54393 typedef 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  */
54415 typedef 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  */
54436 typedef 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  */
54457 typedef 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  */
54478 typedef 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  */
54499 typedef 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  */
54520 typedef 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  */
54541 typedef 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  */
54562 typedef 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  */
54583 typedef 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  */
54607 typedef 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  */
54687 typedef 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  */
54707 typedef 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  */
54752 typedef 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  */
54808 typedef 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  */
54842 typedef 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  */
54890 typedef 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  */
54934 typedef 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  */
54991 typedef 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  */
55051 typedef 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  */
55080 typedef 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  */
55115 typedef 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  */
55174 typedef 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  */
55248 typedef 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  */
55314 typedef 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  */
55353 typedef 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  */
55381 typedef 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  */
55426 typedef 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  */
55466 typedef 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  */
55496 typedef 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  */
55532 typedef 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  */
55575 typedef 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  */
55604 typedef 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  */
55644 typedef 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  */
55694 typedef 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  */
55720 typedef 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  */
55756 typedef 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  */
55793 typedef 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  */
55846 typedef 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  */
55882 typedef 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  */
55914 typedef 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  */
55942 typedef 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  */
55979 typedef 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  */
56021 typedef 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  */
56064 typedef 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  */
56131 typedef 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  */
56213 typedef 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  */
56266 typedef 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  */
56294 typedef 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  */
56323 typedef 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  */
56351 typedef 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  */
56463 typedef 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  */
56504 typedef 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  */
56635 typedef 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  */
56722 typedef 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  */
56755 typedef 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  */
56783 typedef 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  */
56811 typedef 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  */
56839 typedef 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  */
56869 typedef 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  */
56900 typedef 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  */
56975 typedef 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  */
57016 typedef 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  */
57063 typedef 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  */
57124 typedef 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  */
57151 typedef 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  */
57185 typedef 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  */
57237 typedef 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  */
57293 typedef 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  */
57336 typedef 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  */
57465 typedef 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  */
57645 typedef 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  */
57687 typedef 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  */
57942 typedef 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  */
58203 typedef 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  */
58245 typedef 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  */
58641 typedef 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  */
58864 typedef 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  */
58900 typedef 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  */
58952 typedef 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  */
59033 typedef 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  */
59089 typedef 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  */
59137 typedef 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  */
59172 typedef 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  */
59205 typedef 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  */
59239 typedef 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  */
59278 typedef 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  */
59311 typedef 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  */
59344 typedef 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  */
59381 typedef 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  */
59418 typedef 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  */
59455 typedef 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  */
59489 typedef 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  */
59529 typedef 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  */
59568 typedef 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  */
59607 typedef 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  */
59642 typedef 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  */
59684 typedef 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  */
59720 typedef 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  */
59756 typedef 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  */
59795 typedef 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  */
59832 typedef 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  */
59867 typedef 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  */
59906 typedef 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  */
59947 typedef 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  */
60006 typedef 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  */
60083 typedef 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  */
60136 typedef 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  */
60203 typedef 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  */
60249 typedef 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  */
60290 typedef 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  */
60345 typedef 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  */
60457 typedef 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  */
60559 typedef 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  */
60673 typedef 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  */
60740 typedef 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  */
60838 typedef 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  */
60980 typedef 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  */
61025 typedef 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  */
61060 typedef 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  */
61096 typedef 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  */
61138 typedef 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  */
61192 typedef 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  */
61232 typedef 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  */
61368 typedef 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  */
61406 typedef 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  */
61438 typedef 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  */
61496 typedef 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  */
61523 typedef 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  */
61560 typedef 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  */
61584 typedef 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  */
61608 typedef 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  */
61637 typedef 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  */
61688 typedef 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  */
61716 typedef 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  */
61767 typedef 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  */
61820 typedef 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  */
61856 typedef 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  */
61911 typedef 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  */
61949 typedef 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  */
61984 typedef 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  */
62023 typedef 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  */
62208 typedef 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  */
62266 typedef 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  */
62350 typedef 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  */
62386 typedef 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  */
62420 typedef 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  */
62455 typedef 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  */
62482 typedef 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  */
62509 typedef 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  */
62536 typedef 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  */
62601 typedef 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  */
62637 typedef 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  */
62675 typedef 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  */
62740 typedef 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  */
62786 typedef 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  */
62907 typedef 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  */
62941 typedef 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  */
62975 typedef 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  */
63011 typedef 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  */
63069 typedef 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  */
63212 typedef 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  */
63259 typedef 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  */
63376 typedef 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  */
63411 typedef 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  */
63437 typedef 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  */
63463 typedef 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  */
63488 typedef 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  */
63523 typedef 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  */
63556 typedef 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  */
63583 typedef 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  */
63622 typedef 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  */
63643 typedef 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  */
63668 typedef 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  */
63701 typedef 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  */
63724 typedef 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  */
63745 typedef 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  */
63766 typedef 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  */
63787 typedef 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  */
63842 typedef 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  */
63867 typedef 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  */
63890 typedef 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  */
63915 typedef 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  */
63948 typedef 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  */
63975 typedef 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  */
64002 typedef 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  */
64032 typedef 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  */
64061 typedef 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  */
64097 typedef 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  */
64157 typedef 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  */
64263 typedef 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  */
64325 typedef 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  */
64364 typedef 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  */
64405 typedef 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  */
64447 typedef 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  */
64475 typedef 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  */
64571 typedef 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  */
64621 typedef 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  */
64760 typedef 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  */
64838 typedef 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  */
64877 typedef 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  */
64937 typedef 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  */
64997 typedef 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  */
65031 typedef 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  */
65204 typedef 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  */
65264 typedef 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  */
65319 typedef 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  */
65352 typedef 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  */
65395 typedef 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  */
65577 typedef 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  */
65627 typedef 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  */
65648 typedef 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  */
65678 typedef 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  */
65735 typedef 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  */
65784 typedef 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  */
65827 typedef 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  */
65857 typedef 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  */
65895 typedef 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  */
65929 typedef 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  */
65977 typedef 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  */
66010 typedef 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  */
66048 typedef 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  */
66078 typedef 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  */
66108 typedef 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  */
66203 typedef 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  */
66253 typedef 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  */
66293 typedef 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  */
66343 typedef 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  */
66402 typedef 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  */
66440 typedef 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  */
66467 typedef 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  */
66490 typedef 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  */
66513 typedef 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  */
66541 typedef 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  */
66569 typedef 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  */
66619 typedef 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  */
66660 typedef 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  */
66705 typedef 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  */
66749 typedef 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  */
66793 typedef 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  */
66832 typedef 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  */
66875 typedef 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  */
66919 typedef 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  */
66956 typedef 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  */
66992 typedef 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  */
67038 typedef 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  */
67143 typedef 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  */
67177 typedef 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  */
67212 typedef 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  */
67248 typedef 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  */
67294 typedef 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  */
67430 typedef 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  */
67491 typedef 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  */
67537 typedef 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  */
67589 typedef 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  */
67619 typedef 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  */
67655 typedef 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  */
67702 typedef 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  */
67838 typedef 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  */
67899 typedef 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  */
67941 typedef 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  */
67977 typedef 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  */
68024 typedef 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  */
68160 typedef 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  */
68221 typedef 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  */
68269 typedef 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  */
68306 typedef 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  */
68341 typedef 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  */
68419 typedef 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  */
68523 typedef 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  */
68685 typedef 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  */
68760 typedef 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  */
68807 typedef 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  */
68866 typedef 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  */
69019 typedef 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  */
69078 typedef 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  */
69123 typedef 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  */
69187 typedef 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  */
69222 typedef 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  */
69289 typedef 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  */
69331 typedef 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  */
69365 typedef 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  */
69399 typedef 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  */
69439 typedef 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  */
69504 typedef 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  */
69542 typedef 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  */
69640 typedef 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  */
69720 typedef 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  */
69856 typedef 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  */
69957 typedef 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  */
70189 typedef 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  */
70225 typedef 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  */
70287 typedef 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  */
70358 typedef 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  */
70410 typedef 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  */
70547 typedef 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  */
70584 typedef 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  */
70642 typedef 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  */
70695 typedef 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  */
70753 typedef 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  */
70802 typedef 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  */
70834 typedef 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  */
70933 typedef 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  */
70967 typedef 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  */
70997 typedef 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  */
71087 typedef 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  */
71149 typedef 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  */
71204 typedef 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  */
71253 typedef 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  */
71308 typedef 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  */
71362 typedef 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  */
71409 typedef 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  */
71453 typedef 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  */
71597 typedef 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  */
71631 typedef 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  */
71695 typedef 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  */
71723 typedef 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  */
71786 typedef 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  */
71841 typedef 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  */
72129 typedef 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  */
72179 typedef 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  */
72210 typedef 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  */
72241 typedef 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  */
72272 typedef 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  */
72303 typedef 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  */
72334 typedef 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  */
72365 typedef 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  */
72396 typedef 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  */
72427 typedef 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  */
72458 typedef 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  */
72489 typedef 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  */
72520 typedef 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  */
72551 typedef 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  */
72582 typedef 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  */
72613 typedef 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  */
72644 typedef 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  */
72674 typedef 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  */
72718 typedef 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  */
73035 typedef 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  */
73212 typedef 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  */
73771 typedef 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  */
73808 typedef 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  */
73840 typedef 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  */
73872 typedef 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  */
73910 typedef 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  */
73940 typedef 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  */
73970 typedef 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__ */