1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020 Marvell International Ltd.
4  *
5  * Configuration and status register (CSR) type definitions for
6  * Octeon fpa.
7  */
8 
9 #ifndef __CVMX_FPA_DEFS_H__
10 #define __CVMX_FPA_DEFS_H__
11 
12 #define CVMX_FPA_ADDR_RANGE_ERROR CVMX_FPA_ADDR_RANGE_ERROR_FUNC()
CVMX_FPA_ADDR_RANGE_ERROR_FUNC(void)13 static inline u64 CVMX_FPA_ADDR_RANGE_ERROR_FUNC(void)
14 {
15 	switch (cvmx_get_octeon_family()) {
16 	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
17 	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
18 	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
19 	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
20 	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
21 		return 0x0001180028000458ull;
22 	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
23 	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
24 		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
25 			return 0x0001280000000458ull;
26 		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
27 			return 0x0001280000000458ull;
28 	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
29 		return 0x0001280000000458ull;
30 	}
31 	return 0x0001280000000458ull;
32 }
33 
34 #define CVMX_FPA_AURAX_CFG(offset)	     (0x0001280020100000ull + ((offset) & 1023) * 8)
35 #define CVMX_FPA_AURAX_CNT(offset)	     (0x0001280020200000ull + ((offset) & 1023) * 8)
36 #define CVMX_FPA_AURAX_CNT_ADD(offset)	     (0x0001280020300000ull + ((offset) & 1023) * 8)
37 #define CVMX_FPA_AURAX_CNT_LEVELS(offset)    (0x0001280020800000ull + ((offset) & 1023) * 8)
38 #define CVMX_FPA_AURAX_CNT_LIMIT(offset)     (0x0001280020400000ull + ((offset) & 1023) * 8)
39 #define CVMX_FPA_AURAX_CNT_THRESHOLD(offset) (0x0001280020500000ull + ((offset) & 1023) * 8)
40 #define CVMX_FPA_AURAX_INT(offset)	     (0x0001280020600000ull + ((offset) & 1023) * 8)
41 #define CVMX_FPA_AURAX_POOL(offset)	     (0x0001280020000000ull + ((offset) & 1023) * 8)
42 #define CVMX_FPA_AURAX_POOL_LEVELS(offset)   (0x0001280020700000ull + ((offset) & 1023) * 8)
43 #define CVMX_FPA_BIST_STATUS		     CVMX_FPA_BIST_STATUS_FUNC()
CVMX_FPA_BIST_STATUS_FUNC(void)44 static inline u64 CVMX_FPA_BIST_STATUS_FUNC(void)
45 {
46 	switch (cvmx_get_octeon_family()) {
47 	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
48 	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
49 	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
50 	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
51 	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
52 	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
53 		return 0x00011800280000E8ull;
54 	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
55 		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
56 			return 0x00012800000000E8ull;
57 		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
58 			return 0x00012800000000E8ull;
59 	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
60 	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
61 		return 0x00012800000000E8ull;
62 	}
63 	return 0x00012800000000E8ull;
64 }
65 
66 #ifndef CVMX_FPA_CLK_COUNT // test-only (also in octeon_ddr.h)
67 #define CVMX_FPA_CLK_COUNT (0x00012800000000F0ull)
68 #endif
69 #define CVMX_FPA_CTL_STATUS		 (0x0001180028000050ull)
70 #define CVMX_FPA_ECC_CTL		 (0x0001280000000058ull)
71 #define CVMX_FPA_ECC_INT		 (0x0001280000000068ull)
72 #define CVMX_FPA_ERR_INT		 (0x0001280000000040ull)
73 #define CVMX_FPA_FPF0_MARKS		 (0x0001180028000000ull)
74 #define CVMX_FPA_FPF0_SIZE		 (0x0001180028000058ull)
75 #define CVMX_FPA_FPF1_MARKS		 CVMX_FPA_FPFX_MARKS(1)
76 #define CVMX_FPA_FPF2_MARKS		 CVMX_FPA_FPFX_MARKS(2)
77 #define CVMX_FPA_FPF3_MARKS		 CVMX_FPA_FPFX_MARKS(3)
78 #define CVMX_FPA_FPF4_MARKS		 CVMX_FPA_FPFX_MARKS(4)
79 #define CVMX_FPA_FPF5_MARKS		 CVMX_FPA_FPFX_MARKS(5)
80 #define CVMX_FPA_FPF6_MARKS		 CVMX_FPA_FPFX_MARKS(6)
81 #define CVMX_FPA_FPF7_MARKS		 CVMX_FPA_FPFX_MARKS(7)
82 #define CVMX_FPA_FPF8_MARKS		 (0x0001180028000240ull)
83 #define CVMX_FPA_FPF8_SIZE		 (0x0001180028000248ull)
84 #define CVMX_FPA_FPFX_MARKS(offset)	 (0x0001180028000008ull + ((offset) & 7) * 8 - 8 * 1)
85 #define CVMX_FPA_FPFX_SIZE(offset)	 (0x0001180028000060ull + ((offset) & 7) * 8 - 8 * 1)
86 #define CVMX_FPA_GEN_CFG		 (0x0001280000000050ull)
87 #define CVMX_FPA_INT_ENB		 (0x0001180028000048ull)
88 #define CVMX_FPA_INT_SUM		 (0x0001180028000040ull)
89 #define CVMX_FPA_PACKET_THRESHOLD	 (0x0001180028000460ull)
90 #define CVMX_FPA_POOLX_AVAILABLE(offset) (0x0001280010300000ull + ((offset) & 63) * 8)
91 #define CVMX_FPA_POOLX_CFG(offset)	 (0x0001280010000000ull + ((offset) & 63) * 8)
CVMX_FPA_POOLX_END_ADDR(unsigned long offset)92 static inline u64 CVMX_FPA_POOLX_END_ADDR(unsigned long offset)
93 {
94 	switch (cvmx_get_octeon_family()) {
95 	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
96 	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
97 	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
98 	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
99 		return 0x0001180028000358ull + (offset) * 8;
100 	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
101 		return 0x0001180028000358ull + (offset) * 8;
102 	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
103 	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
104 		return 0x0001280010600000ull + (offset) * 8;
105 	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
106 		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
107 			return 0x0001280010600000ull + (offset) * 8;
108 		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
109 			return 0x0001280010600000ull + (offset) * 8;
110 	}
111 	return 0x0001280010600000ull + (offset) * 8;
112 }
113 
114 #define CVMX_FPA_POOLX_FPF_MARKS(offset)  (0x0001280010100000ull + ((offset) & 63) * 8)
115 #define CVMX_FPA_POOLX_INT(offset)	  (0x0001280010A00000ull + ((offset) & 63) * 8)
116 #define CVMX_FPA_POOLX_OP_PC(offset)	  (0x0001280010F00000ull + ((offset) & 63) * 8)
117 #define CVMX_FPA_POOLX_STACK_ADDR(offset) (0x0001280010900000ull + ((offset) & 63) * 8)
118 #define CVMX_FPA_POOLX_STACK_BASE(offset) (0x0001280010700000ull + ((offset) & 63) * 8)
119 #define CVMX_FPA_POOLX_STACK_END(offset)  (0x0001280010800000ull + ((offset) & 63) * 8)
CVMX_FPA_POOLX_START_ADDR(unsigned long offset)120 static inline u64 CVMX_FPA_POOLX_START_ADDR(unsigned long offset)
121 {
122 	switch (cvmx_get_octeon_family()) {
123 	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
124 	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
125 	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
126 	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
127 		return 0x0001180028000258ull + (offset) * 8;
128 	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
129 		return 0x0001180028000258ull + (offset) * 8;
130 	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
131 	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
132 		return 0x0001280010500000ull + (offset) * 8;
133 	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
134 		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
135 			return 0x0001280010500000ull + (offset) * 8;
136 		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
137 			return 0x0001280010500000ull + (offset) * 8;
138 	}
139 	return 0x0001280010500000ull + (offset) * 8;
140 }
141 
CVMX_FPA_POOLX_THRESHOLD(unsigned long offset)142 static inline u64 CVMX_FPA_POOLX_THRESHOLD(unsigned long offset)
143 {
144 	switch (cvmx_get_octeon_family()) {
145 	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
146 	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
147 	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
148 	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
149 	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
150 		return 0x0001180028000140ull + (offset) * 8;
151 	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
152 		return 0x0001180028000140ull + (offset) * 8;
153 	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
154 	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
155 		return 0x0001280010400000ull + (offset) * 8;
156 	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
157 		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
158 			return 0x0001280010400000ull + (offset) * 8;
159 		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
160 			return 0x0001280010400000ull + (offset) * 8;
161 	}
162 	return 0x0001280010400000ull + (offset) * 8;
163 }
164 
165 #define CVMX_FPA_QUE0_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(0)
166 #define CVMX_FPA_QUE1_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(1)
167 #define CVMX_FPA_QUE2_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(2)
168 #define CVMX_FPA_QUE3_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(3)
169 #define CVMX_FPA_QUE4_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(4)
170 #define CVMX_FPA_QUE5_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(5)
171 #define CVMX_FPA_QUE6_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(6)
172 #define CVMX_FPA_QUE7_PAGE_INDEX	 CVMX_FPA_QUEX_PAGE_INDEX(7)
173 #define CVMX_FPA_QUE8_PAGE_INDEX	 (0x0001180028000250ull)
174 #define CVMX_FPA_QUEX_AVAILABLE(offset)	 (0x0001180028000098ull + ((offset) & 15) * 8)
175 #define CVMX_FPA_QUEX_PAGE_INDEX(offset) (0x00011800280000F0ull + ((offset) & 7) * 8)
176 #define CVMX_FPA_QUE_ACT		 (0x0001180028000138ull)
177 #define CVMX_FPA_QUE_EXP		 (0x0001180028000130ull)
178 #define CVMX_FPA_RD_LATENCY_PC		 (0x0001280000000610ull)
179 #define CVMX_FPA_RD_REQ_PC		 (0x0001280000000600ull)
180 #define CVMX_FPA_RED_DELAY		 (0x0001280000000100ull)
181 #define CVMX_FPA_SFT_RST		 (0x0001280000000000ull)
182 #define CVMX_FPA_WART_CTL		 (0x00011800280000D8ull)
183 #define CVMX_FPA_WART_STATUS		 (0x00011800280000E0ull)
184 #define CVMX_FPA_WQE_THRESHOLD		 (0x0001180028000468ull)
185 
186 /**
187  * cvmx_fpa_addr_range_error
188  *
189  * When any FPA_POOL()_INT[RANGE] error occurs, this register is latched with additional
190  * error information.
191  */
192 union cvmx_fpa_addr_range_error {
193 	u64 u64;
194 	struct cvmx_fpa_addr_range_error_s {
195 		u64 reserved_0_63 : 64;
196 	} s;
197 	struct cvmx_fpa_addr_range_error_cn61xx {
198 		u64 reserved_38_63 : 26;
199 		u64 pool : 5;
200 		u64 addr : 33;
201 	} cn61xx;
202 	struct cvmx_fpa_addr_range_error_cn61xx cn66xx;
203 	struct cvmx_fpa_addr_range_error_cn61xx cn68xx;
204 	struct cvmx_fpa_addr_range_error_cn61xx cn68xxp1;
205 	struct cvmx_fpa_addr_range_error_cn61xx cn70xx;
206 	struct cvmx_fpa_addr_range_error_cn61xx cn70xxp1;
207 	struct cvmx_fpa_addr_range_error_cn73xx {
208 		u64 reserved_54_63 : 10;
209 		u64 pool : 6;
210 		u64 reserved_42_47 : 6;
211 		u64 addr : 42;
212 	} cn73xx;
213 	struct cvmx_fpa_addr_range_error_cn73xx cn78xx;
214 	struct cvmx_fpa_addr_range_error_cn73xx cn78xxp1;
215 	struct cvmx_fpa_addr_range_error_cn61xx cnf71xx;
216 	struct cvmx_fpa_addr_range_error_cn73xx cnf75xx;
217 };
218 
219 typedef union cvmx_fpa_addr_range_error cvmx_fpa_addr_range_error_t;
220 
221 /**
222  * cvmx_fpa_aura#_cfg
223  *
224  * This register configures aura backpressure, etc.
225  *
226  */
227 union cvmx_fpa_aurax_cfg {
228 	u64 u64;
229 	struct cvmx_fpa_aurax_cfg_s {
230 		u64 reserved_10_63 : 54;
231 		u64 ptr_dis : 1;
232 		u64 avg_con : 9;
233 	} s;
234 	struct cvmx_fpa_aurax_cfg_s cn73xx;
235 	struct cvmx_fpa_aurax_cfg_s cn78xx;
236 	struct cvmx_fpa_aurax_cfg_s cn78xxp1;
237 	struct cvmx_fpa_aurax_cfg_s cnf75xx;
238 };
239 
240 typedef union cvmx_fpa_aurax_cfg cvmx_fpa_aurax_cfg_t;
241 
242 /**
243  * cvmx_fpa_aura#_cnt
244  */
245 union cvmx_fpa_aurax_cnt {
246 	u64 u64;
247 	struct cvmx_fpa_aurax_cnt_s {
248 		u64 reserved_40_63 : 24;
249 		u64 cnt : 40;
250 	} s;
251 	struct cvmx_fpa_aurax_cnt_s cn73xx;
252 	struct cvmx_fpa_aurax_cnt_s cn78xx;
253 	struct cvmx_fpa_aurax_cnt_s cn78xxp1;
254 	struct cvmx_fpa_aurax_cnt_s cnf75xx;
255 };
256 
257 typedef union cvmx_fpa_aurax_cnt cvmx_fpa_aurax_cnt_t;
258 
259 /**
260  * cvmx_fpa_aura#_cnt_add
261  */
262 union cvmx_fpa_aurax_cnt_add {
263 	u64 u64;
264 	struct cvmx_fpa_aurax_cnt_add_s {
265 		u64 reserved_40_63 : 24;
266 		u64 cnt : 40;
267 	} s;
268 	struct cvmx_fpa_aurax_cnt_add_s cn73xx;
269 	struct cvmx_fpa_aurax_cnt_add_s cn78xx;
270 	struct cvmx_fpa_aurax_cnt_add_s cn78xxp1;
271 	struct cvmx_fpa_aurax_cnt_add_s cnf75xx;
272 };
273 
274 typedef union cvmx_fpa_aurax_cnt_add cvmx_fpa_aurax_cnt_add_t;
275 
276 /**
277  * cvmx_fpa_aura#_cnt_levels
278  */
279 union cvmx_fpa_aurax_cnt_levels {
280 	u64 u64;
281 	struct cvmx_fpa_aurax_cnt_levels_s {
282 		u64 reserved_41_63 : 23;
283 		u64 drop_dis : 1;
284 		u64 bp_ena : 1;
285 		u64 red_ena : 1;
286 		u64 shift : 6;
287 		u64 bp : 8;
288 		u64 drop : 8;
289 		u64 pass : 8;
290 		u64 level : 8;
291 	} s;
292 	struct cvmx_fpa_aurax_cnt_levels_s cn73xx;
293 	struct cvmx_fpa_aurax_cnt_levels_s cn78xx;
294 	struct cvmx_fpa_aurax_cnt_levels_s cn78xxp1;
295 	struct cvmx_fpa_aurax_cnt_levels_s cnf75xx;
296 };
297 
298 typedef union cvmx_fpa_aurax_cnt_levels cvmx_fpa_aurax_cnt_levels_t;
299 
300 /**
301  * cvmx_fpa_aura#_cnt_limit
302  */
303 union cvmx_fpa_aurax_cnt_limit {
304 	u64 u64;
305 	struct cvmx_fpa_aurax_cnt_limit_s {
306 		u64 reserved_40_63 : 24;
307 		u64 limit : 40;
308 	} s;
309 	struct cvmx_fpa_aurax_cnt_limit_s cn73xx;
310 	struct cvmx_fpa_aurax_cnt_limit_s cn78xx;
311 	struct cvmx_fpa_aurax_cnt_limit_s cn78xxp1;
312 	struct cvmx_fpa_aurax_cnt_limit_s cnf75xx;
313 };
314 
315 typedef union cvmx_fpa_aurax_cnt_limit cvmx_fpa_aurax_cnt_limit_t;
316 
317 /**
318  * cvmx_fpa_aura#_cnt_threshold
319  */
320 union cvmx_fpa_aurax_cnt_threshold {
321 	u64 u64;
322 	struct cvmx_fpa_aurax_cnt_threshold_s {
323 		u64 reserved_40_63 : 24;
324 		u64 thresh : 40;
325 	} s;
326 	struct cvmx_fpa_aurax_cnt_threshold_s cn73xx;
327 	struct cvmx_fpa_aurax_cnt_threshold_s cn78xx;
328 	struct cvmx_fpa_aurax_cnt_threshold_s cn78xxp1;
329 	struct cvmx_fpa_aurax_cnt_threshold_s cnf75xx;
330 };
331 
332 typedef union cvmx_fpa_aurax_cnt_threshold cvmx_fpa_aurax_cnt_threshold_t;
333 
334 /**
335  * cvmx_fpa_aura#_int
336  */
337 union cvmx_fpa_aurax_int {
338 	u64 u64;
339 	struct cvmx_fpa_aurax_int_s {
340 		u64 reserved_1_63 : 63;
341 		u64 thresh : 1;
342 	} s;
343 	struct cvmx_fpa_aurax_int_s cn73xx;
344 	struct cvmx_fpa_aurax_int_s cn78xx;
345 	struct cvmx_fpa_aurax_int_s cn78xxp1;
346 	struct cvmx_fpa_aurax_int_s cnf75xx;
347 };
348 
349 typedef union cvmx_fpa_aurax_int cvmx_fpa_aurax_int_t;
350 
351 /**
352  * cvmx_fpa_aura#_pool
353  *
354  * Provides the mapping from each aura to the pool number.
355  *
356  */
357 union cvmx_fpa_aurax_pool {
358 	u64 u64;
359 	struct cvmx_fpa_aurax_pool_s {
360 		u64 reserved_6_63 : 58;
361 		u64 pool : 6;
362 	} s;
363 	struct cvmx_fpa_aurax_pool_s cn73xx;
364 	struct cvmx_fpa_aurax_pool_s cn78xx;
365 	struct cvmx_fpa_aurax_pool_s cn78xxp1;
366 	struct cvmx_fpa_aurax_pool_s cnf75xx;
367 };
368 
369 typedef union cvmx_fpa_aurax_pool cvmx_fpa_aurax_pool_t;
370 
371 /**
372  * cvmx_fpa_aura#_pool_levels
373  */
374 union cvmx_fpa_aurax_pool_levels {
375 	u64 u64;
376 	struct cvmx_fpa_aurax_pool_levels_s {
377 		u64 reserved_41_63 : 23;
378 		u64 drop_dis : 1;
379 		u64 bp_ena : 1;
380 		u64 red_ena : 1;
381 		u64 shift : 6;
382 		u64 bp : 8;
383 		u64 drop : 8;
384 		u64 pass : 8;
385 		u64 level : 8;
386 	} s;
387 	struct cvmx_fpa_aurax_pool_levels_s cn73xx;
388 	struct cvmx_fpa_aurax_pool_levels_s cn78xx;
389 	struct cvmx_fpa_aurax_pool_levels_s cn78xxp1;
390 	struct cvmx_fpa_aurax_pool_levels_s cnf75xx;
391 };
392 
393 typedef union cvmx_fpa_aurax_pool_levels cvmx_fpa_aurax_pool_levels_t;
394 
395 /**
396  * cvmx_fpa_bist_status
397  *
398  * This register provides the result of the BIST run on the FPA memories.
399  *
400  */
401 union cvmx_fpa_bist_status {
402 	u64 u64;
403 	struct cvmx_fpa_bist_status_s {
404 		u64 reserved_0_63 : 64;
405 	} s;
406 	struct cvmx_fpa_bist_status_cn30xx {
407 		u64 reserved_5_63 : 59;
408 		u64 frd : 1;
409 		u64 fpf0 : 1;
410 		u64 fpf1 : 1;
411 		u64 ffr : 1;
412 		u64 fdr : 1;
413 	} cn30xx;
414 	struct cvmx_fpa_bist_status_cn30xx cn31xx;
415 	struct cvmx_fpa_bist_status_cn30xx cn38xx;
416 	struct cvmx_fpa_bist_status_cn30xx cn38xxp2;
417 	struct cvmx_fpa_bist_status_cn30xx cn50xx;
418 	struct cvmx_fpa_bist_status_cn30xx cn52xx;
419 	struct cvmx_fpa_bist_status_cn30xx cn52xxp1;
420 	struct cvmx_fpa_bist_status_cn30xx cn56xx;
421 	struct cvmx_fpa_bist_status_cn30xx cn56xxp1;
422 	struct cvmx_fpa_bist_status_cn30xx cn58xx;
423 	struct cvmx_fpa_bist_status_cn30xx cn58xxp1;
424 	struct cvmx_fpa_bist_status_cn30xx cn61xx;
425 	struct cvmx_fpa_bist_status_cn30xx cn63xx;
426 	struct cvmx_fpa_bist_status_cn30xx cn63xxp1;
427 	struct cvmx_fpa_bist_status_cn30xx cn66xx;
428 	struct cvmx_fpa_bist_status_cn30xx cn68xx;
429 	struct cvmx_fpa_bist_status_cn30xx cn68xxp1;
430 	struct cvmx_fpa_bist_status_cn30xx cn70xx;
431 	struct cvmx_fpa_bist_status_cn30xx cn70xxp1;
432 	struct cvmx_fpa_bist_status_cn73xx {
433 		u64 reserved_38_63 : 26;
434 		u64 status : 38;
435 	} cn73xx;
436 	struct cvmx_fpa_bist_status_cn73xx cn78xx;
437 	struct cvmx_fpa_bist_status_cn73xx cn78xxp1;
438 	struct cvmx_fpa_bist_status_cn30xx cnf71xx;
439 	struct cvmx_fpa_bist_status_cn73xx cnf75xx;
440 };
441 
442 typedef union cvmx_fpa_bist_status cvmx_fpa_bist_status_t;
443 
444 /**
445  * cvmx_fpa_clk_count
446  *
447  * This register counts the number of coprocessor-clock cycles since the deassertion of reset.
448  *
449  */
450 union cvmx_fpa_clk_count {
451 	u64 u64;
452 	struct cvmx_fpa_clk_count_s {
453 		u64 clk_cnt : 64;
454 	} s;
455 	struct cvmx_fpa_clk_count_s cn73xx;
456 	struct cvmx_fpa_clk_count_s cn78xx;
457 	struct cvmx_fpa_clk_count_s cn78xxp1;
458 	struct cvmx_fpa_clk_count_s cnf75xx;
459 };
460 
461 typedef union cvmx_fpa_clk_count cvmx_fpa_clk_count_t;
462 
463 /**
464  * cvmx_fpa_ctl_status
465  *
466  * The FPA's interrupt enable register.
467  *
468  */
469 union cvmx_fpa_ctl_status {
470 	u64 u64;
471 	struct cvmx_fpa_ctl_status_s {
472 		u64 reserved_21_63 : 43;
473 		u64 free_en : 1;
474 		u64 ret_off : 1;
475 		u64 req_off : 1;
476 		u64 reset : 1;
477 		u64 use_ldt : 1;
478 		u64 use_stt : 1;
479 		u64 enb : 1;
480 		u64 mem1_err : 7;
481 		u64 mem0_err : 7;
482 	} s;
483 	struct cvmx_fpa_ctl_status_cn30xx {
484 		u64 reserved_18_63 : 46;
485 		u64 reset : 1;
486 		u64 use_ldt : 1;
487 		u64 use_stt : 1;
488 		u64 enb : 1;
489 		u64 mem1_err : 7;
490 		u64 mem0_err : 7;
491 	} cn30xx;
492 	struct cvmx_fpa_ctl_status_cn30xx cn31xx;
493 	struct cvmx_fpa_ctl_status_cn30xx cn38xx;
494 	struct cvmx_fpa_ctl_status_cn30xx cn38xxp2;
495 	struct cvmx_fpa_ctl_status_cn30xx cn50xx;
496 	struct cvmx_fpa_ctl_status_cn30xx cn52xx;
497 	struct cvmx_fpa_ctl_status_cn30xx cn52xxp1;
498 	struct cvmx_fpa_ctl_status_cn30xx cn56xx;
499 	struct cvmx_fpa_ctl_status_cn30xx cn56xxp1;
500 	struct cvmx_fpa_ctl_status_cn30xx cn58xx;
501 	struct cvmx_fpa_ctl_status_cn30xx cn58xxp1;
502 	struct cvmx_fpa_ctl_status_s cn61xx;
503 	struct cvmx_fpa_ctl_status_s cn63xx;
504 	struct cvmx_fpa_ctl_status_cn30xx cn63xxp1;
505 	struct cvmx_fpa_ctl_status_s cn66xx;
506 	struct cvmx_fpa_ctl_status_s cn68xx;
507 	struct cvmx_fpa_ctl_status_s cn68xxp1;
508 	struct cvmx_fpa_ctl_status_s cn70xx;
509 	struct cvmx_fpa_ctl_status_s cn70xxp1;
510 	struct cvmx_fpa_ctl_status_s cnf71xx;
511 };
512 
513 typedef union cvmx_fpa_ctl_status cvmx_fpa_ctl_status_t;
514 
515 /**
516  * cvmx_fpa_ecc_ctl
517  *
518  * This register allows inserting ECC errors for testing.
519  *
520  */
521 union cvmx_fpa_ecc_ctl {
522 	u64 u64;
523 	struct cvmx_fpa_ecc_ctl_s {
524 		u64 reserved_62_63 : 2;
525 		u64 ram_flip1 : 20;
526 		u64 reserved_41_41 : 1;
527 		u64 ram_flip0 : 20;
528 		u64 reserved_20_20 : 1;
529 		u64 ram_cdis : 20;
530 	} s;
531 	struct cvmx_fpa_ecc_ctl_s cn73xx;
532 	struct cvmx_fpa_ecc_ctl_s cn78xx;
533 	struct cvmx_fpa_ecc_ctl_s cn78xxp1;
534 	struct cvmx_fpa_ecc_ctl_s cnf75xx;
535 };
536 
537 typedef union cvmx_fpa_ecc_ctl cvmx_fpa_ecc_ctl_t;
538 
539 /**
540  * cvmx_fpa_ecc_int
541  *
542  * This register contains ECC error interrupt summary bits.
543  *
544  */
545 union cvmx_fpa_ecc_int {
546 	u64 u64;
547 	struct cvmx_fpa_ecc_int_s {
548 		u64 reserved_52_63 : 12;
549 		u64 ram_dbe : 20;
550 		u64 reserved_20_31 : 12;
551 		u64 ram_sbe : 20;
552 	} s;
553 	struct cvmx_fpa_ecc_int_s cn73xx;
554 	struct cvmx_fpa_ecc_int_s cn78xx;
555 	struct cvmx_fpa_ecc_int_s cn78xxp1;
556 	struct cvmx_fpa_ecc_int_s cnf75xx;
557 };
558 
559 typedef union cvmx_fpa_ecc_int cvmx_fpa_ecc_int_t;
560 
561 /**
562  * cvmx_fpa_err_int
563  *
564  * This register contains the global (non-pool) error interrupt summary bits of the FPA.
565  *
566  */
567 union cvmx_fpa_err_int {
568 	u64 u64;
569 	struct cvmx_fpa_err_int_s {
570 		u64 reserved_4_63 : 60;
571 		u64 hw_sub : 1;
572 		u64 hw_add : 1;
573 		u64 cnt_sub : 1;
574 		u64 cnt_add : 1;
575 	} s;
576 	struct cvmx_fpa_err_int_s cn73xx;
577 	struct cvmx_fpa_err_int_s cn78xx;
578 	struct cvmx_fpa_err_int_s cn78xxp1;
579 	struct cvmx_fpa_err_int_s cnf75xx;
580 };
581 
582 typedef union cvmx_fpa_err_int cvmx_fpa_err_int_t;
583 
584 /**
585  * cvmx_fpa_fpf#_marks
586  *
587  * "The high and low watermark register that determines when we write and read free pages from
588  * L2C
589  * for Queue 1. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend
590  * value
591  * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)"
592  */
593 union cvmx_fpa_fpfx_marks {
594 	u64 u64;
595 	struct cvmx_fpa_fpfx_marks_s {
596 		u64 reserved_22_63 : 42;
597 		u64 fpf_wr : 11;
598 		u64 fpf_rd : 11;
599 	} s;
600 	struct cvmx_fpa_fpfx_marks_s cn38xx;
601 	struct cvmx_fpa_fpfx_marks_s cn38xxp2;
602 	struct cvmx_fpa_fpfx_marks_s cn56xx;
603 	struct cvmx_fpa_fpfx_marks_s cn56xxp1;
604 	struct cvmx_fpa_fpfx_marks_s cn58xx;
605 	struct cvmx_fpa_fpfx_marks_s cn58xxp1;
606 	struct cvmx_fpa_fpfx_marks_s cn61xx;
607 	struct cvmx_fpa_fpfx_marks_s cn63xx;
608 	struct cvmx_fpa_fpfx_marks_s cn63xxp1;
609 	struct cvmx_fpa_fpfx_marks_s cn66xx;
610 	struct cvmx_fpa_fpfx_marks_s cn68xx;
611 	struct cvmx_fpa_fpfx_marks_s cn68xxp1;
612 	struct cvmx_fpa_fpfx_marks_s cn70xx;
613 	struct cvmx_fpa_fpfx_marks_s cn70xxp1;
614 	struct cvmx_fpa_fpfx_marks_s cnf71xx;
615 };
616 
617 typedef union cvmx_fpa_fpfx_marks cvmx_fpa_fpfx_marks_t;
618 
619 /**
620  * cvmx_fpa_fpf#_size
621  *
622  * "FPA_FPFX_SIZE = FPA's Queue 1-7 Free Page FIFO Size
623  * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
624  * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
625  * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048."
626  */
627 union cvmx_fpa_fpfx_size {
628 	u64 u64;
629 	struct cvmx_fpa_fpfx_size_s {
630 		u64 reserved_11_63 : 53;
631 		u64 fpf_siz : 11;
632 	} s;
633 	struct cvmx_fpa_fpfx_size_s cn38xx;
634 	struct cvmx_fpa_fpfx_size_s cn38xxp2;
635 	struct cvmx_fpa_fpfx_size_s cn56xx;
636 	struct cvmx_fpa_fpfx_size_s cn56xxp1;
637 	struct cvmx_fpa_fpfx_size_s cn58xx;
638 	struct cvmx_fpa_fpfx_size_s cn58xxp1;
639 	struct cvmx_fpa_fpfx_size_s cn61xx;
640 	struct cvmx_fpa_fpfx_size_s cn63xx;
641 	struct cvmx_fpa_fpfx_size_s cn63xxp1;
642 	struct cvmx_fpa_fpfx_size_s cn66xx;
643 	struct cvmx_fpa_fpfx_size_s cn68xx;
644 	struct cvmx_fpa_fpfx_size_s cn68xxp1;
645 	struct cvmx_fpa_fpfx_size_s cn70xx;
646 	struct cvmx_fpa_fpfx_size_s cn70xxp1;
647 	struct cvmx_fpa_fpfx_size_s cnf71xx;
648 };
649 
650 typedef union cvmx_fpa_fpfx_size cvmx_fpa_fpfx_size_t;
651 
652 /**
653  * cvmx_fpa_fpf0_marks
654  *
655  * "The high and low watermark register that determines when we write and read free pages from
656  * L2C
657  * for Queue 0. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend
658  * value
659  * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)"
660  */
661 union cvmx_fpa_fpf0_marks {
662 	u64 u64;
663 	struct cvmx_fpa_fpf0_marks_s {
664 		u64 reserved_24_63 : 40;
665 		u64 fpf_wr : 12;
666 		u64 fpf_rd : 12;
667 	} s;
668 	struct cvmx_fpa_fpf0_marks_s cn38xx;
669 	struct cvmx_fpa_fpf0_marks_s cn38xxp2;
670 	struct cvmx_fpa_fpf0_marks_s cn56xx;
671 	struct cvmx_fpa_fpf0_marks_s cn56xxp1;
672 	struct cvmx_fpa_fpf0_marks_s cn58xx;
673 	struct cvmx_fpa_fpf0_marks_s cn58xxp1;
674 	struct cvmx_fpa_fpf0_marks_s cn61xx;
675 	struct cvmx_fpa_fpf0_marks_s cn63xx;
676 	struct cvmx_fpa_fpf0_marks_s cn63xxp1;
677 	struct cvmx_fpa_fpf0_marks_s cn66xx;
678 	struct cvmx_fpa_fpf0_marks_s cn68xx;
679 	struct cvmx_fpa_fpf0_marks_s cn68xxp1;
680 	struct cvmx_fpa_fpf0_marks_s cn70xx;
681 	struct cvmx_fpa_fpf0_marks_s cn70xxp1;
682 	struct cvmx_fpa_fpf0_marks_s cnf71xx;
683 };
684 
685 typedef union cvmx_fpa_fpf0_marks cvmx_fpa_fpf0_marks_t;
686 
687 /**
688  * cvmx_fpa_fpf0_size
689  *
690  * "The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
691  * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
692  * The sum of the 8 (0-7) FPA_FPF#_SIZE registers must be limited to 2048."
693  */
694 union cvmx_fpa_fpf0_size {
695 	u64 u64;
696 	struct cvmx_fpa_fpf0_size_s {
697 		u64 reserved_12_63 : 52;
698 		u64 fpf_siz : 12;
699 	} s;
700 	struct cvmx_fpa_fpf0_size_s cn38xx;
701 	struct cvmx_fpa_fpf0_size_s cn38xxp2;
702 	struct cvmx_fpa_fpf0_size_s cn56xx;
703 	struct cvmx_fpa_fpf0_size_s cn56xxp1;
704 	struct cvmx_fpa_fpf0_size_s cn58xx;
705 	struct cvmx_fpa_fpf0_size_s cn58xxp1;
706 	struct cvmx_fpa_fpf0_size_s cn61xx;
707 	struct cvmx_fpa_fpf0_size_s cn63xx;
708 	struct cvmx_fpa_fpf0_size_s cn63xxp1;
709 	struct cvmx_fpa_fpf0_size_s cn66xx;
710 	struct cvmx_fpa_fpf0_size_s cn68xx;
711 	struct cvmx_fpa_fpf0_size_s cn68xxp1;
712 	struct cvmx_fpa_fpf0_size_s cn70xx;
713 	struct cvmx_fpa_fpf0_size_s cn70xxp1;
714 	struct cvmx_fpa_fpf0_size_s cnf71xx;
715 };
716 
717 typedef union cvmx_fpa_fpf0_size cvmx_fpa_fpf0_size_t;
718 
719 /**
720  * cvmx_fpa_fpf8_marks
721  *
722  * Reserved through 0x238 for additional thresholds
723  *
724  *                  FPA_FPF8_MARKS = FPA's Queue 8 Free Page FIFO Read Write Marks
725  *
726  * The high and low watermark register that determines when we write and read free pages from L2C
727  * for Queue 8. The value of FPF_RD and FPF_WR should have at least a 33 difference. Recommend value
728  * is FPF_RD == (FPA_FPF#_SIZE[FPF_SIZ] * .25) and FPF_WR == (FPA_FPF#_SIZE[FPF_SIZ] * .75)
729  */
730 union cvmx_fpa_fpf8_marks {
731 	u64 u64;
732 	struct cvmx_fpa_fpf8_marks_s {
733 		u64 reserved_22_63 : 42;
734 		u64 fpf_wr : 11;
735 		u64 fpf_rd : 11;
736 	} s;
737 	struct cvmx_fpa_fpf8_marks_s cn68xx;
738 	struct cvmx_fpa_fpf8_marks_s cn68xxp1;
739 };
740 
741 typedef union cvmx_fpa_fpf8_marks cvmx_fpa_fpf8_marks_t;
742 
743 /**
744  * cvmx_fpa_fpf8_size
745  *
746  * FPA_FPF8_SIZE = FPA's Queue 8 Free Page FIFO Size
747  *
748  * The number of page pointers that will be kept local to the FPA for this Queue. FPA Queues are
749  * assigned in order from Queue 0 to Queue 7, though only Queue 0 through Queue x can be used.
750  * The sum of the 9 (0-8) FPA_FPF#_SIZE registers must be limited to 2048.
751  */
752 union cvmx_fpa_fpf8_size {
753 	u64 u64;
754 	struct cvmx_fpa_fpf8_size_s {
755 		u64 reserved_12_63 : 52;
756 		u64 fpf_siz : 12;
757 	} s;
758 	struct cvmx_fpa_fpf8_size_s cn68xx;
759 	struct cvmx_fpa_fpf8_size_s cn68xxp1;
760 };
761 
762 typedef union cvmx_fpa_fpf8_size cvmx_fpa_fpf8_size_t;
763 
764 /**
765  * cvmx_fpa_gen_cfg
766  *
767  * This register provides FPA control and status information.
768  *
769  */
770 union cvmx_fpa_gen_cfg {
771 	u64 u64;
772 	struct cvmx_fpa_gen_cfg_s {
773 		u64 reserved_12_63 : 52;
774 		u64 halfrate : 1;
775 		u64 ocla_bp : 1;
776 		u64 lvl_dly : 6;
777 		u64 pools : 2;
778 		u64 avg_en : 1;
779 		u64 clk_override : 1;
780 	} s;
781 	struct cvmx_fpa_gen_cfg_s cn73xx;
782 	struct cvmx_fpa_gen_cfg_s cn78xx;
783 	struct cvmx_fpa_gen_cfg_s cn78xxp1;
784 	struct cvmx_fpa_gen_cfg_s cnf75xx;
785 };
786 
787 typedef union cvmx_fpa_gen_cfg cvmx_fpa_gen_cfg_t;
788 
789 /**
790  * cvmx_fpa_int_enb
791  *
792  * The FPA's interrupt enable register.
793  *
794  */
795 union cvmx_fpa_int_enb {
796 	u64 u64;
797 	struct cvmx_fpa_int_enb_s {
798 		u64 reserved_50_63 : 14;
799 		u64 paddr_e : 1;
800 		u64 reserved_44_48 : 5;
801 		u64 free7 : 1;
802 		u64 free6 : 1;
803 		u64 free5 : 1;
804 		u64 free4 : 1;
805 		u64 free3 : 1;
806 		u64 free2 : 1;
807 		u64 free1 : 1;
808 		u64 free0 : 1;
809 		u64 pool7th : 1;
810 		u64 pool6th : 1;
811 		u64 pool5th : 1;
812 		u64 pool4th : 1;
813 		u64 pool3th : 1;
814 		u64 pool2th : 1;
815 		u64 pool1th : 1;
816 		u64 pool0th : 1;
817 		u64 q7_perr : 1;
818 		u64 q7_coff : 1;
819 		u64 q7_und : 1;
820 		u64 q6_perr : 1;
821 		u64 q6_coff : 1;
822 		u64 q6_und : 1;
823 		u64 q5_perr : 1;
824 		u64 q5_coff : 1;
825 		u64 q5_und : 1;
826 		u64 q4_perr : 1;
827 		u64 q4_coff : 1;
828 		u64 q4_und : 1;
829 		u64 q3_perr : 1;
830 		u64 q3_coff : 1;
831 		u64 q3_und : 1;
832 		u64 q2_perr : 1;
833 		u64 q2_coff : 1;
834 		u64 q2_und : 1;
835 		u64 q1_perr : 1;
836 		u64 q1_coff : 1;
837 		u64 q1_und : 1;
838 		u64 q0_perr : 1;
839 		u64 q0_coff : 1;
840 		u64 q0_und : 1;
841 		u64 fed1_dbe : 1;
842 		u64 fed1_sbe : 1;
843 		u64 fed0_dbe : 1;
844 		u64 fed0_sbe : 1;
845 	} s;
846 	struct cvmx_fpa_int_enb_cn30xx {
847 		u64 reserved_28_63 : 36;
848 		u64 q7_perr : 1;
849 		u64 q7_coff : 1;
850 		u64 q7_und : 1;
851 		u64 q6_perr : 1;
852 		u64 q6_coff : 1;
853 		u64 q6_und : 1;
854 		u64 q5_perr : 1;
855 		u64 q5_coff : 1;
856 		u64 q5_und : 1;
857 		u64 q4_perr : 1;
858 		u64 q4_coff : 1;
859 		u64 q4_und : 1;
860 		u64 q3_perr : 1;
861 		u64 q3_coff : 1;
862 		u64 q3_und : 1;
863 		u64 q2_perr : 1;
864 		u64 q2_coff : 1;
865 		u64 q2_und : 1;
866 		u64 q1_perr : 1;
867 		u64 q1_coff : 1;
868 		u64 q1_und : 1;
869 		u64 q0_perr : 1;
870 		u64 q0_coff : 1;
871 		u64 q0_und : 1;
872 		u64 fed1_dbe : 1;
873 		u64 fed1_sbe : 1;
874 		u64 fed0_dbe : 1;
875 		u64 fed0_sbe : 1;
876 	} cn30xx;
877 	struct cvmx_fpa_int_enb_cn30xx cn31xx;
878 	struct cvmx_fpa_int_enb_cn30xx cn38xx;
879 	struct cvmx_fpa_int_enb_cn30xx cn38xxp2;
880 	struct cvmx_fpa_int_enb_cn30xx cn50xx;
881 	struct cvmx_fpa_int_enb_cn30xx cn52xx;
882 	struct cvmx_fpa_int_enb_cn30xx cn52xxp1;
883 	struct cvmx_fpa_int_enb_cn30xx cn56xx;
884 	struct cvmx_fpa_int_enb_cn30xx cn56xxp1;
885 	struct cvmx_fpa_int_enb_cn30xx cn58xx;
886 	struct cvmx_fpa_int_enb_cn30xx cn58xxp1;
887 	struct cvmx_fpa_int_enb_cn61xx {
888 		u64 reserved_50_63 : 14;
889 		u64 paddr_e : 1;
890 		u64 res_44 : 5;
891 		u64 free7 : 1;
892 		u64 free6 : 1;
893 		u64 free5 : 1;
894 		u64 free4 : 1;
895 		u64 free3 : 1;
896 		u64 free2 : 1;
897 		u64 free1 : 1;
898 		u64 free0 : 1;
899 		u64 pool7th : 1;
900 		u64 pool6th : 1;
901 		u64 pool5th : 1;
902 		u64 pool4th : 1;
903 		u64 pool3th : 1;
904 		u64 pool2th : 1;
905 		u64 pool1th : 1;
906 		u64 pool0th : 1;
907 		u64 q7_perr : 1;
908 		u64 q7_coff : 1;
909 		u64 q7_und : 1;
910 		u64 q6_perr : 1;
911 		u64 q6_coff : 1;
912 		u64 q6_und : 1;
913 		u64 q5_perr : 1;
914 		u64 q5_coff : 1;
915 		u64 q5_und : 1;
916 		u64 q4_perr : 1;
917 		u64 q4_coff : 1;
918 		u64 q4_und : 1;
919 		u64 q3_perr : 1;
920 		u64 q3_coff : 1;
921 		u64 q3_und : 1;
922 		u64 q2_perr : 1;
923 		u64 q2_coff : 1;
924 		u64 q2_und : 1;
925 		u64 q1_perr : 1;
926 		u64 q1_coff : 1;
927 		u64 q1_und : 1;
928 		u64 q0_perr : 1;
929 		u64 q0_coff : 1;
930 		u64 q0_und : 1;
931 		u64 fed1_dbe : 1;
932 		u64 fed1_sbe : 1;
933 		u64 fed0_dbe : 1;
934 		u64 fed0_sbe : 1;
935 	} cn61xx;
936 	struct cvmx_fpa_int_enb_cn63xx {
937 		u64 reserved_44_63 : 20;
938 		u64 free7 : 1;
939 		u64 free6 : 1;
940 		u64 free5 : 1;
941 		u64 free4 : 1;
942 		u64 free3 : 1;
943 		u64 free2 : 1;
944 		u64 free1 : 1;
945 		u64 free0 : 1;
946 		u64 pool7th : 1;
947 		u64 pool6th : 1;
948 		u64 pool5th : 1;
949 		u64 pool4th : 1;
950 		u64 pool3th : 1;
951 		u64 pool2th : 1;
952 		u64 pool1th : 1;
953 		u64 pool0th : 1;
954 		u64 q7_perr : 1;
955 		u64 q7_coff : 1;
956 		u64 q7_und : 1;
957 		u64 q6_perr : 1;
958 		u64 q6_coff : 1;
959 		u64 q6_und : 1;
960 		u64 q5_perr : 1;
961 		u64 q5_coff : 1;
962 		u64 q5_und : 1;
963 		u64 q4_perr : 1;
964 		u64 q4_coff : 1;
965 		u64 q4_und : 1;
966 		u64 q3_perr : 1;
967 		u64 q3_coff : 1;
968 		u64 q3_und : 1;
969 		u64 q2_perr : 1;
970 		u64 q2_coff : 1;
971 		u64 q2_und : 1;
972 		u64 q1_perr : 1;
973 		u64 q1_coff : 1;
974 		u64 q1_und : 1;
975 		u64 q0_perr : 1;
976 		u64 q0_coff : 1;
977 		u64 q0_und : 1;
978 		u64 fed1_dbe : 1;
979 		u64 fed1_sbe : 1;
980 		u64 fed0_dbe : 1;
981 		u64 fed0_sbe : 1;
982 	} cn63xx;
983 	struct cvmx_fpa_int_enb_cn30xx cn63xxp1;
984 	struct cvmx_fpa_int_enb_cn61xx cn66xx;
985 	struct cvmx_fpa_int_enb_cn68xx {
986 		u64 reserved_50_63 : 14;
987 		u64 paddr_e : 1;
988 		u64 pool8th : 1;
989 		u64 q8_perr : 1;
990 		u64 q8_coff : 1;
991 		u64 q8_und : 1;
992 		u64 free8 : 1;
993 		u64 free7 : 1;
994 		u64 free6 : 1;
995 		u64 free5 : 1;
996 		u64 free4 : 1;
997 		u64 free3 : 1;
998 		u64 free2 : 1;
999 		u64 free1 : 1;
1000 		u64 free0 : 1;
1001 		u64 pool7th : 1;
1002 		u64 pool6th : 1;
1003 		u64 pool5th : 1;
1004 		u64 pool4th : 1;
1005 		u64 pool3th : 1;
1006 		u64 pool2th : 1;
1007 		u64 pool1th : 1;
1008 		u64 pool0th : 1;
1009 		u64 q7_perr : 1;
1010 		u64 q7_coff : 1;
1011 		u64 q7_und : 1;
1012 		u64 q6_perr : 1;
1013 		u64 q6_coff : 1;
1014 		u64 q6_und : 1;
1015 		u64 q5_perr : 1;
1016 		u64 q5_coff : 1;
1017 		u64 q5_und : 1;
1018 		u64 q4_perr : 1;
1019 		u64 q4_coff : 1;
1020 		u64 q4_und : 1;
1021 		u64 q3_perr : 1;
1022 		u64 q3_coff : 1;
1023 		u64 q3_und : 1;
1024 		u64 q2_perr : 1;
1025 		u64 q2_coff : 1;
1026 		u64 q2_und : 1;
1027 		u64 q1_perr : 1;
1028 		u64 q1_coff : 1;
1029 		u64 q1_und : 1;
1030 		u64 q0_perr : 1;
1031 		u64 q0_coff : 1;
1032 		u64 q0_und : 1;
1033 		u64 fed1_dbe : 1;
1034 		u64 fed1_sbe : 1;
1035 		u64 fed0_dbe : 1;
1036 		u64 fed0_sbe : 1;
1037 	} cn68xx;
1038 	struct cvmx_fpa_int_enb_cn68xx cn68xxp1;
1039 	struct cvmx_fpa_int_enb_cn61xx cn70xx;
1040 	struct cvmx_fpa_int_enb_cn61xx cn70xxp1;
1041 	struct cvmx_fpa_int_enb_cn61xx cnf71xx;
1042 };
1043 
1044 typedef union cvmx_fpa_int_enb cvmx_fpa_int_enb_t;
1045 
1046 /**
1047  * cvmx_fpa_int_sum
1048  *
1049  * Contains the different interrupt summary bits of the FPA.
1050  *
1051  */
1052 union cvmx_fpa_int_sum {
1053 	u64 u64;
1054 	struct cvmx_fpa_int_sum_s {
1055 		u64 reserved_50_63 : 14;
1056 		u64 paddr_e : 1;
1057 		u64 pool8th : 1;
1058 		u64 q8_perr : 1;
1059 		u64 q8_coff : 1;
1060 		u64 q8_und : 1;
1061 		u64 free8 : 1;
1062 		u64 free7 : 1;
1063 		u64 free6 : 1;
1064 		u64 free5 : 1;
1065 		u64 free4 : 1;
1066 		u64 free3 : 1;
1067 		u64 free2 : 1;
1068 		u64 free1 : 1;
1069 		u64 free0 : 1;
1070 		u64 pool7th : 1;
1071 		u64 pool6th : 1;
1072 		u64 pool5th : 1;
1073 		u64 pool4th : 1;
1074 		u64 pool3th : 1;
1075 		u64 pool2th : 1;
1076 		u64 pool1th : 1;
1077 		u64 pool0th : 1;
1078 		u64 q7_perr : 1;
1079 		u64 q7_coff : 1;
1080 		u64 q7_und : 1;
1081 		u64 q6_perr : 1;
1082 		u64 q6_coff : 1;
1083 		u64 q6_und : 1;
1084 		u64 q5_perr : 1;
1085 		u64 q5_coff : 1;
1086 		u64 q5_und : 1;
1087 		u64 q4_perr : 1;
1088 		u64 q4_coff : 1;
1089 		u64 q4_und : 1;
1090 		u64 q3_perr : 1;
1091 		u64 q3_coff : 1;
1092 		u64 q3_und : 1;
1093 		u64 q2_perr : 1;
1094 		u64 q2_coff : 1;
1095 		u64 q2_und : 1;
1096 		u64 q1_perr : 1;
1097 		u64 q1_coff : 1;
1098 		u64 q1_und : 1;
1099 		u64 q0_perr : 1;
1100 		u64 q0_coff : 1;
1101 		u64 q0_und : 1;
1102 		u64 fed1_dbe : 1;
1103 		u64 fed1_sbe : 1;
1104 		u64 fed0_dbe : 1;
1105 		u64 fed0_sbe : 1;
1106 	} s;
1107 	struct cvmx_fpa_int_sum_cn30xx {
1108 		u64 reserved_28_63 : 36;
1109 		u64 q7_perr : 1;
1110 		u64 q7_coff : 1;
1111 		u64 q7_und : 1;
1112 		u64 q6_perr : 1;
1113 		u64 q6_coff : 1;
1114 		u64 q6_und : 1;
1115 		u64 q5_perr : 1;
1116 		u64 q5_coff : 1;
1117 		u64 q5_und : 1;
1118 		u64 q4_perr : 1;
1119 		u64 q4_coff : 1;
1120 		u64 q4_und : 1;
1121 		u64 q3_perr : 1;
1122 		u64 q3_coff : 1;
1123 		u64 q3_und : 1;
1124 		u64 q2_perr : 1;
1125 		u64 q2_coff : 1;
1126 		u64 q2_und : 1;
1127 		u64 q1_perr : 1;
1128 		u64 q1_coff : 1;
1129 		u64 q1_und : 1;
1130 		u64 q0_perr : 1;
1131 		u64 q0_coff : 1;
1132 		u64 q0_und : 1;
1133 		u64 fed1_dbe : 1;
1134 		u64 fed1_sbe : 1;
1135 		u64 fed0_dbe : 1;
1136 		u64 fed0_sbe : 1;
1137 	} cn30xx;
1138 	struct cvmx_fpa_int_sum_cn30xx cn31xx;
1139 	struct cvmx_fpa_int_sum_cn30xx cn38xx;
1140 	struct cvmx_fpa_int_sum_cn30xx cn38xxp2;
1141 	struct cvmx_fpa_int_sum_cn30xx cn50xx;
1142 	struct cvmx_fpa_int_sum_cn30xx cn52xx;
1143 	struct cvmx_fpa_int_sum_cn30xx cn52xxp1;
1144 	struct cvmx_fpa_int_sum_cn30xx cn56xx;
1145 	struct cvmx_fpa_int_sum_cn30xx cn56xxp1;
1146 	struct cvmx_fpa_int_sum_cn30xx cn58xx;
1147 	struct cvmx_fpa_int_sum_cn30xx cn58xxp1;
1148 	struct cvmx_fpa_int_sum_cn61xx {
1149 		u64 reserved_50_63 : 14;
1150 		u64 paddr_e : 1;
1151 		u64 reserved_44_48 : 5;
1152 		u64 free7 : 1;
1153 		u64 free6 : 1;
1154 		u64 free5 : 1;
1155 		u64 free4 : 1;
1156 		u64 free3 : 1;
1157 		u64 free2 : 1;
1158 		u64 free1 : 1;
1159 		u64 free0 : 1;
1160 		u64 pool7th : 1;
1161 		u64 pool6th : 1;
1162 		u64 pool5th : 1;
1163 		u64 pool4th : 1;
1164 		u64 pool3th : 1;
1165 		u64 pool2th : 1;
1166 		u64 pool1th : 1;
1167 		u64 pool0th : 1;
1168 		u64 q7_perr : 1;
1169 		u64 q7_coff : 1;
1170 		u64 q7_und : 1;
1171 		u64 q6_perr : 1;
1172 		u64 q6_coff : 1;
1173 		u64 q6_und : 1;
1174 		u64 q5_perr : 1;
1175 		u64 q5_coff : 1;
1176 		u64 q5_und : 1;
1177 		u64 q4_perr : 1;
1178 		u64 q4_coff : 1;
1179 		u64 q4_und : 1;
1180 		u64 q3_perr : 1;
1181 		u64 q3_coff : 1;
1182 		u64 q3_und : 1;
1183 		u64 q2_perr : 1;
1184 		u64 q2_coff : 1;
1185 		u64 q2_und : 1;
1186 		u64 q1_perr : 1;
1187 		u64 q1_coff : 1;
1188 		u64 q1_und : 1;
1189 		u64 q0_perr : 1;
1190 		u64 q0_coff : 1;
1191 		u64 q0_und : 1;
1192 		u64 fed1_dbe : 1;
1193 		u64 fed1_sbe : 1;
1194 		u64 fed0_dbe : 1;
1195 		u64 fed0_sbe : 1;
1196 	} cn61xx;
1197 	struct cvmx_fpa_int_sum_cn63xx {
1198 		u64 reserved_44_63 : 20;
1199 		u64 free7 : 1;
1200 		u64 free6 : 1;
1201 		u64 free5 : 1;
1202 		u64 free4 : 1;
1203 		u64 free3 : 1;
1204 		u64 free2 : 1;
1205 		u64 free1 : 1;
1206 		u64 free0 : 1;
1207 		u64 pool7th : 1;
1208 		u64 pool6th : 1;
1209 		u64 pool5th : 1;
1210 		u64 pool4th : 1;
1211 		u64 pool3th : 1;
1212 		u64 pool2th : 1;
1213 		u64 pool1th : 1;
1214 		u64 pool0th : 1;
1215 		u64 q7_perr : 1;
1216 		u64 q7_coff : 1;
1217 		u64 q7_und : 1;
1218 		u64 q6_perr : 1;
1219 		u64 q6_coff : 1;
1220 		u64 q6_und : 1;
1221 		u64 q5_perr : 1;
1222 		u64 q5_coff : 1;
1223 		u64 q5_und : 1;
1224 		u64 q4_perr : 1;
1225 		u64 q4_coff : 1;
1226 		u64 q4_und : 1;
1227 		u64 q3_perr : 1;
1228 		u64 q3_coff : 1;
1229 		u64 q3_und : 1;
1230 		u64 q2_perr : 1;
1231 		u64 q2_coff : 1;
1232 		u64 q2_und : 1;
1233 		u64 q1_perr : 1;
1234 		u64 q1_coff : 1;
1235 		u64 q1_und : 1;
1236 		u64 q0_perr : 1;
1237 		u64 q0_coff : 1;
1238 		u64 q0_und : 1;
1239 		u64 fed1_dbe : 1;
1240 		u64 fed1_sbe : 1;
1241 		u64 fed0_dbe : 1;
1242 		u64 fed0_sbe : 1;
1243 	} cn63xx;
1244 	struct cvmx_fpa_int_sum_cn30xx cn63xxp1;
1245 	struct cvmx_fpa_int_sum_cn61xx cn66xx;
1246 	struct cvmx_fpa_int_sum_s cn68xx;
1247 	struct cvmx_fpa_int_sum_s cn68xxp1;
1248 	struct cvmx_fpa_int_sum_cn61xx cn70xx;
1249 	struct cvmx_fpa_int_sum_cn61xx cn70xxp1;
1250 	struct cvmx_fpa_int_sum_cn61xx cnf71xx;
1251 };
1252 
1253 typedef union cvmx_fpa_int_sum cvmx_fpa_int_sum_t;
1254 
1255 /**
1256  * cvmx_fpa_packet_threshold
1257  *
1258  * When the value of FPA_QUE0_AVAILABLE[QUE_SIZ] is Less than the value of this register a low
1259  * pool count signal is sent to the
1260  * PCIe packet instruction engine (to make it stop reading instructions) and to the Packet-
1261  * Arbiter informing it to not give grants
1262  * to packets MAC with the exception of the PCIe MAC.
1263  */
1264 union cvmx_fpa_packet_threshold {
1265 	u64 u64;
1266 	struct cvmx_fpa_packet_threshold_s {
1267 		u64 reserved_32_63 : 32;
1268 		u64 thresh : 32;
1269 	} s;
1270 	struct cvmx_fpa_packet_threshold_s cn61xx;
1271 	struct cvmx_fpa_packet_threshold_s cn63xx;
1272 	struct cvmx_fpa_packet_threshold_s cn66xx;
1273 	struct cvmx_fpa_packet_threshold_s cn68xx;
1274 	struct cvmx_fpa_packet_threshold_s cn68xxp1;
1275 	struct cvmx_fpa_packet_threshold_s cn70xx;
1276 	struct cvmx_fpa_packet_threshold_s cn70xxp1;
1277 	struct cvmx_fpa_packet_threshold_s cnf71xx;
1278 };
1279 
1280 typedef union cvmx_fpa_packet_threshold cvmx_fpa_packet_threshold_t;
1281 
1282 /**
1283  * cvmx_fpa_pool#_available
1284  */
1285 union cvmx_fpa_poolx_available {
1286 	u64 u64;
1287 	struct cvmx_fpa_poolx_available_s {
1288 		u64 reserved_36_63 : 28;
1289 		u64 count : 36;
1290 	} s;
1291 	struct cvmx_fpa_poolx_available_s cn73xx;
1292 	struct cvmx_fpa_poolx_available_s cn78xx;
1293 	struct cvmx_fpa_poolx_available_s cn78xxp1;
1294 	struct cvmx_fpa_poolx_available_s cnf75xx;
1295 };
1296 
1297 typedef union cvmx_fpa_poolx_available cvmx_fpa_poolx_available_t;
1298 
1299 /**
1300  * cvmx_fpa_pool#_cfg
1301  */
1302 union cvmx_fpa_poolx_cfg {
1303 	u64 u64;
1304 	struct cvmx_fpa_poolx_cfg_s {
1305 		u64 reserved_43_63 : 21;
1306 		u64 buf_size : 11;
1307 		u64 reserved_31_31 : 1;
1308 		u64 buf_offset : 15;
1309 		u64 reserved_5_15 : 11;
1310 		u64 l_type : 2;
1311 		u64 s_type : 1;
1312 		u64 nat_align : 1;
1313 		u64 ena : 1;
1314 	} s;
1315 	struct cvmx_fpa_poolx_cfg_s cn73xx;
1316 	struct cvmx_fpa_poolx_cfg_s cn78xx;
1317 	struct cvmx_fpa_poolx_cfg_s cn78xxp1;
1318 	struct cvmx_fpa_poolx_cfg_s cnf75xx;
1319 };
1320 
1321 typedef union cvmx_fpa_poolx_cfg cvmx_fpa_poolx_cfg_t;
1322 
1323 /**
1324  * cvmx_fpa_pool#_end_addr
1325  *
1326  * Pointers sent to this pool after alignment must be equal to or less than this address.
1327  *
1328  */
1329 union cvmx_fpa_poolx_end_addr {
1330 	u64 u64;
1331 	struct cvmx_fpa_poolx_end_addr_s {
1332 		u64 reserved_0_63 : 64;
1333 	} s;
1334 	struct cvmx_fpa_poolx_end_addr_cn61xx {
1335 		u64 reserved_33_63 : 31;
1336 		u64 addr : 33;
1337 	} cn61xx;
1338 	struct cvmx_fpa_poolx_end_addr_cn61xx cn66xx;
1339 	struct cvmx_fpa_poolx_end_addr_cn61xx cn68xx;
1340 	struct cvmx_fpa_poolx_end_addr_cn61xx cn68xxp1;
1341 	struct cvmx_fpa_poolx_end_addr_cn61xx cn70xx;
1342 	struct cvmx_fpa_poolx_end_addr_cn61xx cn70xxp1;
1343 	struct cvmx_fpa_poolx_end_addr_cn73xx {
1344 		u64 reserved_42_63 : 22;
1345 		u64 addr : 35;
1346 		u64 reserved_0_6 : 7;
1347 	} cn73xx;
1348 	struct cvmx_fpa_poolx_end_addr_cn73xx cn78xx;
1349 	struct cvmx_fpa_poolx_end_addr_cn73xx cn78xxp1;
1350 	struct cvmx_fpa_poolx_end_addr_cn61xx cnf71xx;
1351 	struct cvmx_fpa_poolx_end_addr_cn73xx cnf75xx;
1352 };
1353 
1354 typedef union cvmx_fpa_poolx_end_addr cvmx_fpa_poolx_end_addr_t;
1355 
1356 /**
1357  * cvmx_fpa_pool#_fpf_marks
1358  *
1359  * The low watermark register that determines when we read free pages from L2C.
1360  *
1361  */
1362 union cvmx_fpa_poolx_fpf_marks {
1363 	u64 u64;
1364 	struct cvmx_fpa_poolx_fpf_marks_s {
1365 		u64 reserved_27_63 : 37;
1366 		u64 fpf_rd : 11;
1367 		u64 reserved_11_15 : 5;
1368 		u64 fpf_level : 11;
1369 	} s;
1370 	struct cvmx_fpa_poolx_fpf_marks_s cn73xx;
1371 	struct cvmx_fpa_poolx_fpf_marks_s cn78xx;
1372 	struct cvmx_fpa_poolx_fpf_marks_s cn78xxp1;
1373 	struct cvmx_fpa_poolx_fpf_marks_s cnf75xx;
1374 };
1375 
1376 typedef union cvmx_fpa_poolx_fpf_marks cvmx_fpa_poolx_fpf_marks_t;
1377 
1378 /**
1379  * cvmx_fpa_pool#_int
1380  *
1381  * This register indicates pool interrupts.
1382  *
1383  */
1384 union cvmx_fpa_poolx_int {
1385 	u64 u64;
1386 	struct cvmx_fpa_poolx_int_s {
1387 		u64 reserved_4_63 : 60;
1388 		u64 thresh : 1;
1389 		u64 range : 1;
1390 		u64 crcerr : 1;
1391 		u64 ovfls : 1;
1392 	} s;
1393 	struct cvmx_fpa_poolx_int_s cn73xx;
1394 	struct cvmx_fpa_poolx_int_s cn78xx;
1395 	struct cvmx_fpa_poolx_int_s cn78xxp1;
1396 	struct cvmx_fpa_poolx_int_s cnf75xx;
1397 };
1398 
1399 typedef union cvmx_fpa_poolx_int cvmx_fpa_poolx_int_t;
1400 
1401 /**
1402  * cvmx_fpa_pool#_op_pc
1403  */
1404 union cvmx_fpa_poolx_op_pc {
1405 	u64 u64;
1406 	struct cvmx_fpa_poolx_op_pc_s {
1407 		u64 count : 64;
1408 	} s;
1409 	struct cvmx_fpa_poolx_op_pc_s cn73xx;
1410 	struct cvmx_fpa_poolx_op_pc_s cn78xx;
1411 	struct cvmx_fpa_poolx_op_pc_s cn78xxp1;
1412 	struct cvmx_fpa_poolx_op_pc_s cnf75xx;
1413 };
1414 
1415 typedef union cvmx_fpa_poolx_op_pc cvmx_fpa_poolx_op_pc_t;
1416 
1417 /**
1418  * cvmx_fpa_pool#_stack_addr
1419  */
1420 union cvmx_fpa_poolx_stack_addr {
1421 	u64 u64;
1422 	struct cvmx_fpa_poolx_stack_addr_s {
1423 		u64 reserved_42_63 : 22;
1424 		u64 addr : 35;
1425 		u64 reserved_0_6 : 7;
1426 	} s;
1427 	struct cvmx_fpa_poolx_stack_addr_s cn73xx;
1428 	struct cvmx_fpa_poolx_stack_addr_s cn78xx;
1429 	struct cvmx_fpa_poolx_stack_addr_s cn78xxp1;
1430 	struct cvmx_fpa_poolx_stack_addr_s cnf75xx;
1431 };
1432 
1433 typedef union cvmx_fpa_poolx_stack_addr cvmx_fpa_poolx_stack_addr_t;
1434 
1435 /**
1436  * cvmx_fpa_pool#_stack_base
1437  */
1438 union cvmx_fpa_poolx_stack_base {
1439 	u64 u64;
1440 	struct cvmx_fpa_poolx_stack_base_s {
1441 		u64 reserved_42_63 : 22;
1442 		u64 addr : 35;
1443 		u64 reserved_0_6 : 7;
1444 	} s;
1445 	struct cvmx_fpa_poolx_stack_base_s cn73xx;
1446 	struct cvmx_fpa_poolx_stack_base_s cn78xx;
1447 	struct cvmx_fpa_poolx_stack_base_s cn78xxp1;
1448 	struct cvmx_fpa_poolx_stack_base_s cnf75xx;
1449 };
1450 
1451 typedef union cvmx_fpa_poolx_stack_base cvmx_fpa_poolx_stack_base_t;
1452 
1453 /**
1454  * cvmx_fpa_pool#_stack_end
1455  */
1456 union cvmx_fpa_poolx_stack_end {
1457 	u64 u64;
1458 	struct cvmx_fpa_poolx_stack_end_s {
1459 		u64 reserved_42_63 : 22;
1460 		u64 addr : 35;
1461 		u64 reserved_0_6 : 7;
1462 	} s;
1463 	struct cvmx_fpa_poolx_stack_end_s cn73xx;
1464 	struct cvmx_fpa_poolx_stack_end_s cn78xx;
1465 	struct cvmx_fpa_poolx_stack_end_s cn78xxp1;
1466 	struct cvmx_fpa_poolx_stack_end_s cnf75xx;
1467 };
1468 
1469 typedef union cvmx_fpa_poolx_stack_end cvmx_fpa_poolx_stack_end_t;
1470 
1471 /**
1472  * cvmx_fpa_pool#_start_addr
1473  *
1474  * Pointers sent to this pool after alignment must be equal to or greater than this address.
1475  *
1476  */
1477 union cvmx_fpa_poolx_start_addr {
1478 	u64 u64;
1479 	struct cvmx_fpa_poolx_start_addr_s {
1480 		u64 reserved_0_63 : 64;
1481 	} s;
1482 	struct cvmx_fpa_poolx_start_addr_cn61xx {
1483 		u64 reserved_33_63 : 31;
1484 		u64 addr : 33;
1485 	} cn61xx;
1486 	struct cvmx_fpa_poolx_start_addr_cn61xx cn66xx;
1487 	struct cvmx_fpa_poolx_start_addr_cn61xx cn68xx;
1488 	struct cvmx_fpa_poolx_start_addr_cn61xx cn68xxp1;
1489 	struct cvmx_fpa_poolx_start_addr_cn61xx cn70xx;
1490 	struct cvmx_fpa_poolx_start_addr_cn61xx cn70xxp1;
1491 	struct cvmx_fpa_poolx_start_addr_cn73xx {
1492 		u64 reserved_42_63 : 22;
1493 		u64 addr : 35;
1494 		u64 reserved_0_6 : 7;
1495 	} cn73xx;
1496 	struct cvmx_fpa_poolx_start_addr_cn73xx cn78xx;
1497 	struct cvmx_fpa_poolx_start_addr_cn73xx cn78xxp1;
1498 	struct cvmx_fpa_poolx_start_addr_cn61xx cnf71xx;
1499 	struct cvmx_fpa_poolx_start_addr_cn73xx cnf75xx;
1500 };
1501 
1502 typedef union cvmx_fpa_poolx_start_addr cvmx_fpa_poolx_start_addr_t;
1503 
1504 /**
1505  * cvmx_fpa_pool#_threshold
1506  *
1507  * FPA_POOLX_THRESHOLD = FPA's Pool 0-7 Threshold
1508  * When the value of FPA_QUEX_AVAILABLE is equal to FPA_POOLX_THRESHOLD[THRESH] when a pointer is
1509  * allocated
1510  * or deallocated, set interrupt FPA_INT_SUM[POOLXTH].
1511  */
1512 union cvmx_fpa_poolx_threshold {
1513 	u64 u64;
1514 	struct cvmx_fpa_poolx_threshold_s {
1515 		u64 reserved_36_63 : 28;
1516 		u64 thresh : 36;
1517 	} s;
1518 	struct cvmx_fpa_poolx_threshold_cn61xx {
1519 		u64 reserved_29_63 : 35;
1520 		u64 thresh : 29;
1521 	} cn61xx;
1522 	struct cvmx_fpa_poolx_threshold_cn61xx cn63xx;
1523 	struct cvmx_fpa_poolx_threshold_cn61xx cn66xx;
1524 	struct cvmx_fpa_poolx_threshold_cn68xx {
1525 		u64 reserved_32_63 : 32;
1526 		u64 thresh : 32;
1527 	} cn68xx;
1528 	struct cvmx_fpa_poolx_threshold_cn68xx cn68xxp1;
1529 	struct cvmx_fpa_poolx_threshold_cn61xx cn70xx;
1530 	struct cvmx_fpa_poolx_threshold_cn61xx cn70xxp1;
1531 	struct cvmx_fpa_poolx_threshold_s cn73xx;
1532 	struct cvmx_fpa_poolx_threshold_s cn78xx;
1533 	struct cvmx_fpa_poolx_threshold_s cn78xxp1;
1534 	struct cvmx_fpa_poolx_threshold_cn61xx cnf71xx;
1535 	struct cvmx_fpa_poolx_threshold_s cnf75xx;
1536 };
1537 
1538 typedef union cvmx_fpa_poolx_threshold cvmx_fpa_poolx_threshold_t;
1539 
1540 /**
1541  * cvmx_fpa_que#_available
1542  *
1543  * FPA_QUEX_PAGES_AVAILABLE = FPA's Queue 0-7 Free Page Available Register
1544  * The number of page pointers that are available in the FPA and local DRAM.
1545  */
1546 union cvmx_fpa_quex_available {
1547 	u64 u64;
1548 	struct cvmx_fpa_quex_available_s {
1549 		u64 reserved_32_63 : 32;
1550 		u64 que_siz : 32;
1551 	} s;
1552 	struct cvmx_fpa_quex_available_cn30xx {
1553 		u64 reserved_29_63 : 35;
1554 		u64 que_siz : 29;
1555 	} cn30xx;
1556 	struct cvmx_fpa_quex_available_cn30xx cn31xx;
1557 	struct cvmx_fpa_quex_available_cn30xx cn38xx;
1558 	struct cvmx_fpa_quex_available_cn30xx cn38xxp2;
1559 	struct cvmx_fpa_quex_available_cn30xx cn50xx;
1560 	struct cvmx_fpa_quex_available_cn30xx cn52xx;
1561 	struct cvmx_fpa_quex_available_cn30xx cn52xxp1;
1562 	struct cvmx_fpa_quex_available_cn30xx cn56xx;
1563 	struct cvmx_fpa_quex_available_cn30xx cn56xxp1;
1564 	struct cvmx_fpa_quex_available_cn30xx cn58xx;
1565 	struct cvmx_fpa_quex_available_cn30xx cn58xxp1;
1566 	struct cvmx_fpa_quex_available_cn30xx cn61xx;
1567 	struct cvmx_fpa_quex_available_cn30xx cn63xx;
1568 	struct cvmx_fpa_quex_available_cn30xx cn63xxp1;
1569 	struct cvmx_fpa_quex_available_cn30xx cn66xx;
1570 	struct cvmx_fpa_quex_available_s cn68xx;
1571 	struct cvmx_fpa_quex_available_s cn68xxp1;
1572 	struct cvmx_fpa_quex_available_cn30xx cn70xx;
1573 	struct cvmx_fpa_quex_available_cn30xx cn70xxp1;
1574 	struct cvmx_fpa_quex_available_cn30xx cnf71xx;
1575 };
1576 
1577 typedef union cvmx_fpa_quex_available cvmx_fpa_quex_available_t;
1578 
1579 /**
1580  * cvmx_fpa_que#_page_index
1581  *
1582  * The present index page for queue 0 of the FPA.
1583  * This number reflects the number of pages of pointers that have been written to memory
1584  * for this queue.
1585  */
1586 union cvmx_fpa_quex_page_index {
1587 	u64 u64;
1588 	struct cvmx_fpa_quex_page_index_s {
1589 		u64 reserved_25_63 : 39;
1590 		u64 pg_num : 25;
1591 	} s;
1592 	struct cvmx_fpa_quex_page_index_s cn30xx;
1593 	struct cvmx_fpa_quex_page_index_s cn31xx;
1594 	struct cvmx_fpa_quex_page_index_s cn38xx;
1595 	struct cvmx_fpa_quex_page_index_s cn38xxp2;
1596 	struct cvmx_fpa_quex_page_index_s cn50xx;
1597 	struct cvmx_fpa_quex_page_index_s cn52xx;
1598 	struct cvmx_fpa_quex_page_index_s cn52xxp1;
1599 	struct cvmx_fpa_quex_page_index_s cn56xx;
1600 	struct cvmx_fpa_quex_page_index_s cn56xxp1;
1601 	struct cvmx_fpa_quex_page_index_s cn58xx;
1602 	struct cvmx_fpa_quex_page_index_s cn58xxp1;
1603 	struct cvmx_fpa_quex_page_index_s cn61xx;
1604 	struct cvmx_fpa_quex_page_index_s cn63xx;
1605 	struct cvmx_fpa_quex_page_index_s cn63xxp1;
1606 	struct cvmx_fpa_quex_page_index_s cn66xx;
1607 	struct cvmx_fpa_quex_page_index_s cn68xx;
1608 	struct cvmx_fpa_quex_page_index_s cn68xxp1;
1609 	struct cvmx_fpa_quex_page_index_s cn70xx;
1610 	struct cvmx_fpa_quex_page_index_s cn70xxp1;
1611 	struct cvmx_fpa_quex_page_index_s cnf71xx;
1612 };
1613 
1614 typedef union cvmx_fpa_quex_page_index cvmx_fpa_quex_page_index_t;
1615 
1616 /**
1617  * cvmx_fpa_que8_page_index
1618  *
1619  * FPA_QUE8_PAGE_INDEX = FPA's Queue7 Page Index
1620  *
1621  * The present index page for queue 7 of the FPA.
1622  * This number reflects the number of pages of pointers that have been written to memory
1623  * for this queue.
1624  * Because the address space is 38-bits the number of 128 byte pages could cause this register value to wrap.
1625  */
1626 union cvmx_fpa_que8_page_index {
1627 	u64 u64;
1628 	struct cvmx_fpa_que8_page_index_s {
1629 		u64 reserved_25_63 : 39;
1630 		u64 pg_num : 25;
1631 	} s;
1632 	struct cvmx_fpa_que8_page_index_s cn68xx;
1633 	struct cvmx_fpa_que8_page_index_s cn68xxp1;
1634 };
1635 
1636 typedef union cvmx_fpa_que8_page_index cvmx_fpa_que8_page_index_t;
1637 
1638 /**
1639  * cvmx_fpa_que_act
1640  *
1641  * "When a INT_SUM[PERR#] occurs this will be latched with the value read from L2C.
1642  * This is latched on the first error and will not latch again unitl all errors are cleared."
1643  */
1644 union cvmx_fpa_que_act {
1645 	u64 u64;
1646 	struct cvmx_fpa_que_act_s {
1647 		u64 reserved_29_63 : 35;
1648 		u64 act_que : 3;
1649 		u64 act_indx : 26;
1650 	} s;
1651 	struct cvmx_fpa_que_act_s cn30xx;
1652 	struct cvmx_fpa_que_act_s cn31xx;
1653 	struct cvmx_fpa_que_act_s cn38xx;
1654 	struct cvmx_fpa_que_act_s cn38xxp2;
1655 	struct cvmx_fpa_que_act_s cn50xx;
1656 	struct cvmx_fpa_que_act_s cn52xx;
1657 	struct cvmx_fpa_que_act_s cn52xxp1;
1658 	struct cvmx_fpa_que_act_s cn56xx;
1659 	struct cvmx_fpa_que_act_s cn56xxp1;
1660 	struct cvmx_fpa_que_act_s cn58xx;
1661 	struct cvmx_fpa_que_act_s cn58xxp1;
1662 	struct cvmx_fpa_que_act_s cn61xx;
1663 	struct cvmx_fpa_que_act_s cn63xx;
1664 	struct cvmx_fpa_que_act_s cn63xxp1;
1665 	struct cvmx_fpa_que_act_s cn66xx;
1666 	struct cvmx_fpa_que_act_s cn68xx;
1667 	struct cvmx_fpa_que_act_s cn68xxp1;
1668 	struct cvmx_fpa_que_act_s cn70xx;
1669 	struct cvmx_fpa_que_act_s cn70xxp1;
1670 	struct cvmx_fpa_que_act_s cnf71xx;
1671 };
1672 
1673 typedef union cvmx_fpa_que_act cvmx_fpa_que_act_t;
1674 
1675 /**
1676  * cvmx_fpa_que_exp
1677  *
1678  * "When a INT_SUM[PERR#] occurs this will be latched with the expected value.
1679  * This is latched on the first error and will not latch again unitl all errors are cleared."
1680  */
1681 union cvmx_fpa_que_exp {
1682 	u64 u64;
1683 	struct cvmx_fpa_que_exp_s {
1684 		u64 reserved_29_63 : 35;
1685 		u64 exp_que : 3;
1686 		u64 exp_indx : 26;
1687 	} s;
1688 	struct cvmx_fpa_que_exp_s cn30xx;
1689 	struct cvmx_fpa_que_exp_s cn31xx;
1690 	struct cvmx_fpa_que_exp_s cn38xx;
1691 	struct cvmx_fpa_que_exp_s cn38xxp2;
1692 	struct cvmx_fpa_que_exp_s cn50xx;
1693 	struct cvmx_fpa_que_exp_s cn52xx;
1694 	struct cvmx_fpa_que_exp_s cn52xxp1;
1695 	struct cvmx_fpa_que_exp_s cn56xx;
1696 	struct cvmx_fpa_que_exp_s cn56xxp1;
1697 	struct cvmx_fpa_que_exp_s cn58xx;
1698 	struct cvmx_fpa_que_exp_s cn58xxp1;
1699 	struct cvmx_fpa_que_exp_s cn61xx;
1700 	struct cvmx_fpa_que_exp_s cn63xx;
1701 	struct cvmx_fpa_que_exp_s cn63xxp1;
1702 	struct cvmx_fpa_que_exp_s cn66xx;
1703 	struct cvmx_fpa_que_exp_s cn68xx;
1704 	struct cvmx_fpa_que_exp_s cn68xxp1;
1705 	struct cvmx_fpa_que_exp_s cn70xx;
1706 	struct cvmx_fpa_que_exp_s cn70xxp1;
1707 	struct cvmx_fpa_que_exp_s cnf71xx;
1708 };
1709 
1710 typedef union cvmx_fpa_que_exp cvmx_fpa_que_exp_t;
1711 
1712 /**
1713  * cvmx_fpa_rd_latency_pc
1714  */
1715 union cvmx_fpa_rd_latency_pc {
1716 	u64 u64;
1717 	struct cvmx_fpa_rd_latency_pc_s {
1718 		u64 count : 64;
1719 	} s;
1720 	struct cvmx_fpa_rd_latency_pc_s cn73xx;
1721 	struct cvmx_fpa_rd_latency_pc_s cn78xx;
1722 	struct cvmx_fpa_rd_latency_pc_s cn78xxp1;
1723 	struct cvmx_fpa_rd_latency_pc_s cnf75xx;
1724 };
1725 
1726 typedef union cvmx_fpa_rd_latency_pc cvmx_fpa_rd_latency_pc_t;
1727 
1728 /**
1729  * cvmx_fpa_rd_req_pc
1730  */
1731 union cvmx_fpa_rd_req_pc {
1732 	u64 u64;
1733 	struct cvmx_fpa_rd_req_pc_s {
1734 		u64 count : 64;
1735 	} s;
1736 	struct cvmx_fpa_rd_req_pc_s cn73xx;
1737 	struct cvmx_fpa_rd_req_pc_s cn78xx;
1738 	struct cvmx_fpa_rd_req_pc_s cn78xxp1;
1739 	struct cvmx_fpa_rd_req_pc_s cnf75xx;
1740 };
1741 
1742 typedef union cvmx_fpa_rd_req_pc cvmx_fpa_rd_req_pc_t;
1743 
1744 /**
1745  * cvmx_fpa_red_delay
1746  */
1747 union cvmx_fpa_red_delay {
1748 	u64 u64;
1749 	struct cvmx_fpa_red_delay_s {
1750 		u64 reserved_14_63 : 50;
1751 		u64 avg_dly : 14;
1752 	} s;
1753 	struct cvmx_fpa_red_delay_s cn73xx;
1754 	struct cvmx_fpa_red_delay_s cn78xx;
1755 	struct cvmx_fpa_red_delay_s cn78xxp1;
1756 	struct cvmx_fpa_red_delay_s cnf75xx;
1757 };
1758 
1759 typedef union cvmx_fpa_red_delay cvmx_fpa_red_delay_t;
1760 
1761 /**
1762  * cvmx_fpa_sft_rst
1763  *
1764  * Allows soft reset.
1765  *
1766  */
1767 union cvmx_fpa_sft_rst {
1768 	u64 u64;
1769 	struct cvmx_fpa_sft_rst_s {
1770 		u64 busy : 1;
1771 		u64 reserved_1_62 : 62;
1772 		u64 rst : 1;
1773 	} s;
1774 	struct cvmx_fpa_sft_rst_s cn73xx;
1775 	struct cvmx_fpa_sft_rst_s cn78xx;
1776 	struct cvmx_fpa_sft_rst_s cn78xxp1;
1777 	struct cvmx_fpa_sft_rst_s cnf75xx;
1778 };
1779 
1780 typedef union cvmx_fpa_sft_rst cvmx_fpa_sft_rst_t;
1781 
1782 /**
1783  * cvmx_fpa_wart_ctl
1784  *
1785  * FPA_WART_CTL = FPA's WART Control
1786  *
1787  * Control and status for the WART block.
1788  */
1789 union cvmx_fpa_wart_ctl {
1790 	u64 u64;
1791 	struct cvmx_fpa_wart_ctl_s {
1792 		u64 reserved_16_63 : 48;
1793 		u64 ctl : 16;
1794 	} s;
1795 	struct cvmx_fpa_wart_ctl_s cn30xx;
1796 	struct cvmx_fpa_wart_ctl_s cn31xx;
1797 	struct cvmx_fpa_wart_ctl_s cn38xx;
1798 	struct cvmx_fpa_wart_ctl_s cn38xxp2;
1799 	struct cvmx_fpa_wart_ctl_s cn50xx;
1800 	struct cvmx_fpa_wart_ctl_s cn52xx;
1801 	struct cvmx_fpa_wart_ctl_s cn52xxp1;
1802 	struct cvmx_fpa_wart_ctl_s cn56xx;
1803 	struct cvmx_fpa_wart_ctl_s cn56xxp1;
1804 	struct cvmx_fpa_wart_ctl_s cn58xx;
1805 	struct cvmx_fpa_wart_ctl_s cn58xxp1;
1806 };
1807 
1808 typedef union cvmx_fpa_wart_ctl cvmx_fpa_wart_ctl_t;
1809 
1810 /**
1811  * cvmx_fpa_wart_status
1812  *
1813  * FPA_WART_STATUS = FPA's WART Status
1814  *
1815  * Control and status for the WART block.
1816  */
1817 union cvmx_fpa_wart_status {
1818 	u64 u64;
1819 	struct cvmx_fpa_wart_status_s {
1820 		u64 reserved_32_63 : 32;
1821 		u64 status : 32;
1822 	} s;
1823 	struct cvmx_fpa_wart_status_s cn30xx;
1824 	struct cvmx_fpa_wart_status_s cn31xx;
1825 	struct cvmx_fpa_wart_status_s cn38xx;
1826 	struct cvmx_fpa_wart_status_s cn38xxp2;
1827 	struct cvmx_fpa_wart_status_s cn50xx;
1828 	struct cvmx_fpa_wart_status_s cn52xx;
1829 	struct cvmx_fpa_wart_status_s cn52xxp1;
1830 	struct cvmx_fpa_wart_status_s cn56xx;
1831 	struct cvmx_fpa_wart_status_s cn56xxp1;
1832 	struct cvmx_fpa_wart_status_s cn58xx;
1833 	struct cvmx_fpa_wart_status_s cn58xxp1;
1834 };
1835 
1836 typedef union cvmx_fpa_wart_status cvmx_fpa_wart_status_t;
1837 
1838 /**
1839  * cvmx_fpa_wqe_threshold
1840  *
1841  * "When the value of FPA_QUE#_AVAILABLE[QUE_SIZ] (\# is determined by the value of
1842  * IPD_WQE_FPA_QUEUE) is Less than the value of this
1843  * register a low pool count signal is sent to the PCIe packet instruction engine (to make it
1844  * stop reading instructions) and to the
1845  * Packet-Arbiter informing it to not give grants to packets MAC with the exception of the PCIe
1846  * MAC."
1847  */
1848 union cvmx_fpa_wqe_threshold {
1849 	u64 u64;
1850 	struct cvmx_fpa_wqe_threshold_s {
1851 		u64 reserved_32_63 : 32;
1852 		u64 thresh : 32;
1853 	} s;
1854 	struct cvmx_fpa_wqe_threshold_s cn61xx;
1855 	struct cvmx_fpa_wqe_threshold_s cn63xx;
1856 	struct cvmx_fpa_wqe_threshold_s cn66xx;
1857 	struct cvmx_fpa_wqe_threshold_s cn68xx;
1858 	struct cvmx_fpa_wqe_threshold_s cn68xxp1;
1859 	struct cvmx_fpa_wqe_threshold_s cn70xx;
1860 	struct cvmx_fpa_wqe_threshold_s cn70xxp1;
1861 	struct cvmx_fpa_wqe_threshold_s cnf71xx;
1862 };
1863 
1864 typedef union cvmx_fpa_wqe_threshold cvmx_fpa_wqe_threshold_t;
1865 
1866 #endif
1867