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 pemx.
7 */
8
9#ifndef __CVMX_PEMX_DEFS_H__
10#define __CVMX_PEMX_DEFS_H__
11
12static inline u64 CVMX_PEMX_BAR1_INDEXX(unsigned long offset, unsigned long block_id)
13{
14	switch (cvmx_get_octeon_family()) {
15	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
16		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
17	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
18		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
19	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
20		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
21			return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
22		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
23			return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
24	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
25		return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
26	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
27	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
28	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
29	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
30	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
31		return 0x00011800C00000A8ull + ((offset) + (block_id) * 0x200000ull) * 8;
32	}
33	return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
34}
35
36static inline u64 CVMX_PEMX_BAR2_MASK(unsigned long offset)
37{
38	switch (cvmx_get_octeon_family()) {
39	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
40		return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
41	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
42		return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
43	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
44		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
45			return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
46		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
47			return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
48	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
49		return 0x00011800C10000B0ull + (offset) * 0x1000000ull - 16777216 * 1;
50	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
51	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
52	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
53	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
54		return 0x00011800C0000130ull + (offset) * 0x1000000ull;
55	}
56	return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
57}
58
59static inline u64 CVMX_PEMX_BAR_CTL(unsigned long offset)
60{
61	switch (cvmx_get_octeon_family()) {
62	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
63		return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
64	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
65		return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
66	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
67		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
68			return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
69		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
70			return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
71	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
72		return 0x00011800C10000A8ull + (offset) * 0x1000000ull - 16777216 * 1;
73	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
74	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
75	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
76	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
77	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
78		return 0x00011800C0000128ull + (offset) * 0x1000000ull;
79	}
80	return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
81}
82
83static inline u64 CVMX_PEMX_BIST_STATUS(unsigned long offset)
84{
85	switch (cvmx_get_octeon_family()) {
86	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
87	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
88	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
89	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
90	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
91		return 0x00011800C0000018ull + (offset) * 0x1000000ull;
92	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
93		return 0x00011800C0000018ull + (offset) * 0x1000000ull;
94	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
95		return 0x00011800C0000440ull + (offset) * 0x1000000ull;
96	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
97		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
98			return 0x00011800C0000440ull + (offset) * 0x1000000ull;
99		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
100			return 0x00011800C0000440ull + (offset) * 0x1000000ull;
101	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
102		return 0x00011800C1000440ull + (offset) * 0x1000000ull - 16777216 * 1;
103	}
104	return 0x00011800C0000440ull + (offset) * 0x1000000ull;
105}
106
107static inline u64 CVMX_PEMX_BIST_STATUS2(unsigned long offset)
108{
109	switch (cvmx_get_octeon_family()) {
110	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
111	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
112	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
113	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
114	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
115		return 0x00011800C0000420ull + (offset) * 0x1000000ull;
116	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
117		return 0x00011800C0000440ull + (offset) * 0x1000000ull;
118	}
119	return 0x00011800C0000420ull + (offset) * 0x1000000ull;
120}
121
122#define CVMX_PEMX_CFG(offset)		(0x00011800C0000410ull + ((offset) & 3) * 0x1000000ull)
123#define CVMX_PEMX_CFG_RD(offset)	(0x00011800C0000030ull + ((offset) & 3) * 0x1000000ull)
124#define CVMX_PEMX_CFG_WR(offset)	(0x00011800C0000028ull + ((offset) & 3) * 0x1000000ull)
125#define CVMX_PEMX_CLK_EN(offset)	(0x00011800C0000400ull + ((offset) & 3) * 0x1000000ull)
126#define CVMX_PEMX_CPL_LUT_VALID(offset) (0x00011800C0000098ull + ((offset) & 3) * 0x1000000ull)
127#define CVMX_PEMX_CTL_STATUS(offset)	(0x00011800C0000000ull + ((offset) & 3) * 0x1000000ull)
128#define CVMX_PEMX_CTL_STATUS2(offset)	(0x00011800C0000008ull + ((offset) & 3) * 0x1000000ull)
129static inline u64 CVMX_PEMX_DBG_INFO(unsigned long offset)
130{
131	switch (cvmx_get_octeon_family()) {
132	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
133		return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
134	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
135		return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
136	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
137		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
138			return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
139		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
140			return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
141	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
142		return 0x00011800C10000D0ull + (offset) * 0x1000000ull - 16777216 * 1;
143	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
144	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
145	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
146	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
147	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
148		return 0x00011800C0000008ull + (offset) * 0x1000000ull;
149	}
150	return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
151}
152
153#define CVMX_PEMX_DBG_INFO_EN(offset) (0x00011800C00000A0ull + ((offset) & 3) * 0x1000000ull)
154#define CVMX_PEMX_DIAG_STATUS(offset) (0x00011800C0000020ull + ((offset) & 3) * 0x1000000ull)
155static inline u64 CVMX_PEMX_ECC_ENA(unsigned long offset)
156{
157	switch (cvmx_get_octeon_family()) {
158	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
159		return 0x00011800C0000448ull + (offset) * 0x1000000ull;
160	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
161		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
162			return 0x00011800C0000448ull + (offset) * 0x1000000ull;
163		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
164			return 0x00011800C0000448ull + (offset) * 0x1000000ull;
165	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
166		return 0x00011800C1000448ull + (offset) * 0x1000000ull - 16777216 * 1;
167	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
168		return 0x00011800C00000C0ull + (offset) * 0x1000000ull;
169	}
170	return 0x00011800C0000448ull + (offset) * 0x1000000ull;
171}
172
173static inline u64 CVMX_PEMX_ECC_SYND_CTRL(unsigned long offset)
174{
175	switch (cvmx_get_octeon_family()) {
176	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
177		return 0x00011800C0000450ull + (offset) * 0x1000000ull;
178	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
179		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
180			return 0x00011800C0000450ull + (offset) * 0x1000000ull;
181		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
182			return 0x00011800C0000450ull + (offset) * 0x1000000ull;
183	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
184		return 0x00011800C1000450ull + (offset) * 0x1000000ull - 16777216 * 1;
185	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
186		return 0x00011800C00000C8ull + (offset) * 0x1000000ull;
187	}
188	return 0x00011800C0000450ull + (offset) * 0x1000000ull;
189}
190
191#define CVMX_PEMX_ECO(offset)		     (0x00011800C0000010ull + ((offset) & 3) * 0x1000000ull)
192#define CVMX_PEMX_FLR_GLBLCNT_CTL(offset)    (0x00011800C0000210ull + ((offset) & 3) * 0x1000000ull)
193#define CVMX_PEMX_FLR_PF0_VF_STOPREQ(offset) (0x00011800C0000220ull + ((offset) & 3) * 0x1000000ull)
194#define CVMX_PEMX_FLR_PF_STOPREQ(offset)     (0x00011800C0000218ull + ((offset) & 3) * 0x1000000ull)
195#define CVMX_PEMX_FLR_STOPREQ_CTL(offset)    (0x00011800C0000238ull + ((offset) & 3) * 0x1000000ull)
196#define CVMX_PEMX_FLR_ZOMBIE_CTL(offset)     (0x00011800C0000230ull + ((offset) & 3) * 0x1000000ull)
197static inline u64 CVMX_PEMX_INB_READ_CREDITS(unsigned long offset)
198{
199	switch (cvmx_get_octeon_family()) {
200	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
201		return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
202	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
203		return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
204	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
205		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
206			return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
207		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
208			return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
209	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
210		return 0x00011800C10000B8ull + (offset) * 0x1000000ull - 16777216 * 1;
211	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
212	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
213	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
214	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
215		return 0x00011800C0000138ull + (offset) * 0x1000000ull;
216	}
217	return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
218}
219
220static inline u64 CVMX_PEMX_INT_ENB(unsigned long offset)
221{
222	switch (cvmx_get_octeon_family()) {
223	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
224	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
225	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
226	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
227	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
228		return 0x00011800C0000410ull + (offset) * 0x1000000ull;
229	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
230		return 0x00011800C0000430ull + (offset) * 0x1000000ull;
231	}
232	return 0x00011800C0000410ull + (offset) * 0x1000000ull;
233}
234
235static inline u64 CVMX_PEMX_INT_ENB_INT(unsigned long offset)
236{
237	switch (cvmx_get_octeon_family()) {
238	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
239	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
240	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
241	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
242	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
243		return 0x00011800C0000418ull + (offset) * 0x1000000ull;
244	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
245		return 0x00011800C0000438ull + (offset) * 0x1000000ull;
246	}
247	return 0x00011800C0000418ull + (offset) * 0x1000000ull;
248}
249
250static inline u64 CVMX_PEMX_INT_SUM(unsigned long offset)
251{
252	switch (cvmx_get_octeon_family()) {
253	case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
254		return 0x00011800C0000428ull + (offset) * 0x1000000ull;
255	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
256		return 0x00011800C0000428ull + (offset) * 0x1000000ull;
257	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
258		if (OCTEON_IS_MODEL(OCTEON_CN78XX_PASS1_X))
259			return 0x00011800C0000428ull + (offset) * 0x1000000ull;
260		if (OCTEON_IS_MODEL(OCTEON_CN78XX))
261			return 0x00011800C0000428ull + (offset) * 0x1000000ull;
262	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
263		return 0x00011800C1000428ull + (offset) * 0x1000000ull - 16777216 * 1;
264	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
265	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
266	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
267	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
268	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
269		return 0x00011800C0000408ull + (offset) * 0x1000000ull;
270	}
271	return 0x00011800C0000428ull + (offset) * 0x1000000ull;
272}
273
274#define CVMX_PEMX_ON(offset)		 (0x00011800C0000420ull + ((offset) & 3) * 0x1000000ull)
275#define CVMX_PEMX_P2N_BAR0_START(offset) (0x00011800C0000080ull + ((offset) & 3) * 0x1000000ull)
276#define CVMX_PEMX_P2N_BAR1_START(offset) (0x00011800C0000088ull + ((offset) & 3) * 0x1000000ull)
277#define CVMX_PEMX_P2N_BAR2_START(offset) (0x00011800C0000090ull + ((offset) & 3) * 0x1000000ull)
278#define CVMX_PEMX_P2P_BARX_END(offset, block_id)                                                   \
279	(0x00011800C0000048ull + (((offset) & 3) + ((block_id) & 3) * 0x100000ull) * 16)
280#define CVMX_PEMX_P2P_BARX_START(offset, block_id)                                                 \
281	(0x00011800C0000040ull + (((offset) & 3) + ((block_id) & 3) * 0x100000ull) * 16)
282#define CVMX_PEMX_QLM(offset)	      (0x00011800C0000418ull + ((offset) & 3) * 0x1000000ull)
283#define CVMX_PEMX_SPI_CTL(offset)     (0x00011800C0000180ull + ((offset) & 3) * 0x1000000ull)
284#define CVMX_PEMX_SPI_DATA(offset)    (0x00011800C0000188ull + ((offset) & 3) * 0x1000000ull)
285#define CVMX_PEMX_STRAP(offset)	      (0x00011800C0000408ull + ((offset) & 3) * 0x1000000ull)
286#define CVMX_PEMX_TLP_CREDITS(offset) (0x00011800C0000038ull + ((offset) & 3) * 0x1000000ull)
287
288/**
289 * cvmx_pem#_bar1_index#
290 *
291 * This register contains the address index and control bits for access to memory ranges of BAR1.
292 * The index is built from supplied address [25:22].
293 */
294union cvmx_pemx_bar1_indexx {
295	u64 u64;
296	struct cvmx_pemx_bar1_indexx_s {
297		u64 reserved_24_63 : 40;
298		u64 addr_idx : 20;
299		u64 ca : 1;
300		u64 end_swp : 2;
301		u64 addr_v : 1;
302	} s;
303	struct cvmx_pemx_bar1_indexx_cn61xx {
304		u64 reserved_20_63 : 44;
305		u64 addr_idx : 16;
306		u64 ca : 1;
307		u64 end_swp : 2;
308		u64 addr_v : 1;
309	} cn61xx;
310	struct cvmx_pemx_bar1_indexx_cn61xx cn63xx;
311	struct cvmx_pemx_bar1_indexx_cn61xx cn63xxp1;
312	struct cvmx_pemx_bar1_indexx_cn61xx cn66xx;
313	struct cvmx_pemx_bar1_indexx_cn61xx cn68xx;
314	struct cvmx_pemx_bar1_indexx_cn61xx cn68xxp1;
315	struct cvmx_pemx_bar1_indexx_s cn70xx;
316	struct cvmx_pemx_bar1_indexx_s cn70xxp1;
317	struct cvmx_pemx_bar1_indexx_s cn73xx;
318	struct cvmx_pemx_bar1_indexx_s cn78xx;
319	struct cvmx_pemx_bar1_indexx_s cn78xxp1;
320	struct cvmx_pemx_bar1_indexx_cn61xx cnf71xx;
321	struct cvmx_pemx_bar1_indexx_s cnf75xx;
322};
323
324typedef union cvmx_pemx_bar1_indexx cvmx_pemx_bar1_indexx_t;
325
326/**
327 * cvmx_pem#_bar2_mask
328 *
329 * This register contains the mask pattern that is ANDed with the address from the PCIe core for
330 * BAR2 hits. This allows the effective size of RC BAR2 to be shrunk. Must not be changed
331 * from its reset value in EP mode.
332 */
333union cvmx_pemx_bar2_mask {
334	u64 u64;
335	struct cvmx_pemx_bar2_mask_s {
336		u64 reserved_45_63 : 19;
337		u64 mask : 42;
338		u64 reserved_0_2 : 3;
339	} s;
340	struct cvmx_pemx_bar2_mask_cn61xx {
341		u64 reserved_38_63 : 26;
342		u64 mask : 35;
343		u64 reserved_0_2 : 3;
344	} cn61xx;
345	struct cvmx_pemx_bar2_mask_cn61xx cn66xx;
346	struct cvmx_pemx_bar2_mask_cn61xx cn68xx;
347	struct cvmx_pemx_bar2_mask_cn61xx cn68xxp1;
348	struct cvmx_pemx_bar2_mask_cn61xx cn70xx;
349	struct cvmx_pemx_bar2_mask_cn61xx cn70xxp1;
350	struct cvmx_pemx_bar2_mask_cn73xx {
351		u64 reserved_42_63 : 22;
352		u64 mask : 39;
353		u64 reserved_0_2 : 3;
354	} cn73xx;
355	struct cvmx_pemx_bar2_mask_s cn78xx;
356	struct cvmx_pemx_bar2_mask_cn73xx cn78xxp1;
357	struct cvmx_pemx_bar2_mask_cn61xx cnf71xx;
358	struct cvmx_pemx_bar2_mask_cn73xx cnf75xx;
359};
360
361typedef union cvmx_pemx_bar2_mask cvmx_pemx_bar2_mask_t;
362
363/**
364 * cvmx_pem#_bar_ctl
365 *
366 * This register contains control for BAR accesses.
367 *
368 */
369union cvmx_pemx_bar_ctl {
370	u64 u64;
371	struct cvmx_pemx_bar_ctl_s {
372		u64 reserved_7_63 : 57;
373		u64 bar1_siz : 3;
374		u64 bar2_enb : 1;
375		u64 bar2_esx : 2;
376		u64 bar2_cax : 1;
377	} s;
378	struct cvmx_pemx_bar_ctl_s cn61xx;
379	struct cvmx_pemx_bar_ctl_s cn63xx;
380	struct cvmx_pemx_bar_ctl_s cn63xxp1;
381	struct cvmx_pemx_bar_ctl_s cn66xx;
382	struct cvmx_pemx_bar_ctl_s cn68xx;
383	struct cvmx_pemx_bar_ctl_s cn68xxp1;
384	struct cvmx_pemx_bar_ctl_s cn70xx;
385	struct cvmx_pemx_bar_ctl_s cn70xxp1;
386	struct cvmx_pemx_bar_ctl_s cn73xx;
387	struct cvmx_pemx_bar_ctl_s cn78xx;
388	struct cvmx_pemx_bar_ctl_s cn78xxp1;
389	struct cvmx_pemx_bar_ctl_s cnf71xx;
390	struct cvmx_pemx_bar_ctl_s cnf75xx;
391};
392
393typedef union cvmx_pemx_bar_ctl cvmx_pemx_bar_ctl_t;
394
395/**
396 * cvmx_pem#_bist_status
397 *
398 * This register contains results from BIST runs of PEM's memories.
399 *
400 */
401union cvmx_pemx_bist_status {
402	u64 u64;
403	struct cvmx_pemx_bist_status_s {
404		u64 reserved_16_63 : 48;
405		u64 retryc : 1;
406		u64 reserved_14_14 : 1;
407		u64 rqhdrb0 : 1;
408		u64 rqhdrb1 : 1;
409		u64 rqdatab0 : 1;
410		u64 rqdatab1 : 1;
411		u64 tlpn_d0 : 1;
412		u64 tlpn_d1 : 1;
413		u64 reserved_0_7 : 8;
414	} s;
415	struct cvmx_pemx_bist_status_cn61xx {
416		u64 reserved_8_63 : 56;
417		u64 retry : 1;
418		u64 rqdata0 : 1;
419		u64 rqdata1 : 1;
420		u64 rqdata2 : 1;
421		u64 rqdata3 : 1;
422		u64 rqhdr1 : 1;
423		u64 rqhdr0 : 1;
424		u64 sot : 1;
425	} cn61xx;
426	struct cvmx_pemx_bist_status_cn61xx cn63xx;
427	struct cvmx_pemx_bist_status_cn61xx cn63xxp1;
428	struct cvmx_pemx_bist_status_cn61xx cn66xx;
429	struct cvmx_pemx_bist_status_cn61xx cn68xx;
430	struct cvmx_pemx_bist_status_cn61xx cn68xxp1;
431	struct cvmx_pemx_bist_status_cn70xx {
432		u64 reserved_6_63 : 58;
433		u64 retry : 1;
434		u64 sot : 1;
435		u64 rqhdr0 : 1;
436		u64 rqhdr1 : 1;
437		u64 rqdata0 : 1;
438		u64 rqdata1 : 1;
439	} cn70xx;
440	struct cvmx_pemx_bist_status_cn70xx cn70xxp1;
441	struct cvmx_pemx_bist_status_cn73xx {
442		u64 reserved_16_63 : 48;
443		u64 retryc : 1;
444		u64 sot : 1;
445		u64 rqhdrb0 : 1;
446		u64 rqhdrb1 : 1;
447		u64 rqdatab0 : 1;
448		u64 rqdatab1 : 1;
449		u64 tlpn_d0 : 1;
450		u64 tlpn_d1 : 1;
451		u64 tlpn_ctl : 1;
452		u64 tlpp_d0 : 1;
453		u64 tlpp_d1 : 1;
454		u64 tlpp_ctl : 1;
455		u64 tlpc_d0 : 1;
456		u64 tlpc_d1 : 1;
457		u64 tlpc_ctl : 1;
458		u64 m2s : 1;
459	} cn73xx;
460	struct cvmx_pemx_bist_status_cn73xx cn78xx;
461	struct cvmx_pemx_bist_status_cn73xx cn78xxp1;
462	struct cvmx_pemx_bist_status_cn61xx cnf71xx;
463	struct cvmx_pemx_bist_status_cn73xx cnf75xx;
464};
465
466typedef union cvmx_pemx_bist_status cvmx_pemx_bist_status_t;
467
468/**
469 * cvmx_pem#_bist_status2
470 *
471 * "PEM#_BIST_STATUS2 = PEM BIST Status Register
472 * Results from BIST runs of PEM's memories."
473 */
474union cvmx_pemx_bist_status2 {
475	u64 u64;
476	struct cvmx_pemx_bist_status2_s {
477		u64 reserved_13_63 : 51;
478		u64 tlpn_d : 1;
479		u64 tlpn_ctl : 1;
480		u64 tlpp_d : 1;
481		u64 reserved_0_9 : 10;
482	} s;
483	struct cvmx_pemx_bist_status2_cn61xx {
484		u64 reserved_10_63 : 54;
485		u64 e2p_cpl : 1;
486		u64 e2p_n : 1;
487		u64 e2p_p : 1;
488		u64 peai_p2e : 1;
489		u64 pef_tpf1 : 1;
490		u64 pef_tpf0 : 1;
491		u64 pef_tnf : 1;
492		u64 pef_tcf1 : 1;
493		u64 pef_tc0 : 1;
494		u64 ppf : 1;
495	} cn61xx;
496	struct cvmx_pemx_bist_status2_cn61xx cn63xx;
497	struct cvmx_pemx_bist_status2_cn61xx cn63xxp1;
498	struct cvmx_pemx_bist_status2_cn61xx cn66xx;
499	struct cvmx_pemx_bist_status2_cn61xx cn68xx;
500	struct cvmx_pemx_bist_status2_cn61xx cn68xxp1;
501	struct cvmx_pemx_bist_status2_cn70xx {
502		u64 reserved_14_63 : 50;
503		u64 peai_p2e : 1;
504		u64 tlpn_d : 1;
505		u64 tlpn_ctl : 1;
506		u64 tlpp_d : 1;
507		u64 tlpp_ctl : 1;
508		u64 tlpc_d : 1;
509		u64 tlpc_ctl : 1;
510		u64 tlpan_d : 1;
511		u64 tlpan_ctl : 1;
512		u64 tlpap_d : 1;
513		u64 tlpap_ctl : 1;
514		u64 tlpac_d : 1;
515		u64 tlpac_ctl : 1;
516		u64 m2s : 1;
517	} cn70xx;
518	struct cvmx_pemx_bist_status2_cn70xx cn70xxp1;
519	struct cvmx_pemx_bist_status2_cn61xx cnf71xx;
520};
521
522typedef union cvmx_pemx_bist_status2 cvmx_pemx_bist_status2_t;
523
524/**
525 * cvmx_pem#_cfg
526 *
527 * Configuration of the PCIe Application.
528 *
529 */
530union cvmx_pemx_cfg {
531	u64 u64;
532	struct cvmx_pemx_cfg_s {
533		u64 reserved_5_63 : 59;
534		u64 laneswap : 1;
535		u64 reserved_2_3 : 2;
536		u64 md : 2;
537	} s;
538	struct cvmx_pemx_cfg_cn70xx {
539		u64 reserved_5_63 : 59;
540		u64 laneswap : 1;
541		u64 hostmd : 1;
542		u64 md : 3;
543	} cn70xx;
544	struct cvmx_pemx_cfg_cn70xx cn70xxp1;
545	struct cvmx_pemx_cfg_cn73xx {
546		u64 reserved_5_63 : 59;
547		u64 laneswap : 1;
548		u64 lanes8 : 1;
549		u64 hostmd : 1;
550		u64 md : 2;
551	} cn73xx;
552	struct cvmx_pemx_cfg_cn73xx cn78xx;
553	struct cvmx_pemx_cfg_cn73xx cn78xxp1;
554	struct cvmx_pemx_cfg_cn73xx cnf75xx;
555};
556
557typedef union cvmx_pemx_cfg cvmx_pemx_cfg_t;
558
559/**
560 * cvmx_pem#_cfg_rd
561 *
562 * This register allows read access to the configuration in the PCIe core.
563 *
564 */
565union cvmx_pemx_cfg_rd {
566	u64 u64;
567	struct cvmx_pemx_cfg_rd_s {
568		u64 data : 32;
569		u64 addr : 32;
570	} s;
571	struct cvmx_pemx_cfg_rd_s cn61xx;
572	struct cvmx_pemx_cfg_rd_s cn63xx;
573	struct cvmx_pemx_cfg_rd_s cn63xxp1;
574	struct cvmx_pemx_cfg_rd_s cn66xx;
575	struct cvmx_pemx_cfg_rd_s cn68xx;
576	struct cvmx_pemx_cfg_rd_s cn68xxp1;
577	struct cvmx_pemx_cfg_rd_s cn70xx;
578	struct cvmx_pemx_cfg_rd_s cn70xxp1;
579	struct cvmx_pemx_cfg_rd_s cn73xx;
580	struct cvmx_pemx_cfg_rd_s cn78xx;
581	struct cvmx_pemx_cfg_rd_s cn78xxp1;
582	struct cvmx_pemx_cfg_rd_s cnf71xx;
583	struct cvmx_pemx_cfg_rd_s cnf75xx;
584};
585
586typedef union cvmx_pemx_cfg_rd cvmx_pemx_cfg_rd_t;
587
588/**
589 * cvmx_pem#_cfg_wr
590 *
591 * This register allows write access to the configuration in the PCIe core.
592 *
593 */
594union cvmx_pemx_cfg_wr {
595	u64 u64;
596	struct cvmx_pemx_cfg_wr_s {
597		u64 data : 32;
598		u64 addr : 32;
599	} s;
600	struct cvmx_pemx_cfg_wr_s cn61xx;
601	struct cvmx_pemx_cfg_wr_s cn63xx;
602	struct cvmx_pemx_cfg_wr_s cn63xxp1;
603	struct cvmx_pemx_cfg_wr_s cn66xx;
604	struct cvmx_pemx_cfg_wr_s cn68xx;
605	struct cvmx_pemx_cfg_wr_s cn68xxp1;
606	struct cvmx_pemx_cfg_wr_s cn70xx;
607	struct cvmx_pemx_cfg_wr_s cn70xxp1;
608	struct cvmx_pemx_cfg_wr_s cn73xx;
609	struct cvmx_pemx_cfg_wr_s cn78xx;
610	struct cvmx_pemx_cfg_wr_s cn78xxp1;
611	struct cvmx_pemx_cfg_wr_s cnf71xx;
612	struct cvmx_pemx_cfg_wr_s cnf75xx;
613};
614
615typedef union cvmx_pemx_cfg_wr cvmx_pemx_cfg_wr_t;
616
617/**
618 * cvmx_pem#_clk_en
619 *
620 * This register contains the clock enable for ECLK and PCE_CLK.
621 *
622 */
623union cvmx_pemx_clk_en {
624	u64 u64;
625	struct cvmx_pemx_clk_en_s {
626		u64 reserved_2_63 : 62;
627		u64 pceclk_gate : 1;
628		u64 csclk_gate : 1;
629	} s;
630	struct cvmx_pemx_clk_en_s cn70xx;
631	struct cvmx_pemx_clk_en_s cn70xxp1;
632	struct cvmx_pemx_clk_en_s cn73xx;
633	struct cvmx_pemx_clk_en_s cn78xx;
634	struct cvmx_pemx_clk_en_s cn78xxp1;
635	struct cvmx_pemx_clk_en_s cnf75xx;
636};
637
638typedef union cvmx_pemx_clk_en cvmx_pemx_clk_en_t;
639
640/**
641 * cvmx_pem#_cpl_lut_valid
642 *
643 * This register specifies the bit set for an outstanding tag read.
644 *
645 */
646union cvmx_pemx_cpl_lut_valid {
647	u64 u64;
648	struct cvmx_pemx_cpl_lut_valid_s {
649		u64 tag : 64;
650	} s;
651	struct cvmx_pemx_cpl_lut_valid_cn61xx {
652		u64 reserved_32_63 : 32;
653		u64 tag : 32;
654	} cn61xx;
655	struct cvmx_pemx_cpl_lut_valid_cn61xx cn63xx;
656	struct cvmx_pemx_cpl_lut_valid_cn61xx cn63xxp1;
657	struct cvmx_pemx_cpl_lut_valid_cn61xx cn66xx;
658	struct cvmx_pemx_cpl_lut_valid_cn61xx cn68xx;
659	struct cvmx_pemx_cpl_lut_valid_cn61xx cn68xxp1;
660	struct cvmx_pemx_cpl_lut_valid_cn61xx cn70xx;
661	struct cvmx_pemx_cpl_lut_valid_cn61xx cn70xxp1;
662	struct cvmx_pemx_cpl_lut_valid_s cn73xx;
663	struct cvmx_pemx_cpl_lut_valid_s cn78xx;
664	struct cvmx_pemx_cpl_lut_valid_s cn78xxp1;
665	struct cvmx_pemx_cpl_lut_valid_cn61xx cnf71xx;
666	struct cvmx_pemx_cpl_lut_valid_s cnf75xx;
667};
668
669typedef union cvmx_pemx_cpl_lut_valid cvmx_pemx_cpl_lut_valid_t;
670
671/**
672 * cvmx_pem#_ctl_status
673 *
674 * This is a general control and status register of the PEM.
675 *
676 */
677union cvmx_pemx_ctl_status {
678	u64 u64;
679	struct cvmx_pemx_ctl_status_s {
680		u64 reserved_51_63 : 13;
681		u64 inv_dpar : 1;
682		u64 inv_hpar : 1;
683		u64 inv_rpar : 1;
684		u64 auto_sd : 1;
685		u64 dnum : 5;
686		u64 pbus : 8;
687		u64 reserved_32_33 : 2;
688		u64 cfg_rtry : 16;
689		u64 reserved_12_15 : 4;
690		u64 pm_xtoff : 1;
691		u64 pm_xpme : 1;
692		u64 ob_p_cmd : 1;
693		u64 reserved_7_8 : 2;
694		u64 nf_ecrc : 1;
695		u64 dly_one : 1;
696		u64 lnk_enb : 1;
697		u64 ro_ctlp : 1;
698		u64 fast_lm : 1;
699		u64 inv_ecrc : 1;
700		u64 inv_lcrc : 1;
701	} s;
702	struct cvmx_pemx_ctl_status_cn61xx {
703		u64 reserved_48_63 : 16;
704		u64 auto_sd : 1;
705		u64 dnum : 5;
706		u64 pbus : 8;
707		u64 reserved_32_33 : 2;
708		u64 cfg_rtry : 16;
709		u64 reserved_12_15 : 4;
710		u64 pm_xtoff : 1;
711		u64 pm_xpme : 1;
712		u64 ob_p_cmd : 1;
713		u64 reserved_7_8 : 2;
714		u64 nf_ecrc : 1;
715		u64 dly_one : 1;
716		u64 lnk_enb : 1;
717		u64 ro_ctlp : 1;
718		u64 fast_lm : 1;
719		u64 inv_ecrc : 1;
720		u64 inv_lcrc : 1;
721	} cn61xx;
722	struct cvmx_pemx_ctl_status_cn61xx cn63xx;
723	struct cvmx_pemx_ctl_status_cn61xx cn63xxp1;
724	struct cvmx_pemx_ctl_status_cn61xx cn66xx;
725	struct cvmx_pemx_ctl_status_cn61xx cn68xx;
726	struct cvmx_pemx_ctl_status_cn61xx cn68xxp1;
727	struct cvmx_pemx_ctl_status_s cn70xx;
728	struct cvmx_pemx_ctl_status_s cn70xxp1;
729	struct cvmx_pemx_ctl_status_cn73xx {
730		u64 reserved_51_63 : 13;
731		u64 inv_dpar : 1;
732		u64 reserved_48_49 : 2;
733		u64 auto_sd : 1;
734		u64 dnum : 5;
735		u64 pbus : 8;
736		u64 reserved_32_33 : 2;
737		u64 cfg_rtry : 16;
738		u64 reserved_12_15 : 4;
739		u64 pm_xtoff : 1;
740		u64 pm_xpme : 1;
741		u64 ob_p_cmd : 1;
742		u64 reserved_7_8 : 2;
743		u64 nf_ecrc : 1;
744		u64 dly_one : 1;
745		u64 lnk_enb : 1;
746		u64 ro_ctlp : 1;
747		u64 fast_lm : 1;
748		u64 inv_ecrc : 1;
749		u64 inv_lcrc : 1;
750	} cn73xx;
751	struct cvmx_pemx_ctl_status_cn73xx cn78xx;
752	struct cvmx_pemx_ctl_status_cn73xx cn78xxp1;
753	struct cvmx_pemx_ctl_status_cn61xx cnf71xx;
754	struct cvmx_pemx_ctl_status_cn73xx cnf75xx;
755};
756
757typedef union cvmx_pemx_ctl_status cvmx_pemx_ctl_status_t;
758
759/**
760 * cvmx_pem#_ctl_status2
761 *
762 * This register contains additional general control and status of the PEM.
763 *
764 */
765union cvmx_pemx_ctl_status2 {
766	u64 u64;
767	struct cvmx_pemx_ctl_status2_s {
768		u64 reserved_16_63 : 48;
769		u64 no_fwd_prg : 16;
770	} s;
771	struct cvmx_pemx_ctl_status2_s cn73xx;
772	struct cvmx_pemx_ctl_status2_s cn78xx;
773	struct cvmx_pemx_ctl_status2_s cn78xxp1;
774	struct cvmx_pemx_ctl_status2_s cnf75xx;
775};
776
777typedef union cvmx_pemx_ctl_status2 cvmx_pemx_ctl_status2_t;
778
779/**
780 * cvmx_pem#_dbg_info
781 *
782 * This is a debug information register of the PEM.
783 *
784 */
785union cvmx_pemx_dbg_info {
786	u64 u64;
787	struct cvmx_pemx_dbg_info_s {
788		u64 reserved_62_63 : 2;
789		u64 m2s_c_dbe : 1;
790		u64 m2s_c_sbe : 1;
791		u64 m2s_d_dbe : 1;
792		u64 m2s_d_sbe : 1;
793		u64 qhdr_b1_dbe : 1;
794		u64 qhdr_b1_sbe : 1;
795		u64 qhdr_b0_dbe : 1;
796		u64 qhdr_b0_sbe : 1;
797		u64 rtry_dbe : 1;
798		u64 rtry_sbe : 1;
799		u64 reserved_50_51 : 2;
800		u64 c_d1_dbe : 1;
801		u64 c_d1_sbe : 1;
802		u64 c_d0_dbe : 1;
803		u64 c_d0_sbe : 1;
804		u64 reserved_34_45 : 12;
805		u64 datq_pe : 1;
806		u64 reserved_31_32 : 2;
807		u64 ecrc_e : 1;
808		u64 rawwpp : 1;
809		u64 racpp : 1;
810		u64 ramtlp : 1;
811		u64 rarwdns : 1;
812		u64 caar : 1;
813		u64 racca : 1;
814		u64 racur : 1;
815		u64 rauc : 1;
816		u64 rqo : 1;
817		u64 fcuv : 1;
818		u64 rpe : 1;
819		u64 fcpvwt : 1;
820		u64 dpeoosd : 1;
821		u64 rtwdle : 1;
822		u64 rdwdle : 1;
823		u64 mre : 1;
824		u64 rte : 1;
825		u64 acto : 1;
826		u64 rvdm : 1;
827		u64 rumep : 1;
828		u64 rptamrc : 1;
829		u64 rpmerc : 1;
830		u64 rfemrc : 1;
831		u64 rnfemrc : 1;
832		u64 rcemrc : 1;
833		u64 rpoison : 1;
834		u64 recrce : 1;
835		u64 rtlplle : 1;
836		u64 rtlpmal : 1;
837		u64 spoison : 1;
838	} s;
839	struct cvmx_pemx_dbg_info_cn61xx {
840		u64 reserved_31_63 : 33;
841		u64 ecrc_e : 1;
842		u64 rawwpp : 1;
843		u64 racpp : 1;
844		u64 ramtlp : 1;
845		u64 rarwdns : 1;
846		u64 caar : 1;
847		u64 racca : 1;
848		u64 racur : 1;
849		u64 rauc : 1;
850		u64 rqo : 1;
851		u64 fcuv : 1;
852		u64 rpe : 1;
853		u64 fcpvwt : 1;
854		u64 dpeoosd : 1;
855		u64 rtwdle : 1;
856		u64 rdwdle : 1;
857		u64 mre : 1;
858		u64 rte : 1;
859		u64 acto : 1;
860		u64 rvdm : 1;
861		u64 rumep : 1;
862		u64 rptamrc : 1;
863		u64 rpmerc : 1;
864		u64 rfemrc : 1;
865		u64 rnfemrc : 1;
866		u64 rcemrc : 1;
867		u64 rpoison : 1;
868		u64 recrce : 1;
869		u64 rtlplle : 1;
870		u64 rtlpmal : 1;
871		u64 spoison : 1;
872	} cn61xx;
873	struct cvmx_pemx_dbg_info_cn61xx cn63xx;
874	struct cvmx_pemx_dbg_info_cn61xx cn63xxp1;
875	struct cvmx_pemx_dbg_info_cn61xx cn66xx;
876	struct cvmx_pemx_dbg_info_cn61xx cn68xx;
877	struct cvmx_pemx_dbg_info_cn61xx cn68xxp1;
878	struct cvmx_pemx_dbg_info_cn70xx {
879		u64 reserved_46_63 : 18;
880		u64 c_c_dbe : 1;
881		u64 c_c_sbe : 1;
882		u64 c_d_dbe : 1;
883		u64 c_d_sbe : 1;
884		u64 n_c_dbe : 1;
885		u64 n_c_sbe : 1;
886		u64 n_d_dbe : 1;
887		u64 n_d_sbe : 1;
888		u64 p_c_dbe : 1;
889		u64 p_c_sbe : 1;
890		u64 p_d_dbe : 1;
891		u64 p_d_sbe : 1;
892		u64 datq_pe : 1;
893		u64 hdrq_pe : 1;
894		u64 rtry_pe : 1;
895		u64 ecrc_e : 1;
896		u64 rawwpp : 1;
897		u64 racpp : 1;
898		u64 ramtlp : 1;
899		u64 rarwdns : 1;
900		u64 caar : 1;
901		u64 racca : 1;
902		u64 racur : 1;
903		u64 rauc : 1;
904		u64 rqo : 1;
905		u64 fcuv : 1;
906		u64 rpe : 1;
907		u64 fcpvwt : 1;
908		u64 dpeoosd : 1;
909		u64 rtwdle : 1;
910		u64 rdwdle : 1;
911		u64 mre : 1;
912		u64 rte : 1;
913		u64 acto : 1;
914		u64 rvdm : 1;
915		u64 rumep : 1;
916		u64 rptamrc : 1;
917		u64 rpmerc : 1;
918		u64 rfemrc : 1;
919		u64 rnfemrc : 1;
920		u64 rcemrc : 1;
921		u64 rpoison : 1;
922		u64 recrce : 1;
923		u64 rtlplle : 1;
924		u64 rtlpmal : 1;
925		u64 spoison : 1;
926	} cn70xx;
927	struct cvmx_pemx_dbg_info_cn70xx cn70xxp1;
928	struct cvmx_pemx_dbg_info_cn73xx {
929		u64 reserved_62_63 : 2;
930		u64 m2s_c_dbe : 1;
931		u64 m2s_c_sbe : 1;
932		u64 m2s_d_dbe : 1;
933		u64 m2s_d_sbe : 1;
934		u64 qhdr_b1_dbe : 1;
935		u64 qhdr_b1_sbe : 1;
936		u64 qhdr_b0_dbe : 1;
937		u64 qhdr_b0_sbe : 1;
938		u64 rtry_dbe : 1;
939		u64 rtry_sbe : 1;
940		u64 c_c_dbe : 1;
941		u64 c_c_sbe : 1;
942		u64 c_d1_dbe : 1;
943		u64 c_d1_sbe : 1;
944		u64 c_d0_dbe : 1;
945		u64 c_d0_sbe : 1;
946		u64 n_c_dbe : 1;
947		u64 n_c_sbe : 1;
948		u64 n_d1_dbe : 1;
949		u64 n_d1_sbe : 1;
950		u64 n_d0_dbe : 1;
951		u64 n_d0_sbe : 1;
952		u64 p_c_dbe : 1;
953		u64 p_c_sbe : 1;
954		u64 p_d1_dbe : 1;
955		u64 p_d1_sbe : 1;
956		u64 p_d0_dbe : 1;
957		u64 p_d0_sbe : 1;
958		u64 datq_pe : 1;
959		u64 bmd_e : 1;
960		u64 lofp : 1;
961		u64 ecrc_e : 1;
962		u64 rawwpp : 1;
963		u64 racpp : 1;
964		u64 ramtlp : 1;
965		u64 rarwdns : 1;
966		u64 caar : 1;
967		u64 racca : 1;
968		u64 racur : 1;
969		u64 rauc : 1;
970		u64 rqo : 1;
971		u64 fcuv : 1;
972		u64 rpe : 1;
973		u64 fcpvwt : 1;
974		u64 dpeoosd : 1;
975		u64 rtwdle : 1;
976		u64 rdwdle : 1;
977		u64 mre : 1;
978		u64 rte : 1;
979		u64 acto : 1;
980		u64 rvdm : 1;
981		u64 rumep : 1;
982		u64 rptamrc : 1;
983		u64 rpmerc : 1;
984		u64 rfemrc : 1;
985		u64 rnfemrc : 1;
986		u64 rcemrc : 1;
987		u64 rpoison : 1;
988		u64 recrce : 1;
989		u64 rtlplle : 1;
990		u64 rtlpmal : 1;
991		u64 spoison : 1;
992	} cn73xx;
993	struct cvmx_pemx_dbg_info_cn73xx cn78xx;
994	struct cvmx_pemx_dbg_info_cn78xxp1 {
995		u64 reserved_58_63 : 6;
996		u64 qhdr_b1_dbe : 1;
997		u64 qhdr_b1_sbe : 1;
998		u64 qhdr_b0_dbe : 1;
999		u64 qhdr_b0_sbe : 1;
1000		u64 rtry_dbe : 1;
1001		u64 rtry_sbe : 1;
1002		u64 c_c_dbe : 1;
1003		u64 c_c_sbe : 1;
1004		u64 c_d1_dbe : 1;
1005		u64 c_d1_sbe : 1;
1006		u64 c_d0_dbe : 1;
1007		u64 c_d0_sbe : 1;
1008		u64 n_c_dbe : 1;
1009		u64 n_c_sbe : 1;
1010		u64 n_d1_dbe : 1;
1011		u64 n_d1_sbe : 1;
1012		u64 n_d0_dbe : 1;
1013		u64 n_d0_sbe : 1;
1014		u64 p_c_dbe : 1;
1015		u64 p_c_sbe : 1;
1016		u64 p_d1_dbe : 1;
1017		u64 p_d1_sbe : 1;
1018		u64 p_d0_dbe : 1;
1019		u64 p_d0_sbe : 1;
1020		u64 datq_pe : 1;
1021		u64 reserved_32_32 : 1;
1022		u64 lofp : 1;
1023		u64 ecrc_e : 1;
1024		u64 rawwpp : 1;
1025		u64 racpp : 1;
1026		u64 ramtlp : 1;
1027		u64 rarwdns : 1;
1028		u64 caar : 1;
1029		u64 racca : 1;
1030		u64 racur : 1;
1031		u64 rauc : 1;
1032		u64 rqo : 1;
1033		u64 fcuv : 1;
1034		u64 rpe : 1;
1035		u64 fcpvwt : 1;
1036		u64 dpeoosd : 1;
1037		u64 rtwdle : 1;
1038		u64 rdwdle : 1;
1039		u64 mre : 1;
1040		u64 rte : 1;
1041		u64 acto : 1;
1042		u64 rvdm : 1;
1043		u64 rumep : 1;
1044		u64 rptamrc : 1;
1045		u64 rpmerc : 1;
1046		u64 rfemrc : 1;
1047		u64 rnfemrc : 1;
1048		u64 rcemrc : 1;
1049		u64 rpoison : 1;
1050		u64 recrce : 1;
1051		u64 rtlplle : 1;
1052		u64 rtlpmal : 1;
1053		u64 spoison : 1;
1054	} cn78xxp1;
1055	struct cvmx_pemx_dbg_info_cn61xx cnf71xx;
1056	struct cvmx_pemx_dbg_info_cn73xx cnf75xx;
1057};
1058
1059typedef union cvmx_pemx_dbg_info cvmx_pemx_dbg_info_t;
1060
1061/**
1062 * cvmx_pem#_dbg_info_en
1063 *
1064 * "PEM#_DBG_INFO_EN = PEM Debug Information Enable
1065 * Allows PEM_DBG_INFO to generate interrupts when cooresponding enable bit is set."
1066 */
1067union cvmx_pemx_dbg_info_en {
1068	u64 u64;
1069	struct cvmx_pemx_dbg_info_en_s {
1070		u64 reserved_46_63 : 18;
1071		u64 tpcdbe1 : 1;
1072		u64 tpcsbe1 : 1;
1073		u64 tpcdbe0 : 1;
1074		u64 tpcsbe0 : 1;
1075		u64 tnfdbe1 : 1;
1076		u64 tnfsbe1 : 1;
1077		u64 tnfdbe0 : 1;
1078		u64 tnfsbe0 : 1;
1079		u64 tpfdbe1 : 1;
1080		u64 tpfsbe1 : 1;
1081		u64 tpfdbe0 : 1;
1082		u64 tpfsbe0 : 1;
1083		u64 datq_pe : 1;
1084		u64 hdrq_pe : 1;
1085		u64 rtry_pe : 1;
1086		u64 ecrc_e : 1;
1087		u64 rawwpp : 1;
1088		u64 racpp : 1;
1089		u64 ramtlp : 1;
1090		u64 rarwdns : 1;
1091		u64 caar : 1;
1092		u64 racca : 1;
1093		u64 racur : 1;
1094		u64 rauc : 1;
1095		u64 rqo : 1;
1096		u64 fcuv : 1;
1097		u64 rpe : 1;
1098		u64 fcpvwt : 1;
1099		u64 dpeoosd : 1;
1100		u64 rtwdle : 1;
1101		u64 rdwdle : 1;
1102		u64 mre : 1;
1103		u64 rte : 1;
1104		u64 acto : 1;
1105		u64 rvdm : 1;
1106		u64 rumep : 1;
1107		u64 rptamrc : 1;
1108		u64 rpmerc : 1;
1109		u64 rfemrc : 1;
1110		u64 rnfemrc : 1;
1111		u64 rcemrc : 1;
1112		u64 rpoison : 1;
1113		u64 recrce : 1;
1114		u64 rtlplle : 1;
1115		u64 rtlpmal : 1;
1116		u64 spoison : 1;
1117	} s;
1118	struct cvmx_pemx_dbg_info_en_cn61xx {
1119		u64 reserved_31_63 : 33;
1120		u64 ecrc_e : 1;
1121		u64 rawwpp : 1;
1122		u64 racpp : 1;
1123		u64 ramtlp : 1;
1124		u64 rarwdns : 1;
1125		u64 caar : 1;
1126		u64 racca : 1;
1127		u64 racur : 1;
1128		u64 rauc : 1;
1129		u64 rqo : 1;
1130		u64 fcuv : 1;
1131		u64 rpe : 1;
1132		u64 fcpvwt : 1;
1133		u64 dpeoosd : 1;
1134		u64 rtwdle : 1;
1135		u64 rdwdle : 1;
1136		u64 mre : 1;
1137		u64 rte : 1;
1138		u64 acto : 1;
1139		u64 rvdm : 1;
1140		u64 rumep : 1;
1141		u64 rptamrc : 1;
1142		u64 rpmerc : 1;
1143		u64 rfemrc : 1;
1144		u64 rnfemrc : 1;
1145		u64 rcemrc : 1;
1146		u64 rpoison : 1;
1147		u64 recrce : 1;
1148		u64 rtlplle : 1;
1149		u64 rtlpmal : 1;
1150		u64 spoison : 1;
1151	} cn61xx;
1152	struct cvmx_pemx_dbg_info_en_cn61xx cn63xx;
1153	struct cvmx_pemx_dbg_info_en_cn61xx cn63xxp1;
1154	struct cvmx_pemx_dbg_info_en_cn61xx cn66xx;
1155	struct cvmx_pemx_dbg_info_en_cn61xx cn68xx;
1156	struct cvmx_pemx_dbg_info_en_cn61xx cn68xxp1;
1157	struct cvmx_pemx_dbg_info_en_s cn70xx;
1158	struct cvmx_pemx_dbg_info_en_s cn70xxp1;
1159	struct cvmx_pemx_dbg_info_en_cn61xx cnf71xx;
1160};
1161
1162typedef union cvmx_pemx_dbg_info_en cvmx_pemx_dbg_info_en_t;
1163
1164/**
1165 * cvmx_pem#_diag_status
1166 *
1167 * This register contains selection control for the core diagnostic bus.
1168 *
1169 */
1170union cvmx_pemx_diag_status {
1171	u64 u64;
1172	struct cvmx_pemx_diag_status_s {
1173		u64 reserved_9_63 : 55;
1174		u64 pwrdwn : 3;
1175		u64 pm_dst : 3;
1176		u64 pm_stat : 1;
1177		u64 pm_en : 1;
1178		u64 aux_en : 1;
1179	} s;
1180	struct cvmx_pemx_diag_status_cn61xx {
1181		u64 reserved_4_63 : 60;
1182		u64 pm_dst : 1;
1183		u64 pm_stat : 1;
1184		u64 pm_en : 1;
1185		u64 aux_en : 1;
1186	} cn61xx;
1187	struct cvmx_pemx_diag_status_cn61xx cn63xx;
1188	struct cvmx_pemx_diag_status_cn61xx cn63xxp1;
1189	struct cvmx_pemx_diag_status_cn61xx cn66xx;
1190	struct cvmx_pemx_diag_status_cn61xx cn68xx;
1191	struct cvmx_pemx_diag_status_cn61xx cn68xxp1;
1192	struct cvmx_pemx_diag_status_cn70xx {
1193		u64 reserved_63_6 : 58;
1194		u64 pm_dst : 3;
1195		u64 pm_stat : 1;
1196		u64 pm_en : 1;
1197		u64 aux_en : 1;
1198	} cn70xx;
1199	struct cvmx_pemx_diag_status_cn70xx cn70xxp1;
1200	struct cvmx_pemx_diag_status_cn73xx {
1201		u64 reserved_63_9 : 55;
1202		u64 pwrdwn : 3;
1203		u64 pm_dst : 3;
1204		u64 pm_stat : 1;
1205		u64 pm_en : 1;
1206		u64 aux_en : 1;
1207	} cn73xx;
1208	struct cvmx_pemx_diag_status_cn73xx cn78xx;
1209	struct cvmx_pemx_diag_status_cn73xx cn78xxp1;
1210	struct cvmx_pemx_diag_status_cn61xx cnf71xx;
1211	struct cvmx_pemx_diag_status_cn73xx cnf75xx;
1212};
1213
1214typedef union cvmx_pemx_diag_status cvmx_pemx_diag_status_t;
1215
1216/**
1217 * cvmx_pem#_ecc_ena
1218 *
1219 * Contains enables for TLP FIFO ECC RAMs.
1220 *
1221 */
1222union cvmx_pemx_ecc_ena {
1223	u64 u64;
1224	struct cvmx_pemx_ecc_ena_s {
1225		u64 reserved_35_63 : 29;
1226		u64 qhdr_b1_ena : 1;
1227		u64 qhdr_b0_ena : 1;
1228		u64 rtry_ena : 1;
1229		u64 reserved_11_31 : 21;
1230		u64 m2s_c_ena : 1;
1231		u64 m2s_d_ena : 1;
1232		u64 c_c_ena : 1;
1233		u64 c_d1_ena : 1;
1234		u64 c_d0_ena : 1;
1235		u64 reserved_0_5 : 6;
1236	} s;
1237	struct cvmx_pemx_ecc_ena_cn70xx {
1238		u64 reserved_6_63 : 58;
1239		u64 tlp_nc_ena : 1;
1240		u64 tlp_nd_ena : 1;
1241		u64 tlp_pc_ena : 1;
1242		u64 tlp_pd_ena : 1;
1243		u64 tlp_cc_ena : 1;
1244		u64 tlp_cd_ena : 1;
1245	} cn70xx;
1246	struct cvmx_pemx_ecc_ena_cn70xx cn70xxp1;
1247	struct cvmx_pemx_ecc_ena_cn73xx {
1248		u64 reserved_35_63 : 29;
1249		u64 qhdr_b1_ena : 1;
1250		u64 qhdr_b0_ena : 1;
1251		u64 rtry_ena : 1;
1252		u64 reserved_11_31 : 21;
1253		u64 m2s_c_ena : 1;
1254		u64 m2s_d_ena : 1;
1255		u64 c_c_ena : 1;
1256		u64 c_d1_ena : 1;
1257		u64 c_d0_ena : 1;
1258		u64 n_c_ena : 1;
1259		u64 n_d1_ena : 1;
1260		u64 n_d0_ena : 1;
1261		u64 p_c_ena : 1;
1262		u64 p_d1_ena : 1;
1263		u64 p_d0_ena : 1;
1264	} cn73xx;
1265	struct cvmx_pemx_ecc_ena_cn73xx cn78xx;
1266	struct cvmx_pemx_ecc_ena_cn78xxp1 {
1267		u64 reserved_35_63 : 29;
1268		u64 qhdr_b1_ena : 1;
1269		u64 qhdr_b0_ena : 1;
1270		u64 rtry_ena : 1;
1271		u64 reserved_9_31 : 23;
1272		u64 c_c_ena : 1;
1273		u64 c_d1_ena : 1;
1274		u64 c_d0_ena : 1;
1275		u64 n_c_ena : 1;
1276		u64 n_d1_ena : 1;
1277		u64 n_d0_ena : 1;
1278		u64 p_c_ena : 1;
1279		u64 p_d1_ena : 1;
1280		u64 p_d0_ena : 1;
1281	} cn78xxp1;
1282	struct cvmx_pemx_ecc_ena_cn73xx cnf75xx;
1283};
1284
1285typedef union cvmx_pemx_ecc_ena cvmx_pemx_ecc_ena_t;
1286
1287/**
1288 * cvmx_pem#_ecc_synd_ctrl
1289 *
1290 * This register contains syndrome control for TLP FIFO ECC RAMs.
1291 *
1292 */
1293union cvmx_pemx_ecc_synd_ctrl {
1294	u64 u64;
1295	struct cvmx_pemx_ecc_synd_ctrl_s {
1296		u64 reserved_38_63 : 26;
1297		u64 qhdr_b1_syn : 2;
1298		u64 qhdr_b0_syn : 2;
1299		u64 rtry_syn : 2;
1300		u64 reserved_22_31 : 10;
1301		u64 m2s_c_syn : 2;
1302		u64 m2s_d_syn : 2;
1303		u64 c_c_syn : 2;
1304		u64 c_d1_syn : 2;
1305		u64 c_d0_syn : 2;
1306		u64 reserved_0_11 : 12;
1307	} s;
1308	struct cvmx_pemx_ecc_synd_ctrl_cn70xx {
1309		u64 reserved_12_63 : 52;
1310		u64 tlp_nc_syn : 2;
1311		u64 tlp_nd_syn : 2;
1312		u64 tlp_pc_syn : 2;
1313		u64 tlp_pd_syn : 2;
1314		u64 tlp_cc_syn : 2;
1315		u64 tlp_cd_syn : 2;
1316	} cn70xx;
1317	struct cvmx_pemx_ecc_synd_ctrl_cn70xx cn70xxp1;
1318	struct cvmx_pemx_ecc_synd_ctrl_cn73xx {
1319		u64 reserved_38_63 : 26;
1320		u64 qhdr_b1_syn : 2;
1321		u64 qhdr_b0_syn : 2;
1322		u64 rtry_syn : 2;
1323		u64 reserved_22_31 : 10;
1324		u64 m2s_c_syn : 2;
1325		u64 m2s_d_syn : 2;
1326		u64 c_c_syn : 2;
1327		u64 c_d1_syn : 2;
1328		u64 c_d0_syn : 2;
1329		u64 n_c_syn : 2;
1330		u64 n_d1_syn : 2;
1331		u64 n_d0_syn : 2;
1332		u64 p_c_syn : 2;
1333		u64 p_d1_syn : 2;
1334		u64 p_d0_syn : 2;
1335	} cn73xx;
1336	struct cvmx_pemx_ecc_synd_ctrl_cn73xx cn78xx;
1337	struct cvmx_pemx_ecc_synd_ctrl_cn78xxp1 {
1338		u64 reserved_38_63 : 26;
1339		u64 qhdr_b1_syn : 2;
1340		u64 qhdr_b0_syn : 2;
1341		u64 rtry_syn : 2;
1342		u64 reserved_18_31 : 14;
1343		u64 c_c_syn : 2;
1344		u64 c_d1_syn : 2;
1345		u64 c_d0_syn : 2;
1346		u64 n_c_syn : 2;
1347		u64 n_d1_syn : 2;
1348		u64 n_d0_syn : 2;
1349		u64 p_c_syn : 2;
1350		u64 p_d1_syn : 2;
1351		u64 p_d0_syn : 2;
1352	} cn78xxp1;
1353	struct cvmx_pemx_ecc_synd_ctrl_cn73xx cnf75xx;
1354};
1355
1356typedef union cvmx_pemx_ecc_synd_ctrl cvmx_pemx_ecc_synd_ctrl_t;
1357
1358/**
1359 * cvmx_pem#_eco
1360 */
1361union cvmx_pemx_eco {
1362	u64 u64;
1363	struct cvmx_pemx_eco_s {
1364		u64 reserved_8_63 : 56;
1365		u64 eco_rw : 8;
1366	} s;
1367	struct cvmx_pemx_eco_s cn73xx;
1368	struct cvmx_pemx_eco_s cn78xx;
1369	struct cvmx_pemx_eco_s cnf75xx;
1370};
1371
1372typedef union cvmx_pemx_eco cvmx_pemx_eco_t;
1373
1374/**
1375 * cvmx_pem#_flr_glblcnt_ctl
1376 */
1377union cvmx_pemx_flr_glblcnt_ctl {
1378	u64 u64;
1379	struct cvmx_pemx_flr_glblcnt_ctl_s {
1380		u64 reserved_4_63 : 60;
1381		u64 chge : 1;
1382		u64 inc : 1;
1383		u64 delta : 2;
1384	} s;
1385	struct cvmx_pemx_flr_glblcnt_ctl_s cn73xx;
1386	struct cvmx_pemx_flr_glblcnt_ctl_s cn78xx;
1387	struct cvmx_pemx_flr_glblcnt_ctl_s cnf75xx;
1388};
1389
1390typedef union cvmx_pemx_flr_glblcnt_ctl cvmx_pemx_flr_glblcnt_ctl_t;
1391
1392/**
1393 * cvmx_pem#_flr_pf0_vf_stopreq
1394 *
1395 * Hardware automatically sets the STOPREQ bit for the VF when it enters a
1396 * Function Level Reset (FLR).  Software is responsible for clearing the STOPREQ
1397 * bit but must not do so prior to hardware taking down the FLR, which could be
1398 * as long as 100ms.  It may be appropriate for software to wait longer before clearing
1399 * STOPREQ, software may need to drain deep DPI queues for example.
1400 * Whenever PEM receives a request mastered by CNXXXX over S2M (i.e. P or NP),
1401 * when STOPREQ is set for the function, PEM will discard the outgoing request
1402 * before sending it to the PCIe core.  If a NP, PEM will schedule an immediate
1403 * SWI_RSP_ERROR completion for the request - no timeout is required.
1404 *
1405 * STOPREQ mimics the behavior of PCIEEPVF()_CFG001[ME] for outbound requests that will
1406 * master the PCIe bus (P and NP).
1407 *
1408 * Note that STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
1409 * nor on M2S traffic.
1410 */
1411union cvmx_pemx_flr_pf0_vf_stopreq {
1412	u64 u64;
1413	struct cvmx_pemx_flr_pf0_vf_stopreq_s {
1414		u64 vf_stopreq : 64;
1415	} s;
1416	struct cvmx_pemx_flr_pf0_vf_stopreq_s cn73xx;
1417	struct cvmx_pemx_flr_pf0_vf_stopreq_s cn78xx;
1418	struct cvmx_pemx_flr_pf0_vf_stopreq_s cnf75xx;
1419};
1420
1421typedef union cvmx_pemx_flr_pf0_vf_stopreq cvmx_pemx_flr_pf0_vf_stopreq_t;
1422
1423/**
1424 * cvmx_pem#_flr_pf_stopreq
1425 *
1426 * Hardware automatically sets the STOPREQ bit for the PF when it enters a
1427 * Function Level Reset (FLR).  Software is responsible for clearing the STOPREQ
1428 * bit but must not do so prior to hardware taking down the FLR, which could be
1429 * as long as 100ms.  It may be appropriate for software to wait longer before clearing
1430 * STOPREQ, software may need to drain deep DPI queues for example.
1431 * Whenever PEM receives a PF or child VF request mastered by CNXXXX over S2M (i.e. P or NP),
1432 * when STOPREQ is set for the function, PEM will discard the outgoing request
1433 * before sending it to the PCIe core.  If a NP, PEM will schedule an immediate
1434 * SWI_RSP_ERROR completion for the request - no timeout is required.
1435 *
1436 * STOPREQ mimics the behavior of PCIEEP()_CFG001[ME] for outbound requests that will
1437 * master the PCIe bus (P and NP).
1438 *
1439 * STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
1440 * nor on M2S traffic.
1441 *
1442 * When a PF()_STOPREQ is set, none of the associated
1443 * PEM()_FLR_PF()_VF_STOPREQ[VF_STOPREQ] will be set.
1444 *
1445 * STOPREQ is reset when the MAC is reset, and is not reset after a chip soft reset.
1446 */
1447union cvmx_pemx_flr_pf_stopreq {
1448	u64 u64;
1449	struct cvmx_pemx_flr_pf_stopreq_s {
1450		u64 reserved_1_63 : 63;
1451		u64 pf0_stopreq : 1;
1452	} s;
1453	struct cvmx_pemx_flr_pf_stopreq_s cn73xx;
1454	struct cvmx_pemx_flr_pf_stopreq_s cn78xx;
1455	struct cvmx_pemx_flr_pf_stopreq_s cnf75xx;
1456};
1457
1458typedef union cvmx_pemx_flr_pf_stopreq cvmx_pemx_flr_pf_stopreq_t;
1459
1460/**
1461 * cvmx_pem#_flr_stopreq_ctl
1462 */
1463union cvmx_pemx_flr_stopreq_ctl {
1464	u64 u64;
1465	struct cvmx_pemx_flr_stopreq_ctl_s {
1466		u64 reserved_1_63 : 63;
1467		u64 stopreqclr : 1;
1468	} s;
1469	struct cvmx_pemx_flr_stopreq_ctl_s cn78xx;
1470	struct cvmx_pemx_flr_stopreq_ctl_s cnf75xx;
1471};
1472
1473typedef union cvmx_pemx_flr_stopreq_ctl cvmx_pemx_flr_stopreq_ctl_t;
1474
1475/**
1476 * cvmx_pem#_flr_zombie_ctl
1477 */
1478union cvmx_pemx_flr_zombie_ctl {
1479	u64 u64;
1480	struct cvmx_pemx_flr_zombie_ctl_s {
1481		u64 reserved_10_63 : 54;
1482		u64 exp : 10;
1483	} s;
1484	struct cvmx_pemx_flr_zombie_ctl_s cn73xx;
1485	struct cvmx_pemx_flr_zombie_ctl_s cn78xx;
1486	struct cvmx_pemx_flr_zombie_ctl_s cnf75xx;
1487};
1488
1489typedef union cvmx_pemx_flr_zombie_ctl cvmx_pemx_flr_zombie_ctl_t;
1490
1491/**
1492 * cvmx_pem#_inb_read_credits
1493 *
1494 * This register contains the number of in-flight read operations from PCIe core to SLI.
1495 *
1496 */
1497union cvmx_pemx_inb_read_credits {
1498	u64 u64;
1499	struct cvmx_pemx_inb_read_credits_s {
1500		u64 reserved_7_63 : 57;
1501		u64 num : 7;
1502	} s;
1503	struct cvmx_pemx_inb_read_credits_cn61xx {
1504		u64 reserved_6_63 : 58;
1505		u64 num : 6;
1506	} cn61xx;
1507	struct cvmx_pemx_inb_read_credits_cn61xx cn66xx;
1508	struct cvmx_pemx_inb_read_credits_cn61xx cn68xx;
1509	struct cvmx_pemx_inb_read_credits_cn61xx cn70xx;
1510	struct cvmx_pemx_inb_read_credits_cn61xx cn70xxp1;
1511	struct cvmx_pemx_inb_read_credits_s cn73xx;
1512	struct cvmx_pemx_inb_read_credits_s cn78xx;
1513	struct cvmx_pemx_inb_read_credits_s cn78xxp1;
1514	struct cvmx_pemx_inb_read_credits_cn61xx cnf71xx;
1515	struct cvmx_pemx_inb_read_credits_s cnf75xx;
1516};
1517
1518typedef union cvmx_pemx_inb_read_credits cvmx_pemx_inb_read_credits_t;
1519
1520/**
1521 * cvmx_pem#_int_enb
1522 *
1523 * "PEM#_INT_ENB = PEM Interrupt Enable
1524 * Enables interrupt conditions for the PEM to generate an RSL interrupt."
1525 */
1526union cvmx_pemx_int_enb {
1527	u64 u64;
1528	struct cvmx_pemx_int_enb_s {
1529		u64 reserved_14_63 : 50;
1530		u64 crs_dr : 1;
1531		u64 crs_er : 1;
1532		u64 rdlk : 1;
1533		u64 exc : 1;
1534		u64 un_bx : 1;
1535		u64 un_b2 : 1;
1536		u64 un_b1 : 1;
1537		u64 up_bx : 1;
1538		u64 up_b2 : 1;
1539		u64 up_b1 : 1;
1540		u64 pmem : 1;
1541		u64 pmei : 1;
1542		u64 se : 1;
1543		u64 aeri : 1;
1544	} s;
1545	struct cvmx_pemx_int_enb_s cn61xx;
1546	struct cvmx_pemx_int_enb_s cn63xx;
1547	struct cvmx_pemx_int_enb_s cn63xxp1;
1548	struct cvmx_pemx_int_enb_s cn66xx;
1549	struct cvmx_pemx_int_enb_s cn68xx;
1550	struct cvmx_pemx_int_enb_s cn68xxp1;
1551	struct cvmx_pemx_int_enb_s cn70xx;
1552	struct cvmx_pemx_int_enb_s cn70xxp1;
1553	struct cvmx_pemx_int_enb_s cnf71xx;
1554};
1555
1556typedef union cvmx_pemx_int_enb cvmx_pemx_int_enb_t;
1557
1558/**
1559 * cvmx_pem#_int_enb_int
1560 *
1561 * "PEM#_INT_ENB_INT = PEM Interrupt Enable
1562 * Enables interrupt conditions for the PEM to generate an RSL interrupt."
1563 */
1564union cvmx_pemx_int_enb_int {
1565	u64 u64;
1566	struct cvmx_pemx_int_enb_int_s {
1567		u64 reserved_14_63 : 50;
1568		u64 crs_dr : 1;
1569		u64 crs_er : 1;
1570		u64 rdlk : 1;
1571		u64 exc : 1;
1572		u64 un_bx : 1;
1573		u64 un_b2 : 1;
1574		u64 un_b1 : 1;
1575		u64 up_bx : 1;
1576		u64 up_b2 : 1;
1577		u64 up_b1 : 1;
1578		u64 pmem : 1;
1579		u64 pmei : 1;
1580		u64 se : 1;
1581		u64 aeri : 1;
1582	} s;
1583	struct cvmx_pemx_int_enb_int_s cn61xx;
1584	struct cvmx_pemx_int_enb_int_s cn63xx;
1585	struct cvmx_pemx_int_enb_int_s cn63xxp1;
1586	struct cvmx_pemx_int_enb_int_s cn66xx;
1587	struct cvmx_pemx_int_enb_int_s cn68xx;
1588	struct cvmx_pemx_int_enb_int_s cn68xxp1;
1589	struct cvmx_pemx_int_enb_int_s cn70xx;
1590	struct cvmx_pemx_int_enb_int_s cn70xxp1;
1591	struct cvmx_pemx_int_enb_int_s cnf71xx;
1592};
1593
1594typedef union cvmx_pemx_int_enb_int cvmx_pemx_int_enb_int_t;
1595
1596/**
1597 * cvmx_pem#_int_sum
1598 *
1599 * This register contains the different interrupt summary bits of the PEM.
1600 *
1601 */
1602union cvmx_pemx_int_sum {
1603	u64 u64;
1604	struct cvmx_pemx_int_sum_s {
1605		u64 intd : 1;
1606		u64 intc : 1;
1607		u64 intb : 1;
1608		u64 inta : 1;
1609		u64 reserved_14_59 : 46;
1610		u64 crs_dr : 1;
1611		u64 crs_er : 1;
1612		u64 rdlk : 1;
1613		u64 exc : 1;
1614		u64 un_bx : 1;
1615		u64 un_b2 : 1;
1616		u64 un_b1 : 1;
1617		u64 up_bx : 1;
1618		u64 up_b2 : 1;
1619		u64 up_b1 : 1;
1620		u64 pmem : 1;
1621		u64 pmei : 1;
1622		u64 se : 1;
1623		u64 aeri : 1;
1624	} s;
1625	struct cvmx_pemx_int_sum_cn61xx {
1626		u64 reserved_14_63 : 50;
1627		u64 crs_dr : 1;
1628		u64 crs_er : 1;
1629		u64 rdlk : 1;
1630		u64 exc : 1;
1631		u64 un_bx : 1;
1632		u64 un_b2 : 1;
1633		u64 un_b1 : 1;
1634		u64 up_bx : 1;
1635		u64 up_b2 : 1;
1636		u64 up_b1 : 1;
1637		u64 pmem : 1;
1638		u64 pmei : 1;
1639		u64 se : 1;
1640		u64 aeri : 1;
1641	} cn61xx;
1642	struct cvmx_pemx_int_sum_cn61xx cn63xx;
1643	struct cvmx_pemx_int_sum_cn61xx cn63xxp1;
1644	struct cvmx_pemx_int_sum_cn61xx cn66xx;
1645	struct cvmx_pemx_int_sum_cn61xx cn68xx;
1646	struct cvmx_pemx_int_sum_cn61xx cn68xxp1;
1647	struct cvmx_pemx_int_sum_cn61xx cn70xx;
1648	struct cvmx_pemx_int_sum_cn61xx cn70xxp1;
1649	struct cvmx_pemx_int_sum_cn73xx {
1650		u64 intd : 1;
1651		u64 intc : 1;
1652		u64 intb : 1;
1653		u64 inta : 1;
1654		u64 reserved_14_59 : 46;
1655		u64 crs_dr : 1;
1656		u64 crs_er : 1;
1657		u64 rdlk : 1;
1658		u64 reserved_10_10 : 1;
1659		u64 un_bx : 1;
1660		u64 un_b2 : 1;
1661		u64 un_b1 : 1;
1662		u64 up_bx : 1;
1663		u64 up_b2 : 1;
1664		u64 up_b1 : 1;
1665		u64 reserved_3_3 : 1;
1666		u64 pmei : 1;
1667		u64 se : 1;
1668		u64 aeri : 1;
1669	} cn73xx;
1670	struct cvmx_pemx_int_sum_cn73xx cn78xx;
1671	struct cvmx_pemx_int_sum_cn73xx cn78xxp1;
1672	struct cvmx_pemx_int_sum_cn61xx cnf71xx;
1673	struct cvmx_pemx_int_sum_cn73xx cnf75xx;
1674};
1675
1676typedef union cvmx_pemx_int_sum cvmx_pemx_int_sum_t;
1677
1678/**
1679 * cvmx_pem#_on
1680 *
1681 * This register indicates that PEM is configured and ready.
1682 *
1683 */
1684union cvmx_pemx_on {
1685	u64 u64;
1686	struct cvmx_pemx_on_s {
1687		u64 reserved_2_63 : 62;
1688		u64 pemoor : 1;
1689		u64 pemon : 1;
1690	} s;
1691	struct cvmx_pemx_on_s cn70xx;
1692	struct cvmx_pemx_on_s cn70xxp1;
1693	struct cvmx_pemx_on_s cn73xx;
1694	struct cvmx_pemx_on_s cn78xx;
1695	struct cvmx_pemx_on_s cn78xxp1;
1696	struct cvmx_pemx_on_s cnf75xx;
1697};
1698
1699typedef union cvmx_pemx_on cvmx_pemx_on_t;
1700
1701/**
1702 * cvmx_pem#_p2n_bar0_start
1703 *
1704 * This register specifies the starting address for memory requests that are to be forwarded to
1705 * the SLI in RC mode.
1706 */
1707union cvmx_pemx_p2n_bar0_start {
1708	u64 u64;
1709	struct cvmx_pemx_p2n_bar0_start_s {
1710		u64 reserved_0_63 : 64;
1711	} s;
1712	struct cvmx_pemx_p2n_bar0_start_cn61xx {
1713		u64 addr : 50;
1714		u64 reserved_0_13 : 14;
1715	} cn61xx;
1716	struct cvmx_pemx_p2n_bar0_start_cn61xx cn63xx;
1717	struct cvmx_pemx_p2n_bar0_start_cn61xx cn63xxp1;
1718	struct cvmx_pemx_p2n_bar0_start_cn61xx cn66xx;
1719	struct cvmx_pemx_p2n_bar0_start_cn61xx cn68xx;
1720	struct cvmx_pemx_p2n_bar0_start_cn61xx cn68xxp1;
1721	struct cvmx_pemx_p2n_bar0_start_cn61xx cn70xx;
1722	struct cvmx_pemx_p2n_bar0_start_cn61xx cn70xxp1;
1723	struct cvmx_pemx_p2n_bar0_start_cn73xx {
1724		u64 addr : 41;
1725		u64 reserved_0_22 : 23;
1726	} cn73xx;
1727	struct cvmx_pemx_p2n_bar0_start_cn73xx cn78xx;
1728	struct cvmx_pemx_p2n_bar0_start_cn78xxp1 {
1729		u64 addr : 49;
1730		u64 reserved_0_14 : 15;
1731	} cn78xxp1;
1732	struct cvmx_pemx_p2n_bar0_start_cn61xx cnf71xx;
1733	struct cvmx_pemx_p2n_bar0_start_cn73xx cnf75xx;
1734};
1735
1736typedef union cvmx_pemx_p2n_bar0_start cvmx_pemx_p2n_bar0_start_t;
1737
1738/**
1739 * cvmx_pem#_p2n_bar1_start
1740 *
1741 * This register specifies the starting address for memory requests that are to be forwarded to
1742 * the SLI in RC mode.
1743 */
1744union cvmx_pemx_p2n_bar1_start {
1745	u64 u64;
1746	struct cvmx_pemx_p2n_bar1_start_s {
1747		u64 addr : 38;
1748		u64 reserved_0_25 : 26;
1749	} s;
1750	struct cvmx_pemx_p2n_bar1_start_s cn61xx;
1751	struct cvmx_pemx_p2n_bar1_start_s cn63xx;
1752	struct cvmx_pemx_p2n_bar1_start_s cn63xxp1;
1753	struct cvmx_pemx_p2n_bar1_start_s cn66xx;
1754	struct cvmx_pemx_p2n_bar1_start_s cn68xx;
1755	struct cvmx_pemx_p2n_bar1_start_s cn68xxp1;
1756	struct cvmx_pemx_p2n_bar1_start_s cn70xx;
1757	struct cvmx_pemx_p2n_bar1_start_s cn70xxp1;
1758	struct cvmx_pemx_p2n_bar1_start_s cn73xx;
1759	struct cvmx_pemx_p2n_bar1_start_s cn78xx;
1760	struct cvmx_pemx_p2n_bar1_start_s cn78xxp1;
1761	struct cvmx_pemx_p2n_bar1_start_s cnf71xx;
1762	struct cvmx_pemx_p2n_bar1_start_s cnf75xx;
1763};
1764
1765typedef union cvmx_pemx_p2n_bar1_start cvmx_pemx_p2n_bar1_start_t;
1766
1767/**
1768 * cvmx_pem#_p2n_bar2_start
1769 *
1770 * This register specifies the starting address for memory requests that are to be forwarded to
1771 * the SLI in RC mode.
1772 */
1773union cvmx_pemx_p2n_bar2_start {
1774	u64 u64;
1775	struct cvmx_pemx_p2n_bar2_start_s {
1776		u64 reserved_0_63 : 64;
1777	} s;
1778	struct cvmx_pemx_p2n_bar2_start_cn61xx {
1779		u64 addr : 23;
1780		u64 reserved_0_40 : 41;
1781	} cn61xx;
1782	struct cvmx_pemx_p2n_bar2_start_cn61xx cn63xx;
1783	struct cvmx_pemx_p2n_bar2_start_cn61xx cn63xxp1;
1784	struct cvmx_pemx_p2n_bar2_start_cn61xx cn66xx;
1785	struct cvmx_pemx_p2n_bar2_start_cn61xx cn68xx;
1786	struct cvmx_pemx_p2n_bar2_start_cn61xx cn68xxp1;
1787	struct cvmx_pemx_p2n_bar2_start_cn61xx cn70xx;
1788	struct cvmx_pemx_p2n_bar2_start_cn61xx cn70xxp1;
1789	struct cvmx_pemx_p2n_bar2_start_cn73xx {
1790		u64 addr : 19;
1791		u64 reserved_0_44 : 45;
1792	} cn73xx;
1793	struct cvmx_pemx_p2n_bar2_start_cn73xx cn78xx;
1794	struct cvmx_pemx_p2n_bar2_start_cn73xx cn78xxp1;
1795	struct cvmx_pemx_p2n_bar2_start_cn61xx cnf71xx;
1796	struct cvmx_pemx_p2n_bar2_start_cn73xx cnf75xx;
1797};
1798
1799typedef union cvmx_pemx_p2n_bar2_start cvmx_pemx_p2n_bar2_start_t;
1800
1801/**
1802 * cvmx_pem#_p2p_bar#_end
1803 *
1804 * This register specifies the ending address for memory requests that are to be forwarded to the
1805 * PCIe peer port.
1806 */
1807union cvmx_pemx_p2p_barx_end {
1808	u64 u64;
1809	struct cvmx_pemx_p2p_barx_end_s {
1810		u64 addr : 52;
1811		u64 reserved_0_11 : 12;
1812	} s;
1813	struct cvmx_pemx_p2p_barx_end_s cn63xx;
1814	struct cvmx_pemx_p2p_barx_end_s cn63xxp1;
1815	struct cvmx_pemx_p2p_barx_end_s cn66xx;
1816	struct cvmx_pemx_p2p_barx_end_s cn68xx;
1817	struct cvmx_pemx_p2p_barx_end_s cn68xxp1;
1818	struct cvmx_pemx_p2p_barx_end_s cn73xx;
1819	struct cvmx_pemx_p2p_barx_end_s cn78xx;
1820	struct cvmx_pemx_p2p_barx_end_s cn78xxp1;
1821	struct cvmx_pemx_p2p_barx_end_s cnf75xx;
1822};
1823
1824typedef union cvmx_pemx_p2p_barx_end cvmx_pemx_p2p_barx_end_t;
1825
1826/**
1827 * cvmx_pem#_p2p_bar#_start
1828 *
1829 * This register specifies the starting address for memory requests that are to be forwarded to
1830 * the PCIe peer port.
1831 */
1832union cvmx_pemx_p2p_barx_start {
1833	u64 u64;
1834	struct cvmx_pemx_p2p_barx_start_s {
1835		u64 addr : 52;
1836		u64 reserved_2_11 : 10;
1837		u64 dst : 2;
1838	} s;
1839	struct cvmx_pemx_p2p_barx_start_cn63xx {
1840		u64 addr : 52;
1841		u64 reserved_0_11 : 12;
1842	} cn63xx;
1843	struct cvmx_pemx_p2p_barx_start_cn63xx cn63xxp1;
1844	struct cvmx_pemx_p2p_barx_start_cn63xx cn66xx;
1845	struct cvmx_pemx_p2p_barx_start_cn63xx cn68xx;
1846	struct cvmx_pemx_p2p_barx_start_cn63xx cn68xxp1;
1847	struct cvmx_pemx_p2p_barx_start_s cn73xx;
1848	struct cvmx_pemx_p2p_barx_start_s cn78xx;
1849	struct cvmx_pemx_p2p_barx_start_s cn78xxp1;
1850	struct cvmx_pemx_p2p_barx_start_s cnf75xx;
1851};
1852
1853typedef union cvmx_pemx_p2p_barx_start cvmx_pemx_p2p_barx_start_t;
1854
1855/**
1856 * cvmx_pem#_qlm
1857 *
1858 * This register configures the PEM3 QLM.
1859 *
1860 */
1861union cvmx_pemx_qlm {
1862	u64 u64;
1863	struct cvmx_pemx_qlm_s {
1864		u64 reserved_0_63 : 64;
1865	} s;
1866	struct cvmx_pemx_qlm_cn73xx {
1867		u64 reserved_1_63 : 63;
1868		u64 pemdlmsel : 1;
1869	} cn73xx;
1870	struct cvmx_pemx_qlm_cn78xx {
1871		u64 reserved_1_63 : 63;
1872		u64 pem3qlm : 1;
1873	} cn78xx;
1874	struct cvmx_pemx_qlm_cn78xx cn78xxp1;
1875	struct cvmx_pemx_qlm_cn73xx cnf75xx;
1876};
1877
1878typedef union cvmx_pemx_qlm cvmx_pemx_qlm_t;
1879
1880/**
1881 * cvmx_pem#_spi_ctl
1882 *
1883 * PEM#_SPI_CTL register.
1884 *
1885 */
1886union cvmx_pemx_spi_ctl {
1887	u64 u64;
1888	struct cvmx_pemx_spi_ctl_s {
1889		u64 reserved_14_63 : 50;
1890		u64 start_busy : 1;
1891		u64 tvalid : 1;
1892		u64 cmd : 3;
1893		u64 adr : 9;
1894	} s;
1895	struct cvmx_pemx_spi_ctl_s cn70xx;
1896	struct cvmx_pemx_spi_ctl_s cn70xxp1;
1897	struct cvmx_pemx_spi_ctl_s cn73xx;
1898	struct cvmx_pemx_spi_ctl_s cn78xx;
1899	struct cvmx_pemx_spi_ctl_s cn78xxp1;
1900	struct cvmx_pemx_spi_ctl_s cnf75xx;
1901};
1902
1903typedef union cvmx_pemx_spi_ctl cvmx_pemx_spi_ctl_t;
1904
1905/**
1906 * cvmx_pem#_spi_data
1907 *
1908 * This register contains the most recently read or written SPI data and is unpredictable upon
1909 * power-up. Is valid after a PEM()_SPI_CTL[CMD]=READ/RDSR when hardware clears
1910 * PEM()_SPI_CTL[START_BUSY]. Is written after a PEM()_SPI_CTL[CMD]=WRITE/WRSR
1911 * when hardware clears PEM()_SPI_CTL[START_BUSY].
1912 */
1913union cvmx_pemx_spi_data {
1914	u64 u64;
1915	struct cvmx_pemx_spi_data_s {
1916		u64 preamble : 16;
1917		u64 reserved_45_47 : 3;
1918		u64 cs2 : 1;
1919		u64 adr : 12;
1920		u64 data : 32;
1921	} s;
1922	struct cvmx_pemx_spi_data_s cn70xx;
1923	struct cvmx_pemx_spi_data_s cn70xxp1;
1924	struct cvmx_pemx_spi_data_s cn73xx;
1925	struct cvmx_pemx_spi_data_s cn78xx;
1926	struct cvmx_pemx_spi_data_s cn78xxp1;
1927	struct cvmx_pemx_spi_data_s cnf75xx;
1928};
1929
1930typedef union cvmx_pemx_spi_data cvmx_pemx_spi_data_t;
1931
1932/**
1933 * cvmx_pem#_strap
1934 *
1935 * "Below are in pesc_csr
1936 * The input strapping pins"
1937 */
1938union cvmx_pemx_strap {
1939	u64 u64;
1940	struct cvmx_pemx_strap_s {
1941		u64 reserved_5_63 : 59;
1942		u64 miopem2dlm5sel : 1;
1943		u64 pilaneswap : 1;
1944		u64 reserved_0_2 : 3;
1945	} s;
1946	struct cvmx_pemx_strap_cn70xx {
1947		u64 reserved_4_63 : 60;
1948		u64 pilaneswap : 1;
1949		u64 pimode : 3;
1950	} cn70xx;
1951	struct cvmx_pemx_strap_cn70xx cn70xxp1;
1952	struct cvmx_pemx_strap_cn73xx {
1953		u64 reserved_5_63 : 59;
1954		u64 miopem2dlm5sel : 1;
1955		u64 pilaneswap : 1;
1956		u64 pilanes8 : 1;
1957		u64 pimode : 2;
1958	} cn73xx;
1959	struct cvmx_pemx_strap_cn78xx {
1960		u64 reserved_4_63 : 60;
1961		u64 pilaneswap : 1;
1962		u64 pilanes8 : 1;
1963		u64 pimode : 2;
1964	} cn78xx;
1965	struct cvmx_pemx_strap_cn78xx cn78xxp1;
1966	struct cvmx_pemx_strap_cnf75xx {
1967		u64 reserved_5_63 : 59;
1968		u64 miopem2dlm5sel : 1;
1969		u64 pilaneswap : 1;
1970		u64 pilanes4 : 1;
1971		u64 pimode : 2;
1972	} cnf75xx;
1973};
1974
1975typedef union cvmx_pemx_strap cvmx_pemx_strap_t;
1976
1977/**
1978 * cvmx_pem#_tlp_credits
1979 *
1980 * This register specifies the number of credits for use in moving TLPs. When this register is
1981 * written, the credit values are reset to the register value. A write to this register should
1982 * take place before traffic flow starts.
1983 */
1984union cvmx_pemx_tlp_credits {
1985	u64 u64;
1986	struct cvmx_pemx_tlp_credits_s {
1987		u64 reserved_56_63 : 8;
1988		u64 peai_ppf : 8;
1989		u64 pem_cpl : 8;
1990		u64 pem_np : 8;
1991		u64 pem_p : 8;
1992		u64 sli_cpl : 8;
1993		u64 sli_np : 8;
1994		u64 sli_p : 8;
1995	} s;
1996	struct cvmx_pemx_tlp_credits_cn61xx {
1997		u64 reserved_56_63 : 8;
1998		u64 peai_ppf : 8;
1999		u64 reserved_24_47 : 24;
2000		u64 sli_cpl : 8;
2001		u64 sli_np : 8;
2002		u64 sli_p : 8;
2003	} cn61xx;
2004	struct cvmx_pemx_tlp_credits_s cn63xx;
2005	struct cvmx_pemx_tlp_credits_s cn63xxp1;
2006	struct cvmx_pemx_tlp_credits_s cn66xx;
2007	struct cvmx_pemx_tlp_credits_s cn68xx;
2008	struct cvmx_pemx_tlp_credits_s cn68xxp1;
2009	struct cvmx_pemx_tlp_credits_cn61xx cn70xx;
2010	struct cvmx_pemx_tlp_credits_cn61xx cn70xxp1;
2011	struct cvmx_pemx_tlp_credits_cn73xx {
2012		u64 reserved_48_63 : 16;
2013		u64 pem_cpl : 8;
2014		u64 pem_np : 8;
2015		u64 pem_p : 8;
2016		u64 sli_cpl : 8;
2017		u64 sli_np : 8;
2018		u64 sli_p : 8;
2019	} cn73xx;
2020	struct cvmx_pemx_tlp_credits_cn73xx cn78xx;
2021	struct cvmx_pemx_tlp_credits_cn73xx cn78xxp1;
2022	struct cvmx_pemx_tlp_credits_cn61xx cnf71xx;
2023	struct cvmx_pemx_tlp_credits_cn73xx cnf75xx;
2024};
2025
2026typedef union cvmx_pemx_tlp_credits cvmx_pemx_tlp_credits_t;
2027
2028#endif
2029