1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020 Marvell International Ltd.
5 * Configuration and status register (CSR) type definitions for
9 #ifndef __CVMX_PEMX_DEFS_H__
10 #define __CVMX_PEMX_DEFS_H__
12 static inline u64 CVMX_PEMX_BAR1_INDEXX(unsigned long offset, unsigned long block_id)
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;
33 return 0x00011800C0000100ull + ((offset) + (block_id) * 0x200000ull) * 8;
36 static inline u64 CVMX_PEMX_BAR2_MASK(unsigned long offset)
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;
56 return 0x00011800C00000B0ull + (offset) * 0x1000000ull;
59 static inline u64 CVMX_PEMX_BAR_CTL(unsigned long offset)
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;
80 return 0x00011800C00000A8ull + (offset) * 0x1000000ull;
83 static inline u64 CVMX_PEMX_BIST_STATUS(unsigned long offset)
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;
104 return 0x00011800C0000440ull + (offset) * 0x1000000ull;
107 static inline u64 CVMX_PEMX_BIST_STATUS2(unsigned long offset)
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;
119 return 0x00011800C0000420ull + (offset) * 0x1000000ull;
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)
129 static inline u64 CVMX_PEMX_DBG_INFO(unsigned long offset)
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;
150 return 0x00011800C00000D0ull + (offset) * 0x1000000ull;
153 #define CVMX_PEMX_DBG_INFO_EN(offset) (0x00011800C00000A0ull + ((offset) & 3) * 0x1000000ull)
154 #define CVMX_PEMX_DIAG_STATUS(offset) (0x00011800C0000020ull + ((offset) & 3) * 0x1000000ull)
155 static inline u64 CVMX_PEMX_ECC_ENA(unsigned long offset)
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;
170 return 0x00011800C0000448ull + (offset) * 0x1000000ull;
173 static inline u64 CVMX_PEMX_ECC_SYND_CTRL(unsigned long offset)
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;
188 return 0x00011800C0000450ull + (offset) * 0x1000000ull;
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)
197 static inline u64 CVMX_PEMX_INB_READ_CREDITS(unsigned long offset)
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;
217 return 0x00011800C00000B8ull + (offset) * 0x1000000ull;
220 static inline u64 CVMX_PEMX_INT_ENB(unsigned long offset)
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;
232 return 0x00011800C0000410ull + (offset) * 0x1000000ull;
235 static inline u64 CVMX_PEMX_INT_ENB_INT(unsigned long offset)
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;
247 return 0x00011800C0000418ull + (offset) * 0x1000000ull;
250 static inline u64 CVMX_PEMX_INT_SUM(unsigned long offset)
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;
271 return 0x00011800C0000428ull + (offset) * 0x1000000ull;
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)
289 * cvmx_pem#_bar1_index#
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].
294 union cvmx_pemx_bar1_indexx {
296 struct cvmx_pemx_bar1_indexx_s {
297 u64 reserved_24_63 : 40;
303 struct cvmx_pemx_bar1_indexx_cn61xx {
304 u64 reserved_20_63 : 44;
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;
324 typedef union cvmx_pemx_bar1_indexx cvmx_pemx_bar1_indexx_t;
327 * cvmx_pem#_bar2_mask
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.
333 union cvmx_pemx_bar2_mask {
335 struct cvmx_pemx_bar2_mask_s {
336 u64 reserved_45_63 : 19;
338 u64 reserved_0_2 : 3;
340 struct cvmx_pemx_bar2_mask_cn61xx {
341 u64 reserved_38_63 : 26;
343 u64 reserved_0_2 : 3;
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;
353 u64 reserved_0_2 : 3;
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;
361 typedef union cvmx_pemx_bar2_mask cvmx_pemx_bar2_mask_t;
366 * This register contains control for BAR accesses.
369 union cvmx_pemx_bar_ctl {
371 struct cvmx_pemx_bar_ctl_s {
372 u64 reserved_7_63 : 57;
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;
393 typedef union cvmx_pemx_bar_ctl cvmx_pemx_bar_ctl_t;
396 * cvmx_pem#_bist_status
398 * This register contains results from BIST runs of PEM's memories.
401 union cvmx_pemx_bist_status {
403 struct cvmx_pemx_bist_status_s {
404 u64 reserved_16_63 : 48;
406 u64 reserved_14_14 : 1;
413 u64 reserved_0_7 : 8;
415 struct cvmx_pemx_bist_status_cn61xx {
416 u64 reserved_8_63 : 56;
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;
440 struct cvmx_pemx_bist_status_cn70xx cn70xxp1;
441 struct cvmx_pemx_bist_status_cn73xx {
442 u64 reserved_16_63 : 48;
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;
466 typedef union cvmx_pemx_bist_status cvmx_pemx_bist_status_t;
469 * cvmx_pem#_bist_status2
471 * "PEM#_BIST_STATUS2 = PEM BIST Status Register
472 * Results from BIST runs of PEM's memories."
474 union cvmx_pemx_bist_status2 {
476 struct cvmx_pemx_bist_status2_s {
477 u64 reserved_13_63 : 51;
481 u64 reserved_0_9 : 10;
483 struct cvmx_pemx_bist_status2_cn61xx {
484 u64 reserved_10_63 : 54;
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;
518 struct cvmx_pemx_bist_status2_cn70xx cn70xxp1;
519 struct cvmx_pemx_bist_status2_cn61xx cnf71xx;
522 typedef union cvmx_pemx_bist_status2 cvmx_pemx_bist_status2_t;
527 * Configuration of the PCIe Application.
530 union cvmx_pemx_cfg {
532 struct cvmx_pemx_cfg_s {
533 u64 reserved_5_63 : 59;
535 u64 reserved_2_3 : 2;
538 struct cvmx_pemx_cfg_cn70xx {
539 u64 reserved_5_63 : 59;
544 struct cvmx_pemx_cfg_cn70xx cn70xxp1;
545 struct cvmx_pemx_cfg_cn73xx {
546 u64 reserved_5_63 : 59;
552 struct cvmx_pemx_cfg_cn73xx cn78xx;
553 struct cvmx_pemx_cfg_cn73xx cn78xxp1;
554 struct cvmx_pemx_cfg_cn73xx cnf75xx;
557 typedef union cvmx_pemx_cfg cvmx_pemx_cfg_t;
562 * This register allows read access to the configuration in the PCIe core.
565 union cvmx_pemx_cfg_rd {
567 struct cvmx_pemx_cfg_rd_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;
586 typedef union cvmx_pemx_cfg_rd cvmx_pemx_cfg_rd_t;
591 * This register allows write access to the configuration in the PCIe core.
594 union cvmx_pemx_cfg_wr {
596 struct cvmx_pemx_cfg_wr_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;
615 typedef union cvmx_pemx_cfg_wr cvmx_pemx_cfg_wr_t;
620 * This register contains the clock enable for ECLK and PCE_CLK.
623 union cvmx_pemx_clk_en {
625 struct cvmx_pemx_clk_en_s {
626 u64 reserved_2_63 : 62;
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;
638 typedef union cvmx_pemx_clk_en cvmx_pemx_clk_en_t;
641 * cvmx_pem#_cpl_lut_valid
643 * This register specifies the bit set for an outstanding tag read.
646 union cvmx_pemx_cpl_lut_valid {
648 struct cvmx_pemx_cpl_lut_valid_s {
651 struct cvmx_pemx_cpl_lut_valid_cn61xx {
652 u64 reserved_32_63 : 32;
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;
669 typedef union cvmx_pemx_cpl_lut_valid cvmx_pemx_cpl_lut_valid_t;
672 * cvmx_pem#_ctl_status
674 * This is a general control and status register of the PEM.
677 union cvmx_pemx_ctl_status {
679 struct cvmx_pemx_ctl_status_s {
680 u64 reserved_51_63 : 13;
687 u64 reserved_32_33 : 2;
689 u64 reserved_12_15 : 4;
693 u64 reserved_7_8 : 2;
702 struct cvmx_pemx_ctl_status_cn61xx {
703 u64 reserved_48_63 : 16;
707 u64 reserved_32_33 : 2;
709 u64 reserved_12_15 : 4;
713 u64 reserved_7_8 : 2;
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;
732 u64 reserved_48_49 : 2;
736 u64 reserved_32_33 : 2;
738 u64 reserved_12_15 : 4;
742 u64 reserved_7_8 : 2;
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;
757 typedef union cvmx_pemx_ctl_status cvmx_pemx_ctl_status_t;
760 * cvmx_pem#_ctl_status2
762 * This register contains additional general control and status of the PEM.
765 union cvmx_pemx_ctl_status2 {
767 struct cvmx_pemx_ctl_status2_s {
768 u64 reserved_16_63 : 48;
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;
777 typedef union cvmx_pemx_ctl_status2 cvmx_pemx_ctl_status2_t;
782 * This is a debug information register of the PEM.
785 union cvmx_pemx_dbg_info {
787 struct cvmx_pemx_dbg_info_s {
788 u64 reserved_62_63 : 2;
799 u64 reserved_50_51 : 2;
804 u64 reserved_34_45 : 12;
806 u64 reserved_31_32 : 2;
839 struct cvmx_pemx_dbg_info_cn61xx {
840 u64 reserved_31_63 : 33;
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;
927 struct cvmx_pemx_dbg_info_cn70xx cn70xxp1;
928 struct cvmx_pemx_dbg_info_cn73xx {
929 u64 reserved_62_63 : 2;
993 struct cvmx_pemx_dbg_info_cn73xx cn78xx;
994 struct cvmx_pemx_dbg_info_cn78xxp1 {
995 u64 reserved_58_63 : 6;
1021 u64 reserved_32_32 : 1;
1055 struct cvmx_pemx_dbg_info_cn61xx cnf71xx;
1056 struct cvmx_pemx_dbg_info_cn73xx cnf75xx;
1059 typedef union cvmx_pemx_dbg_info cvmx_pemx_dbg_info_t;
1062 * cvmx_pem#_dbg_info_en
1064 * "PEM#_DBG_INFO_EN = PEM Debug Information Enable
1065 * Allows PEM_DBG_INFO to generate interrupts when cooresponding enable bit is set."
1067 union cvmx_pemx_dbg_info_en {
1069 struct cvmx_pemx_dbg_info_en_s {
1070 u64 reserved_46_63 : 18;
1118 struct cvmx_pemx_dbg_info_en_cn61xx {
1119 u64 reserved_31_63 : 33;
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;
1162 typedef union cvmx_pemx_dbg_info_en cvmx_pemx_dbg_info_en_t;
1165 * cvmx_pem#_diag_status
1167 * This register contains selection control for the core diagnostic bus.
1170 union cvmx_pemx_diag_status {
1172 struct cvmx_pemx_diag_status_s {
1173 u64 reserved_9_63 : 55;
1180 struct cvmx_pemx_diag_status_cn61xx {
1181 u64 reserved_4_63 : 60;
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;
1199 struct cvmx_pemx_diag_status_cn70xx cn70xxp1;
1200 struct cvmx_pemx_diag_status_cn73xx {
1201 u64 reserved_63_9 : 55;
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;
1214 typedef union cvmx_pemx_diag_status cvmx_pemx_diag_status_t;
1219 * Contains enables for TLP FIFO ECC RAMs.
1222 union cvmx_pemx_ecc_ena {
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;
1229 u64 reserved_11_31 : 21;
1235 u64 reserved_0_5 : 6;
1237 struct cvmx_pemx_ecc_ena_cn70xx {
1238 u64 reserved_6_63 : 58;
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;
1252 u64 reserved_11_31 : 21;
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;
1271 u64 reserved_9_31 : 23;
1282 struct cvmx_pemx_ecc_ena_cn73xx cnf75xx;
1285 typedef union cvmx_pemx_ecc_ena cvmx_pemx_ecc_ena_t;
1288 * cvmx_pem#_ecc_synd_ctrl
1290 * This register contains syndrome control for TLP FIFO ECC RAMs.
1293 union cvmx_pemx_ecc_synd_ctrl {
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;
1300 u64 reserved_22_31 : 10;
1306 u64 reserved_0_11 : 12;
1308 struct cvmx_pemx_ecc_synd_ctrl_cn70xx {
1309 u64 reserved_12_63 : 52;
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;
1323 u64 reserved_22_31 : 10;
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;
1342 u64 reserved_18_31 : 14;
1353 struct cvmx_pemx_ecc_synd_ctrl_cn73xx cnf75xx;
1356 typedef union cvmx_pemx_ecc_synd_ctrl cvmx_pemx_ecc_synd_ctrl_t;
1361 union cvmx_pemx_eco {
1363 struct cvmx_pemx_eco_s {
1364 u64 reserved_8_63 : 56;
1367 struct cvmx_pemx_eco_s cn73xx;
1368 struct cvmx_pemx_eco_s cn78xx;
1369 struct cvmx_pemx_eco_s cnf75xx;
1372 typedef union cvmx_pemx_eco cvmx_pemx_eco_t;
1375 * cvmx_pem#_flr_glblcnt_ctl
1377 union cvmx_pemx_flr_glblcnt_ctl {
1379 struct cvmx_pemx_flr_glblcnt_ctl_s {
1380 u64 reserved_4_63 : 60;
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;
1390 typedef union cvmx_pemx_flr_glblcnt_ctl cvmx_pemx_flr_glblcnt_ctl_t;
1393 * cvmx_pem#_flr_pf0_vf_stopreq
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.
1405 * STOPREQ mimics the behavior of PCIEEPVF()_CFG001[ME] for outbound requests that will
1406 * master the PCIe bus (P and NP).
1408 * Note that STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
1409 * nor on M2S traffic.
1411 union cvmx_pemx_flr_pf0_vf_stopreq {
1413 struct cvmx_pemx_flr_pf0_vf_stopreq_s {
1414 u64 vf_stopreq : 64;
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;
1421 typedef union cvmx_pemx_flr_pf0_vf_stopreq cvmx_pemx_flr_pf0_vf_stopreq_t;
1424 * cvmx_pem#_flr_pf_stopreq
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.
1436 * STOPREQ mimics the behavior of PCIEEP()_CFG001[ME] for outbound requests that will
1437 * master the PCIe bus (P and NP).
1439 * STOPREQ will have no effect on completions returned by CNXXXX over the S2M,
1440 * nor on M2S traffic.
1442 * When a PF()_STOPREQ is set, none of the associated
1443 * PEM()_FLR_PF()_VF_STOPREQ[VF_STOPREQ] will be set.
1445 * STOPREQ is reset when the MAC is reset, and is not reset after a chip soft reset.
1447 union cvmx_pemx_flr_pf_stopreq {
1449 struct cvmx_pemx_flr_pf_stopreq_s {
1450 u64 reserved_1_63 : 63;
1451 u64 pf0_stopreq : 1;
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;
1458 typedef union cvmx_pemx_flr_pf_stopreq cvmx_pemx_flr_pf_stopreq_t;
1461 * cvmx_pem#_flr_stopreq_ctl
1463 union cvmx_pemx_flr_stopreq_ctl {
1465 struct cvmx_pemx_flr_stopreq_ctl_s {
1466 u64 reserved_1_63 : 63;
1469 struct cvmx_pemx_flr_stopreq_ctl_s cn78xx;
1470 struct cvmx_pemx_flr_stopreq_ctl_s cnf75xx;
1473 typedef union cvmx_pemx_flr_stopreq_ctl cvmx_pemx_flr_stopreq_ctl_t;
1476 * cvmx_pem#_flr_zombie_ctl
1478 union cvmx_pemx_flr_zombie_ctl {
1480 struct cvmx_pemx_flr_zombie_ctl_s {
1481 u64 reserved_10_63 : 54;
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;
1489 typedef union cvmx_pemx_flr_zombie_ctl cvmx_pemx_flr_zombie_ctl_t;
1492 * cvmx_pem#_inb_read_credits
1494 * This register contains the number of in-flight read operations from PCIe core to SLI.
1497 union cvmx_pemx_inb_read_credits {
1499 struct cvmx_pemx_inb_read_credits_s {
1500 u64 reserved_7_63 : 57;
1503 struct cvmx_pemx_inb_read_credits_cn61xx {
1504 u64 reserved_6_63 : 58;
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;
1518 typedef union cvmx_pemx_inb_read_credits cvmx_pemx_inb_read_credits_t;
1523 * "PEM#_INT_ENB = PEM Interrupt Enable
1524 * Enables interrupt conditions for the PEM to generate an RSL interrupt."
1526 union cvmx_pemx_int_enb {
1528 struct cvmx_pemx_int_enb_s {
1529 u64 reserved_14_63 : 50;
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;
1556 typedef union cvmx_pemx_int_enb cvmx_pemx_int_enb_t;
1559 * cvmx_pem#_int_enb_int
1561 * "PEM#_INT_ENB_INT = PEM Interrupt Enable
1562 * Enables interrupt conditions for the PEM to generate an RSL interrupt."
1564 union cvmx_pemx_int_enb_int {
1566 struct cvmx_pemx_int_enb_int_s {
1567 u64 reserved_14_63 : 50;
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;
1594 typedef union cvmx_pemx_int_enb_int cvmx_pemx_int_enb_int_t;
1599 * This register contains the different interrupt summary bits of the PEM.
1602 union cvmx_pemx_int_sum {
1604 struct cvmx_pemx_int_sum_s {
1609 u64 reserved_14_59 : 46;
1625 struct cvmx_pemx_int_sum_cn61xx {
1626 u64 reserved_14_63 : 50;
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 {
1654 u64 reserved_14_59 : 46;
1658 u64 reserved_10_10 : 1;
1665 u64 reserved_3_3 : 1;
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;
1676 typedef union cvmx_pemx_int_sum cvmx_pemx_int_sum_t;
1681 * This register indicates that PEM is configured and ready.
1684 union cvmx_pemx_on {
1686 struct cvmx_pemx_on_s {
1687 u64 reserved_2_63 : 62;
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;
1699 typedef union cvmx_pemx_on cvmx_pemx_on_t;
1702 * cvmx_pem#_p2n_bar0_start
1704 * This register specifies the starting address for memory requests that are to be forwarded to
1705 * the SLI in RC mode.
1707 union cvmx_pemx_p2n_bar0_start {
1709 struct cvmx_pemx_p2n_bar0_start_s {
1710 u64 reserved_0_63 : 64;
1712 struct cvmx_pemx_p2n_bar0_start_cn61xx {
1714 u64 reserved_0_13 : 14;
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 {
1725 u64 reserved_0_22 : 23;
1727 struct cvmx_pemx_p2n_bar0_start_cn73xx cn78xx;
1728 struct cvmx_pemx_p2n_bar0_start_cn78xxp1 {
1730 u64 reserved_0_14 : 15;
1732 struct cvmx_pemx_p2n_bar0_start_cn61xx cnf71xx;
1733 struct cvmx_pemx_p2n_bar0_start_cn73xx cnf75xx;
1736 typedef union cvmx_pemx_p2n_bar0_start cvmx_pemx_p2n_bar0_start_t;
1739 * cvmx_pem#_p2n_bar1_start
1741 * This register specifies the starting address for memory requests that are to be forwarded to
1742 * the SLI in RC mode.
1744 union cvmx_pemx_p2n_bar1_start {
1746 struct cvmx_pemx_p2n_bar1_start_s {
1748 u64 reserved_0_25 : 26;
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;
1765 typedef union cvmx_pemx_p2n_bar1_start cvmx_pemx_p2n_bar1_start_t;
1768 * cvmx_pem#_p2n_bar2_start
1770 * This register specifies the starting address for memory requests that are to be forwarded to
1771 * the SLI in RC mode.
1773 union cvmx_pemx_p2n_bar2_start {
1775 struct cvmx_pemx_p2n_bar2_start_s {
1776 u64 reserved_0_63 : 64;
1778 struct cvmx_pemx_p2n_bar2_start_cn61xx {
1780 u64 reserved_0_40 : 41;
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 {
1791 u64 reserved_0_44 : 45;
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;
1799 typedef union cvmx_pemx_p2n_bar2_start cvmx_pemx_p2n_bar2_start_t;
1802 * cvmx_pem#_p2p_bar#_end
1804 * This register specifies the ending address for memory requests that are to be forwarded to the
1807 union cvmx_pemx_p2p_barx_end {
1809 struct cvmx_pemx_p2p_barx_end_s {
1811 u64 reserved_0_11 : 12;
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;
1824 typedef union cvmx_pemx_p2p_barx_end cvmx_pemx_p2p_barx_end_t;
1827 * cvmx_pem#_p2p_bar#_start
1829 * This register specifies the starting address for memory requests that are to be forwarded to
1830 * the PCIe peer port.
1832 union cvmx_pemx_p2p_barx_start {
1834 struct cvmx_pemx_p2p_barx_start_s {
1836 u64 reserved_2_11 : 10;
1839 struct cvmx_pemx_p2p_barx_start_cn63xx {
1841 u64 reserved_0_11 : 12;
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;
1853 typedef union cvmx_pemx_p2p_barx_start cvmx_pemx_p2p_barx_start_t;
1858 * This register configures the PEM3 QLM.
1861 union cvmx_pemx_qlm {
1863 struct cvmx_pemx_qlm_s {
1864 u64 reserved_0_63 : 64;
1866 struct cvmx_pemx_qlm_cn73xx {
1867 u64 reserved_1_63 : 63;
1870 struct cvmx_pemx_qlm_cn78xx {
1871 u64 reserved_1_63 : 63;
1874 struct cvmx_pemx_qlm_cn78xx cn78xxp1;
1875 struct cvmx_pemx_qlm_cn73xx cnf75xx;
1878 typedef union cvmx_pemx_qlm cvmx_pemx_qlm_t;
1883 * PEM#_SPI_CTL register.
1886 union cvmx_pemx_spi_ctl {
1888 struct cvmx_pemx_spi_ctl_s {
1889 u64 reserved_14_63 : 50;
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;
1903 typedef union cvmx_pemx_spi_ctl cvmx_pemx_spi_ctl_t;
1906 * cvmx_pem#_spi_data
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].
1913 union cvmx_pemx_spi_data {
1915 struct cvmx_pemx_spi_data_s {
1917 u64 reserved_45_47 : 3;
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;
1930 typedef union cvmx_pemx_spi_data cvmx_pemx_spi_data_t;
1935 * "Below are in pesc_csr
1936 * The input strapping pins"
1938 union cvmx_pemx_strap {
1940 struct cvmx_pemx_strap_s {
1941 u64 reserved_5_63 : 59;
1942 u64 miopem2dlm5sel : 1;
1944 u64 reserved_0_2 : 3;
1946 struct cvmx_pemx_strap_cn70xx {
1947 u64 reserved_4_63 : 60;
1951 struct cvmx_pemx_strap_cn70xx cn70xxp1;
1952 struct cvmx_pemx_strap_cn73xx {
1953 u64 reserved_5_63 : 59;
1954 u64 miopem2dlm5sel : 1;
1959 struct cvmx_pemx_strap_cn78xx {
1960 u64 reserved_4_63 : 60;
1965 struct cvmx_pemx_strap_cn78xx cn78xxp1;
1966 struct cvmx_pemx_strap_cnf75xx {
1967 u64 reserved_5_63 : 59;
1968 u64 miopem2dlm5sel : 1;
1975 typedef union cvmx_pemx_strap cvmx_pemx_strap_t;
1978 * cvmx_pem#_tlp_credits
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.
1984 union cvmx_pemx_tlp_credits {
1986 struct cvmx_pemx_tlp_credits_s {
1987 u64 reserved_56_63 : 8;
1996 struct cvmx_pemx_tlp_credits_cn61xx {
1997 u64 reserved_56_63 : 8;
1999 u64 reserved_24_47 : 24;
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;
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;
2026 typedef union cvmx_pemx_tlp_credits cvmx_pemx_tlp_credits_t;