1 /***********************license start***************
2 * Copyright (c) 2003-2012 Cavium Inc. (support@cavium.com). All rights
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
18 * * Neither the name of Cavium Inc. nor the names of
19 * its contributors may be used to endorse or promote products
20 * derived from this software without specific prior written
23 * This Software, including technical data, may be subject to U.S. export control
24 * laws, including the U.S. Export Administration Act and its associated
25 * regulations, and may be subject to export or import regulations in other
28 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
37 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38 ***********************license end**************************************/
44 * Configuration and status register (CSR) type definitions for
47 * This file is auto generated. Do not edit.
52 #ifndef __CVMX_L2C_DEFS_H__
53 #define __CVMX_L2C_DEFS_H__
55 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
56 #define CVMX_L2C_BIG_CTL CVMX_L2C_BIG_CTL_FUNC()
57 static inline uint64_t CVMX_L2C_BIG_CTL_FUNC(void)
59 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
60 cvmx_warn("CVMX_L2C_BIG_CTL not supported on this chip\n");
61 return CVMX_ADD_IO_SEG(0x0001180080800030ull);
64 #define CVMX_L2C_BIG_CTL (CVMX_ADD_IO_SEG(0x0001180080800030ull))
66 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
67 #define CVMX_L2C_BST CVMX_L2C_BST_FUNC()
68 static inline uint64_t CVMX_L2C_BST_FUNC(void)
70 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
71 cvmx_warn("CVMX_L2C_BST not supported on this chip\n");
72 return CVMX_ADD_IO_SEG(0x00011800808007F8ull);
75 #define CVMX_L2C_BST (CVMX_ADD_IO_SEG(0x00011800808007F8ull))
77 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
78 #define CVMX_L2C_BST0 CVMX_L2C_BST0_FUNC()
79 static inline uint64_t CVMX_L2C_BST0_FUNC(void)
81 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
82 cvmx_warn("CVMX_L2C_BST0 not supported on this chip\n");
83 return CVMX_ADD_IO_SEG(0x00011800800007F8ull);
86 #define CVMX_L2C_BST0 (CVMX_ADD_IO_SEG(0x00011800800007F8ull))
88 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
89 #define CVMX_L2C_BST1 CVMX_L2C_BST1_FUNC()
90 static inline uint64_t CVMX_L2C_BST1_FUNC(void)
92 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
93 cvmx_warn("CVMX_L2C_BST1 not supported on this chip\n");
94 return CVMX_ADD_IO_SEG(0x00011800800007F0ull);
97 #define CVMX_L2C_BST1 (CVMX_ADD_IO_SEG(0x00011800800007F0ull))
99 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
100 #define CVMX_L2C_BST2 CVMX_L2C_BST2_FUNC()
101 static inline uint64_t CVMX_L2C_BST2_FUNC(void)
103 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
104 cvmx_warn("CVMX_L2C_BST2 not supported on this chip\n");
105 return CVMX_ADD_IO_SEG(0x00011800800007E8ull);
108 #define CVMX_L2C_BST2 (CVMX_ADD_IO_SEG(0x00011800800007E8ull))
110 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
111 static inline uint64_t CVMX_L2C_BST_MEMX(unsigned long block_id)
114 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
115 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
116 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
117 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
118 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
119 cvmx_warn("CVMX_L2C_BST_MEMX(%lu) is invalid on this chip\n", block_id);
120 return CVMX_ADD_IO_SEG(0x0001180080C007F8ull) + ((block_id) & 3) * 0x40000ull;
123 #define CVMX_L2C_BST_MEMX(block_id) (CVMX_ADD_IO_SEG(0x0001180080C007F8ull) + ((block_id) & 3) * 0x40000ull)
125 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
126 static inline uint64_t CVMX_L2C_BST_TDTX(unsigned long block_id)
129 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
130 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
131 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
132 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
133 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
134 cvmx_warn("CVMX_L2C_BST_TDTX(%lu) is invalid on this chip\n", block_id);
135 return CVMX_ADD_IO_SEG(0x0001180080A007F0ull) + ((block_id) & 3) * 0x40000ull;
138 #define CVMX_L2C_BST_TDTX(block_id) (CVMX_ADD_IO_SEG(0x0001180080A007F0ull) + ((block_id) & 3) * 0x40000ull)
140 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
141 static inline uint64_t CVMX_L2C_BST_TTGX(unsigned long block_id)
144 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
145 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
146 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
147 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
148 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
149 cvmx_warn("CVMX_L2C_BST_TTGX(%lu) is invalid on this chip\n", block_id);
150 return CVMX_ADD_IO_SEG(0x0001180080A007F8ull) + ((block_id) & 3) * 0x40000ull;
153 #define CVMX_L2C_BST_TTGX(block_id) (CVMX_ADD_IO_SEG(0x0001180080A007F8ull) + ((block_id) & 3) * 0x40000ull)
155 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
156 #define CVMX_L2C_CFG CVMX_L2C_CFG_FUNC()
157 static inline uint64_t CVMX_L2C_CFG_FUNC(void)
159 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
160 cvmx_warn("CVMX_L2C_CFG not supported on this chip\n");
161 return CVMX_ADD_IO_SEG(0x0001180080000000ull);
164 #define CVMX_L2C_CFG (CVMX_ADD_IO_SEG(0x0001180080000000ull))
166 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
167 static inline uint64_t CVMX_L2C_COP0_MAPX(unsigned long offset)
170 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1023) || ((offset >= 16128) && (offset <= 16383)))) ||
171 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1535) || ((offset >= 16128) && (offset <= 16383)))) ||
172 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 2559) || ((offset >= 16128) && (offset <= 16383)))) ||
173 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 8191) || ((offset >= 16128) && (offset <= 16383)))) ||
174 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1023) || ((offset >= 16128) && (offset <= 16383))))))
175 cvmx_warn("CVMX_L2C_COP0_MAPX(%lu) is invalid on this chip\n", offset);
176 return CVMX_ADD_IO_SEG(0x0001180080940000ull) + ((offset) & 16383) * 8;
179 #define CVMX_L2C_COP0_MAPX(offset) (CVMX_ADD_IO_SEG(0x0001180080940000ull) + ((offset) & 16383) * 8)
181 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
182 #define CVMX_L2C_CTL CVMX_L2C_CTL_FUNC()
183 static inline uint64_t CVMX_L2C_CTL_FUNC(void)
185 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
186 cvmx_warn("CVMX_L2C_CTL not supported on this chip\n");
187 return CVMX_ADD_IO_SEG(0x0001180080800000ull);
190 #define CVMX_L2C_CTL (CVMX_ADD_IO_SEG(0x0001180080800000ull))
192 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
193 #define CVMX_L2C_DBG CVMX_L2C_DBG_FUNC()
194 static inline uint64_t CVMX_L2C_DBG_FUNC(void)
196 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
197 cvmx_warn("CVMX_L2C_DBG not supported on this chip\n");
198 return CVMX_ADD_IO_SEG(0x0001180080000030ull);
201 #define CVMX_L2C_DBG (CVMX_ADD_IO_SEG(0x0001180080000030ull))
203 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
204 #define CVMX_L2C_DUT CVMX_L2C_DUT_FUNC()
205 static inline uint64_t CVMX_L2C_DUT_FUNC(void)
207 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
208 cvmx_warn("CVMX_L2C_DUT not supported on this chip\n");
209 return CVMX_ADD_IO_SEG(0x0001180080000050ull);
212 #define CVMX_L2C_DUT (CVMX_ADD_IO_SEG(0x0001180080000050ull))
214 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
215 static inline uint64_t CVMX_L2C_DUT_MAPX(unsigned long offset)
218 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1023))) ||
219 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1535))) ||
220 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 2559))) ||
221 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 8191))) ||
222 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1023)))))
223 cvmx_warn("CVMX_L2C_DUT_MAPX(%lu) is invalid on this chip\n", offset);
224 return CVMX_ADD_IO_SEG(0x0001180080E00000ull) + ((offset) & 8191) * 8;
227 #define CVMX_L2C_DUT_MAPX(offset) (CVMX_ADD_IO_SEG(0x0001180080E00000ull) + ((offset) & 8191) * 8)
229 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
230 static inline uint64_t CVMX_L2C_ERR_TDTX(unsigned long block_id)
233 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
234 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
235 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
236 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
237 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
238 cvmx_warn("CVMX_L2C_ERR_TDTX(%lu) is invalid on this chip\n", block_id);
239 return CVMX_ADD_IO_SEG(0x0001180080A007E0ull) + ((block_id) & 3) * 0x40000ull;
242 #define CVMX_L2C_ERR_TDTX(block_id) (CVMX_ADD_IO_SEG(0x0001180080A007E0ull) + ((block_id) & 3) * 0x40000ull)
244 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
245 static inline uint64_t CVMX_L2C_ERR_TTGX(unsigned long block_id)
248 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
249 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
250 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
251 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
252 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
253 cvmx_warn("CVMX_L2C_ERR_TTGX(%lu) is invalid on this chip\n", block_id);
254 return CVMX_ADD_IO_SEG(0x0001180080A007E8ull) + ((block_id) & 3) * 0x40000ull;
257 #define CVMX_L2C_ERR_TTGX(block_id) (CVMX_ADD_IO_SEG(0x0001180080A007E8ull) + ((block_id) & 3) * 0x40000ull)
259 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
260 static inline uint64_t CVMX_L2C_ERR_VBFX(unsigned long block_id)
263 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
264 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
265 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
266 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
267 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
268 cvmx_warn("CVMX_L2C_ERR_VBFX(%lu) is invalid on this chip\n", block_id);
269 return CVMX_ADD_IO_SEG(0x0001180080C007F0ull) + ((block_id) & 3) * 0x40000ull;
272 #define CVMX_L2C_ERR_VBFX(block_id) (CVMX_ADD_IO_SEG(0x0001180080C007F0ull) + ((block_id) & 3) * 0x40000ull)
274 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
275 #define CVMX_L2C_ERR_XMC CVMX_L2C_ERR_XMC_FUNC()
276 static inline uint64_t CVMX_L2C_ERR_XMC_FUNC(void)
278 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
279 cvmx_warn("CVMX_L2C_ERR_XMC not supported on this chip\n");
280 return CVMX_ADD_IO_SEG(0x00011800808007D8ull);
283 #define CVMX_L2C_ERR_XMC (CVMX_ADD_IO_SEG(0x00011800808007D8ull))
285 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
286 #define CVMX_L2C_GRPWRR0 CVMX_L2C_GRPWRR0_FUNC()
287 static inline uint64_t CVMX_L2C_GRPWRR0_FUNC(void)
289 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
290 cvmx_warn("CVMX_L2C_GRPWRR0 not supported on this chip\n");
291 return CVMX_ADD_IO_SEG(0x00011800800000C8ull);
294 #define CVMX_L2C_GRPWRR0 (CVMX_ADD_IO_SEG(0x00011800800000C8ull))
296 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
297 #define CVMX_L2C_GRPWRR1 CVMX_L2C_GRPWRR1_FUNC()
298 static inline uint64_t CVMX_L2C_GRPWRR1_FUNC(void)
300 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
301 cvmx_warn("CVMX_L2C_GRPWRR1 not supported on this chip\n");
302 return CVMX_ADD_IO_SEG(0x00011800800000D0ull);
305 #define CVMX_L2C_GRPWRR1 (CVMX_ADD_IO_SEG(0x00011800800000D0ull))
307 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
308 #define CVMX_L2C_INT_EN CVMX_L2C_INT_EN_FUNC()
309 static inline uint64_t CVMX_L2C_INT_EN_FUNC(void)
311 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
312 cvmx_warn("CVMX_L2C_INT_EN not supported on this chip\n");
313 return CVMX_ADD_IO_SEG(0x0001180080000100ull);
316 #define CVMX_L2C_INT_EN (CVMX_ADD_IO_SEG(0x0001180080000100ull))
318 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
319 #define CVMX_L2C_INT_ENA CVMX_L2C_INT_ENA_FUNC()
320 static inline uint64_t CVMX_L2C_INT_ENA_FUNC(void)
322 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
323 cvmx_warn("CVMX_L2C_INT_ENA not supported on this chip\n");
324 return CVMX_ADD_IO_SEG(0x0001180080800020ull);
327 #define CVMX_L2C_INT_ENA (CVMX_ADD_IO_SEG(0x0001180080800020ull))
329 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
330 #define CVMX_L2C_INT_REG CVMX_L2C_INT_REG_FUNC()
331 static inline uint64_t CVMX_L2C_INT_REG_FUNC(void)
333 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
334 cvmx_warn("CVMX_L2C_INT_REG not supported on this chip\n");
335 return CVMX_ADD_IO_SEG(0x0001180080800018ull);
338 #define CVMX_L2C_INT_REG (CVMX_ADD_IO_SEG(0x0001180080800018ull))
340 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
341 #define CVMX_L2C_INT_STAT CVMX_L2C_INT_STAT_FUNC()
342 static inline uint64_t CVMX_L2C_INT_STAT_FUNC(void)
344 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
345 cvmx_warn("CVMX_L2C_INT_STAT not supported on this chip\n");
346 return CVMX_ADD_IO_SEG(0x00011800800000F8ull);
349 #define CVMX_L2C_INT_STAT (CVMX_ADD_IO_SEG(0x00011800800000F8ull))
351 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
352 static inline uint64_t CVMX_L2C_IOCX_PFC(unsigned long block_id)
355 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
356 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
357 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
358 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0))) ||
359 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
360 cvmx_warn("CVMX_L2C_IOCX_PFC(%lu) is invalid on this chip\n", block_id);
361 return CVMX_ADD_IO_SEG(0x0001180080800420ull);
364 #define CVMX_L2C_IOCX_PFC(block_id) (CVMX_ADD_IO_SEG(0x0001180080800420ull))
366 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
367 static inline uint64_t CVMX_L2C_IORX_PFC(unsigned long block_id)
370 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
371 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
372 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
373 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id == 0))) ||
374 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
375 cvmx_warn("CVMX_L2C_IORX_PFC(%lu) is invalid on this chip\n", block_id);
376 return CVMX_ADD_IO_SEG(0x0001180080800428ull);
379 #define CVMX_L2C_IORX_PFC(block_id) (CVMX_ADD_IO_SEG(0x0001180080800428ull))
381 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
382 #define CVMX_L2C_LCKBASE CVMX_L2C_LCKBASE_FUNC()
383 static inline uint64_t CVMX_L2C_LCKBASE_FUNC(void)
385 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
386 cvmx_warn("CVMX_L2C_LCKBASE not supported on this chip\n");
387 return CVMX_ADD_IO_SEG(0x0001180080000058ull);
390 #define CVMX_L2C_LCKBASE (CVMX_ADD_IO_SEG(0x0001180080000058ull))
392 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
393 #define CVMX_L2C_LCKOFF CVMX_L2C_LCKOFF_FUNC()
394 static inline uint64_t CVMX_L2C_LCKOFF_FUNC(void)
396 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
397 cvmx_warn("CVMX_L2C_LCKOFF not supported on this chip\n");
398 return CVMX_ADD_IO_SEG(0x0001180080000060ull);
401 #define CVMX_L2C_LCKOFF (CVMX_ADD_IO_SEG(0x0001180080000060ull))
403 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
404 #define CVMX_L2C_LFB0 CVMX_L2C_LFB0_FUNC()
405 static inline uint64_t CVMX_L2C_LFB0_FUNC(void)
407 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
408 cvmx_warn("CVMX_L2C_LFB0 not supported on this chip\n");
409 return CVMX_ADD_IO_SEG(0x0001180080000038ull);
412 #define CVMX_L2C_LFB0 (CVMX_ADD_IO_SEG(0x0001180080000038ull))
414 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
415 #define CVMX_L2C_LFB1 CVMX_L2C_LFB1_FUNC()
416 static inline uint64_t CVMX_L2C_LFB1_FUNC(void)
418 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
419 cvmx_warn("CVMX_L2C_LFB1 not supported on this chip\n");
420 return CVMX_ADD_IO_SEG(0x0001180080000040ull);
423 #define CVMX_L2C_LFB1 (CVMX_ADD_IO_SEG(0x0001180080000040ull))
425 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
426 #define CVMX_L2C_LFB2 CVMX_L2C_LFB2_FUNC()
427 static inline uint64_t CVMX_L2C_LFB2_FUNC(void)
429 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
430 cvmx_warn("CVMX_L2C_LFB2 not supported on this chip\n");
431 return CVMX_ADD_IO_SEG(0x0001180080000048ull);
434 #define CVMX_L2C_LFB2 (CVMX_ADD_IO_SEG(0x0001180080000048ull))
436 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
437 #define CVMX_L2C_LFB3 CVMX_L2C_LFB3_FUNC()
438 static inline uint64_t CVMX_L2C_LFB3_FUNC(void)
440 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
441 cvmx_warn("CVMX_L2C_LFB3 not supported on this chip\n");
442 return CVMX_ADD_IO_SEG(0x00011800800000B8ull);
445 #define CVMX_L2C_LFB3 (CVMX_ADD_IO_SEG(0x00011800800000B8ull))
447 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
448 #define CVMX_L2C_OOB CVMX_L2C_OOB_FUNC()
449 static inline uint64_t CVMX_L2C_OOB_FUNC(void)
451 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
452 cvmx_warn("CVMX_L2C_OOB not supported on this chip\n");
453 return CVMX_ADD_IO_SEG(0x00011800800000D8ull);
456 #define CVMX_L2C_OOB (CVMX_ADD_IO_SEG(0x00011800800000D8ull))
458 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
459 #define CVMX_L2C_OOB1 CVMX_L2C_OOB1_FUNC()
460 static inline uint64_t CVMX_L2C_OOB1_FUNC(void)
462 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
463 cvmx_warn("CVMX_L2C_OOB1 not supported on this chip\n");
464 return CVMX_ADD_IO_SEG(0x00011800800000E0ull);
467 #define CVMX_L2C_OOB1 (CVMX_ADD_IO_SEG(0x00011800800000E0ull))
469 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
470 #define CVMX_L2C_OOB2 CVMX_L2C_OOB2_FUNC()
471 static inline uint64_t CVMX_L2C_OOB2_FUNC(void)
473 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
474 cvmx_warn("CVMX_L2C_OOB2 not supported on this chip\n");
475 return CVMX_ADD_IO_SEG(0x00011800800000E8ull);
478 #define CVMX_L2C_OOB2 (CVMX_ADD_IO_SEG(0x00011800800000E8ull))
480 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
481 #define CVMX_L2C_OOB3 CVMX_L2C_OOB3_FUNC()
482 static inline uint64_t CVMX_L2C_OOB3_FUNC(void)
484 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
485 cvmx_warn("CVMX_L2C_OOB3 not supported on this chip\n");
486 return CVMX_ADD_IO_SEG(0x00011800800000F0ull);
489 #define CVMX_L2C_OOB3 (CVMX_ADD_IO_SEG(0x00011800800000F0ull))
491 #define CVMX_L2C_PFC0 CVMX_L2C_PFCX(0)
492 #define CVMX_L2C_PFC1 CVMX_L2C_PFCX(1)
493 #define CVMX_L2C_PFC2 CVMX_L2C_PFCX(2)
494 #define CVMX_L2C_PFC3 CVMX_L2C_PFCX(3)
495 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
496 #define CVMX_L2C_PFCTL CVMX_L2C_PFCTL_FUNC()
497 static inline uint64_t CVMX_L2C_PFCTL_FUNC(void)
499 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
500 cvmx_warn("CVMX_L2C_PFCTL not supported on this chip\n");
501 return CVMX_ADD_IO_SEG(0x0001180080000090ull);
504 #define CVMX_L2C_PFCTL (CVMX_ADD_IO_SEG(0x0001180080000090ull))
506 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
507 static inline uint64_t CVMX_L2C_PFCX(unsigned long offset)
510 (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 3))) ||
511 (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 3))) ||
512 (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) ||
513 (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 3))) ||
514 (OCTEON_IS_MODEL(OCTEON_CN52XX) && ((offset <= 3))) ||
515 (OCTEON_IS_MODEL(OCTEON_CN56XX) && ((offset <= 3))) ||
516 (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3)))))
517 cvmx_warn("CVMX_L2C_PFCX(%lu) is invalid on this chip\n", offset);
518 return CVMX_ADD_IO_SEG(0x0001180080000098ull) + ((offset) & 3) * 8;
521 #define CVMX_L2C_PFCX(offset) (CVMX_ADD_IO_SEG(0x0001180080000098ull) + ((offset) & 3) * 8)
523 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
524 #define CVMX_L2C_PPGRP CVMX_L2C_PPGRP_FUNC()
525 static inline uint64_t CVMX_L2C_PPGRP_FUNC(void)
527 if (!(OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)))
528 cvmx_warn("CVMX_L2C_PPGRP not supported on this chip\n");
529 return CVMX_ADD_IO_SEG(0x00011800800000C0ull);
532 #define CVMX_L2C_PPGRP (CVMX_ADD_IO_SEG(0x00011800800000C0ull))
534 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
535 static inline uint64_t CVMX_L2C_QOS_IOBX(unsigned long offset)
538 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
539 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
540 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
541 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
542 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
543 cvmx_warn("CVMX_L2C_QOS_IOBX(%lu) is invalid on this chip\n", offset);
544 return CVMX_ADD_IO_SEG(0x0001180080880200ull) + ((offset) & 1) * 8;
547 #define CVMX_L2C_QOS_IOBX(offset) (CVMX_ADD_IO_SEG(0x0001180080880200ull) + ((offset) & 1) * 8)
549 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
550 static inline uint64_t CVMX_L2C_QOS_PPX(unsigned long offset)
553 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
554 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5))) ||
555 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 9))) ||
556 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 31))) ||
557 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
558 cvmx_warn("CVMX_L2C_QOS_PPX(%lu) is invalid on this chip\n", offset);
559 return CVMX_ADD_IO_SEG(0x0001180080880000ull) + ((offset) & 31) * 8;
562 #define CVMX_L2C_QOS_PPX(offset) (CVMX_ADD_IO_SEG(0x0001180080880000ull) + ((offset) & 31) * 8)
564 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
565 #define CVMX_L2C_QOS_WGT CVMX_L2C_QOS_WGT_FUNC()
566 static inline uint64_t CVMX_L2C_QOS_WGT_FUNC(void)
568 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
569 cvmx_warn("CVMX_L2C_QOS_WGT not supported on this chip\n");
570 return CVMX_ADD_IO_SEG(0x0001180080800008ull);
573 #define CVMX_L2C_QOS_WGT (CVMX_ADD_IO_SEG(0x0001180080800008ull))
575 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
576 static inline uint64_t CVMX_L2C_RSCX_PFC(unsigned long offset)
579 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
580 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
581 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
582 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
583 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
584 cvmx_warn("CVMX_L2C_RSCX_PFC(%lu) is invalid on this chip\n", offset);
585 return CVMX_ADD_IO_SEG(0x0001180080800410ull) + ((offset) & 3) * 64;
588 #define CVMX_L2C_RSCX_PFC(offset) (CVMX_ADD_IO_SEG(0x0001180080800410ull) + ((offset) & 3) * 64)
590 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
591 static inline uint64_t CVMX_L2C_RSDX_PFC(unsigned long offset)
594 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
595 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
596 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
597 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
598 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
599 cvmx_warn("CVMX_L2C_RSDX_PFC(%lu) is invalid on this chip\n", offset);
600 return CVMX_ADD_IO_SEG(0x0001180080800418ull) + ((offset) & 3) * 64;
603 #define CVMX_L2C_RSDX_PFC(offset) (CVMX_ADD_IO_SEG(0x0001180080800418ull) + ((offset) & 3) * 64)
605 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
606 #define CVMX_L2C_SPAR0 CVMX_L2C_SPAR0_FUNC()
607 static inline uint64_t CVMX_L2C_SPAR0_FUNC(void)
609 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
610 cvmx_warn("CVMX_L2C_SPAR0 not supported on this chip\n");
611 return CVMX_ADD_IO_SEG(0x0001180080000068ull);
614 #define CVMX_L2C_SPAR0 (CVMX_ADD_IO_SEG(0x0001180080000068ull))
616 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
617 #define CVMX_L2C_SPAR1 CVMX_L2C_SPAR1_FUNC()
618 static inline uint64_t CVMX_L2C_SPAR1_FUNC(void)
620 if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN58XX)))
621 cvmx_warn("CVMX_L2C_SPAR1 not supported on this chip\n");
622 return CVMX_ADD_IO_SEG(0x0001180080000070ull);
625 #define CVMX_L2C_SPAR1 (CVMX_ADD_IO_SEG(0x0001180080000070ull))
627 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
628 #define CVMX_L2C_SPAR2 CVMX_L2C_SPAR2_FUNC()
629 static inline uint64_t CVMX_L2C_SPAR2_FUNC(void)
631 if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN58XX)))
632 cvmx_warn("CVMX_L2C_SPAR2 not supported on this chip\n");
633 return CVMX_ADD_IO_SEG(0x0001180080000078ull);
636 #define CVMX_L2C_SPAR2 (CVMX_ADD_IO_SEG(0x0001180080000078ull))
638 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
639 #define CVMX_L2C_SPAR3 CVMX_L2C_SPAR3_FUNC()
640 static inline uint64_t CVMX_L2C_SPAR3_FUNC(void)
642 if (!(OCTEON_IS_MODEL(OCTEON_CN38XX) || OCTEON_IS_MODEL(OCTEON_CN58XX)))
643 cvmx_warn("CVMX_L2C_SPAR3 not supported on this chip\n");
644 return CVMX_ADD_IO_SEG(0x0001180080000080ull);
647 #define CVMX_L2C_SPAR3 (CVMX_ADD_IO_SEG(0x0001180080000080ull))
649 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
650 #define CVMX_L2C_SPAR4 CVMX_L2C_SPAR4_FUNC()
651 static inline uint64_t CVMX_L2C_SPAR4_FUNC(void)
653 if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN5XXX)))
654 cvmx_warn("CVMX_L2C_SPAR4 not supported on this chip\n");
655 return CVMX_ADD_IO_SEG(0x0001180080000088ull);
658 #define CVMX_L2C_SPAR4 (CVMX_ADD_IO_SEG(0x0001180080000088ull))
660 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
661 static inline uint64_t CVMX_L2C_TADX_ECC0(unsigned long block_id)
664 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
665 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
666 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
667 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
668 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
669 cvmx_warn("CVMX_L2C_TADX_ECC0(%lu) is invalid on this chip\n", block_id);
670 return CVMX_ADD_IO_SEG(0x0001180080A00018ull) + ((block_id) & 3) * 0x40000ull;
673 #define CVMX_L2C_TADX_ECC0(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00018ull) + ((block_id) & 3) * 0x40000ull)
675 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
676 static inline uint64_t CVMX_L2C_TADX_ECC1(unsigned long block_id)
679 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
680 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
681 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
682 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
683 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
684 cvmx_warn("CVMX_L2C_TADX_ECC1(%lu) is invalid on this chip\n", block_id);
685 return CVMX_ADD_IO_SEG(0x0001180080A00020ull) + ((block_id) & 3) * 0x40000ull;
688 #define CVMX_L2C_TADX_ECC1(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00020ull) + ((block_id) & 3) * 0x40000ull)
690 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
691 static inline uint64_t CVMX_L2C_TADX_IEN(unsigned long block_id)
694 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
695 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
696 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
697 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
698 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
699 cvmx_warn("CVMX_L2C_TADX_IEN(%lu) is invalid on this chip\n", block_id);
700 return CVMX_ADD_IO_SEG(0x0001180080A00000ull) + ((block_id) & 3) * 0x40000ull;
703 #define CVMX_L2C_TADX_IEN(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00000ull) + ((block_id) & 3) * 0x40000ull)
705 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
706 static inline uint64_t CVMX_L2C_TADX_INT(unsigned long block_id)
709 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
710 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
711 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
712 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
713 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
714 cvmx_warn("CVMX_L2C_TADX_INT(%lu) is invalid on this chip\n", block_id);
715 return CVMX_ADD_IO_SEG(0x0001180080A00028ull) + ((block_id) & 3) * 0x40000ull;
718 #define CVMX_L2C_TADX_INT(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00028ull) + ((block_id) & 3) * 0x40000ull)
720 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
721 static inline uint64_t CVMX_L2C_TADX_PFC0(unsigned long block_id)
724 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
725 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
726 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
727 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
728 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
729 cvmx_warn("CVMX_L2C_TADX_PFC0(%lu) is invalid on this chip\n", block_id);
730 return CVMX_ADD_IO_SEG(0x0001180080A00400ull) + ((block_id) & 3) * 0x40000ull;
733 #define CVMX_L2C_TADX_PFC0(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00400ull) + ((block_id) & 3) * 0x40000ull)
735 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
736 static inline uint64_t CVMX_L2C_TADX_PFC1(unsigned long block_id)
739 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
740 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
741 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
742 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
743 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
744 cvmx_warn("CVMX_L2C_TADX_PFC1(%lu) is invalid on this chip\n", block_id);
745 return CVMX_ADD_IO_SEG(0x0001180080A00408ull) + ((block_id) & 3) * 0x40000ull;
748 #define CVMX_L2C_TADX_PFC1(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00408ull) + ((block_id) & 3) * 0x40000ull)
750 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
751 static inline uint64_t CVMX_L2C_TADX_PFC2(unsigned long block_id)
754 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
755 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
756 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
757 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
758 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
759 cvmx_warn("CVMX_L2C_TADX_PFC2(%lu) is invalid on this chip\n", block_id);
760 return CVMX_ADD_IO_SEG(0x0001180080A00410ull) + ((block_id) & 3) * 0x40000ull;
763 #define CVMX_L2C_TADX_PFC2(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00410ull) + ((block_id) & 3) * 0x40000ull)
765 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
766 static inline uint64_t CVMX_L2C_TADX_PFC3(unsigned long block_id)
769 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
770 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
771 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
772 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
773 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
774 cvmx_warn("CVMX_L2C_TADX_PFC3(%lu) is invalid on this chip\n", block_id);
775 return CVMX_ADD_IO_SEG(0x0001180080A00418ull) + ((block_id) & 3) * 0x40000ull;
778 #define CVMX_L2C_TADX_PFC3(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00418ull) + ((block_id) & 3) * 0x40000ull)
780 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
781 static inline uint64_t CVMX_L2C_TADX_PRF(unsigned long block_id)
784 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
785 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
786 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
787 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
788 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
789 cvmx_warn("CVMX_L2C_TADX_PRF(%lu) is invalid on this chip\n", block_id);
790 return CVMX_ADD_IO_SEG(0x0001180080A00008ull) + ((block_id) & 3) * 0x40000ull;
793 #define CVMX_L2C_TADX_PRF(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00008ull) + ((block_id) & 3) * 0x40000ull)
795 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
796 static inline uint64_t CVMX_L2C_TADX_TAG(unsigned long block_id)
799 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((block_id == 0))) ||
800 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0))) ||
801 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((block_id == 0))) ||
802 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((block_id <= 3))) ||
803 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((block_id == 0)))))
804 cvmx_warn("CVMX_L2C_TADX_TAG(%lu) is invalid on this chip\n", block_id);
805 return CVMX_ADD_IO_SEG(0x0001180080A00010ull) + ((block_id) & 3) * 0x40000ull;
808 #define CVMX_L2C_TADX_TAG(block_id) (CVMX_ADD_IO_SEG(0x0001180080A00010ull) + ((block_id) & 3) * 0x40000ull)
810 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
811 #define CVMX_L2C_VER_ID CVMX_L2C_VER_ID_FUNC()
812 static inline uint64_t CVMX_L2C_VER_ID_FUNC(void)
814 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
815 cvmx_warn("CVMX_L2C_VER_ID not supported on this chip\n");
816 return CVMX_ADD_IO_SEG(0x00011800808007E0ull);
819 #define CVMX_L2C_VER_ID (CVMX_ADD_IO_SEG(0x00011800808007E0ull))
821 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
822 #define CVMX_L2C_VER_IOB CVMX_L2C_VER_IOB_FUNC()
823 static inline uint64_t CVMX_L2C_VER_IOB_FUNC(void)
825 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
826 cvmx_warn("CVMX_L2C_VER_IOB not supported on this chip\n");
827 return CVMX_ADD_IO_SEG(0x00011800808007F0ull);
830 #define CVMX_L2C_VER_IOB (CVMX_ADD_IO_SEG(0x00011800808007F0ull))
832 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
833 #define CVMX_L2C_VER_MSC CVMX_L2C_VER_MSC_FUNC()
834 static inline uint64_t CVMX_L2C_VER_MSC_FUNC(void)
836 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
837 cvmx_warn("CVMX_L2C_VER_MSC not supported on this chip\n");
838 return CVMX_ADD_IO_SEG(0x00011800808007D0ull);
841 #define CVMX_L2C_VER_MSC (CVMX_ADD_IO_SEG(0x00011800808007D0ull))
843 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
844 #define CVMX_L2C_VER_PP CVMX_L2C_VER_PP_FUNC()
845 static inline uint64_t CVMX_L2C_VER_PP_FUNC(void)
847 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
848 cvmx_warn("CVMX_L2C_VER_PP not supported on this chip\n");
849 return CVMX_ADD_IO_SEG(0x00011800808007E8ull);
852 #define CVMX_L2C_VER_PP (CVMX_ADD_IO_SEG(0x00011800808007E8ull))
854 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
855 static inline uint64_t CVMX_L2C_VIRTID_IOBX(unsigned long offset)
858 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
859 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
860 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
861 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
862 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
863 cvmx_warn("CVMX_L2C_VIRTID_IOBX(%lu) is invalid on this chip\n", offset);
864 return CVMX_ADD_IO_SEG(0x00011800808C0200ull) + ((offset) & 1) * 8;
867 #define CVMX_L2C_VIRTID_IOBX(offset) (CVMX_ADD_IO_SEG(0x00011800808C0200ull) + ((offset) & 1) * 8)
869 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
870 static inline uint64_t CVMX_L2C_VIRTID_PPX(unsigned long offset)
873 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
874 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5))) ||
875 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 9))) ||
876 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 31))) ||
877 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
878 cvmx_warn("CVMX_L2C_VIRTID_PPX(%lu) is invalid on this chip\n", offset);
879 return CVMX_ADD_IO_SEG(0x00011800808C0000ull) + ((offset) & 31) * 8;
882 #define CVMX_L2C_VIRTID_PPX(offset) (CVMX_ADD_IO_SEG(0x00011800808C0000ull) + ((offset) & 31) * 8)
884 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
885 #define CVMX_L2C_VRT_CTL CVMX_L2C_VRT_CTL_FUNC()
886 static inline uint64_t CVMX_L2C_VRT_CTL_FUNC(void)
888 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
889 cvmx_warn("CVMX_L2C_VRT_CTL not supported on this chip\n");
890 return CVMX_ADD_IO_SEG(0x0001180080800010ull);
893 #define CVMX_L2C_VRT_CTL (CVMX_ADD_IO_SEG(0x0001180080800010ull))
895 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
896 static inline uint64_t CVMX_L2C_VRT_MEMX(unsigned long offset)
899 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 1023))) ||
900 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 1023))) ||
901 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 1023))) ||
902 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1023))) ||
903 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 1023)))))
904 cvmx_warn("CVMX_L2C_VRT_MEMX(%lu) is invalid on this chip\n", offset);
905 return CVMX_ADD_IO_SEG(0x0001180080900000ull) + ((offset) & 1023) * 8;
908 #define CVMX_L2C_VRT_MEMX(offset) (CVMX_ADD_IO_SEG(0x0001180080900000ull) + ((offset) & 1023) * 8)
910 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
911 static inline uint64_t CVMX_L2C_WPAR_IOBX(unsigned long offset)
914 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
915 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
916 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
917 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 1))) ||
918 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
919 cvmx_warn("CVMX_L2C_WPAR_IOBX(%lu) is invalid on this chip\n", offset);
920 return CVMX_ADD_IO_SEG(0x0001180080840200ull) + ((offset) & 1) * 8;
923 #define CVMX_L2C_WPAR_IOBX(offset) (CVMX_ADD_IO_SEG(0x0001180080840200ull) + ((offset) & 1) * 8)
925 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
926 static inline uint64_t CVMX_L2C_WPAR_PPX(unsigned long offset)
929 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset <= 3))) ||
930 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset <= 5))) ||
931 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset <= 9))) ||
932 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 31))) ||
933 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset <= 3)))))
934 cvmx_warn("CVMX_L2C_WPAR_PPX(%lu) is invalid on this chip\n", offset);
935 return CVMX_ADD_IO_SEG(0x0001180080840000ull) + ((offset) & 31) * 8;
938 #define CVMX_L2C_WPAR_PPX(offset) (CVMX_ADD_IO_SEG(0x0001180080840000ull) + ((offset) & 31) * 8)
940 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
941 static inline uint64_t CVMX_L2C_XMCX_PFC(unsigned long offset)
944 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
945 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
946 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
947 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
948 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
949 cvmx_warn("CVMX_L2C_XMCX_PFC(%lu) is invalid on this chip\n", offset);
950 return CVMX_ADD_IO_SEG(0x0001180080800400ull) + ((offset) & 3) * 64;
953 #define CVMX_L2C_XMCX_PFC(offset) (CVMX_ADD_IO_SEG(0x0001180080800400ull) + ((offset) & 3) * 64)
955 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
956 #define CVMX_L2C_XMC_CMD CVMX_L2C_XMC_CMD_FUNC()
957 static inline uint64_t CVMX_L2C_XMC_CMD_FUNC(void)
959 if (!(OCTEON_IS_MODEL(OCTEON_CN61XX) || OCTEON_IS_MODEL(OCTEON_CN63XX) || OCTEON_IS_MODEL(OCTEON_CN66XX) || OCTEON_IS_MODEL(OCTEON_CN68XX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)))
960 cvmx_warn("CVMX_L2C_XMC_CMD not supported on this chip\n");
961 return CVMX_ADD_IO_SEG(0x0001180080800028ull);
964 #define CVMX_L2C_XMC_CMD (CVMX_ADD_IO_SEG(0x0001180080800028ull))
966 #if CVMX_ENABLE_CSR_ADDRESS_CHECKING
967 static inline uint64_t CVMX_L2C_XMDX_PFC(unsigned long offset)
970 (OCTEON_IS_MODEL(OCTEON_CN61XX) && ((offset == 0))) ||
971 (OCTEON_IS_MODEL(OCTEON_CN63XX) && ((offset == 0))) ||
972 (OCTEON_IS_MODEL(OCTEON_CN66XX) && ((offset == 0))) ||
973 (OCTEON_IS_MODEL(OCTEON_CN68XX) && ((offset <= 3))) ||
974 (OCTEON_IS_MODEL(OCTEON_CNF71XX) && ((offset == 0)))))
975 cvmx_warn("CVMX_L2C_XMDX_PFC(%lu) is invalid on this chip\n", offset);
976 return CVMX_ADD_IO_SEG(0x0001180080800408ull) + ((offset) & 3) * 64;
979 #define CVMX_L2C_XMDX_PFC(offset) (CVMX_ADD_IO_SEG(0x0001180080800408ull) + ((offset) & 3) * 64)
985 * L2C_BIG_CTL = L2C Big memory control register
989 * (1) BIGRD interrupts can occur during normal operation as the PP's are allowed to prefetch to
990 * non-existent memory locations. Therefore, BIGRD is for informational purposes only.
992 * (2) When HOLEWR/BIGWR blocks a store L2C_VER_ID, L2C_VER_PP, L2C_VER_IOB, and L2C_VER_MSC will be
993 * loaded just like a store which is blocked by VRTWR. Additionally, L2C_ERR_XMC will be loaded.
995 union cvmx_l2c_big_ctl {
997 struct cvmx_l2c_big_ctl_s {
998 #ifdef __BIG_ENDIAN_BITFIELD
999 uint64_t reserved_8_63 : 56;
1000 uint64_t maxdram : 4; /**< Amount of configured DRAM
1009 8 = 64GB (**reserved in 63xx**)
1010 9 = 128GB (**reserved in 63xx**)
1012 Violations of this limit causes
1013 L2C to set L2C_INT_REG[BIGRD/BIGWR]. */
1014 uint64_t reserved_1_3 : 3;
1015 uint64_t disable : 1; /**< When set, disables the BIGWR/BIGRD logic completely
1016 and reverts HOLEWR to 63xx pass 1.x behavior.
1017 When clear, BIGWR and HOLEWR block stores in the same
1018 same manner as the VRT logic, and BIGRD is reported. */
1020 uint64_t disable : 1;
1021 uint64_t reserved_1_3 : 3;
1022 uint64_t maxdram : 4;
1023 uint64_t reserved_8_63 : 56;
1026 struct cvmx_l2c_big_ctl_s cn61xx;
1027 struct cvmx_l2c_big_ctl_s cn63xx;
1028 struct cvmx_l2c_big_ctl_s cn66xx;
1029 struct cvmx_l2c_big_ctl_s cn68xx;
1030 struct cvmx_l2c_big_ctl_s cn68xxp1;
1031 struct cvmx_l2c_big_ctl_s cnf71xx;
1033 typedef union cvmx_l2c_big_ctl cvmx_l2c_big_ctl_t;
1038 * L2C_BST = L2C BIST Status
1041 union cvmx_l2c_bst {
1043 struct cvmx_l2c_bst_s {
1044 #ifdef __BIG_ENDIAN_BITFIELD
1045 uint64_t dutfl : 32; /**< BIST failure status for PP0-3 DUT */
1046 uint64_t rbffl : 4; /**< BIST failure status for RBF0-3 */
1047 uint64_t xbffl : 4; /**< BIST failure status for XBF0-3 */
1048 uint64_t tdpfl : 4; /**< BIST failure status for TDP0-3 */
1049 uint64_t ioccmdfl : 4; /**< BIST failure status for IOCCMD */
1050 uint64_t iocdatfl : 4; /**< BIST failure status for IOCDAT */
1051 uint64_t dutresfl : 4; /**< BIST failure status for DUTRES */
1052 uint64_t vrtfl : 4; /**< BIST failure status for VRT0 */
1053 uint64_t tdffl : 4; /**< BIST failure status for TDF0 */
1057 uint64_t dutresfl : 4;
1058 uint64_t iocdatfl : 4;
1059 uint64_t ioccmdfl : 4;
1063 uint64_t dutfl : 32;
1066 struct cvmx_l2c_bst_cn61xx {
1067 #ifdef __BIG_ENDIAN_BITFIELD
1068 uint64_t reserved_36_63 : 28;
1069 uint64_t dutfl : 4; /**< BIST failure status for PP0-3 DUT */
1070 uint64_t reserved_17_31 : 15;
1071 uint64_t ioccmdfl : 1; /**< BIST failure status for IOCCMD */
1072 uint64_t reserved_13_15 : 3;
1073 uint64_t iocdatfl : 1; /**< BIST failure status for IOCDAT */
1074 uint64_t reserved_9_11 : 3;
1075 uint64_t dutresfl : 1; /**< BIST failure status for DUTRES */
1076 uint64_t reserved_5_7 : 3;
1077 uint64_t vrtfl : 1; /**< BIST failure status for VRT0 */
1078 uint64_t reserved_1_3 : 3;
1079 uint64_t tdffl : 1; /**< BIST failure status for TDF0 */
1082 uint64_t reserved_1_3 : 3;
1084 uint64_t reserved_5_7 : 3;
1085 uint64_t dutresfl : 1;
1086 uint64_t reserved_9_11 : 3;
1087 uint64_t iocdatfl : 1;
1088 uint64_t reserved_13_15 : 3;
1089 uint64_t ioccmdfl : 1;
1090 uint64_t reserved_17_31 : 15;
1092 uint64_t reserved_36_63 : 28;
1095 struct cvmx_l2c_bst_cn63xx {
1096 #ifdef __BIG_ENDIAN_BITFIELD
1097 uint64_t reserved_38_63 : 26;
1098 uint64_t dutfl : 6; /**< BIST failure status for PP0-5 DUT */
1099 uint64_t reserved_17_31 : 15;
1100 uint64_t ioccmdfl : 1; /**< BIST failure status for IOCCMD */
1101 uint64_t reserved_13_15 : 3;
1102 uint64_t iocdatfl : 1; /**< BIST failure status for IOCDAT */
1103 uint64_t reserved_9_11 : 3;
1104 uint64_t dutresfl : 1; /**< BIST failure status for DUTRES */
1105 uint64_t reserved_5_7 : 3;
1106 uint64_t vrtfl : 1; /**< BIST failure status for VRT0 */
1107 uint64_t reserved_1_3 : 3;
1108 uint64_t tdffl : 1; /**< BIST failure status for TDF0 */
1111 uint64_t reserved_1_3 : 3;
1113 uint64_t reserved_5_7 : 3;
1114 uint64_t dutresfl : 1;
1115 uint64_t reserved_9_11 : 3;
1116 uint64_t iocdatfl : 1;
1117 uint64_t reserved_13_15 : 3;
1118 uint64_t ioccmdfl : 1;
1119 uint64_t reserved_17_31 : 15;
1121 uint64_t reserved_38_63 : 26;
1124 struct cvmx_l2c_bst_cn63xx cn63xxp1;
1125 struct cvmx_l2c_bst_cn66xx {
1126 #ifdef __BIG_ENDIAN_BITFIELD
1127 uint64_t reserved_42_63 : 22;
1128 uint64_t dutfl : 10; /**< BIST failure status for PP0-9 DUT */
1129 uint64_t reserved_17_31 : 15;
1130 uint64_t ioccmdfl : 1; /**< BIST failure status for IOCCMD */
1131 uint64_t reserved_13_15 : 3;
1132 uint64_t iocdatfl : 1; /**< BIST failure status for IOCDAT */
1133 uint64_t reserved_9_11 : 3;
1134 uint64_t dutresfl : 1; /**< BIST failure status for DUTRES */
1135 uint64_t reserved_5_7 : 3;
1136 uint64_t vrtfl : 1; /**< BIST failure status for VRT0 */
1137 uint64_t reserved_1_3 : 3;
1138 uint64_t tdffl : 1; /**< BIST failure status for TDF0 */
1141 uint64_t reserved_1_3 : 3;
1143 uint64_t reserved_5_7 : 3;
1144 uint64_t dutresfl : 1;
1145 uint64_t reserved_9_11 : 3;
1146 uint64_t iocdatfl : 1;
1147 uint64_t reserved_13_15 : 3;
1148 uint64_t ioccmdfl : 1;
1149 uint64_t reserved_17_31 : 15;
1150 uint64_t dutfl : 10;
1151 uint64_t reserved_42_63 : 22;
1154 struct cvmx_l2c_bst_s cn68xx;
1155 struct cvmx_l2c_bst_s cn68xxp1;
1156 struct cvmx_l2c_bst_cn61xx cnf71xx;
1158 typedef union cvmx_l2c_bst cvmx_l2c_bst_t;
1163 * L2C_BST0 = L2C BIST 0 CTL/STAT
1166 union cvmx_l2c_bst0 {
1168 struct cvmx_l2c_bst0_s {
1169 #ifdef __BIG_ENDIAN_BITFIELD
1170 uint64_t reserved_24_63 : 40;
1171 uint64_t dtbnk : 1; /**< DuTag Bank#
1172 When DT=1(BAD), this field provides additional information
1173 about which DuTag Bank (0/1) failed. */
1174 uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3]
1175 - 0: GOOD (or bist in progress/never run)
1177 uint64_t dtcnt : 13; /**< DuTag BiST Counter (used to help isolate the failure)
1178 [12]: i (0=FORWARD/1=REVERSE pass)
1179 [11:10]: j (Pattern# 1 of 4)
1180 [9:4]: k (DT Index 1 of 64)
1181 [3:0]: l (DT# 1 of 16 DTs) */
1182 uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s)
1183 - 0: GOOD (or bist in progress/never run)
1185 uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM
1186 - 0: GOOD (or bist in progress/never run)
1188 uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3]
1189 - 0: GOOD (or bist in progress/never run)
1192 uint64_t wlb_dat : 4;
1193 uint64_t stin_msk : 1;
1195 uint64_t dtcnt : 13;
1196 uint64_t wlb_msk : 4;
1198 uint64_t reserved_24_63 : 40;
1201 struct cvmx_l2c_bst0_cn30xx {
1202 #ifdef __BIG_ENDIAN_BITFIELD
1203 uint64_t reserved_23_63 : 41;
1204 uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3]
1205 - 0: GOOD (or bist in progress/never run)
1207 uint64_t reserved_15_18 : 4;
1208 uint64_t dtcnt : 9; /**< DuTag BiST Counter (used to help isolate the failure)
1209 [8]: i (0=FORWARD/1=REVERSE pass)
1210 [7:6]: j (Pattern# 1 of 4)
1211 [5:0]: k (DT Index 1 of 64) */
1212 uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s)
1213 - 0: GOOD (or bist in progress/never run)
1215 uint64_t reserved_4_4 : 1;
1216 uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3]
1217 - 0: GOOD (or bist in progress/never run)
1220 uint64_t wlb_dat : 4;
1221 uint64_t reserved_4_4 : 1;
1224 uint64_t reserved_15_18 : 4;
1225 uint64_t wlb_msk : 4;
1226 uint64_t reserved_23_63 : 41;
1229 struct cvmx_l2c_bst0_cn31xx {
1230 #ifdef __BIG_ENDIAN_BITFIELD
1231 uint64_t reserved_23_63 : 41;
1232 uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3]
1233 - 0: GOOD (or bist in progress/never run)
1235 uint64_t reserved_16_18 : 3;
1236 uint64_t dtcnt : 10; /**< DuTag BiST Counter (used to help isolate the failure)
1237 [9]: i (0=FORWARD/1=REVERSE pass)
1238 [8:7]: j (Pattern# 1 of 4)
1239 [6:1]: k (DT Index 1 of 64)
1240 [0]: l (DT# 1 of 2 DTs) */
1241 uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s)
1242 - 0: GOOD (or bist in progress/never run)
1244 uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM
1245 - 0: GOOD (or bist in progress/never run)
1247 uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3]
1248 - 0: GOOD (or bist in progress/never run)
1251 uint64_t wlb_dat : 4;
1252 uint64_t stin_msk : 1;
1254 uint64_t dtcnt : 10;
1255 uint64_t reserved_16_18 : 3;
1256 uint64_t wlb_msk : 4;
1257 uint64_t reserved_23_63 : 41;
1260 struct cvmx_l2c_bst0_cn38xx {
1261 #ifdef __BIG_ENDIAN_BITFIELD
1262 uint64_t reserved_19_63 : 45;
1263 uint64_t dtcnt : 13; /**< DuTag BiST Counter (used to help isolate the failure)
1264 [12]: i (0=FORWARD/1=REVERSE pass)
1265 [11:10]: j (Pattern# 1 of 4)
1266 [9:4]: k (DT Index 1 of 64)
1267 [3:0]: l (DT# 1 of 16 DTs) */
1268 uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s)
1269 - 0: GOOD (or bist in progress/never run)
1271 uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM
1272 - 0: GOOD (or bist in progress/never run)
1274 uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3]
1275 - 0: GOOD (or bist in progress/never run)
1278 uint64_t wlb_dat : 4;
1279 uint64_t stin_msk : 1;
1281 uint64_t dtcnt : 13;
1282 uint64_t reserved_19_63 : 45;
1285 struct cvmx_l2c_bst0_cn38xx cn38xxp2;
1286 struct cvmx_l2c_bst0_cn50xx {
1287 #ifdef __BIG_ENDIAN_BITFIELD
1288 uint64_t reserved_24_63 : 40;
1289 uint64_t dtbnk : 1; /**< DuTag Bank#
1290 When DT=1(BAD), this field provides additional information
1291 about which DuTag Bank (0/1) failed. */
1292 uint64_t wlb_msk : 4; /**< Bist Results for WLB-MSK RAM [DP0-3]
1293 - 0: GOOD (or bist in progress/never run)
1295 uint64_t reserved_16_18 : 3;
1296 uint64_t dtcnt : 10; /**< DuTag BiST Counter (used to help isolate the failure)
1297 [9]: i (0=FORWARD/1=REVERSE pass)
1298 [8:7]: j (Pattern# 1 of 4)
1299 [6:1]: k (DT Index 1 of 64)
1300 [0]: l (DT# 1 of 2 DTs) */
1301 uint64_t dt : 1; /**< Bist Results for DuTAG RAM(s)
1302 - 0: GOOD (or bist in progress/never run)
1304 uint64_t stin_msk : 1; /**< Bist Results for STIN-MSK RAM
1305 - 0: GOOD (or bist in progress/never run)
1307 uint64_t wlb_dat : 4; /**< Bist Results for WLB-DAT RAM [DP0-3]
1308 - 0: GOOD (or bist in progress/never run)
1311 uint64_t wlb_dat : 4;
1312 uint64_t stin_msk : 1;
1314 uint64_t dtcnt : 10;
1315 uint64_t reserved_16_18 : 3;
1316 uint64_t wlb_msk : 4;
1318 uint64_t reserved_24_63 : 40;
1321 struct cvmx_l2c_bst0_cn50xx cn52xx;
1322 struct cvmx_l2c_bst0_cn50xx cn52xxp1;
1323 struct cvmx_l2c_bst0_s cn56xx;
1324 struct cvmx_l2c_bst0_s cn56xxp1;
1325 struct cvmx_l2c_bst0_s cn58xx;
1326 struct cvmx_l2c_bst0_s cn58xxp1;
1328 typedef union cvmx_l2c_bst0 cvmx_l2c_bst0_t;
1333 * L2C_BST1 = L2C BIST 1 CTL/STAT
1336 union cvmx_l2c_bst1 {
1338 struct cvmx_l2c_bst1_s {
1339 #ifdef __BIG_ENDIAN_BITFIELD
1340 uint64_t reserved_9_63 : 55;
1341 uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs)
1342 - 0: GOOD (or bist in progress/never run)
1346 uint64_t reserved_9_63 : 55;
1349 struct cvmx_l2c_bst1_cn30xx {
1350 #ifdef __BIG_ENDIAN_BITFIELD
1351 uint64_t reserved_16_63 : 48;
1352 uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs
1353 - 0: GOOD (or bist in progress/never run)
1355 uint64_t lrf : 2; /**< Bist Results for LRF RAMs (PLC+ILC)
1356 - 0: GOOD (or bist in progress/never run)
1358 uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM
1359 - 0: GOOD (or bist in progress/never run)
1361 uint64_t reserved_5_8 : 4;
1362 uint64_t l2t : 5; /**< Bist Results for L2T (USE+4SET RAMs)
1363 - 0: GOOD (or bist in progress/never run)
1367 uint64_t reserved_5_8 : 4;
1368 uint64_t vab_vwcf : 1;
1371 uint64_t reserved_16_63 : 48;
1374 struct cvmx_l2c_bst1_cn30xx cn31xx;
1375 struct cvmx_l2c_bst1_cn38xx {
1376 #ifdef __BIG_ENDIAN_BITFIELD
1377 uint64_t reserved_16_63 : 48;
1378 uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs
1379 - 0: GOOD (or bist in progress/never run)
1381 uint64_t lrf : 2; /**< Bist Results for LRF RAMs (PLC+ILC)
1382 - 0: GOOD (or bist in progress/never run)
1384 uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM
1385 - 0: GOOD (or bist in progress/never run)
1387 uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs)
1388 - 0: GOOD (or bist in progress/never run)
1392 uint64_t vab_vwcf : 1;
1395 uint64_t reserved_16_63 : 48;
1398 struct cvmx_l2c_bst1_cn38xx cn38xxp2;
1399 struct cvmx_l2c_bst1_cn38xx cn50xx;
1400 struct cvmx_l2c_bst1_cn52xx {
1401 #ifdef __BIG_ENDIAN_BITFIELD
1402 uint64_t reserved_19_63 : 45;
1403 uint64_t plc2 : 1; /**< Bist Results for PLC2 RAM
1404 - 0: GOOD (or bist in progress/never run)
1406 uint64_t plc1 : 1; /**< Bist Results for PLC1 RAM
1407 - 0: GOOD (or bist in progress/never run)
1409 uint64_t plc0 : 1; /**< Bist Results for PLC0 RAM
1410 - 0: GOOD (or bist in progress/never run)
1412 uint64_t vwdf : 4; /**< Bist Results for VWDF RAMs
1413 - 0: GOOD (or bist in progress/never run)
1415 uint64_t reserved_11_11 : 1;
1416 uint64_t ilc : 1; /**< Bist Results for ILC RAM
1417 - 0: GOOD (or bist in progress/never run)
1419 uint64_t vab_vwcf : 1; /**< Bist Results for VAB VWCF_MEM
1420 - 0: GOOD (or bist in progress/never run)
1422 uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs)
1423 - 0: GOOD (or bist in progress/never run)
1427 uint64_t vab_vwcf : 1;
1429 uint64_t reserved_11_11 : 1;
1434 uint64_t reserved_19_63 : 45;
1437 struct cvmx_l2c_bst1_cn52xx cn52xxp1;
1438 struct cvmx_l2c_bst1_cn56xx {
1439 #ifdef __BIG_ENDIAN_BITFIELD
1440 uint64_t reserved_24_63 : 40;
1441 uint64_t plc2 : 1; /**< Bist Results for LRF RAMs (ILC)
1442 - 0: GOOD (or bist in progress/never run)
1444 uint64_t plc1 : 1; /**< Bist Results for LRF RAMs (ILC)
1445 - 0: GOOD (or bist in progress/never run)
1447 uint64_t plc0 : 1; /**< Bist Results for LRF RAMs (ILC)
1448 - 0: GOOD (or bist in progress/never run)
1450 uint64_t ilc : 1; /**< Bist Results for LRF RAMs (ILC)
1451 - 0: GOOD (or bist in progress/never run)
1453 uint64_t vwdf1 : 4; /**< Bist Results for VWDF1 RAMs
1454 - 0: GOOD (or bist in progress/never run)
1456 uint64_t vwdf0 : 4; /**< Bist Results for VWDF0 RAMs
1457 - 0: GOOD (or bist in progress/never run)
1459 uint64_t vab_vwcf1 : 1; /**< Bist Results for VAB VWCF1_MEM */
1460 uint64_t reserved_10_10 : 1;
1461 uint64_t vab_vwcf0 : 1; /**< Bist Results for VAB VWCF0_MEM
1462 - 0: GOOD (or bist in progress/never run)
1464 uint64_t l2t : 9; /**< Bist Results for L2T (USE+8SET RAMs)
1465 - 0: GOOD (or bist in progress/never run)
1469 uint64_t vab_vwcf0 : 1;
1470 uint64_t reserved_10_10 : 1;
1471 uint64_t vab_vwcf1 : 1;
1478 uint64_t reserved_24_63 : 40;
1481 struct cvmx_l2c_bst1_cn56xx cn56xxp1;
1482 struct cvmx_l2c_bst1_cn38xx cn58xx;
1483 struct cvmx_l2c_bst1_cn38xx cn58xxp1;
1485 typedef union cvmx_l2c_bst1 cvmx_l2c_bst1_t;
1490 * L2C_BST2 = L2C BIST 2 CTL/STAT
1493 union cvmx_l2c_bst2 {
1495 struct cvmx_l2c_bst2_s {
1496 #ifdef __BIG_ENDIAN_BITFIELD
1497 uint64_t reserved_16_63 : 48;
1498 uint64_t mrb : 4; /**< Bist Results for MRB RAMs
1499 - 0: GOOD (or bist in progress/never run)
1501 uint64_t reserved_4_11 : 8;
1502 uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM
1504 uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM
1506 uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM
1507 - 0: GOOD (or bist in progress/never run)
1509 uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM
1510 - 0: GOOD (or bist in progress/never run)
1513 uint64_t xrddat : 1;
1514 uint64_t xrdmsk : 1;
1515 uint64_t picbst : 1;
1516 uint64_t ipcbst : 1;
1517 uint64_t reserved_4_11 : 8;
1519 uint64_t reserved_16_63 : 48;
1522 struct cvmx_l2c_bst2_cn30xx {
1523 #ifdef __BIG_ENDIAN_BITFIELD
1524 uint64_t reserved_16_63 : 48;
1525 uint64_t mrb : 4; /**< Bist Results for MRB RAMs
1526 - 0: GOOD (or bist in progress/never run)
1528 uint64_t rmdf : 4; /**< Bist Results for RMDF RAMs
1529 - 0: GOOD (or bist in progress/never run)
1531 uint64_t reserved_4_7 : 4;
1532 uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM
1533 - 0: GOOD (or bist in progress/never run)
1535 uint64_t reserved_2_2 : 1;
1536 uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM
1537 - 0: GOOD (or bist in progress/never run)
1539 uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM
1540 - 0: GOOD (or bist in progress/never run)
1543 uint64_t xrddat : 1;
1544 uint64_t xrdmsk : 1;
1545 uint64_t reserved_2_2 : 1;
1546 uint64_t ipcbst : 1;
1547 uint64_t reserved_4_7 : 4;
1550 uint64_t reserved_16_63 : 48;
1553 struct cvmx_l2c_bst2_cn30xx cn31xx;
1554 struct cvmx_l2c_bst2_cn38xx {
1555 #ifdef __BIG_ENDIAN_BITFIELD
1556 uint64_t reserved_16_63 : 48;
1557 uint64_t mrb : 4; /**< Bist Results for MRB RAMs
1558 - 0: GOOD (or bist in progress/never run)
1560 uint64_t rmdf : 4; /**< Bist Results for RMDF RAMs
1561 - 0: GOOD (or bist in progress/never run)
1563 uint64_t rhdf : 4; /**< Bist Results for RHDF RAMs
1564 - 0: GOOD (or bist in progress/never run)
1566 uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM
1568 uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM
1570 uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM
1571 - 0: GOOD (or bist in progress/never run)
1573 uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM
1574 - 0: GOOD (or bist in progress/never run)
1577 uint64_t xrddat : 1;
1578 uint64_t xrdmsk : 1;
1579 uint64_t picbst : 1;
1580 uint64_t ipcbst : 1;
1584 uint64_t reserved_16_63 : 48;
1587 struct cvmx_l2c_bst2_cn38xx cn38xxp2;
1588 struct cvmx_l2c_bst2_cn30xx cn50xx;
1589 struct cvmx_l2c_bst2_cn30xx cn52xx;
1590 struct cvmx_l2c_bst2_cn30xx cn52xxp1;
1591 struct cvmx_l2c_bst2_cn56xx {
1592 #ifdef __BIG_ENDIAN_BITFIELD
1593 uint64_t reserved_16_63 : 48;
1594 uint64_t mrb : 4; /**< Bist Results for MRB RAMs
1595 - 0: GOOD (or bist in progress/never run)
1597 uint64_t rmdb : 4; /**< Bist Results for RMDB RAMs
1598 - 0: GOOD (or bist in progress/never run)
1600 uint64_t rhdb : 4; /**< Bist Results for RHDB RAMs
1601 - 0: GOOD (or bist in progress/never run)
1603 uint64_t ipcbst : 1; /**< Bist Results for RFB IPC RAM
1605 uint64_t picbst : 1; /**< Bist Results for RFB PIC RAM
1607 uint64_t xrdmsk : 1; /**< Bist Results for RFB XRD-MSK RAM
1608 - 0: GOOD (or bist in progress/never run)
1610 uint64_t xrddat : 1; /**< Bist Results for RFB XRD-DAT RAM
1611 - 0: GOOD (or bist in progress/never run)
1614 uint64_t xrddat : 1;
1615 uint64_t xrdmsk : 1;
1616 uint64_t picbst : 1;
1617 uint64_t ipcbst : 1;
1621 uint64_t reserved_16_63 : 48;
1624 struct cvmx_l2c_bst2_cn56xx cn56xxp1;
1625 struct cvmx_l2c_bst2_cn56xx cn58xx;
1626 struct cvmx_l2c_bst2_cn56xx cn58xxp1;
1628 typedef union cvmx_l2c_bst2 cvmx_l2c_bst2_t;
1633 * L2C_BST_MEM = L2C MEM BIST Status
1637 * (1) CLEAR_BIST must be written to 1 before START_BIST is written to 1 using a separate CSR write.
1639 * (2) CLEAR_BIST must not be changed after writing START_BIST to 1 until the BIST operation completes
1640 * (indicated by START_BIST returning to 0) or operation is undefined.
1642 union cvmx_l2c_bst_memx {
1644 struct cvmx_l2c_bst_memx_s {
1645 #ifdef __BIG_ENDIAN_BITFIELD
1646 uint64_t start_bist : 1; /**< When written to 1, starts BIST. Will read 1 until
1647 BIST is complete (see Note). */
1648 uint64_t clear_bist : 1; /**< When BIST is triggered, run clear BIST (see Note) */
1649 uint64_t reserved_5_61 : 57;
1650 uint64_t rdffl : 1; /**< BIST failure status for RDF */
1651 uint64_t vbffl : 4; /**< BIST failure status for VBF0-3 */
1655 uint64_t reserved_5_61 : 57;
1656 uint64_t clear_bist : 1;
1657 uint64_t start_bist : 1;
1660 struct cvmx_l2c_bst_memx_s cn61xx;
1661 struct cvmx_l2c_bst_memx_s cn63xx;
1662 struct cvmx_l2c_bst_memx_s cn63xxp1;
1663 struct cvmx_l2c_bst_memx_s cn66xx;
1664 struct cvmx_l2c_bst_memx_s cn68xx;
1665 struct cvmx_l2c_bst_memx_s cn68xxp1;
1666 struct cvmx_l2c_bst_memx_s cnf71xx;
1668 typedef union cvmx_l2c_bst_memx cvmx_l2c_bst_memx_t;
1673 * L2C_BST_TDT = L2C TAD DaTa BIST Status
1676 union cvmx_l2c_bst_tdtx {
1678 struct cvmx_l2c_bst_tdtx_s {
1679 #ifdef __BIG_ENDIAN_BITFIELD
1680 uint64_t reserved_32_63 : 32;
1681 uint64_t fbfrspfl : 8; /**< BIST failure status for quad 0-7 FBF RSP read port */
1682 uint64_t sbffl : 8; /**< BIST failure status for quad 0-7 SBF */
1683 uint64_t fbffl : 8; /**< BIST failure status for quad 0-7 FBF WRP read port */
1684 uint64_t l2dfl : 8; /**< BIST failure status for quad 0-7 L2D */
1689 uint64_t fbfrspfl : 8;
1690 uint64_t reserved_32_63 : 32;
1693 struct cvmx_l2c_bst_tdtx_s cn61xx;
1694 struct cvmx_l2c_bst_tdtx_s cn63xx;
1695 struct cvmx_l2c_bst_tdtx_cn63xxp1 {
1696 #ifdef __BIG_ENDIAN_BITFIELD
1697 uint64_t reserved_24_63 : 40;
1698 uint64_t sbffl : 8; /**< BIST failure status for quad 0-7 SBF */
1699 uint64_t fbffl : 8; /**< BIST failure status for quad 0-7 FBF */
1700 uint64_t l2dfl : 8; /**< BIST failure status for quad 0-7 L2D */
1705 uint64_t reserved_24_63 : 40;
1708 struct cvmx_l2c_bst_tdtx_s cn66xx;
1709 struct cvmx_l2c_bst_tdtx_s cn68xx;
1710 struct cvmx_l2c_bst_tdtx_s cn68xxp1;
1711 struct cvmx_l2c_bst_tdtx_s cnf71xx;
1713 typedef union cvmx_l2c_bst_tdtx cvmx_l2c_bst_tdtx_t;
1718 * L2C_BST_TTG = L2C TAD TaG BIST Status
1721 union cvmx_l2c_bst_ttgx {
1723 struct cvmx_l2c_bst_ttgx_s {
1724 #ifdef __BIG_ENDIAN_BITFIELD
1725 uint64_t reserved_17_63 : 47;
1726 uint64_t lrufl : 1; /**< BIST failure status for tag LRU */
1727 uint64_t tagfl : 16; /**< BIST failure status for tag ways 0-15 */
1729 uint64_t tagfl : 16;
1731 uint64_t reserved_17_63 : 47;
1734 struct cvmx_l2c_bst_ttgx_s cn61xx;
1735 struct cvmx_l2c_bst_ttgx_s cn63xx;
1736 struct cvmx_l2c_bst_ttgx_s cn63xxp1;
1737 struct cvmx_l2c_bst_ttgx_s cn66xx;
1738 struct cvmx_l2c_bst_ttgx_s cn68xx;
1739 struct cvmx_l2c_bst_ttgx_s cn68xxp1;
1740 struct cvmx_l2c_bst_ttgx_s cnf71xx;
1742 typedef union cvmx_l2c_bst_ttgx cvmx_l2c_bst_ttgx_t;
1747 * Specify the RSL base addresses for the block
1749 * L2C_CFG = L2C Configuration
1753 union cvmx_l2c_cfg {
1755 struct cvmx_l2c_cfg_s {
1756 #ifdef __BIG_ENDIAN_BITFIELD
1757 uint64_t reserved_20_63 : 44;
1758 uint64_t bstrun : 1; /**< L2 Data Store Bist Running
1759 Indicates when the L2C HW Bist sequence(short or long) is
1760 running. [L2C ECC Bist FSM is not in the RESET/DONE state] */
1761 uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence
1762 When the previous state was '0' and SW writes a '1',
1763 the long bist sequence (enhanced 13N March) is performed.
1764 SW can then read the L2C_CFG[BSTRUN] which will indicate
1765 that the long bist sequence is running. When BSTRUN-=0,
1766 the state of the L2D_BST[0-3] registers contain information
1767 which reflects the status of the recent long bist sequence.
1768 NOTE: SW must never write LBIST=0 while Long Bist is running
1769 (ie: when BSTRUN=1 never write LBIST=0).
1770 NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS
1772 uint64_t xor_bank : 1; /**< L2C XOR Bank Bit
1773 When both LMC's are enabled(DPRES1=1/DPRES0=1), this
1774 bit determines how addresses are assigned to
1777 ----------+---------------------------------
1779 1 | byte address[7] XOR byte address[12]
1780 Example: If both LMC ports are enabled (DPRES1=1/DPRES0=1)
1781 and XOR_BANK=1, then addr[7] XOR addr[12] is used to determine
1782 which LMC Port# a reference is directed to. */
1783 uint64_t dpres1 : 1; /**< DDR1 Present/LMC1 Enable
1784 When DPRES1 is set, LMC#1 is enabled(DDR1 pins at
1785 the BOTTOM of the chip are active).
1786 NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1),
1787 see XOR_BANK bit to determine how a reference is
1788 assigned to a DDR/LMC port. (Also, in dual-LMC configuration,
1789 the address sent to the targeted LMC port is the
1790 address shifted right by one).
1791 NOTE: For power-savings, the DPRES1 is also used to
1792 disable DDR1/LMC1 clocks. */
1793 uint64_t dpres0 : 1; /**< DDR0 Present/LMC0 Enable
1794 When DPRES0 is set, LMC#0 is enabled(DDR0 pins at
1795 the BOTTOM of the chip are active).
1796 NOTE: When both LMC ports are enabled(DPRES1=1/DPRES0=1),
1797 see XOR_BANK bit to determine how a reference is
1798 assigned to a DDR/LMC port. (Also, in dual-LMC configuration,
1799 the address sent to the targeted LMC port is the
1800 address shifted right by one).
1801 NOTE: For power-savings, the DPRES0 is also used to
1802 disable DDR0/LMC0 clocks. */
1803 uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable
1804 When set, the L2C dual-fill performance feature is
1806 NOTE: This bit is only intended to evaluate the
1807 effectiveness of the dual-fill feature. For OPTIMAL
1808 performance, this bit should ALWAYS be zero. */
1809 uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent
1810 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1811 When FPEN is enabled and the LFB is empty, the
1812 forward progress counter (FPCNT) is initialized to:
1813 FPCNT[24:0] = 2^(9+FPEXP)
1814 When the LFB is non-empty the FPCNT is decremented
1815 (every eclk interval). If the FPCNT reaches zero,
1816 the LFB no longer accepts new requests until either
1817 a) all of the current LFB entries have completed
1818 (to ensure forward progress).
1819 b) FPEMPTY=0 and another forward progress count
1820 interval timeout expires.
1821 EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
1822 (For eclk=500MHz(2ns), this would be ~4us). */
1823 uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty
1824 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1825 When set, if the forward progress counter expires,
1826 all new LFB-NQs are stopped UNTIL all current LFB
1827 entries have completed.
1828 When clear, if the forward progress counter expires,
1829 all new LFB-NQs are stopped UNTIL either
1830 a) all current LFB entries have completed.
1831 b) another forward progress interval expires
1832 NOTE: We may want to FREEZE/HANG the system when
1833 we encounter an LFB entry cannot complete, and there
1834 may be times when we want to allow further LFB-NQs
1835 to be permitted to help in further analyzing the
1837 uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable
1838 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1839 When set, enables the Forward Progress Counter to
1840 prevent new LFB entries from enqueueing until ALL
1841 current LFB entries have completed. */
1842 uint64_t idxalias : 1; /**< L2C Index Alias Enable
1843 When set, the L2 Tag/Data Store will alias the 11-bit
1844 index with the low order 11-bits of the tag.
1845 index[17:7] = (tag[28:18] ^ index[17:7])
1846 NOTE: This bit must only be modified at boot time,
1847 when it can be guaranteed that no blocks have been
1848 loaded into the L2 Cache.
1849 The index aliasing is a performance enhancement feature
1850 which reduces the L2 cache thrashing experienced for
1851 regular stride references.
1852 NOTE: The index alias is stored in the LFB and VAB, and
1853 its effects are reversed for memory references (Victims,
1854 STT-Misses and Read-Misses) */
1855 uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits
1856 become less than or equal to the MWF_CRD, the L2C will
1857 assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
1858 writes (victims) higher priority. */
1859 uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode:
1860 - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
1861 - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
1862 RHCF(RdHit), STRSP(ST RSP w/ invalidate),
1863 STRSC(ST RSP no invalidate)] */
1864 uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode:
1865 - 0: Fixed Priority -
1866 IOB->PP requests are higher priority than
1869 I/O requests from PP and IOB are serviced in
1871 uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode:
1872 - 0: Fixed Priority -
1873 IOB memory requests are higher priority than PP
1876 Memory requests from PP and IOB are serviced in
1879 uint64_t lrf_arb_mode : 1;
1880 uint64_t rfb_arb_mode : 1;
1881 uint64_t rsp_arb_mode : 1;
1882 uint64_t mwf_crd : 4;
1883 uint64_t idxalias : 1;
1885 uint64_t fpempty : 1;
1887 uint64_t dfill_dis : 1;
1888 uint64_t dpres0 : 1;
1889 uint64_t dpres1 : 1;
1890 uint64_t xor_bank : 1;
1892 uint64_t bstrun : 1;
1893 uint64_t reserved_20_63 : 44;
1896 struct cvmx_l2c_cfg_cn30xx {
1897 #ifdef __BIG_ENDIAN_BITFIELD
1898 uint64_t reserved_14_63 : 50;
1899 uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent
1900 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1901 When FPEN is enabled and the LFB is empty, the
1902 forward progress counter (FPCNT) is initialized to:
1903 FPCNT[24:0] = 2^(9+FPEXP)
1904 When the LFB is non-empty the FPCNT is decremented
1905 (every eclk interval). If the FPCNT reaches zero,
1906 the LFB no longer accepts new requests until either
1907 a) all of the current LFB entries have completed
1908 (to ensure forward progress).
1909 b) FPEMPTY=0 and another forward progress count
1910 interval timeout expires.
1911 EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
1912 (For eclk=500MHz(2ns), this would be ~4us). */
1913 uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty
1914 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1915 When set, if the forward progress counter expires,
1916 all new LFB-NQs are stopped UNTIL all current LFB
1917 entries have completed.
1918 When clear, if the forward progress counter expires,
1919 all new LFB-NQs are stopped UNTIL either
1920 a) all current LFB entries have completed.
1921 b) another forward progress interval expires
1922 NOTE: We may want to FREEZE/HANG the system when
1923 we encounter an LFB entry cannot complete, and there
1924 may be times when we want to allow further LFB-NQs
1925 to be permitted to help in further analyzing the
1927 uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable
1928 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
1929 When set, enables the Forward Progress Counter to
1930 prevent new LFB entries from enqueueing until ALL
1931 current LFB entries have completed. */
1932 uint64_t idxalias : 1; /**< L2C Index Alias Enable
1933 When set, the L2 Tag/Data Store will alias the 8-bit
1934 index with the low order 8-bits of the tag.
1935 index[14:7] = (tag[22:15] ^ index[14:7])
1936 NOTE: This bit must only be modified at boot time,
1937 when it can be guaranteed that no blocks have been
1938 loaded into the L2 Cache.
1939 The index aliasing is a performance enhancement feature
1940 which reduces the L2 cache thrashing experienced for
1941 regular stride references.
1942 NOTE: The index alias is stored in the LFB and VAB, and
1943 its effects are reversed for memory references (Victims,
1944 STT-Misses and Read-Misses) */
1945 uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits
1946 become less than or equal to the MWF_CRD, the L2C will
1947 assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
1948 writes (victims) higher priority. */
1949 uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode:
1950 - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
1951 - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
1952 RHCF(RdHit), STRSP(ST RSP w/ invalidate),
1953 STRSC(ST RSP no invalidate)] */
1954 uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode:
1955 - 0: Fixed Priority -
1956 IOB->PP requests are higher priority than
1959 I/O requests from PP and IOB are serviced in
1961 uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode:
1962 - 0: Fixed Priority -
1963 IOB memory requests are higher priority than PP
1966 Memory requests from PP and IOB are serviced in
1969 uint64_t lrf_arb_mode : 1;
1970 uint64_t rfb_arb_mode : 1;
1971 uint64_t rsp_arb_mode : 1;
1972 uint64_t mwf_crd : 4;
1973 uint64_t idxalias : 1;
1975 uint64_t fpempty : 1;
1977 uint64_t reserved_14_63 : 50;
1980 struct cvmx_l2c_cfg_cn30xx cn31xx;
1981 struct cvmx_l2c_cfg_cn30xx cn38xx;
1982 struct cvmx_l2c_cfg_cn30xx cn38xxp2;
1983 struct cvmx_l2c_cfg_cn50xx {
1984 #ifdef __BIG_ENDIAN_BITFIELD
1985 uint64_t reserved_20_63 : 44;
1986 uint64_t bstrun : 1; /**< L2 Data Store Bist Running
1987 Indicates when the L2C HW Bist sequence(short or long) is
1988 running. [L2C ECC Bist FSM is not in the RESET/DONE state] */
1989 uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence
1990 When the previous state was '0' and SW writes a '1',
1991 the long bist sequence (enhanced 13N March) is performed.
1992 SW can then read the L2C_CFG[BSTRUN] which will indicate
1993 that the long bist sequence is running. When BSTRUN-=0,
1994 the state of the L2D_BST[0-3] registers contain information
1995 which reflects the status of the recent long bist sequence.
1996 NOTE: SW must never write LBIST=0 while Long Bist is running
1997 (ie: when BSTRUN=1 never write LBIST=0). */
1998 uint64_t reserved_14_17 : 4;
1999 uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent
2000 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2001 When FPEN is enabled and the LFB is empty, the
2002 forward progress counter (FPCNT) is initialized to:
2003 FPCNT[24:0] = 2^(9+FPEXP)
2004 When the LFB is non-empty the FPCNT is decremented
2005 (every eclk interval). If the FPCNT reaches zero,
2006 the LFB no longer accepts new requests until either
2007 a) all of the current LFB entries have completed
2008 (to ensure forward progress).
2009 b) FPEMPTY=0 and another forward progress count
2010 interval timeout expires.
2011 EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
2012 (For eclk=500MHz(2ns), this would be ~4us). */
2013 uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty
2014 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2015 When set, if the forward progress counter expires,
2016 all new LFB-NQs are stopped UNTIL all current LFB
2017 entries have completed.
2018 When clear, if the forward progress counter expires,
2019 all new LFB-NQs are stopped UNTIL either
2020 a) all current LFB entries have completed.
2021 b) another forward progress interval expires
2022 NOTE: We may want to FREEZE/HANG the system when
2023 we encounter an LFB entry cannot complete, and there
2024 may be times when we want to allow further LFB-NQs
2025 to be permitted to help in further analyzing the
2027 uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable
2028 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2029 When set, enables the Forward Progress Counter to
2030 prevent new LFB entries from enqueueing until ALL
2031 current LFB entries have completed. */
2032 uint64_t idxalias : 1; /**< L2C Index Alias Enable
2033 When set, the L2 Tag/Data Store will alias the 7-bit
2034 index with the low order 7-bits of the tag.
2035 index[13:7] = (tag[20:14] ^ index[13:7])
2036 NOTE: This bit must only be modified at boot time,
2037 when it can be guaranteed that no blocks have been
2038 loaded into the L2 Cache.
2039 The index aliasing is a performance enhancement feature
2040 which reduces the L2 cache thrashing experienced for
2041 regular stride references.
2042 NOTE: The index alias is stored in the LFB and VAB, and
2043 its effects are reversed for memory references (Victims,
2044 STT-Misses and Read-Misses) */
2045 uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits
2046 become less than or equal to the MWF_CRD, the L2C will
2047 assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
2048 writes (victims) higher priority. */
2049 uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode:
2050 - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
2051 - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
2052 RHCF(RdHit), STRSP(ST RSP w/ invalidate),
2053 STRSC(ST RSP no invalidate)] */
2054 uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode:
2055 - 0: Fixed Priority -
2056 IOB->PP requests are higher priority than
2059 I/O requests from PP and IOB are serviced in
2061 uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode:
2062 - 0: Fixed Priority -
2063 IOB memory requests are higher priority than PP
2066 Memory requests from PP and IOB are serviced in
2069 uint64_t lrf_arb_mode : 1;
2070 uint64_t rfb_arb_mode : 1;
2071 uint64_t rsp_arb_mode : 1;
2072 uint64_t mwf_crd : 4;
2073 uint64_t idxalias : 1;
2075 uint64_t fpempty : 1;
2077 uint64_t reserved_14_17 : 4;
2079 uint64_t bstrun : 1;
2080 uint64_t reserved_20_63 : 44;
2083 struct cvmx_l2c_cfg_cn50xx cn52xx;
2084 struct cvmx_l2c_cfg_cn50xx cn52xxp1;
2085 struct cvmx_l2c_cfg_s cn56xx;
2086 struct cvmx_l2c_cfg_s cn56xxp1;
2087 struct cvmx_l2c_cfg_cn58xx {
2088 #ifdef __BIG_ENDIAN_BITFIELD
2089 uint64_t reserved_20_63 : 44;
2090 uint64_t bstrun : 1; /**< L2 Data Store Bist Running
2091 Indicates when the L2C HW Bist sequence(short or long) is
2092 running. [L2C ECC Bist FSM is not in the RESET/DONE state] */
2093 uint64_t lbist : 1; /**< L2C Data Store Long Bist Sequence
2094 When the previous state was '0' and SW writes a '1',
2095 the long bist sequence (enhanced 13N March) is performed.
2096 SW can then read the L2C_CFG[BSTRUN] which will indicate
2097 that the long bist sequence is running. When BSTRUN-=0,
2098 the state of the L2D_BST[0-3] registers contain information
2099 which reflects the status of the recent long bist sequence.
2100 NOTE: SW must never write LBIST=0 while Long Bist is running
2101 (ie: when BSTRUN=1 never write LBIST=0).
2102 NOTE: LBIST is disabled if the MIO_FUS_DAT2.BIST_DIS
2104 uint64_t reserved_15_17 : 3;
2105 uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable
2106 When set, the L2C dual-fill performance feature is
2108 NOTE: This bit is only intended to evaluate the
2109 effectiveness of the dual-fill feature. For OPTIMAL
2110 performance, this bit should ALWAYS be zero. */
2111 uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent
2112 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2113 When FPEN is enabled and the LFB is empty, the
2114 forward progress counter (FPCNT) is initialized to:
2115 FPCNT[24:0] = 2^(9+FPEXP)
2116 When the LFB is non-empty the FPCNT is decremented
2117 (every eclk interval). If the FPCNT reaches zero,
2118 the LFB no longer accepts new requests until either
2119 a) all of the current LFB entries have completed
2120 (to ensure forward progress).
2121 b) FPEMPTY=0 and another forward progress count
2122 interval timeout expires.
2123 EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
2124 (For eclk=500MHz(2ns), this would be ~4us). */
2125 uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty
2126 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2127 When set, if the forward progress counter expires,
2128 all new LFB-NQs are stopped UNTIL all current LFB
2129 entries have completed.
2130 When clear, if the forward progress counter expires,
2131 all new LFB-NQs are stopped UNTIL either
2132 a) all current LFB entries have completed.
2133 b) another forward progress interval expires
2134 NOTE: We may want to FREEZE/HANG the system when
2135 we encounter an LFB entry cannot complete, and there
2136 may be times when we want to allow further LFB-NQs
2137 to be permitted to help in further analyzing the
2139 uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable
2140 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2141 When set, enables the Forward Progress Counter to
2142 prevent new LFB entries from enqueueing until ALL
2143 current LFB entries have completed. */
2144 uint64_t idxalias : 1; /**< L2C Index Alias Enable
2145 When set, the L2 Tag/Data Store will alias the 11-bit
2146 index with the low order 11-bits of the tag.
2147 index[17:7] = (tag[28:18] ^ index[17:7])
2148 NOTE: This bit must only be modified at boot time,
2149 when it can be guaranteed that no blocks have been
2150 loaded into the L2 Cache.
2151 The index aliasing is a performance enhancement feature
2152 which reduces the L2 cache thrashing experienced for
2153 regular stride references.
2154 NOTE: The index alias is stored in the LFB and VAB, and
2155 its effects are reversed for memory references (Victims,
2156 STT-Misses and Read-Misses) */
2157 uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits
2158 become less than or equal to the MWF_CRD, the L2C will
2159 assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
2160 writes (victims) higher priority. */
2161 uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode:
2162 - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
2163 - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
2164 RHCF(RdHit), STRSP(ST RSP w/ invalidate),
2165 STRSC(ST RSP no invalidate)] */
2166 uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode:
2167 - 0: Fixed Priority -
2168 IOB->PP requests are higher priority than
2171 I/O requests from PP and IOB are serviced in
2173 uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode:
2174 - 0: Fixed Priority -
2175 IOB memory requests are higher priority than PP
2178 Memory requests from PP and IOB are serviced in
2181 uint64_t lrf_arb_mode : 1;
2182 uint64_t rfb_arb_mode : 1;
2183 uint64_t rsp_arb_mode : 1;
2184 uint64_t mwf_crd : 4;
2185 uint64_t idxalias : 1;
2187 uint64_t fpempty : 1;
2189 uint64_t dfill_dis : 1;
2190 uint64_t reserved_15_17 : 3;
2192 uint64_t bstrun : 1;
2193 uint64_t reserved_20_63 : 44;
2196 struct cvmx_l2c_cfg_cn58xxp1 {
2197 #ifdef __BIG_ENDIAN_BITFIELD
2198 uint64_t reserved_15_63 : 49;
2199 uint64_t dfill_dis : 1; /**< L2C Dual Fill Disable
2200 When set, the L2C dual-fill performance feature is
2202 NOTE: This bit is only intended to evaluate the
2203 effectiveness of the dual-fill feature. For OPTIMAL
2204 performance, this bit should ALWAYS be zero. */
2205 uint64_t fpexp : 4; /**< [CYA] Forward Progress Counter Exponent
2206 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2207 When FPEN is enabled and the LFB is empty, the
2208 forward progress counter (FPCNT) is initialized to:
2209 FPCNT[24:0] = 2^(9+FPEXP)
2210 When the LFB is non-empty the FPCNT is decremented
2211 (every eclk interval). If the FPCNT reaches zero,
2212 the LFB no longer accepts new requests until either
2213 a) all of the current LFB entries have completed
2214 (to ensure forward progress).
2215 b) FPEMPTY=0 and another forward progress count
2216 interval timeout expires.
2217 EXAMPLE USE: If FPEXP=2, the FPCNT = 2048 eclks.
2218 (For eclk=500MHz(2ns), this would be ~4us). */
2219 uint64_t fpempty : 1; /**< [CYA] Forward Progress Counter Empty
2220 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2221 When set, if the forward progress counter expires,
2222 all new LFB-NQs are stopped UNTIL all current LFB
2223 entries have completed.
2224 When clear, if the forward progress counter expires,
2225 all new LFB-NQs are stopped UNTIL either
2226 a) all current LFB entries have completed.
2227 b) another forward progress interval expires
2228 NOTE: We may want to FREEZE/HANG the system when
2229 we encounter an LFB entry cannot complete, and there
2230 may be times when we want to allow further LFB-NQs
2231 to be permitted to help in further analyzing the
2233 uint64_t fpen : 1; /**< [CYA] Forward Progress Counter Enable
2234 NOTE: Should NOT be exposed to customer! [FOR DEBUG ONLY]
2235 When set, enables the Forward Progress Counter to
2236 prevent new LFB entries from enqueueing until ALL
2237 current LFB entries have completed. */
2238 uint64_t idxalias : 1; /**< L2C Index Alias Enable
2239 When set, the L2 Tag/Data Store will alias the 11-bit
2240 index with the low order 11-bits of the tag.
2241 index[17:7] = (tag[28:18] ^ index[17:7])
2242 NOTE: This bit must only be modified at boot time,
2243 when it can be guaranteed that no blocks have been
2244 loaded into the L2 Cache.
2245 The index aliasing is a performance enhancement feature
2246 which reduces the L2 cache thrashing experienced for
2247 regular stride references.
2248 NOTE: The index alias is stored in the LFB and VAB, and
2249 its effects are reversed for memory references (Victims,
2250 STT-Misses and Read-Misses) */
2251 uint64_t mwf_crd : 4; /**< MWF Credit Threshold: When the remaining MWF credits
2252 become less than or equal to the MWF_CRD, the L2C will
2253 assert l2c__lmi_mwd_hiwater_a to signal the LMC to give
2254 writes (victims) higher priority. */
2255 uint64_t rsp_arb_mode : 1; /**< RSP Arbitration Mode:
2256 - 0: Fixed Priority [HP=RFB, RMCF, RHCF, STRSP, LP=STRSC]
2257 - 1: Round Robin: [RFB(reflected I/O), RMCF(RdMiss),
2258 RHCF(RdHit), STRSP(ST RSP w/ invalidate),
2259 STRSC(ST RSP no invalidate)] */
2260 uint64_t rfb_arb_mode : 1; /**< RFB Arbitration Mode:
2261 - 0: Fixed Priority -
2262 IOB->PP requests are higher priority than
2265 I/O requests from PP and IOB are serviced in
2267 uint64_t lrf_arb_mode : 1; /**< RF Arbitration Mode:
2268 - 0: Fixed Priority -
2269 IOB memory requests are higher priority than PP
2272 Memory requests from PP and IOB are serviced in
2275 uint64_t lrf_arb_mode : 1;
2276 uint64_t rfb_arb_mode : 1;
2277 uint64_t rsp_arb_mode : 1;
2278 uint64_t mwf_crd : 4;
2279 uint64_t idxalias : 1;
2281 uint64_t fpempty : 1;
2283 uint64_t dfill_dis : 1;
2284 uint64_t reserved_15_63 : 49;
2288 typedef union cvmx_l2c_cfg cvmx_l2c_cfg_t;
2291 * cvmx_l2c_cop0_map#
2293 * L2C_COP0_MAP = PP COP0 register memory mapped region
2295 * Description: PP COP0 register mapped region.
2297 * NOTE: for 63xx, if the PPID is outside the range of 0-3,63 the write will be ignored and reads
2298 * will return 0x2bad2bad2bad2bad
2301 * (1) There are 256 COP0 registers per PP. Registers 0-255 map to PP0's COP0 registers, 256-511 are
2302 * mapped to PP1's, etc. A special set X PP63 (registers 16128-16383) are for broadcast writes.
2303 * Any write done to these registers will take effect in ALL PPs. Note the means the L2C_COP0_MAP
2304 * register to access can be gotten by:
2306 * REGNUM = [ PPID[5:0], rd[4:0], sel[2:0] ]
2308 * where rd and sel are as defined in the HRM description of Core Coprocessor 0 registers
2311 * (2) if a COP0 register cannot be accessed by this mechanism the write be silently ignored and the
2312 * read data will be 0xBADDEED.
2314 * (3) for 61xx, if the PPID is outside the range of 0-3,63 or if the PP in question is in reset a
2315 * write will be ignored and reads will timeout the RSL bus.
2317 * (4) Referring to note (1) above, the following rd/sel values are supported:
2319 * NOTE: Put only the "Customer type" in HRM. do not put the "Real type" in HRM.
2322 * rd sel type Description type
2323 * ======+=======+==========+==============================================+=========
2324 * 4 2 RO COP0 UserLocal RW
2325 * 7 0 RO COP0 HWREna RW
2326 * 9 0 RO COP0 Count RW
2327 * 9 6 RO COP0 CvmCount RW
2328 * 9 7 RO COP0 CvmCtl RW
2329 * 11 0 RO COP0 Compare RW
2330 * 11 6 RW COP0 PowThrottle RW
2331 * 12 0 RO COP0 Status RW
2332 * 12 1 RO COP0 IntCtl RO
2333 * 12 2 RO COP0 SRSCtl RO
2334 * 13 0 RO COP0 Cause RW
2335 * 14 0 RO COP0 EPC RW
2336 * 15 0 RO COP0 PrID RO
2337 * 15 1 RO COP0 EBase RW
2338 * 16 0 RO PC Issue Debug Info (see details below) RO
2339 * 16 1 RO PC Fetch Debug Info (see details below) RO
2340 * 16 2 RO PC Fill Debug Info (see details below) RO
2341 * 16 3 RO PC Misc Debug Info (see details below) RO
2342 * 18 0 RO COP0 WatchLo0 RW
2343 * 19 0 RO COP0 WatchHi0 RW
2344 * 22 0 RO COP0 MultiCoreDebug RW
2345 * 22 1 COP0 VoltageMonitor RW
2346 * 23 0 RO COP0 Debug RW
2347 * 23 6 RO COP0 Debug2 RO
2348 * 24 0 RO COP0 DEPC RW
2349 * 25 0 RO COP0 PerfCnt Control0 RW
2350 * 25 1 RO COP0 PerfCnt Counter0 RW
2351 * 25 2 RO COP0 PerfCnt Control1 RW
2352 * 25 3 RO COP0 PerfCnt Counter1 RW
2353 * 27 0 RO COP0 CacheErr (icache) RW
2354 * 28 0 RO COP0 TagLo (icache) RW
2355 * 28 1 RO COP0 DataLo (icache) RW
2356 * 29 1 RO COP0 DataHi (icache) RW
2357 * 30 0 RO COP0 ErrorEPC RW
2358 * 31 0 RO COP0 DESAVE RW
2359 * 31 2 RO COP0 Scratch RW
2360 * 31 3 RO COP0 Scratch1 RW
2361 * 31 4 RO COP0 Scratch2 RW
2363 * - PC Issue Debug Info
2365 * - 63:2 pc0_5a<63:2> // often VA<63:2> of the next instruction to issue
2366 * // but can also be the VA of an instruction executing/replaying on pipe 0
2367 * // or can also be a VA being filled into the instruction cache
2368 * // or can also be unpredictable
2370 * 1 illegal // set when illegal VA
2371 * 0 delayslot // set when VA is delayslot (prior branch may be either taken or not taken)
2373 * - PC Fetch Debug Info
2375 * - 63:0 fetch_address_3a // VA being fetched from the instruction cache
2376 * // <61:49>, <1:0> RAZ
2378 * - PC Fill Debug Info
2380 * - 63:0 fill_address_4a<63:2> // VA<63:2> being filled into instruction cache
2381 * // valid when waiting_for_ifill_4a is set (see PC Misc Debug Info below)
2383 * 1 illegal // set when illegal VA
2386 * - PC Misc Debug Info
2389 * 2 mem_stall_3a // stall term from L1 memory system
2390 * 1 waiting_for_pfill_4a // when waiting_for_ifill_4a is set, indicates whether instruction cache fill is due to a prefetch
2391 * 0 waiting_for_ifill_4a // set when there is an outstanding instruction cache fill
2393 union cvmx_l2c_cop0_mapx {
2395 struct cvmx_l2c_cop0_mapx_s {
2396 #ifdef __BIG_ENDIAN_BITFIELD
2397 uint64_t data : 64; /**< Data to write to/read from designated PP's COP0
2403 struct cvmx_l2c_cop0_mapx_s cn61xx;
2404 struct cvmx_l2c_cop0_mapx_s cn63xx;
2405 struct cvmx_l2c_cop0_mapx_s cn63xxp1;
2406 struct cvmx_l2c_cop0_mapx_s cn66xx;
2407 struct cvmx_l2c_cop0_mapx_s cn68xx;
2408 struct cvmx_l2c_cop0_mapx_s cn68xxp1;
2409 struct cvmx_l2c_cop0_mapx_s cnf71xx;
2411 typedef union cvmx_l2c_cop0_mapx cvmx_l2c_cop0_mapx_t;
2416 * L2C_CTL = L2C Control
2420 * (1) If MAXVAB is != 0, VAB_THRESH should be less than MAXVAB.
2422 * (2) L2DFDBE and L2DFSBE allows software to generate L2DSBE, L2DDBE, VBFSBE, and VBFDBE errors for
2423 * the purposes of testing error handling code. When one (or both) of these bits are set a PL2
2424 * which misses in the L2 will fill with the appropriate error in the first 2 OWs of the fill.
2425 * Software can determine which OW pair gets the error by choosing the desired fill order
2426 * (address<6:5>). A PL2 which hits in the L2 will not inject any errors. Therefore sending a
2427 * WBIL2 prior to the PL2 is recommended to make a miss likely (if multiple processors are involved
2428 * software must be careful to be sure no other processor or IO device can bring the block into the
2431 * To generate a VBFSBE or VBFDBE, software must first get the cache block into the cache with an
2432 * error using a PL2 which misses the L2. Then a store partial to a portion of the cache block
2433 * without the error must change the block to dirty. Then, a subsequent WBL2/WBIL2/victim will
2434 * trigger the VBFSBE/VBFDBE error.
2436 union cvmx_l2c_ctl {
2438 struct cvmx_l2c_ctl_s {
2439 #ifdef __BIG_ENDIAN_BITFIELD
2440 uint64_t reserved_30_63 : 34;
2441 uint64_t sepcmt : 1; /**< Sends all invals before the corresponding commit. */
2442 uint64_t rdf_fast : 1; /**< When 0, delay read data fifo from DCLK to RCLK by one
2443 cycle. Needed when DCLK:RCLK ratio > 3:1. Should be
2444 set before DDR traffic begins and only changed when
2445 memory traffic is idle. */
2446 uint64_t disstgl2i : 1; /**< Disable STGL2I's from changing the tags */
2447 uint64_t l2dfsbe : 1; /**< Force single bit ECC error on PL2 allocates (2) */
2448 uint64_t l2dfdbe : 1; /**< Force double bit ECC error on PL2 allocates (2) */
2449 uint64_t discclk : 1; /**< Disable conditional clocking in L2C PNR blocks */
2450 uint64_t maxvab : 4; /**< Maximum VABs in use at once
2451 (0 means 16, 1-15 as expected) */
2452 uint64_t maxlfb : 4; /**< Maximum LFBs in use at once
2453 (0 means 16, 1-15 as expected) */
2454 uint64_t rsp_arb_mode : 1; /**< Arbitration mode for RSC/RSD bus
2456 == 1, static priority
2459 3. STDN/SCDN/SCFL */
2460 uint64_t xmc_arb_mode : 1; /**< Arbitration mode for XMC QOS queues
2461 == 0, fully determined through QOS
2462 == 1, QOS0 highest priority, QOS1-3 use normal mode */
2463 uint64_t ef_ena : 1; /**< LMC early fill enable */
2464 uint64_t ef_cnt : 7; /**< LMC early fill count
2465 Specifies the number of cycles after the first LMC
2466 fill cycle to wait before requesting a fill on the
2468 // 7 dclks (we've received 1st out of 8
2469 // by the time we start counting)
2470 ef_cnt = ((LMCn_CONFIG[MODE32b] ? 14 : 7) *
2471 dclk0_period) / rclk_period;
2472 // + 1 rclk if the dclk and rclk edges don't
2473 // stay in the same position
2474 if ((dclk0_gen.period % rclk_gen.period) != 0)
2475 ef_cnt = ef_cnt + 1;
2476 // + 2 rclk synchronization uncertainty
2477 ef_cnt = ef_cnt + 2;
2478 // - 3 rclks to recognize first write
2479 ef_cnt = ef_cnt - 3;
2480 // + 3 rclks to perform first write
2481 ef_cnt = ef_cnt + 3;
2482 // - 9 rclks minimum latency from counter expire
2483 // to final fbf read
2484 ef_cnt = ef_cnt - 9; */
2485 uint64_t vab_thresh : 4; /**< VAB Threshold
2486 When the number of valid VABs exceeds this number the
2487 L2C increases the priority of all writes in the LMC. */
2488 uint64_t disecc : 1; /**< Tag and Data ECC Disable */
2489 uint64_t disidxalias : 1; /**< Index Alias Disable */
2491 uint64_t disidxalias : 1;
2492 uint64_t disecc : 1;
2493 uint64_t vab_thresh : 4;
2494 uint64_t ef_cnt : 7;
2495 uint64_t ef_ena : 1;
2496 uint64_t xmc_arb_mode : 1;
2497 uint64_t rsp_arb_mode : 1;
2498 uint64_t maxlfb : 4;
2499 uint64_t maxvab : 4;
2500 uint64_t discclk : 1;
2501 uint64_t l2dfdbe : 1;
2502 uint64_t l2dfsbe : 1;
2503 uint64_t disstgl2i : 1;
2504 uint64_t rdf_fast : 1;
2505 uint64_t sepcmt : 1;
2506 uint64_t reserved_30_63 : 34;
2509 struct cvmx_l2c_ctl_cn61xx {
2510 #ifdef __BIG_ENDIAN_BITFIELD
2511 uint64_t reserved_29_63 : 35;
2512 uint64_t rdf_fast : 1; /**< When 0, delay read data fifo from DCLK to RCLK by one
2513 cycle. Needed when DCLK:RCLK ratio > 3:1. Should be
2514 set before DDR traffic begins and only changed when
2515 memory traffic is idle. */
2516 uint64_t disstgl2i : 1; /**< Disable STGL2I's from changing the tags */
2517 uint64_t l2dfsbe : 1; /**< Force single bit ECC error on PL2 allocates (2) */
2518 uint64_t l2dfdbe : 1; /**< Force double bit ECC error on PL2 allocates (2) */
2519 uint64_t discclk : 1; /**< Disable conditional clocking in L2C PNR blocks */
2520 uint64_t maxvab : 4; /**< Maximum VABs in use at once
2521 (0 means 16, 1-15 as expected) */
2522 uint64_t maxlfb : 4; /**< Maximum LFBs in use at once
2523 (0 means 16, 1-15 as expected) */
2524 uint64_t rsp_arb_mode : 1; /**< Arbitration mode for RSC/RSD bus
2526 == 1, static priority
2529 3. STDN/SCDN/SCFL */
2530 uint64_t xmc_arb_mode : 1; /**< Arbitration mode for XMC QOS queues
2531 == 0, fully determined through QOS
2532 == 1, QOS0 highest priority, QOS1-3 use normal mode */
2533 uint64_t ef_ena : 1; /**< LMC early fill enable */
2534 uint64_t ef_cnt : 7; /**< LMC early fill count
2535 Specifies the number of cycles after the first LMC
2536 fill cycle to wait before requesting a fill on the
2538 // 7 dclks (we've received 1st out of 8
2539 // by the time we start counting)
2540 ef_cnt = ((LMCn_CONFIG[MODE32b] ? 14 : 7) *
2541 dclk0_period) / rclk_period;
2542 // + 1 rclk if the dclk and rclk edges don't
2543 // stay in the same position
2544 if ((dclk0_gen.period % rclk_gen.period) != 0)
2545 ef_cnt = ef_cnt + 1;
2546 // + 2 rclk synchronization uncertainty
2547 ef_cnt = ef_cnt + 2;
2548 // - 3 rclks to recognize first write
2549 ef_cnt = ef_cnt - 3;
2550 // + 3 rclks to perform first write
2551 ef_cnt = ef_cnt + 3;
2552 // - 9 rclks minimum latency from counter expire
2553 // to final fbf read
2554 ef_cnt = ef_cnt - 9; */
2555 uint64_t vab_thresh : 4; /**< VAB Threshold
2556 When the number of valid VABs exceeds this number the
2557 L2C increases the priority of all writes in the LMC. */
2558 uint64_t disecc : 1; /**< Tag and Data ECC Disable */
2559 uint64_t disidxalias : 1; /**< Index Alias Disable */
2561 uint64_t disidxalias : 1;
2562 uint64_t disecc : 1;
2563 uint64_t vab_thresh : 4;
2564 uint64_t ef_cnt : 7;
2565 uint64_t ef_ena : 1;
2566 uint64_t xmc_arb_mode : 1;
2567 uint64_t rsp_arb_mode : 1;
2568 uint64_t maxlfb : 4;
2569 uint64_t maxvab : 4;
2570 uint64_t discclk : 1;
2571 uint64_t l2dfdbe : 1;
2572 uint64_t l2dfsbe : 1;
2573 uint64_t disstgl2i : 1;
2574 uint64_t rdf_fast : 1;
2575 uint64_t reserved_29_63 : 35;
2578 struct cvmx_l2c_ctl_cn63xx {
2579 #ifdef __BIG_ENDIAN_BITFIELD
2580 uint64_t reserved_28_63 : 36;
2581 uint64_t disstgl2i : 1; /**< Disable STGL2I's from changing the tags */
2582 uint64_t l2dfsbe : 1; /**< Force single bit ECC error on PL2 allocates (2) */
2583 uint64_t l2dfdbe : 1; /**< Force double bit ECC error on PL2 allocates (2) */
2584 uint64_t discclk : 1; /**< Disable conditional clocking in L2C PNR blocks */
2585 uint64_t maxvab : 4; /**< Maximum VABs in use at once
2586 (0 means 16, 1-15 as expected) */
2587 uint64_t maxlfb : 4; /**< Maximum LFBs in use at once
2588 (0 means 16, 1-15 as expected) */
2589 uint64_t rsp_arb_mode : 1; /**< Arbitration mode for RSC/RSD bus
2591 == 1, static priority
2594 3. STDN/SCDN/SCFL */
2595 uint64_t xmc_arb_mode : 1; /**< Arbitration mode for XMC QOS queues
2596 == 0, fully determined through QOS
2597 == 1, QOS0 highest priority, QOS1-3 use normal mode */
2598 uint64_t ef_ena : 1; /**< LMC early fill enable */
2599 uint64_t ef_cnt : 7; /**< LMC early fill count
2600 Specifies the number of cycles after the first LMC
2601 fill cycle to wait before requesting a fill on the
2603 // 7 dclks (we've received 1st out of 8
2604 // by the time we start counting)
2605 ef_cnt = (7 * dclk0_period) / rclk_period;
2606 // + 1 rclk if the dclk and rclk edges don't
2607 // stay in the same position
2608 if ((dclk0_gen.period % rclk_gen.period) != 0)
2609 ef_cnt = ef_cnt + 1;
2610 // + 2 rclk synchronization uncertainty
2611 ef_cnt = ef_cnt + 2;
2612 // - 3 rclks to recognize first write
2613 ef_cnt = ef_cnt - 3;
2614 // + 3 rclks to perform first write
2615 ef_cnt = ef_cnt + 3;
2616 // - 9 rclks minimum latency from counter expire
2617 // to final fbf read
2618 ef_cnt = ef_cnt - 9; */
2619 uint64_t vab_thresh : 4; /**< VAB Threshold
2620 When the number of valid VABs exceeds this number the
2621 L2C increases the priority of all writes in the LMC. */
2622 uint64_t disecc : 1; /**< Tag and Data ECC Disable */
2623 uint64_t disidxalias : 1; /**< Index Alias Disable */
2625 uint64_t disidxalias : 1;
2626 uint64_t disecc : 1;
2627 uint64_t vab_thresh : 4;
2628 uint64_t ef_cnt : 7;
2629 uint64_t ef_ena : 1;
2630 uint64_t xmc_arb_mode : 1;
2631 uint64_t rsp_arb_mode : 1;
2632 uint64_t maxlfb : 4;
2633 uint64_t maxvab : 4;
2634 uint64_t discclk : 1;
2635 uint64_t l2dfdbe : 1;
2636 uint64_t l2dfsbe : 1;
2637 uint64_t disstgl2i : 1;
2638 uint64_t reserved_28_63 : 36;
2641 struct cvmx_l2c_ctl_cn63xxp1 {
2642 #ifdef __BIG_ENDIAN_BITFIELD
2643 uint64_t reserved_25_63 : 39;
2644 uint64_t discclk : 1; /**< Disable conditional clocking in L2C PNR blocks */
2645 uint64_t maxvab : 4; /**< Maximum VABs in use at once
2646 (0 means 16, 1-15 as expected) */
2647 uint64_t maxlfb : 4; /**< Maximum LFBs in use at once
2648 (0 means 16, 1-15 as expected) */
2649 uint64_t rsp_arb_mode : 1; /**< Arbitration mode for RSC/RSD bus
2651 == 1, static priority
2654 3. STDN/SCDN/SCFL */
2655 uint64_t xmc_arb_mode : 1; /**< Arbitration mode for XMC QOS queues
2656 == 0, fully determined through QOS
2657 == 1, QOS0 highest priority, QOS1-3 use normal mode */
2658 uint64_t ef_ena : 1; /**< LMC early fill enable */
2659 uint64_t ef_cnt : 7; /**< LMC early fill count
2660 Specifies the number of cycles after the first LMC
2661 fill cycle to wait before requesting a fill on the
2663 // 7 dclks (we've received 1st out of 8
2664 // by the time we start counting)
2665 ef_cnt = (7 * dclk0_period) / rclk_period;
2666 // + 1 rclk if the dclk and rclk edges don't
2667 // stay in the same position
2668 if ((dclk0_gen.period % rclk_gen.period) != 0)
2669 ef_cnt = ef_cnt + 1;
2670 // + 2 rclk synchronization uncertainty
2671 ef_cnt = ef_cnt + 2;
2672 // - 3 rclks to recognize first write
2673 ef_cnt = ef_cnt - 3;
2674 // + 3 rclks to perform first write
2675 ef_cnt = ef_cnt + 3;
2676 // - 9 rclks minimum latency from counter expire
2677 // to final fbf read
2678 ef_cnt = ef_cnt - 9; */
2679 uint64_t vab_thresh : 4; /**< VAB Threshold
2680 When the number of valid VABs exceeds this number the
2681 L2C increases the priority of all writes in the LMC. */
2682 uint64_t disecc : 1; /**< Tag and Data ECC Disable */
2683 uint64_t disidxalias : 1; /**< Index Alias Disable */
2685 uint64_t disidxalias : 1;
2686 uint64_t disecc : 1;
2687 uint64_t vab_thresh : 4;
2688 uint64_t ef_cnt : 7;
2689 uint64_t ef_ena : 1;
2690 uint64_t xmc_arb_mode : 1;
2691 uint64_t rsp_arb_mode : 1;
2692 uint64_t maxlfb : 4;
2693 uint64_t maxvab : 4;
2694 uint64_t discclk : 1;
2695 uint64_t reserved_25_63 : 39;
2698 struct cvmx_l2c_ctl_cn61xx cn66xx;
2699 struct cvmx_l2c_ctl_s cn68xx;
2700 struct cvmx_l2c_ctl_cn63xx cn68xxp1;
2701 struct cvmx_l2c_ctl_cn61xx cnf71xx;
2703 typedef union cvmx_l2c_ctl cvmx_l2c_ctl_t;
2708 * L2C_DBG = L2C DEBUG Register
2710 * Description: L2C Tag/Data Store Debug Register
2713 * (1) When using the L2T, L2D or FINV Debug probe feature, the LDD command WILL NOT update the DuTags.
2714 * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one set)
2715 * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back
2716 * dirty data to memory to maintain coherency.
2717 * (4) L2 Cache Lock Down feature MUST BE disabled (L2C_LCKBASE[LCK_ENA]=0) if ANY of the L2C debug
2718 * features (L2T, L2D, FINV) are enabled.
2720 union cvmx_l2c_dbg {
2722 struct cvmx_l2c_dbg_s {
2723 #ifdef __BIG_ENDIAN_BITFIELD
2724 uint64_t reserved_15_63 : 49;
2725 uint64_t lfb_enum : 4; /**< Specifies the LFB Entry# which is to be captured. */
2726 uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of
2727 the LFB specified by LFB_ENUM[3:0] are captured
2728 into the L2C_LFB(0/1/2) registers.
2729 NOTE: Some fields of the LFB entry are unpredictable
2730 and dependent on usage. This is only intended to be
2731 used for HW debug. */
2732 uint64_t ppnum : 4; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2733 is enabled, this field determines which one-of-16
2734 PPs is selected as the diagnostic PP. */
2735 uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2736 is enabled, this field determines 1-of-n targeted
2738 NOTE: L2C_DBG[SET] must never equal a crippled or
2739 unusable set (see UMSK* registers and Cripple mode
2741 uint64_t finv : 1; /**< Flush-Invalidate.
2742 When flush-invalidate is enable (FINV=1), all STF
2743 (L1 store-miss) commands generated from the diagnostic PP
2744 (L2C_DBG[PPNUM]) will invalidate the specified set
2745 (L2C_DBG[SET]) at the index specified in the STF
2746 address[17:7]. If a dirty block is detected (D=1), it is
2747 written back to memory. The contents of the invalid
2748 L2 Cache line is also 'scrubbed' with the STF write data.
2749 NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
2750 STF address[17:7] refers to the 'aliased' address.
2751 NOTE: An STF command with write data=ZEROES can be
2752 generated by SW using the Prefetch instruction with
2753 Hint=30d "prepare for Store", followed by a SYNCW.
2754 What is seen at the L2C as an STF w/wrdcnt=0 with all
2755 of its mask bits clear (indicates zero-fill data).
2756 A flush-invalidate will 'force-hit' the L2 cache at
2757 [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
2758 If the cache block is dirty, it is also written back
2759 to memory. The DuTag state is probed/updated as normal
2761 TYPICAL APPLICATIONS:
2762 1) L2 Tag/Data ECC SW Recovery
2764 NOTE: If the cacheline had been previously LOCKED(L=1),
2765 a flush-invalidate operation will explicitly UNLOCK
2766 (L=0) the set/index specified.
2767 NOTE: The diagnostic PP cores can generate STF
2768 commands to the L2 Cache whenever all 128 bytes in a
2769 block are written. SW must take this into consideration
2770 to avoid 'errant' Flush-Invalidates. */
2771 uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is
2772 returned directly from the L2 Data Store
2773 (regardless of hit/miss) when an LDD(L1 load-miss) command
2774 is issued from a PP determined by the L2C_DBG[PPNUM]
2775 field. The selected set# is determined by the
2776 L2C_DBG[SET] field, and the index is determined
2777 from the address[17:7] associated with the LDD
2779 This 'force-hit' will NOT alter the current L2 Tag
2780 state OR the DuTag state. */
2781 uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:18]]
2782 is returned on the data bus starting at +32(and +96) bytes
2783 offset from the beginning of cacheline when an LDD
2784 (L1 load-miss) command is issued from a PP determined by
2785 the L2C_DBG[PPNUM] field.
2786 The selected L2 set# is determined by the L2C_DBG[SET]
2787 field, and the L2 index is determined from the
2788 phys_addr[17:7] associated with the LDD command.
2789 This 'L2 force-hit' will NOT alter the current L2 Tag
2790 state OR the DuTag state.
2791 NOTE: The diagnostic PP should issue a d-stream load
2792 to an aligned cacheline+0x20(+0x60) in order to have the
2793 return VDLUTAG information (in OW2/OW6) written directly
2794 into the proper PP register. The diagnostic PP should also
2795 flush it's local L1 cache after use(to ensure data
2797 NOTE: The position of the VDLUTAG data in the destination
2798 register is dependent on the endian mode(big/little).
2799 NOTE: N3K-Pass2 modification. (This bit's functionality
2800 has changed since Pass1-in the following way).
2801 NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
2802 If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
2803 half cacheline (see: L2D_ERR[BMHCLSEL] is also
2804 conditionally latched into the L2D_FSYN0/1 CSRs if an
2805 LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
2812 uint64_t lfb_dmp : 1;
2813 uint64_t lfb_enum : 4;
2814 uint64_t reserved_15_63 : 49;
2817 struct cvmx_l2c_dbg_cn30xx {
2818 #ifdef __BIG_ENDIAN_BITFIELD
2819 uint64_t reserved_13_63 : 51;
2820 uint64_t lfb_enum : 2; /**< Specifies the LFB Entry# which is to be captured. */
2821 uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of
2822 the LFB specified by LFB_ENUM are captured
2823 into the L2C_LFB(0/1/2) registers.
2824 NOTE: Some fields of the LFB entry are unpredictable
2825 and dependent on usage. This is only intended to be
2826 used for HW debug. */
2827 uint64_t reserved_7_9 : 3;
2828 uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2829 is enabled, this field determines which
2830 PP is selected as the diagnostic PP.
2831 NOTE: For CN30XX single core PPNUM=0 (MBZ) */
2832 uint64_t reserved_5_5 : 1;
2833 uint64_t set : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2834 is enabled, this field determines 1-of-n targeted
2836 NOTE: L2C_DBG[SET] must never equal a crippled or
2837 unusable set (see UMSK* registers and Cripple mode
2839 uint64_t finv : 1; /**< Flush-Invalidate.
2840 When flush-invalidate is enable (FINV=1), all STF
2841 (L1 store-miss) commands generated from the PP will invalidate
2842 the specified set(L2C_DBG[SET]) at the index specified
2843 in the STF address[14:7]. If a dirty block is detected(D=1),
2844 it is written back to memory. The contents of the invalid
2845 L2 Cache line is also 'scrubbed' with the STF write data.
2846 NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
2847 STF address[14:7] refers to the 'aliased' address.
2848 NOTE: An STF command with write data=ZEROES can be
2849 generated by SW using the Prefetch instruction with
2850 Hint=30d "prepare for Store", followed by a SYNCW.
2851 What is seen at the L2C as an STF w/wrdcnt=0 with all
2852 of its mask bits clear (indicates zero-fill data).
2853 A flush-invalidate will 'force-hit' the L2 cache at
2854 [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
2855 If the cache block is dirty, it is also written back
2856 to memory. The DuTag state is probed/updated as normal
2858 TYPICAL APPLICATIONS:
2859 1) L2 Tag/Data ECC SW Recovery
2861 NOTE: If the cacheline had been previously LOCKED(L=1),
2862 a flush-invalidate operation will explicitly UNLOCK
2863 (L=0) the set/index specified.
2864 NOTE: The PP can generate STF(L1 store-miss)
2865 commands to the L2 Cache whenever all 128 bytes in a
2866 block are written. SW must take this into consideration
2867 to avoid 'errant' Flush-Invalidates. */
2868 uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is
2869 returned directly from the L2 Data Store
2870 (regardless of hit/miss) when an LDD(L1 load-miss)
2871 command is issued from the PP.
2872 The selected set# is determined by the
2873 L2C_DBG[SET] field, and the index is determined
2874 from the address[14:7] associated with the LDD
2876 This 'force-hit' will NOT alter the current L2 Tag
2877 state OR the DuTag state. */
2878 uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:15]]
2879 is returned on the data bus starting at +32(and +96) bytes
2880 offset from the beginning of cacheline when an LDD
2881 (L1 load-miss) command is issued from the PP.
2882 The selected L2 set# is determined by the L2C_DBG[SET]
2883 field, and the L2 index is determined from the
2884 phys_addr[14:7] associated with the LDD command.
2885 This 'L2 force-hit' will NOT alter the current L2 Tag
2886 state OR the DuTag state.
2887 NOTE: The diagnostic PP should issue a d-stream load
2888 to an aligned cacheline+0x20(+0x60) in order to have the
2889 return VDLUTAG information (in OW2/OW6) written directly
2890 into the proper PP register. The diagnostic PP should also
2891 flush it's local L1 cache after use(to ensure data
2893 NOTE: The position of the VDLUTAG data in the destination
2894 register is dependent on the endian mode(big/little).
2895 NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
2896 If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
2897 half cacheline (see: L2D_ERR[BMHCLSEL] is also
2898 conditionally latched into the L2D_FSYN0/1 CSRs if an
2899 LDD(L1 load-miss) is detected. */
2905 uint64_t reserved_5_5 : 1;
2907 uint64_t reserved_7_9 : 3;
2908 uint64_t lfb_dmp : 1;
2909 uint64_t lfb_enum : 2;
2910 uint64_t reserved_13_63 : 51;
2913 struct cvmx_l2c_dbg_cn31xx {
2914 #ifdef __BIG_ENDIAN_BITFIELD
2915 uint64_t reserved_14_63 : 50;
2916 uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */
2917 uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of
2918 the LFB specified by LFB_ENUM are captured
2919 into the L2C_LFB(0/1/2) registers.
2920 NOTE: Some fields of the LFB entry are unpredictable
2921 and dependent on usage. This is only intended to be
2922 used for HW debug. */
2923 uint64_t reserved_7_9 : 3;
2924 uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2925 is enabled, this field determines which
2926 PP is selected as the diagnostic PP. */
2927 uint64_t reserved_5_5 : 1;
2928 uint64_t set : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
2929 is enabled, this field determines 1-of-n targeted
2931 NOTE: L2C_DBG[SET] must never equal a crippled or
2932 unusable set (see UMSK* registers and Cripple mode
2934 uint64_t finv : 1; /**< Flush-Invalidate.
2935 When flush-invalidate is enable (FINV=1), all STF
2936 (L1 store-miss) commands generated from the diagnostic PP
2937 (L2C_DBG[PPNUM]) will invalidate the specified set
2938 (L2C_DBG[SET]) at the index specified in the STF
2939 address[15:7]. If a dirty block is detected (D=1), it is
2940 written back to memory. The contents of the invalid
2941 L2 Cache line is also 'scrubbed' with the STF write data.
2942 NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
2943 STF address[15:7] refers to the 'aliased' address.
2944 NOTE: An STF command with write data=ZEROES can be
2945 generated by SW using the Prefetch instruction with
2946 Hint=30d "prepare for Store", followed by a SYNCW.
2947 What is seen at the L2C as an STF w/wrdcnt=0 with all
2948 of its mask bits clear (indicates zero-fill data).
2949 A flush-invalidate will 'force-hit' the L2 cache at
2950 [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
2951 If the cache block is dirty, it is also written back
2952 to memory. The DuTag state is probed/updated as normal
2954 TYPICAL APPLICATIONS:
2955 1) L2 Tag/Data ECC SW Recovery
2957 NOTE: If the cacheline had been previously LOCKED(L=1),
2958 a flush-invalidate operation will explicitly UNLOCK
2959 (L=0) the set/index specified.
2960 NOTE: The diagnostic PP cores can generate STF(L1 store-miss)
2961 commands to the L2 Cache whenever all 128 bytes in a
2962 block are written. SW must take this into consideration
2963 to avoid 'errant' Flush-Invalidates. */
2964 uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is
2965 returned directly from the L2 Data Store
2966 (regardless of hit/miss) when an LDD(L1 load-miss)
2967 command is issued from a PP determined by the
2968 L2C_DBG[PPNUM] field. The selected set# is determined
2969 by the L2C_DBG[SET] field, and the index is determined
2970 from the address[15:7] associated with the LDD command.
2971 This 'L2 force-hit' will NOT alter the current L2 Tag
2972 state OR the DuTag state. */
2973 uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]]
2974 is returned on the data bus starting at +32(and +96) bytes
2975 offset from the beginning of cacheline when an LDD
2976 (L1 load-miss) command is issued from a PP determined by
2977 the L2C_DBG[PPNUM] field.
2978 The selected L2 set# is determined by the L2C_DBG[SET]
2979 field, and the L2 index is determined from the
2980 phys_addr[15:7] associated with the LDD command.
2981 This 'L2 force-hit' will NOT alter the current L2 Tag
2982 state OR the DuTag state.
2983 NOTE: The diagnostic PP should issue a d-stream load
2984 to an aligned cacheline+0x20(+0x60) in order to have the
2985 return VDLUTAG information (in OW2/OW6) written directly
2986 into the proper PP register. The diagnostic PP should also
2987 flush it's local L1 cache after use(to ensure data
2989 NOTE: The position of the VDLUTAG data in the destination
2990 register is dependent on the endian mode(big/little).
2991 NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
2992 If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
2993 half cacheline (see: L2D_ERR[BMHCLSEL] is also
2994 conditionally latched into the L2D_FSYN0/1 CSRs if an
2995 LDD(L1 load-miss) is detected from the diagnostic PP
2996 (L2C_DBG[PPNUM]). */
3002 uint64_t reserved_5_5 : 1;
3004 uint64_t reserved_7_9 : 3;
3005 uint64_t lfb_dmp : 1;
3006 uint64_t lfb_enum : 3;
3007 uint64_t reserved_14_63 : 50;
3010 struct cvmx_l2c_dbg_s cn38xx;
3011 struct cvmx_l2c_dbg_s cn38xxp2;
3012 struct cvmx_l2c_dbg_cn50xx {
3013 #ifdef __BIG_ENDIAN_BITFIELD
3014 uint64_t reserved_14_63 : 50;
3015 uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */
3016 uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of
3017 the LFB specified by LFB_ENUM[2:0] are captured
3018 into the L2C_LFB(0/1/2) registers.
3019 NOTE: Some fields of the LFB entry are unpredictable
3020 and dependent on usage. This is only intended to be
3021 used for HW debug. */
3022 uint64_t reserved_7_9 : 3;
3023 uint64_t ppnum : 1; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
3024 is enabled, this field determines which 1-of-2
3025 PPs is selected as the diagnostic PP. */
3026 uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
3027 is enabled, this field determines 1-of-n targeted
3029 NOTE: L2C_DBG[SET] must never equal a crippled or
3030 unusable set (see UMSK* registers and Cripple mode
3032 uint64_t finv : 1; /**< Flush-Invalidate.
3033 When flush-invalidate is enable (FINV=1), all STF
3034 (L1 store-miss) commands generated from the diagnostic PP
3035 (L2C_DBG[PPNUM]) will invalidate the specified set
3036 (L2C_DBG[SET]) at the index specified in the STF
3037 address[13:7]. If a dirty block is detected (D=1), it is
3038 written back to memory. The contents of the invalid
3039 L2 Cache line is also 'scrubbed' with the STF write data.
3040 NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
3041 STF address[13:7] refers to the 'aliased' address.
3042 NOTE: An STF command with write data=ZEROES can be
3043 generated by SW using the Prefetch instruction with
3044 Hint=30d "prepare for Store", followed by a SYNCW.
3045 What is seen at the L2C as an STF w/wrdcnt=0 with all
3046 of its mask bits clear (indicates zero-fill data).
3047 A flush-invalidate will 'force-hit' the L2 cache at
3048 [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
3049 If the cache block is dirty, it is also written back
3050 to memory. The DuTag state is probed/updated as normal
3052 TYPICAL APPLICATIONS:
3053 1) L2 Tag/Data ECC SW Recovery
3055 NOTE: If the cacheline had been previously LOCKED(L=1),
3056 a flush-invalidate operation will explicitly UNLOCK
3057 (L=0) the set/index specified.
3058 NOTE: The diagnostic PP cores can generate STF
3059 commands to the L2 Cache whenever all 128 bytes in a
3060 block are written. SW must take this into consideration
3061 to avoid 'errant' Flush-Invalidates. */
3062 uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is
3063 returned directly from the L2 Data Store
3064 (regardless of hit/miss) when an LDD(L1 load-miss) command
3065 is issued from a PP determined by the L2C_DBG[PPNUM]
3066 field. The selected set# is determined by the
3067 L2C_DBG[SET] field, and the index is determined
3068 from the address[13:7] associated with the LDD
3070 This 'force-hit' will NOT alter the current L2 Tag
3071 state OR the DuTag state. */
3072 uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:14]]
3073 is returned on the data bus starting at +32(and +96) bytes
3074 offset from the beginning of cacheline when an LDD
3075 (L1 load-miss) command is issued from a PP determined by
3076 the L2C_DBG[PPNUM] field.
3077 The selected L2 set# is determined by the L2C_DBG[SET]
3078 field, and the L2 index is determined from the
3079 phys_addr[13:7] associated with the LDD command.
3080 This 'L2 force-hit' will NOT alter the current L2 Tag
3081 state OR the DuTag state.
3082 NOTE: The diagnostic PP should issue a d-stream load
3083 to an aligned cacheline+0x20(+0x60) in order to have the
3084 return VDLUTAG information (in OW2/OW6) written directly
3085 into the proper PP register. The diagnostic PP should also
3086 flush it's local L1 cache after use(to ensure data
3088 NOTE: The position of the VDLUTAG data in the destination
3089 register is dependent on the endian mode(big/little).
3090 NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
3091 If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
3092 half cacheline (see: L2D_ERR[BMHCLSEL] is also
3093 conditionally latched into the L2D_FSYN0/1 CSRs if an
3094 LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
3101 uint64_t reserved_7_9 : 3;
3102 uint64_t lfb_dmp : 1;
3103 uint64_t lfb_enum : 3;
3104 uint64_t reserved_14_63 : 50;
3107 struct cvmx_l2c_dbg_cn52xx {
3108 #ifdef __BIG_ENDIAN_BITFIELD
3109 uint64_t reserved_14_63 : 50;
3110 uint64_t lfb_enum : 3; /**< Specifies the LFB Entry# which is to be captured. */
3111 uint64_t lfb_dmp : 1; /**< LFB Dump Enable: When written(=1), the contents of
3112 the LFB specified by LFB_ENUM[2:0] are captured
3113 into the L2C_LFB(0/1/2) registers.
3114 NOTE: Some fields of the LFB entry are unpredictable
3115 and dependent on usage. This is only intended to be
3116 used for HW debug. */
3117 uint64_t reserved_8_9 : 2;
3118 uint64_t ppnum : 2; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
3119 is enabled, this field determines which 1-of-4
3120 PPs is selected as the diagnostic PP. */
3121 uint64_t set : 3; /**< When L2C_DBG[L2T] or L2C_DBG[L2D] or L2C_DBG[FINV]
3122 is enabled, this field determines 1-of-n targeted
3124 NOTE: L2C_DBG[SET] must never equal a crippled or
3125 unusable set (see UMSK* registers and Cripple mode
3127 uint64_t finv : 1; /**< Flush-Invalidate.
3128 When flush-invalidate is enable (FINV=1), all STF
3129 (L1 store-miss) commands generated from the diagnostic PP
3130 (L2C_DBG[PPNUM]) will invalidate the specified set
3131 (L2C_DBG[SET]) at the index specified in the STF
3132 address[15:7]. If a dirty block is detected (D=1), it is
3133 written back to memory. The contents of the invalid
3134 L2 Cache line is also 'scrubbed' with the STF write data.
3135 NOTE: If L2C_CFG[IDXALIAS]=1, the index specified in
3136 STF address[15:7] refers to the 'aliased' address.
3137 NOTE: An STF command with write data=ZEROES can be
3138 generated by SW using the Prefetch instruction with
3139 Hint=30d "prepare for Store", followed by a SYNCW.
3140 What is seen at the L2C as an STF w/wrdcnt=0 with all
3141 of its mask bits clear (indicates zero-fill data).
3142 A flush-invalidate will 'force-hit' the L2 cache at
3143 [index,set] and invalidate the entry (V=0/D=0/L=0/U=0).
3144 If the cache block is dirty, it is also written back
3145 to memory. The DuTag state is probed/updated as normal
3147 TYPICAL APPLICATIONS:
3148 1) L2 Tag/Data ECC SW Recovery
3150 NOTE: If the cacheline had been previously LOCKED(L=1),
3151 a flush-invalidate operation will explicitly UNLOCK
3152 (L=0) the set/index specified.
3153 NOTE: The diagnostic PP cores can generate STF
3154 commands to the L2 Cache whenever all 128 bytes in a
3155 block are written. SW must take this into consideration
3156 to avoid 'errant' Flush-Invalidates. */
3157 uint64_t l2d : 1; /**< When enabled (and L2C_DBG[L2T]=0), fill data is
3158 returned directly from the L2 Data Store
3159 (regardless of hit/miss) when an LDD(L1 load-miss) command
3160 is issued from a PP determined by the L2C_DBG[PPNUM]
3161 field. The selected set# is determined by the
3162 L2C_DBG[SET] field, and the index is determined
3163 from the address[15:7] associated with the LDD
3165 This 'force-hit' will NOT alter the current L2 Tag
3166 state OR the DuTag state. */
3167 uint64_t l2t : 1; /**< When enabled, L2 Tag information [V,D,L,U,phys_addr[33:16]]
3168 is returned on the data bus starting at +32(and +96) bytes
3169 offset from the beginning of cacheline when an LDD
3170 (L1 load-miss) command is issued from a PP determined by
3171 the L2C_DBG[PPNUM] field.
3172 The selected L2 set# is determined by the L2C_DBG[SET]
3173 field, and the L2 index is determined from the
3174 phys_addr[15:7] associated with the LDD command.
3175 This 'L2 force-hit' will NOT alter the current L2 Tag
3176 state OR the DuTag state.
3177 NOTE: The diagnostic PP should issue a d-stream load
3178 to an aligned cacheline+0x20(+0x60) in order to have the
3179 return VDLUTAG information (in OW2/OW6) written directly
3180 into the proper PP register. The diagnostic PP should also
3181 flush it's local L1 cache after use(to ensure data
3183 NOTE: The position of the VDLUTAG data in the destination
3184 register is dependent on the endian mode(big/little).
3185 NOTE: (For L2C BitMap testing of L2 Data Store OW ECC):
3186 If L2D_ERR[ECC_ENA]=0, the OW ECC from the selected
3187 half cacheline (see: L2D_ERR[BMHCLSEL] is also
3188 conditionally latched into the L2D_FSYN0/1 CSRs if an
3189 LDD command is detected from the diagnostic PP(L2C_DBG[PPNUM]). */
3196 uint64_t reserved_8_9 : 2;
3197 uint64_t lfb_dmp : 1;
3198 uint64_t lfb_enum : 3;
3199 uint64_t reserved_14_63 : 50;
3202 struct cvmx_l2c_dbg_cn52xx cn52xxp1;
3203 struct cvmx_l2c_dbg_s cn56xx;
3204 struct cvmx_l2c_dbg_s cn56xxp1;
3205 struct cvmx_l2c_dbg_s cn58xx;
3206 struct cvmx_l2c_dbg_s cn58xxp1;
3208 typedef union cvmx_l2c_dbg cvmx_l2c_dbg_t;
3213 * L2C_DUT = L2C DUTAG Register
3215 * Description: L2C Duplicate Tag State Register
3218 * (1) When using the L2T, L2D or FINV Debug probe feature, an LDD command issued by the diagnostic PP
3219 * WILL NOT update the DuTags.
3220 * (2) L2T, L2D, FINV MUST BE mutually exclusive (only one enabled at a time).
3221 * (3) Force Invalidate is intended as a means for SW to invalidate the L2 Cache while also writing back
3222 * dirty data to memory to maintain coherency. (A side effect of FINV is that an LDD L2 fill is
3223 * launched which fills data into the L2 DS).
3225 union cvmx_l2c_dut {
3227 struct cvmx_l2c_dut_s {
3228 #ifdef __BIG_ENDIAN_BITFIELD
3229 uint64_t reserved_32_63 : 32;
3230 uint64_t dtena : 1; /**< DuTag Diagnostic read enable.
3231 When L2C_DUT[DTENA]=1, all LDD(L1 load-miss)
3232 commands issued from the diagnostic PP
3233 (L2C_DBG[PPNUM]) will capture the DuTag state (V|L1TAG)
3234 of the PP#(specified in the LDD address[29:26] into
3235 the L2C_DUT CSR register. This allows the diagPP to
3236 read ALL DuTags (from any PP).
3237 The DuTag Set# to capture is extracted from the LDD
3238 address[25:20]. The diagnostic PP would issue the
3239 LDD then read the L2C_DUT register (one at a time).
3240 This LDD 'L2 force-hit' will NOT alter the current L2
3241 Tag State OR the DuTag state.
3242 NOTE: For CN58XX the DuTag SIZE has doubled (to 16KB)
3243 where each DuTag is organized as 2x 64-way entries.
3244 The LDD address[7] determines which 1(of-2) internal
3246 The fill data is returned directly from the L2 Data
3247 Store(regardless of hit/miss) when an LDD command
3248 is issued from a PP determined by the L2C_DBG[PPNUM]
3249 field. The selected L2 Set# is determined by the
3250 L2C_DBG[SET] field, and the index is determined
3251 from the address[17:7] associated with the LDD
3253 This 'L2 force-hit' will NOT alter the current L2 Tag
3254 state OR the DuTag state.
3255 NOTE: In order for the DiagPP to generate an LDD command
3256 to the L2C, it must first force an L1 Dcache flush. */
3257 uint64_t reserved_30_30 : 1;
3258 uint64_t dt_vld : 1; /**< Duplicate L1 Tag Valid bit latched in for previous
3259 LDD(L1 load-miss) command sourced by diagnostic PP. */
3260 uint64_t dt_tag : 29; /**< Duplicate L1 Tag[35:7] latched in for previous
3261 LDD(L1 load-miss) command sourced by diagnostic PP. */
3263 uint64_t dt_tag : 29;
3264 uint64_t dt_vld : 1;
3265 uint64_t reserved_30_30 : 1;
3267 uint64_t reserved_32_63 : 32;
3270 struct cvmx_l2c_dut_s cn30xx;
3271 struct cvmx_l2c_dut_s cn31xx;
3272 struct cvmx_l2c_dut_s cn38xx;
3273 struct cvmx_l2c_dut_s cn38xxp2;
3274 struct cvmx_l2c_dut_s cn50xx;
3275 struct cvmx_l2c_dut_s cn52xx;
3276 struct cvmx_l2c_dut_s cn52xxp1;
3277 struct cvmx_l2c_dut_s cn56xx;
3278 struct cvmx_l2c_dut_s cn56xxp1;
3279 struct cvmx_l2c_dut_s cn58xx;
3280 struct cvmx_l2c_dut_s cn58xxp1;
3282 typedef union cvmx_l2c_dut cvmx_l2c_dut_t;
3287 * L2C_DUT_MAP = L2C DUT memory map region
3289 * Description: Address of the start of the region mapped to the duplicate tag. Can be used to read
3290 * and write the raw duplicate tag CAM. Writes should be used only with great care as they can easily
3291 * destroy the coherency of the memory system. In any case this region is expected to only be used
3294 * This base address should be combined with PP virtual ID, L1 way and L1 set to produce the final
3295 * address as follows:
3296 * addr<63:13> L2C_DUT_MAP<63:13>
3297 * addr<12:11> PP VID
3303 * (1) The tag is 37:10 from the 38-bit OCTEON physical address after hole removal. (The hole is between DR0
3304 * and DR1. Remove the hole by subtracting 256MB from 38-bit OCTEON L2/DRAM physical addresses >= 512 MB.)
3306 union cvmx_l2c_dut_mapx {
3308 struct cvmx_l2c_dut_mapx_s {
3309 #ifdef __BIG_ENDIAN_BITFIELD
3310 uint64_t reserved_38_63 : 26;
3311 uint64_t tag : 28; /**< The tag value (see Note 1) */
3312 uint64_t reserved_1_9 : 9;
3313 uint64_t valid : 1; /**< The valid bit */
3316 uint64_t reserved_1_9 : 9;
3318 uint64_t reserved_38_63 : 26;
3321 struct cvmx_l2c_dut_mapx_s cn61xx;
3322 struct cvmx_l2c_dut_mapx_s cn63xx;
3323 struct cvmx_l2c_dut_mapx_s cn63xxp1;
3324 struct cvmx_l2c_dut_mapx_s cn66xx;
3325 struct cvmx_l2c_dut_mapx_s cn68xx;
3326 struct cvmx_l2c_dut_mapx_s cn68xxp1;
3327 struct cvmx_l2c_dut_mapx_s cnf71xx;
3329 typedef union cvmx_l2c_dut_mapx cvmx_l2c_dut_mapx_t;
3334 * L2C_ERR_TDT = L2C TAD DaTa Error Info
3338 * (1) If the status bit corresponding to the value of the TYPE field is not set the WAYIDX/SYN fields
3339 * are not associated with the errors currently logged by the status bits and should be ignored.
3340 * This can occur, for example, because of a race between a write to clear a DBE and a new, lower
3341 * priority, SBE error occuring. If the SBE arrives prior to the DBE clear the WAYIDX/SYN fields
3342 * will still be locked, but the new SBE error status bit will still be set.
3344 * (2) The four types of errors have differing priorities. Priority (from lowest to highest) is SBE,
3345 * VSBE, DBE, VDBE. A error will lock the WAYIDX, and SYN fields for other errors of equal or
3346 * lower priority until cleared by software. This means that the error information is always
3347 * (assuming the TYPE field matches) for the highest priority error logged in the status bits.
3349 * (3) If VSBE or VDBE are set (and the TYPE field matches), the WAYIDX fields are valid and the
3350 * syndrome can be found in L2C_ERR_VBF.
3352 * (4) The syndrome is recorded for DBE errors, though the utility of the value is not clear.
3354 union cvmx_l2c_err_tdtx {
3356 struct cvmx_l2c_err_tdtx_s {
3357 #ifdef __BIG_ENDIAN_BITFIELD
3358 uint64_t dbe : 1; /**< L2D Double-Bit error has occurred */
3359 uint64_t sbe : 1; /**< L2D Single-Bit error has occurred */
3360 uint64_t vdbe : 1; /**< VBF Double-Bit error has occurred */
3361 uint64_t vsbe : 1; /**< VBF Single-Bit error has occurred */
3362 uint64_t syn : 10; /**< L2D syndrome (valid only for SBE/DBE, not VSBE/VDBE) */
3363 uint64_t reserved_22_49 : 28;
3364 uint64_t wayidx : 18; /**< Way, index, OW of the L2 block containing the error */
3365 uint64_t reserved_2_3 : 2;
3366 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3373 uint64_t reserved_2_3 : 2;
3374 uint64_t wayidx : 18;
3375 uint64_t reserved_22_49 : 28;
3383 struct cvmx_l2c_err_tdtx_cn61xx {
3384 #ifdef __BIG_ENDIAN_BITFIELD
3385 uint64_t dbe : 1; /**< L2D Double-Bit error has occurred */
3386 uint64_t sbe : 1; /**< L2D Single-Bit error has occurred */
3387 uint64_t vdbe : 1; /**< VBF Double-Bit error has occurred */
3388 uint64_t vsbe : 1; /**< VBF Single-Bit error has occurred */
3389 uint64_t syn : 10; /**< L2D syndrome (valid only for SBE/DBE, not VSBE/VDBE) */
3390 uint64_t reserved_20_49 : 30;
3391 uint64_t wayidx : 16; /**< Way, index, OW of the L2 block containing the error */
3392 uint64_t reserved_2_3 : 2;
3393 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3400 uint64_t reserved_2_3 : 2;
3401 uint64_t wayidx : 16;
3402 uint64_t reserved_20_49 : 30;
3410 struct cvmx_l2c_err_tdtx_cn63xx {
3411 #ifdef __BIG_ENDIAN_BITFIELD
3412 uint64_t dbe : 1; /**< L2D Double-Bit error has occurred */
3413 uint64_t sbe : 1; /**< L2D Single-Bit error has occurred */
3414 uint64_t vdbe : 1; /**< VBF Double-Bit error has occurred */
3415 uint64_t vsbe : 1; /**< VBF Single-Bit error has occurred */
3416 uint64_t syn : 10; /**< L2D syndrome (valid only for SBE/DBE, not VSBE/VDBE) */
3417 uint64_t reserved_21_49 : 29;
3418 uint64_t wayidx : 17; /**< Way, index, OW of the L2 block containing the error */
3419 uint64_t reserved_2_3 : 2;
3420 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3427 uint64_t reserved_2_3 : 2;
3428 uint64_t wayidx : 17;
3429 uint64_t reserved_21_49 : 29;
3437 struct cvmx_l2c_err_tdtx_cn63xx cn63xxp1;
3438 struct cvmx_l2c_err_tdtx_cn63xx cn66xx;
3439 struct cvmx_l2c_err_tdtx_s cn68xx;
3440 struct cvmx_l2c_err_tdtx_s cn68xxp1;
3441 struct cvmx_l2c_err_tdtx_cn61xx cnf71xx;
3443 typedef union cvmx_l2c_err_tdtx cvmx_l2c_err_tdtx_t;
3448 * L2C_ERR_TTG = L2C TAD TaG Error Info
3452 * (1) The priority of errors (highest to lowest) is DBE, SBE, NOWAY. An error will lock the SYN, and
3453 * WAYIDX fields for equal or lower priority errors until cleared by software.
3455 * (2) The syndrome is recorded for DBE errors, though the utility of the value is not clear.
3457 * (3) A NOWAY error does not change the value of the SYN field, and leaves WAYIDX[20:17]
3458 * unpredictable. WAYIDX[16:7] is the L2 block index associated with the command which had no way
3461 * (4) If the status bit corresponding to the value of the TYPE field is not set the WAYIDX/SYN fields
3462 * are not associated with the errors currently logged by the status bits and should be ignored.
3463 * This can occur, for example, because of a race between a write to clear a DBE and a new, lower
3464 * priority, SBE error occuring. If the SBE arrives prior to the DBE clear the WAYIDX/SYN fields
3465 * will still be locked, but the new SBE error status bit will still be set.
3467 union cvmx_l2c_err_ttgx {
3469 struct cvmx_l2c_err_ttgx_s {
3470 #ifdef __BIG_ENDIAN_BITFIELD
3471 uint64_t dbe : 1; /**< Double-Bit ECC error */
3472 uint64_t sbe : 1; /**< Single-Bit ECC error */
3473 uint64_t noway : 1; /**< No way was available for allocation.
3474 L2C sets NOWAY during its processing of a
3475 transaction whenever it needed/wanted to allocate
3476 a WAY in the L2 cache, but was unable to. NOWAY==1
3477 is (generally) not an indication that L2C failed to
3478 complete transactions. Rather, it is a hint of
3479 possible performance degradation. (For example, L2C
3480 must read-modify-write DRAM for every transaction
3481 that updates some, but not all, of the bytes in a
3482 cache block, misses in the L2 cache, and cannot
3483 allocate a WAY.) There is one "failure" case where
3484 L2C will set NOWAY: when it cannot leave a block
3485 locked in the L2 cache as part of a LCKL2
3487 uint64_t reserved_56_60 : 5;
3488 uint64_t syn : 6; /**< Syndrome for the single-bit error */
3489 uint64_t reserved_22_49 : 28;
3490 uint64_t wayidx : 15; /**< Way and index of the L2 block containing the error */
3491 uint64_t reserved_2_6 : 5;
3492 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3499 uint64_t reserved_2_6 : 5;
3500 uint64_t wayidx : 15;
3501 uint64_t reserved_22_49 : 28;
3503 uint64_t reserved_56_60 : 5;
3509 struct cvmx_l2c_err_ttgx_cn61xx {
3510 #ifdef __BIG_ENDIAN_BITFIELD
3511 uint64_t dbe : 1; /**< Double-Bit ECC error */
3512 uint64_t sbe : 1; /**< Single-Bit ECC error */
3513 uint64_t noway : 1; /**< No way was available for allocation.
3514 L2C sets NOWAY during its processing of a
3515 transaction whenever it needed/wanted to allocate
3516 a WAY in the L2 cache, but was unable to. NOWAY==1
3517 is (generally) not an indication that L2C failed to
3518 complete transactions. Rather, it is a hint of
3519 possible performance degradation. (For example, L2C
3520 must read-modify-write DRAM for every transaction
3521 that updates some, but not all, of the bytes in a
3522 cache block, misses in the L2 cache, and cannot
3523 allocate a WAY.) There is one "failure" case where
3524 L2C will set NOWAY: when it cannot leave a block
3525 locked in the L2 cache as part of a LCKL2
3527 uint64_t reserved_56_60 : 5;
3528 uint64_t syn : 6; /**< Syndrome for the single-bit error */
3529 uint64_t reserved_20_49 : 30;
3530 uint64_t wayidx : 13; /**< Way and index of the L2 block containing the error */
3531 uint64_t reserved_2_6 : 5;
3532 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3539 uint64_t reserved_2_6 : 5;
3540 uint64_t wayidx : 13;
3541 uint64_t reserved_20_49 : 30;
3543 uint64_t reserved_56_60 : 5;
3549 struct cvmx_l2c_err_ttgx_cn63xx {
3550 #ifdef __BIG_ENDIAN_BITFIELD
3551 uint64_t dbe : 1; /**< Double-Bit ECC error */
3552 uint64_t sbe : 1; /**< Single-Bit ECC error */
3553 uint64_t noway : 1; /**< No way was available for allocation.
3554 L2C sets NOWAY during its processing of a
3555 transaction whenever it needed/wanted to allocate
3556 a WAY in the L2 cache, but was unable to. NOWAY==1
3557 is (generally) not an indication that L2C failed to
3558 complete transactions. Rather, it is a hint of
3559 possible performance degradation. (For example, L2C
3560 must read-modify-write DRAM for every transaction
3561 that updates some, but not all, of the bytes in a
3562 cache block, misses in the L2 cache, and cannot
3563 allocate a WAY.) There is one "failure" case where
3564 L2C will set NOWAY: when it cannot leave a block
3565 locked in the L2 cache as part of a LCKL2
3567 uint64_t reserved_56_60 : 5;
3568 uint64_t syn : 6; /**< Syndrome for the single-bit error */
3569 uint64_t reserved_21_49 : 29;
3570 uint64_t wayidx : 14; /**< Way and index of the L2 block containing the error */
3571 uint64_t reserved_2_6 : 5;
3572 uint64_t type : 2; /**< The type of error the WAYIDX,SYN were latched for.
3579 uint64_t reserved_2_6 : 5;
3580 uint64_t wayidx : 14;
3581 uint64_t reserved_21_49 : 29;
3583 uint64_t reserved_56_60 : 5;
3589 struct cvmx_l2c_err_ttgx_cn63xx cn63xxp1;
3590 struct cvmx_l2c_err_ttgx_cn63xx cn66xx;
3591 struct cvmx_l2c_err_ttgx_s cn68xx;
3592 struct cvmx_l2c_err_ttgx_s cn68xxp1;
3593 struct cvmx_l2c_err_ttgx_cn61xx cnf71xx;
3595 typedef union cvmx_l2c_err_ttgx cvmx_l2c_err_ttgx_t;
3600 * L2C_ERR_VBF = L2C VBF Error Info
3604 * (1) The way/index information is stored in L2C_ERR_TDT, assuming no later interrupt occurred to
3605 * overwrite the information. See the notes associated with L2C_ERR_TDT for full details.
3607 * (2) The first VSBE will lock the register for other VSBE's. A VDBE, however, will overwrite a
3608 * previously logged VSBE. Once a VDBE has been logged all later errors will not be logged. This
3609 * means that if VDBE is set the information in the register is for the VDBE, if VDBE is clear and
3610 * VSBE is set the register contains information about the VSBE.
3612 * (3) The syndrome is recorded for VDBE errors, though the utility of the value is not clear.
3614 * (4) If the status bit corresponding to the value of the TYPE field is not set the SYN field is not
3615 * associated with the errors currently logged by the status bits and should be ignored. This can
3616 * occur, for example, because of a race between a write to clear a VDBE and a new, lower priority,
3617 * VSBE error occuring. If the VSBE arrives prior to the VDBE clear the SYN field will still be
3618 * locked, but the new VSBE error status bit will still be set.
3620 union cvmx_l2c_err_vbfx {
3622 struct cvmx_l2c_err_vbfx_s {
3623 #ifdef __BIG_ENDIAN_BITFIELD
3624 uint64_t reserved_62_63 : 2;
3625 uint64_t vdbe : 1; /**< VBF Double-Bit error has occurred */
3626 uint64_t vsbe : 1; /**< VBF Single-Bit error has occurred */
3627 uint64_t vsyn : 10; /**< VBF syndrome (valid only if VSBE/VDBE is set) */
3628 uint64_t reserved_2_49 : 48;
3629 uint64_t type : 2; /**< The type of error the SYN were latched for.
3634 uint64_t reserved_2_49 : 48;
3638 uint64_t reserved_62_63 : 2;
3641 struct cvmx_l2c_err_vbfx_s cn61xx;
3642 struct cvmx_l2c_err_vbfx_s cn63xx;
3643 struct cvmx_l2c_err_vbfx_s cn63xxp1;
3644 struct cvmx_l2c_err_vbfx_s cn66xx;
3645 struct cvmx_l2c_err_vbfx_s cn68xx;
3646 struct cvmx_l2c_err_vbfx_s cn68xxp1;
3647 struct cvmx_l2c_err_vbfx_s cnf71xx;
3649 typedef union cvmx_l2c_err_vbfx cvmx_l2c_err_vbfx_t;
3654 * L2C_ERR_XMC = L2C XMC request error
3656 * Description: records error information for HOLE*, BIG* and VRT* interrupts.
3659 * (1) The first BIGWR/HOLEWR/VRT* interrupt will lock the register until L2C_INT_REG[6:1] are
3662 * (2) ADDR<15:0> will always be zero for VRT* interrupts.
3664 * (3) ADDR is the 38-bit OCTEON physical address after hole removal. (The hole is between DR0
3665 * and DR1. Remove the hole by subtracting 256MB from all 38-bit OCTEON L2/DRAM physical addresses
3668 * (4) For 63xx pass 2.0 and all 68xx ADDR<15:0> will ALWAYS be zero.
3670 union cvmx_l2c_err_xmc {
3672 struct cvmx_l2c_err_xmc_s {
3673 #ifdef __BIG_ENDIAN_BITFIELD
3674 uint64_t cmd : 6; /**< XMC command or request causing error */
3675 uint64_t reserved_54_57 : 4;
3676 uint64_t sid : 6; /**< XMC sid of request causing error */
3677 uint64_t reserved_38_47 : 10;
3678 uint64_t addr : 38; /**< XMC address causing the error (see Notes 2 and 3) */
3681 uint64_t reserved_38_47 : 10;
3683 uint64_t reserved_54_57 : 4;
3687 struct cvmx_l2c_err_xmc_cn61xx {
3688 #ifdef __BIG_ENDIAN_BITFIELD
3689 uint64_t cmd : 6; /**< XMC command or request causing error */
3690 uint64_t reserved_52_57 : 6;
3691 uint64_t sid : 4; /**< XMC sid of request causing error */
3692 uint64_t reserved_38_47 : 10;
3693 uint64_t addr : 38; /**< XMC address causing the error (see Notes 2 and 3) */
3696 uint64_t reserved_38_47 : 10;
3698 uint64_t reserved_52_57 : 6;
3702 struct cvmx_l2c_err_xmc_cn61xx cn63xx;
3703 struct cvmx_l2c_err_xmc_cn61xx cn63xxp1;
3704 struct cvmx_l2c_err_xmc_cn66xx {
3705 #ifdef __BIG_ENDIAN_BITFIELD
3706 uint64_t cmd : 6; /**< XMC command or request causing error */
3707 uint64_t reserved_53_57 : 5;
3708 uint64_t sid : 5; /**< XMC sid of request causing error */
3709 uint64_t reserved_38_47 : 10;
3710 uint64_t addr : 38; /**< XMC address causing the error (see Notes 2 and 3) */
3713 uint64_t reserved_38_47 : 10;
3715 uint64_t reserved_53_57 : 5;
3719 struct cvmx_l2c_err_xmc_s cn68xx;
3720 struct cvmx_l2c_err_xmc_s cn68xxp1;
3721 struct cvmx_l2c_err_xmc_cn61xx cnf71xx;
3723 typedef union cvmx_l2c_err_xmc cvmx_l2c_err_xmc_t;
3728 * L2C_GRPWRR0 = L2C PP Weighted Round \#0 Register
3730 * Description: Defines Weighted rounds(32) for Group PLC0,PLC1
3733 * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP
3734 * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear).
3736 union cvmx_l2c_grpwrr0 {
3738 struct cvmx_l2c_grpwrr0_s {
3739 #ifdef __BIG_ENDIAN_BITFIELD
3740 uint64_t plc1rmsk : 32; /**< PLC1 Group#1 Weighted Round Mask
3741 Each bit represents 1 of 32 rounds
3742 for Group \#1's participation. When a 'round' bit is
3743 set, Group#1 is 'masked' and DOES NOT participate.
3744 When a 'round' bit is clear, Group#1 WILL
3745 participate in the arbitration for this round. */
3746 uint64_t plc0rmsk : 32; /**< PLC Group#0 Weighted Round Mask
3747 Each bit represents 1 of 32 rounds
3748 for Group \#0's participation. When a 'round' bit is
3749 set, Group#0 is 'masked' and DOES NOT participate.
3750 When a 'round' bit is clear, Group#0 WILL
3751 participate in the arbitration for this round. */
3753 uint64_t plc0rmsk : 32;
3754 uint64_t plc1rmsk : 32;
3757 struct cvmx_l2c_grpwrr0_s cn52xx;
3758 struct cvmx_l2c_grpwrr0_s cn52xxp1;
3759 struct cvmx_l2c_grpwrr0_s cn56xx;
3760 struct cvmx_l2c_grpwrr0_s cn56xxp1;
3762 typedef union cvmx_l2c_grpwrr0 cvmx_l2c_grpwrr0_t;
3767 * L2C_GRPWRR1 = L2C PP Weighted Round \#1 Register
3769 * Description: Defines Weighted Rounds(32) for Group PLC2,ILC
3772 * - Starvation of a group 'could' occur, unless SW takes the precaution to ensure that each GROUP
3773 * participates in at least 1(of 32) rounds (ie: At least 1 bit(of 32) should be clear).
3775 union cvmx_l2c_grpwrr1 {
3777 struct cvmx_l2c_grpwrr1_s {
3778 #ifdef __BIG_ENDIAN_BITFIELD
3779 uint64_t ilcrmsk : 32; /**< ILC (IOB) Weighted Round Mask
3780 Each bit represents 1 of 32 rounds
3781 for IOB participation. When a 'round' bit is
3782 set, IOB is 'masked' and DOES NOT participate.
3783 When a 'round' bit is clear, IOB WILL
3784 participate in the arbitration for this round. */
3785 uint64_t plc2rmsk : 32; /**< PLC Group#2 Weighted Round Mask
3786 Each bit represents 1 of 32 rounds
3787 for Group \#2's participation. When a 'round' bit is
3788 set, Group#2 is 'masked' and DOES NOT participate.
3789 When a 'round' bit is clear, Group#2 WILL
3790 participate in the arbitration for this round. */
3792 uint64_t plc2rmsk : 32;
3793 uint64_t ilcrmsk : 32;
3796 struct cvmx_l2c_grpwrr1_s cn52xx;
3797 struct cvmx_l2c_grpwrr1_s cn52xxp1;
3798 struct cvmx_l2c_grpwrr1_s cn56xx;
3799 struct cvmx_l2c_grpwrr1_s cn56xxp1;
3801 typedef union cvmx_l2c_grpwrr1 cvmx_l2c_grpwrr1_t;
3806 * L2C_INT_EN = L2C Global Interrupt Enable Register
3810 union cvmx_l2c_int_en {
3812 struct cvmx_l2c_int_en_s {
3813 #ifdef __BIG_ENDIAN_BITFIELD
3814 uint64_t reserved_9_63 : 55;
3815 uint64_t lck2ena : 1; /**< L2 Tag Lock Error2 Interrupt Enable bit
3816 NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA2] */
3817 uint64_t lckena : 1; /**< L2 Tag Lock Error Interrupt Enable bit
3818 NOTE: This is the 'same' bit as L2T_ERR[LCK_INTENA] */
3819 uint64_t l2ddeden : 1; /**< L2 Data ECC Double Error Detect(DED) Interrupt Enable bit
3820 When set, allows interrupts to be reported on double bit
3821 (uncorrectable) errors from the L2 Data Arrays.
3822 NOTE: This is the 'same' bit as L2D_ERR[DED_INTENA] */
3823 uint64_t l2dsecen : 1; /**< L2 Data ECC Single Error Correct(SEC) Interrupt Enable bit
3824 When set, allows interrupts to be reported on single bit
3825 (correctable) errors from the L2 Data Arrays.
3826 NOTE: This is the 'same' bit as L2D_ERR[SEC_INTENA] */
3827 uint64_t l2tdeden : 1; /**< L2 Tag ECC Double Error Detect(DED) Interrupt
3828 NOTE: This is the 'same' bit as L2T_ERR[DED_INTENA] */
3829 uint64_t l2tsecen : 1; /**< L2 Tag ECC Single Error Correct(SEC) Interrupt
3830 Enable bit. When set, allows interrupts to be
3831 reported on single bit (correctable) errors from
3833 NOTE: This is the 'same' bit as L2T_ERR[SEC_INTENA] */
3834 uint64_t oob3en : 1; /**< DMA Out of Bounds Interrupt Enable Range#3 */
3835 uint64_t oob2en : 1; /**< DMA Out of Bounds Interrupt Enable Range#2 */
3836 uint64_t oob1en : 1; /**< DMA Out of Bounds Interrupt Enable Range#1 */
3838 uint64_t oob1en : 1;
3839 uint64_t oob2en : 1;
3840 uint64_t oob3en : 1;
3841 uint64_t l2tsecen : 1;
3842 uint64_t l2tdeden : 1;
3843 uint64_t l2dsecen : 1;
3844 uint64_t l2ddeden : 1;
3845 uint64_t lckena : 1;
3846 uint64_t lck2ena : 1;
3847 uint64_t reserved_9_63 : 55;
3850 struct cvmx_l2c_int_en_s cn52xx;
3851 struct cvmx_l2c_int_en_s cn52xxp1;
3852 struct cvmx_l2c_int_en_s cn56xx;
3853 struct cvmx_l2c_int_en_s cn56xxp1;
3855 typedef union cvmx_l2c_int_en cvmx_l2c_int_en_t;
3860 * L2C_INT_ENA = L2C Interrupt Enable
3863 union cvmx_l2c_int_ena {
3865 struct cvmx_l2c_int_ena_s {
3866 #ifdef __BIG_ENDIAN_BITFIELD
3867 uint64_t reserved_8_63 : 56;
3868 uint64_t bigrd : 1; /**< Read reference past MAXDRAM enable */
3869 uint64_t bigwr : 1; /**< Write reference past MAXDRAM enable */
3870 uint64_t vrtpe : 1; /**< Virtualization memory parity error */
3871 uint64_t vrtadrng : 1; /**< Address outside of virtualization range enable */
3872 uint64_t vrtidrng : 1; /**< Virtualization ID out of range enable */
3873 uint64_t vrtwr : 1; /**< Virtualization ID prevented a write enable */
3874 uint64_t holewr : 1; /**< Write reference to 256MB hole enable */
3875 uint64_t holerd : 1; /**< Read reference to 256MB hole enable */
3877 uint64_t holerd : 1;
3878 uint64_t holewr : 1;
3880 uint64_t vrtidrng : 1;
3881 uint64_t vrtadrng : 1;
3885 uint64_t reserved_8_63 : 56;
3888 struct cvmx_l2c_int_ena_s cn61xx;
3889 struct cvmx_l2c_int_ena_s cn63xx;
3890 struct cvmx_l2c_int_ena_cn63xxp1 {
3891 #ifdef __BIG_ENDIAN_BITFIELD
3892 uint64_t reserved_6_63 : 58;
3893 uint64_t vrtpe : 1; /**< Virtualization memory parity error */
3894 uint64_t vrtadrng : 1; /**< Address outside of virtualization range enable */
3895 uint64_t vrtidrng : 1; /**< Virtualization ID out of range enable */
3896 uint64_t vrtwr : 1; /**< Virtualization ID prevented a write enable */
3897 uint64_t holewr : 1; /**< Write reference to 256MB hole enable */
3898 uint64_t holerd : 1; /**< Read reference to 256MB hole enable */
3900 uint64_t holerd : 1;
3901 uint64_t holewr : 1;
3903 uint64_t vrtidrng : 1;
3904 uint64_t vrtadrng : 1;
3906 uint64_t reserved_6_63 : 58;
3909 struct cvmx_l2c_int_ena_s cn66xx;
3910 struct cvmx_l2c_int_ena_s cn68xx;
3911 struct cvmx_l2c_int_ena_s cn68xxp1;
3912 struct cvmx_l2c_int_ena_s cnf71xx;
3914 typedef union cvmx_l2c_int_ena cvmx_l2c_int_ena_t;
3919 * L2C_INT_REG = L2C Interrupt Register
3922 union cvmx_l2c_int_reg {
3924 struct cvmx_l2c_int_reg_s {
3925 #ifdef __BIG_ENDIAN_BITFIELD
3926 uint64_t reserved_20_63 : 44;
3927 uint64_t tad3 : 1; /**< When set, the enabled interrupt is in
3928 the L2C_TAD3_INT CSR */
3929 uint64_t tad2 : 1; /**< When set, the enabled interrupt is in
3930 the L2C_TAD2_INT CSR */
3931 uint64_t tad1 : 1; /**< When set, the enabled interrupt is in
3932 the L2C_TAD1_INT CSR */
3933 uint64_t tad0 : 1; /**< When set, the enabled interrupt is in
3934 the L2C_TAD0_INT CSR */
3935 uint64_t reserved_8_15 : 8;
3936 uint64_t bigrd : 1; /**< Read reference past L2C_BIG_CTL[MAXDRAM] occurred */
3937 uint64_t bigwr : 1; /**< Write reference past L2C_BIG_CTL[MAXDRAM] occurred */
3938 uint64_t vrtpe : 1; /**< L2C_VRT_MEM read found a parity error
3939 Whenever an L2C_VRT_MEM read finds a parity error,
3940 that L2C_VRT_MEM cannot cause stores to be blocked.
3941 Software should correct the error. */
3942 uint64_t vrtadrng : 1; /**< Address outside of virtualization range
3943 Set when a L2C_VRT_CTL[MEMSZ] violation blocked a
3945 L2C_VRT_CTL[OOBERR] must be set for L2C to set this. */
3946 uint64_t vrtidrng : 1; /**< Virtualization ID out of range
3947 Set when a L2C_VRT_CTL[NUMID] violation blocked a
3949 uint64_t vrtwr : 1; /**< Virtualization ID prevented a write
3950 Set when L2C_VRT_MEM blocked a store. */
3951 uint64_t holewr : 1; /**< Write reference to 256MB hole occurred */
3952 uint64_t holerd : 1; /**< Read reference to 256MB hole occurred */
3954 uint64_t holerd : 1;
3955 uint64_t holewr : 1;
3957 uint64_t vrtidrng : 1;
3958 uint64_t vrtadrng : 1;
3962 uint64_t reserved_8_15 : 8;
3967 uint64_t reserved_20_63 : 44;
3970 struct cvmx_l2c_int_reg_cn61xx {
3971 #ifdef __BIG_ENDIAN_BITFIELD
3972 uint64_t reserved_17_63 : 47;
3973 uint64_t tad0 : 1; /**< When set, the enabled interrupt is in
3974 the L2C_TAD0_INT CSR */
3975 uint64_t reserved_8_15 : 8;
3976 uint64_t bigrd : 1; /**< Read reference past L2C_BIG_CTL[MAXDRAM] occurred */
3977 uint64_t bigwr : 1; /**< Write reference past L2C_BIG_CTL[MAXDRAM] occurred */
3978 uint64_t vrtpe : 1; /**< L2C_VRT_MEM read found a parity error
3979 Whenever an L2C_VRT_MEM read finds a parity error,
3980 that L2C_VRT_MEM cannot cause stores to be blocked.
3981 Software should correct the error. */
3982 uint64_t vrtadrng : 1; /**< Address outside of virtualization range
3983 Set when a L2C_VRT_CTL[MEMSZ] violation blocked a
3985 L2C_VRT_CTL[OOBERR] must be set for L2C to set this. */
3986 uint64_t vrtidrng : 1; /**< Virtualization ID out of range
3987 Set when a L2C_VRT_CTL[NUMID] violation blocked a
3989 uint64_t vrtwr : 1; /**< Virtualization ID prevented a write
3990 Set when L2C_VRT_MEM blocked a store. */
3991 uint64_t holewr : 1; /**< Write reference to 256MB hole occurred */
3992 uint64_t holerd : 1; /**< Read reference to 256MB hole occurred */
3994 uint64_t holerd : 1;
3995 uint64_t holewr : 1;
3997 uint64_t vrtidrng : 1;
3998 uint64_t vrtadrng : 1;
4002 uint64_t reserved_8_15 : 8;
4004 uint64_t reserved_17_63 : 47;
4007 struct cvmx_l2c_int_reg_cn61xx cn63xx;
4008 struct cvmx_l2c_int_reg_cn63xxp1 {
4009 #ifdef __BIG_ENDIAN_BITFIELD
4010 uint64_t reserved_17_63 : 47;
4011 uint64_t tad0 : 1; /**< When set, the enabled interrupt is in either
4012 the L2C_ERR_TDT0 or L2C_ERR_TTG0 CSR */
4013 uint64_t reserved_6_15 : 10;
4014 uint64_t vrtpe : 1; /**< L2C_VRT_MEM read found a parity error
4015 Whenever an L2C_VRT_MEM read finds a parity error,
4016 that L2C_VRT_MEM cannot cause stores to be blocked.
4017 Software should correct the error. */
4018 uint64_t vrtadrng : 1; /**< Address outside of virtualization range
4019 Set when a L2C_VRT_CTL[MEMSZ] violation blocked a
4021 L2C_VRT_CTL[OOBERR] must be set for L2C to set this. */
4022 uint64_t vrtidrng : 1; /**< Virtualization ID out of range
4023 Set when a L2C_VRT_CTL[NUMID] violation blocked a
4025 uint64_t vrtwr : 1; /**< Virtualization ID prevented a write
4026 Set when L2C_VRT_MEM blocked a store. */
4027 uint64_t holewr : 1; /**< Write reference to 256MB hole occurred */
4028 uint64_t holerd : 1; /**< Read reference to 256MB hole occurred */
4030 uint64_t holerd : 1;
4031 uint64_t holewr : 1;
4033 uint64_t vrtidrng : 1;
4034 uint64_t vrtadrng : 1;
4036 uint64_t reserved_6_15 : 10;
4038 uint64_t reserved_17_63 : 47;
4041 struct cvmx_l2c_int_reg_cn61xx cn66xx;
4042 struct cvmx_l2c_int_reg_s cn68xx;
4043 struct cvmx_l2c_int_reg_s cn68xxp1;
4044 struct cvmx_l2c_int_reg_cn61xx cnf71xx;
4046 typedef union cvmx_l2c_int_reg cvmx_l2c_int_reg_t;
4051 * L2C_INT_STAT = L2C Global Interrupt Status Register
4055 union cvmx_l2c_int_stat {
4057 struct cvmx_l2c_int_stat_s {
4058 #ifdef __BIG_ENDIAN_BITFIELD
4059 uint64_t reserved_9_63 : 55;
4060 uint64_t lck2 : 1; /**< HW detected a case where a Rd/Wr Miss from PP#n
4061 could not find an available/unlocked set (for
4063 Most likely, this is a result of SW mixing SET
4064 PARTITIONING with ADDRESS LOCKING. If SW allows
4065 another PP to LOCKDOWN all SETs available to PP#n,
4066 then a Rd/Wr Miss from PP#n will be unable
4067 to determine a 'valid' replacement set (since LOCKED
4068 addresses should NEVER be replaced).
4069 If such an event occurs, the HW will select the smallest
4070 available SET(specified by UMSK'x)' as the replacement
4071 set, and the address is unlocked.
4072 NOTE: This is the 'same' bit as L2T_ERR[LCKERR2] */
4073 uint64_t lck : 1; /**< SW attempted to LOCK DOWN the last available set of
4074 the INDEX (which is ignored by HW - but reported to SW).
4075 The LDD(L1 load-miss) for the LOCK operation is completed
4076 successfully, however the address is NOT locked.
4077 NOTE: 'Available' sets takes the L2C_SPAR*[UMSK*]
4078 into account. For example, if diagnostic PPx has
4079 UMSKx defined to only use SETs [1:0], and SET1 had
4080 been previously LOCKED, then an attempt to LOCK the
4081 last available SET0 would result in a LCKERR. (This
4082 is to ensure that at least 1 SET at each INDEX is
4083 not LOCKED for general use by other PPs).
4084 NOTE: This is the 'same' bit as L2T_ERR[LCKERR] */
4085 uint64_t l2dded : 1; /**< L2D Double Error detected (DED)
4086 NOTE: This is the 'same' bit as L2D_ERR[DED_ERR] */
4087 uint64_t l2dsec : 1; /**< L2D Single Error corrected (SEC)
4088 NOTE: This is the 'same' bit as L2D_ERR[SEC_ERR] */
4089 uint64_t l2tded : 1; /**< L2T Double Bit Error detected (DED)
4090 During every L2 Tag Probe, all 8 sets Tag's (at a
4091 given index) are checked for double bit errors(DBEs).
4092 This bit is set if ANY of the 8 sets contains a DBE.
4093 DBEs also generated an interrupt(if enabled).
4094 NOTE: This is the 'same' bit as L2T_ERR[DED_ERR] */
4095 uint64_t l2tsec : 1; /**< L2T Single Bit Error corrected (SEC) status
4096 During every L2 Tag Probe, all 8 sets Tag's (at a
4097 given index) are checked for single bit errors(SBEs).
4098 This bit is set if ANY of the 8 sets contains an SBE.
4099 SBEs are auto corrected in HW and generate an
4100 interrupt(if enabled).
4101 NOTE: This is the 'same' bit as L2T_ERR[SEC_ERR] */
4102 uint64_t oob3 : 1; /**< DMA Out of Bounds Interrupt Status Range#3 */
4103 uint64_t oob2 : 1; /**< DMA Out of Bounds Interrupt Status Range#2 */
4104 uint64_t oob1 : 1; /**< DMA Out of Bounds Interrupt Status Range#1 */
4109 uint64_t l2tsec : 1;
4110 uint64_t l2tded : 1;
4111 uint64_t l2dsec : 1;
4112 uint64_t l2dded : 1;
4115 uint64_t reserved_9_63 : 55;
4118 struct cvmx_l2c_int_stat_s cn52xx;
4119 struct cvmx_l2c_int_stat_s cn52xxp1;
4120 struct cvmx_l2c_int_stat_s cn56xx;
4121 struct cvmx_l2c_int_stat_s cn56xxp1;
4123 typedef union cvmx_l2c_int_stat cvmx_l2c_int_stat_t;
4128 * L2C_IOC_PFC = L2C IOC Performance Counter(s)
4131 union cvmx_l2c_iocx_pfc {
4133 struct cvmx_l2c_iocx_pfc_s {
4134 #ifdef __BIG_ENDIAN_BITFIELD
4135 uint64_t count : 64; /**< Current counter value */
4137 uint64_t count : 64;
4140 struct cvmx_l2c_iocx_pfc_s cn61xx;
4141 struct cvmx_l2c_iocx_pfc_s cn63xx;
4142 struct cvmx_l2c_iocx_pfc_s cn63xxp1;
4143 struct cvmx_l2c_iocx_pfc_s cn66xx;
4144 struct cvmx_l2c_iocx_pfc_s cn68xx;
4145 struct cvmx_l2c_iocx_pfc_s cn68xxp1;
4146 struct cvmx_l2c_iocx_pfc_s cnf71xx;
4148 typedef union cvmx_l2c_iocx_pfc cvmx_l2c_iocx_pfc_t;
4153 * L2C_IOR_PFC = L2C IOR Performance Counter(s)
4156 union cvmx_l2c_iorx_pfc {
4158 struct cvmx_l2c_iorx_pfc_s {
4159 #ifdef __BIG_ENDIAN_BITFIELD
4160 uint64_t count : 64; /**< Current counter value */
4162 uint64_t count : 64;
4165 struct cvmx_l2c_iorx_pfc_s cn61xx;
4166 struct cvmx_l2c_iorx_pfc_s cn63xx;
4167 struct cvmx_l2c_iorx_pfc_s cn63xxp1;
4168 struct cvmx_l2c_iorx_pfc_s cn66xx;
4169 struct cvmx_l2c_iorx_pfc_s cn68xx;
4170 struct cvmx_l2c_iorx_pfc_s cn68xxp1;
4171 struct cvmx_l2c_iorx_pfc_s cnf71xx;
4173 typedef union cvmx_l2c_iorx_pfc cvmx_l2c_iorx_pfc_t;
4178 * L2C_LCKBASE = L2C LockDown Base Register
4180 * Description: L2C LockDown Base Register
4183 * (1) SW RESTRICTION \#1: SW must manage the L2 Data Store lockdown space such that at least 1
4184 * set per cache line remains in the 'unlocked' (normal) state to allow general caching operations.
4185 * If SW violates this restriction, a status bit is set (LCK_ERR) and an interrupt is posted.
4186 * [this limits the total lockdown space to 7/8ths of the total L2 data store = 896KB]
4187 * (2) IOB initiated LDI commands are ignored (only PP initiated LDI/LDD commands are considered
4189 * (3) To 'unlock' a locked cache line, SW can use the FLUSH-INVAL CSR mechanism (see L2C_DBG[FINV]).
4190 * (4) LCK_ENA MUST only be activated when debug modes are disabled (L2C_DBG[L2T], L2C_DBG[L2D], L2C_DBG[FINV]).
4192 union cvmx_l2c_lckbase {
4194 struct cvmx_l2c_lckbase_s {
4195 #ifdef __BIG_ENDIAN_BITFIELD
4196 uint64_t reserved_31_63 : 33;
4197 uint64_t lck_base : 27; /**< Base Memory block address[33:7]. Specifies the
4198 starting address of the lockdown region. */
4199 uint64_t reserved_1_3 : 3;
4200 uint64_t lck_ena : 1; /**< L2 Cache Lock Enable
4201 When the LCK_ENA=1, all LDI(I-stream Load) or
4202 LDD(L1 load-miss) commands issued from the
4203 diagnostic PP (specified by the L2C_DBG[PPNUM]),
4204 which fall within a predefined lockdown address
4205 range (specified by: [lck_base:lck_base+lck_offset])
4206 are LOCKED in the L2 cache. The LOCKED state is
4207 denoted using an explicit L2 Tag bit (L=1).
4208 If the LOCK request L2-Hits (on ANY SET), then data is
4209 returned from the L2 and the hit set is updated to the
4210 LOCKED state. NOTE: If the Hit Set# is outside the
4211 available sets for a given PP (see UMSK'x'), the
4212 the LOCK bit is still SET. If the programmer's intent
4213 is to explicitly LOCK addresses into 'available' sets,
4214 care must be taken to flush-invalidate the cache first
4215 (to avoid such situations). Not following this procedure
4216 can lead to LCKERR2 interrupts.
4217 If the LOCK request L2-Misses, a replacment set is
4218 chosen(from the available sets (UMSK'x').
4219 If the replacement set contains a dirty-victim it is
4220 written back to memory. Memory read data is then written
4221 into the replacement set, and the replacment SET is
4222 updated to the LOCKED state(L=1).
4223 NOTE: SETs that contain LOCKED addresses are
4224 excluded from the replacement set selection algorithm.
4225 NOTE: The LDD command will allocate the DuTag as normal.
4226 NOTE: If L2C_CFG[IDXALIAS]=1, the address is 'aliased' first
4227 before being checked against the lockdown address
4228 range. To ensure an 'aliased' address is properly locked,
4229 it is recommmended that SW preload the 'aliased' locked adddress
4230 into the L2C_LCKBASE[LCK_BASE] register (while keeping
4231 L2C_LCKOFF[LCK_OFFSET]=0).
4232 NOTE: The OCTEON(N3) implementation only supports 16GB(MAX) of
4233 physical memory. Therefore, only byte address[33:0] are used
4234 (ie: address[35:34] are ignored). */
4236 uint64_t lck_ena : 1;
4237 uint64_t reserved_1_3 : 3;
4238 uint64_t lck_base : 27;
4239 uint64_t reserved_31_63 : 33;
4242 struct cvmx_l2c_lckbase_s cn30xx;
4243 struct cvmx_l2c_lckbase_s cn31xx;
4244 struct cvmx_l2c_lckbase_s cn38xx;
4245 struct cvmx_l2c_lckbase_s cn38xxp2;
4246 struct cvmx_l2c_lckbase_s cn50xx;
4247 struct cvmx_l2c_lckbase_s cn52xx;
4248 struct cvmx_l2c_lckbase_s cn52xxp1;
4249 struct cvmx_l2c_lckbase_s cn56xx;
4250 struct cvmx_l2c_lckbase_s cn56xxp1;
4251 struct cvmx_l2c_lckbase_s cn58xx;
4252 struct cvmx_l2c_lckbase_s cn58xxp1;
4254 typedef union cvmx_l2c_lckbase cvmx_l2c_lckbase_t;
4259 * L2C_LCKOFF = L2C LockDown OFFSET Register
4261 * Description: L2C LockDown OFFSET Register
4264 * (1) The generation of the end lockdown block address will 'wrap'.
4265 * (2) The minimum granularity for lockdown is 1 cache line (= 128B block)
4267 union cvmx_l2c_lckoff {
4269 struct cvmx_l2c_lckoff_s {
4270 #ifdef __BIG_ENDIAN_BITFIELD
4271 uint64_t reserved_10_63 : 54;
4272 uint64_t lck_offset : 10; /**< LockDown block Offset. Used in determining
4273 the ending block address of the lockdown
4275 End Lockdown block Address[33:7] =
4276 LCK_BASE[33:7]+LCK_OFFSET[9:0] */
4278 uint64_t lck_offset : 10;
4279 uint64_t reserved_10_63 : 54;
4282 struct cvmx_l2c_lckoff_s cn30xx;
4283 struct cvmx_l2c_lckoff_s cn31xx;
4284 struct cvmx_l2c_lckoff_s cn38xx;
4285 struct cvmx_l2c_lckoff_s cn38xxp2;
4286 struct cvmx_l2c_lckoff_s cn50xx;
4287 struct cvmx_l2c_lckoff_s cn52xx;
4288 struct cvmx_l2c_lckoff_s cn52xxp1;
4289 struct cvmx_l2c_lckoff_s cn56xx;
4290 struct cvmx_l2c_lckoff_s cn56xxp1;
4291 struct cvmx_l2c_lckoff_s cn58xx;
4292 struct cvmx_l2c_lckoff_s cn58xxp1;
4294 typedef union cvmx_l2c_lckoff cvmx_l2c_lckoff_t;
4299 * L2C_LFB0 = L2C LFB DEBUG 0 Register
4301 * Description: L2C LFB Contents (Status Bits)
4303 union cvmx_l2c_lfb0 {
4305 struct cvmx_l2c_lfb0_s {
4306 #ifdef __BIG_ENDIAN_BITFIELD
4307 uint64_t reserved_32_63 : 32;
4308 uint64_t stcpnd : 1; /**< LFB STC Pending Status */
4309 uint64_t stpnd : 1; /**< LFB ST* Pending Status */
4310 uint64_t stinv : 1; /**< LFB ST* Invalidate Status */
4311 uint64_t stcfl : 1; /**< LFB STC=FAIL Status */
4312 uint64_t vam : 1; /**< Valid Full Address Match Status */
4313 uint64_t inxt : 4; /**< Next LFB Pointer(invalid if ITL=1) */
4314 uint64_t itl : 1; /**< LFB Tail of List Indicator */
4315 uint64_t ihd : 1; /**< LFB Head of List Indicator */
4316 uint64_t set : 3; /**< SET# used for DS-OP (hit=hset/miss=rset) */
4317 uint64_t vabnum : 4; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
4318 uint64_t sid : 9; /**< LFB Source ID */
4319 uint64_t cmd : 4; /**< LFB Command */
4320 uint64_t vld : 1; /**< LFB Valid */
4325 uint64_t vabnum : 4;
4334 uint64_t stcpnd : 1;
4335 uint64_t reserved_32_63 : 32;
4338 struct cvmx_l2c_lfb0_cn30xx {
4339 #ifdef __BIG_ENDIAN_BITFIELD
4340 uint64_t reserved_32_63 : 32;
4341 uint64_t stcpnd : 1; /**< LFB STC Pending Status */
4342 uint64_t stpnd : 1; /**< LFB ST* Pending Status */
4343 uint64_t stinv : 1; /**< LFB ST* Invalidate Status */
4344 uint64_t stcfl : 1; /**< LFB STC=FAIL Status */
4345 uint64_t vam : 1; /**< Valid Full Address Match Status */
4346 uint64_t reserved_25_26 : 2;
4347 uint64_t inxt : 2; /**< Next LFB Pointer(invalid if ITL=1) */
4348 uint64_t itl : 1; /**< LFB Tail of List Indicator */
4349 uint64_t ihd : 1; /**< LFB Head of List Indicator */
4350 uint64_t reserved_20_20 : 1;
4351 uint64_t set : 2; /**< SET# used for DS-OP (hit=hset/miss=rset) */
4352 uint64_t reserved_16_17 : 2;
4353 uint64_t vabnum : 2; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
4354 uint64_t sid : 9; /**< LFB Source ID */
4355 uint64_t cmd : 4; /**< LFB Command */
4356 uint64_t vld : 1; /**< LFB Valid */
4361 uint64_t vabnum : 2;
4362 uint64_t reserved_16_17 : 2;
4364 uint64_t reserved_20_20 : 1;
4368 uint64_t reserved_25_26 : 2;
4373 uint64_t stcpnd : 1;
4374 uint64_t reserved_32_63 : 32;
4377 struct cvmx_l2c_lfb0_cn31xx {
4378 #ifdef __BIG_ENDIAN_BITFIELD
4379 uint64_t reserved_32_63 : 32;
4380 uint64_t stcpnd : 1; /**< LFB STC Pending Status */
4381 uint64_t stpnd : 1; /**< LFB ST* Pending Status */
4382 uint64_t stinv : 1; /**< LFB ST* Invalidate Status */
4383 uint64_t stcfl : 1; /**< LFB STC=FAIL Status */
4384 uint64_t vam : 1; /**< Valid Full Address Match Status */
4385 uint64_t reserved_26_26 : 1;
4386 uint64_t inxt : 3; /**< Next LFB Pointer(invalid if ITL=1) */
4387 uint64_t itl : 1; /**< LFB Tail of List Indicator */
4388 uint64_t ihd : 1; /**< LFB Head of List Indicator */
4389 uint64_t reserved_20_20 : 1;
4390 uint64_t set : 2; /**< SET# used for DS-OP (hit=hset/miss=rset) */
4391 uint64_t reserved_17_17 : 1;
4392 uint64_t vabnum : 3; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
4393 uint64_t sid : 9; /**< LFB Source ID */
4394 uint64_t cmd : 4; /**< LFB Command */
4395 uint64_t vld : 1; /**< LFB Valid */
4400 uint64_t vabnum : 3;
4401 uint64_t reserved_17_17 : 1;
4403 uint64_t reserved_20_20 : 1;
4407 uint64_t reserved_26_26 : 1;
4412 uint64_t stcpnd : 1;
4413 uint64_t reserved_32_63 : 32;
4416 struct cvmx_l2c_lfb0_s cn38xx;
4417 struct cvmx_l2c_lfb0_s cn38xxp2;
4418 struct cvmx_l2c_lfb0_cn50xx {
4419 #ifdef __BIG_ENDIAN_BITFIELD
4420 uint64_t reserved_32_63 : 32;
4421 uint64_t stcpnd : 1; /**< LFB STC Pending Status */
4422 uint64_t stpnd : 1; /**< LFB ST* Pending Status */
4423 uint64_t stinv : 1; /**< LFB ST* Invalidate Status */
4424 uint64_t stcfl : 1; /**< LFB STC=FAIL Status */
4425 uint64_t vam : 1; /**< Valid Full Address Match Status */
4426 uint64_t reserved_26_26 : 1;
4427 uint64_t inxt : 3; /**< Next LFB Pointer(invalid if ITL=1) */
4428 uint64_t itl : 1; /**< LFB Tail of List Indicator */
4429 uint64_t ihd : 1; /**< LFB Head of List Indicator */
4430 uint64_t set : 3; /**< SET# used for DS-OP (hit=hset/miss=rset) */
4431 uint64_t reserved_17_17 : 1;
4432 uint64_t vabnum : 3; /**< VAB# used for LMC Miss Launch(valid only if VAM=1) */
4433 uint64_t sid : 9; /**< LFB Source ID */
4434 uint64_t cmd : 4; /**< LFB Command */
4435 uint64_t vld : 1; /**< LFB Valid */
4440 uint64_t vabnum : 3;
4441 uint64_t reserved_17_17 : 1;
4446 uint64_t reserved_26_26 : 1;
4451 uint64_t stcpnd : 1;
4452 uint64_t reserved_32_63 : 32;
4455 struct cvmx_l2c_lfb0_cn50xx cn52xx;
4456 struct cvmx_l2c_lfb0_cn50xx cn52xxp1;
4457 struct cvmx_l2c_lfb0_s cn56xx;
4458 struct cvmx_l2c_lfb0_s cn56xxp1;
4459 struct cvmx_l2c_lfb0_s cn58xx;
4460 struct cvmx_l2c_lfb0_s cn58xxp1;
4462 typedef union cvmx_l2c_lfb0 cvmx_l2c_lfb0_t;
4467 * L2C_LFB1 = L2C LFB DEBUG 1 Register
4469 * Description: L2C LFB Contents (Wait Bits)
4471 union cvmx_l2c_lfb1 {
4473 struct cvmx_l2c_lfb1_s {
4474 #ifdef __BIG_ENDIAN_BITFIELD
4475 uint64_t reserved_19_63 : 45;
4476 uint64_t dsgoing : 1; /**< LFB DS Going (in flight) */
4477 uint64_t bid : 2; /**< LFB DS Bid# */
4478 uint64_t wtrsp : 1; /**< LFB Waiting for RSC Response [FILL,STRSP] completion */
4479 uint64_t wtdw : 1; /**< LFB Waiting for DS-WR completion */
4480 uint64_t wtdq : 1; /**< LFB Waiting for LFB-DQ */
4481 uint64_t wtwhp : 1; /**< LFB Waiting for Write-Hit Partial L2 DS-WR completion */
4482 uint64_t wtwhf : 1; /**< LFB Waiting for Write-Hit Full L2 DS-WR completion */
4483 uint64_t wtwrm : 1; /**< LFB Waiting for Write-Miss L2 DS-WR completion */
4484 uint64_t wtstm : 1; /**< LFB Waiting for Write-Miss L2 DS-WR completion */
4485 uint64_t wtrda : 1; /**< LFB Waiting for Read-Miss L2 DS-WR completion */
4486 uint64_t wtstdt : 1; /**< LFB Waiting for all ST write Data to arrive on XMD bus */
4487 uint64_t wtstrsp : 1; /**< LFB Waiting for ST RSC/RSD to be issued on RSP
4488 (with invalidates) */
4489 uint64_t wtstrsc : 1; /**< LFB Waiting for ST RSC-Only to be issued on RSP
4491 uint64_t wtvtm : 1; /**< LFB Waiting for Victim Read L2 DS-RD completion */
4492 uint64_t wtmfl : 1; /**< LFB Waiting for Memory Fill completion to MRB */
4493 uint64_t prbrty : 1; /**< Probe-Retry Detected - waiting for probe completion */
4494 uint64_t wtprb : 1; /**< LFB Waiting for Probe */
4495 uint64_t vld : 1; /**< LFB Valid */
4499 uint64_t prbrty : 1;
4502 uint64_t wtstrsc : 1;
4503 uint64_t wtstrsp : 1;
4504 uint64_t wtstdt : 1;
4514 uint64_t dsgoing : 1;
4515 uint64_t reserved_19_63 : 45;
4518 struct cvmx_l2c_lfb1_s cn30xx;
4519 struct cvmx_l2c_lfb1_s cn31xx;
4520 struct cvmx_l2c_lfb1_s cn38xx;
4521 struct cvmx_l2c_lfb1_s cn38xxp2;
4522 struct cvmx_l2c_lfb1_s cn50xx;
4523 struct cvmx_l2c_lfb1_s cn52xx;
4524 struct cvmx_l2c_lfb1_s cn52xxp1;
4525 struct cvmx_l2c_lfb1_s cn56xx;
4526 struct cvmx_l2c_lfb1_s cn56xxp1;
4527 struct cvmx_l2c_lfb1_s cn58xx;
4528 struct cvmx_l2c_lfb1_s cn58xxp1;
4530 typedef union cvmx_l2c_lfb1 cvmx_l2c_lfb1_t;
4535 * L2C_LFB2 = L2C LFB DEBUG 2 Register
4537 * Description: L2C LFB Contents Tag/Index
4539 union cvmx_l2c_lfb2 {
4541 struct cvmx_l2c_lfb2_s {
4542 #ifdef __BIG_ENDIAN_BITFIELD
4543 uint64_t reserved_0_63 : 64;
4545 uint64_t reserved_0_63 : 64;
4548 struct cvmx_l2c_lfb2_cn30xx {
4549 #ifdef __BIG_ENDIAN_BITFIELD
4550 uint64_t reserved_27_63 : 37;
4551 uint64_t lfb_tag : 19; /**< LFB TAG[33:15] */
4552 uint64_t lfb_idx : 8; /**< LFB IDX[14:7] */
4554 uint64_t lfb_idx : 8;
4555 uint64_t lfb_tag : 19;
4556 uint64_t reserved_27_63 : 37;
4559 struct cvmx_l2c_lfb2_cn31xx {
4560 #ifdef __BIG_ENDIAN_BITFIELD
4561 uint64_t reserved_27_63 : 37;
4562 uint64_t lfb_tag : 17; /**< LFB TAG[33:16] */
4563 uint64_t lfb_idx : 10; /**< LFB IDX[15:7] */
4565 uint64_t lfb_idx : 10;
4566 uint64_t lfb_tag : 17;
4567 uint64_t reserved_27_63 : 37;
4570 struct cvmx_l2c_lfb2_cn31xx cn38xx;
4571 struct cvmx_l2c_lfb2_cn31xx cn38xxp2;
4572 struct cvmx_l2c_lfb2_cn50xx {
4573 #ifdef __BIG_ENDIAN_BITFIELD
4574 uint64_t reserved_27_63 : 37;
4575 uint64_t lfb_tag : 20; /**< LFB TAG[33:14] */
4576 uint64_t lfb_idx : 7; /**< LFB IDX[13:7] */
4578 uint64_t lfb_idx : 7;
4579 uint64_t lfb_tag : 20;
4580 uint64_t reserved_27_63 : 37;
4583 struct cvmx_l2c_lfb2_cn52xx {
4584 #ifdef __BIG_ENDIAN_BITFIELD
4585 uint64_t reserved_27_63 : 37;
4586 uint64_t lfb_tag : 18; /**< LFB TAG[33:16] */
4587 uint64_t lfb_idx : 9; /**< LFB IDX[15:7] */
4589 uint64_t lfb_idx : 9;
4590 uint64_t lfb_tag : 18;
4591 uint64_t reserved_27_63 : 37;
4594 struct cvmx_l2c_lfb2_cn52xx cn52xxp1;
4595 struct cvmx_l2c_lfb2_cn56xx {
4596 #ifdef __BIG_ENDIAN_BITFIELD
4597 uint64_t reserved_27_63 : 37;
4598 uint64_t lfb_tag : 16; /**< LFB TAG[33:18] */
4599 uint64_t lfb_idx : 11; /**< LFB IDX[17:7] */
4601 uint64_t lfb_idx : 11;
4602 uint64_t lfb_tag : 16;
4603 uint64_t reserved_27_63 : 37;
4606 struct cvmx_l2c_lfb2_cn56xx cn56xxp1;
4607 struct cvmx_l2c_lfb2_cn56xx cn58xx;
4608 struct cvmx_l2c_lfb2_cn56xx cn58xxp1;
4610 typedef union cvmx_l2c_lfb2 cvmx_l2c_lfb2_t;
4615 * L2C_LFB3 = L2C LFB DEBUG 3 Register
4617 * Description: LFB High Water Mark Register
4619 union cvmx_l2c_lfb3 {
4621 struct cvmx_l2c_lfb3_s {
4622 #ifdef __BIG_ENDIAN_BITFIELD
4623 uint64_t reserved_5_63 : 59;
4624 uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable
4625 When clear, all STP/C(store partials) will take 2 cycles
4626 to complete (power-on default).
4627 When set, all STP/C(store partials) will take 4 cycles
4629 NOTE: It is recommended to keep this bit ALWAYS ZERO. */
4630 uint64_t lfb_hwm : 4; /**< LFB High Water Mark
4631 Determines \#of LFB Entries in use before backpressure
4633 HWM=0: 1 LFB Entry available
4635 HWM=15: 16 LFB Entries available */
4637 uint64_t lfb_hwm : 4;
4638 uint64_t stpartdis : 1;
4639 uint64_t reserved_5_63 : 59;
4642 struct cvmx_l2c_lfb3_cn30xx {
4643 #ifdef __BIG_ENDIAN_BITFIELD
4644 uint64_t reserved_5_63 : 59;
4645 uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable
4646 When clear, all STP/C(store partials) will take 2 cycles
4647 to complete (power-on default).
4648 When set, all STP/C(store partials) will take 4 cycles
4650 NOTE: It is recommended to keep this bit ALWAYS ZERO. */
4651 uint64_t reserved_2_3 : 2;
4652 uint64_t lfb_hwm : 2; /**< LFB High Water Mark
4653 Determines \#of LFB Entries in use before backpressure
4655 HWM=0: 1 LFB Entry available
4657 HWM=3: 4 LFB Entries available */
4659 uint64_t lfb_hwm : 2;
4660 uint64_t reserved_2_3 : 2;
4661 uint64_t stpartdis : 1;
4662 uint64_t reserved_5_63 : 59;
4665 struct cvmx_l2c_lfb3_cn31xx {
4666 #ifdef __BIG_ENDIAN_BITFIELD
4667 uint64_t reserved_5_63 : 59;
4668 uint64_t stpartdis : 1; /**< STP/C Performance Enhancement Disable
4669 When clear, all STP/C(store partials) will take 2 cycles
4670 to complete (power-on default).
4671 When set, all STP/C(store partials) will take 4 cycles
4673 NOTE: It is recommended to keep this bit ALWAYS ZERO. */
4674 uint64_t reserved_3_3 : 1;
4675 uint64_t lfb_hwm : 3; /**< LFB High Water Mark
4676 Determines \#of LFB Entries in use before backpressure
4678 HWM=0: 1 LFB Entry available
4680 HWM=7: 8 LFB Entries available */
4682 uint64_t lfb_hwm : 3;
4683 uint64_t reserved_3_3 : 1;
4684 uint64_t stpartdis : 1;
4685 uint64_t reserved_5_63 : 59;
4688 struct cvmx_l2c_lfb3_s cn38xx;
4689 struct cvmx_l2c_lfb3_s cn38xxp2;
4690 struct cvmx_l2c_lfb3_cn31xx cn50xx;
4691 struct cvmx_l2c_lfb3_cn31xx cn52xx;
4692 struct cvmx_l2c_lfb3_cn31xx cn52xxp1;
4693 struct cvmx_l2c_lfb3_s cn56xx;
4694 struct cvmx_l2c_lfb3_s cn56xxp1;
4695 struct cvmx_l2c_lfb3_s cn58xx;
4696 struct cvmx_l2c_lfb3_s cn58xxp1;
4698 typedef union cvmx_l2c_lfb3 cvmx_l2c_lfb3_t;
4703 * L2C_OOB = L2C Out of Bounds Global Enables
4705 * Description: Defines DMA "Out of Bounds" global enables.
4707 union cvmx_l2c_oob {
4709 struct cvmx_l2c_oob_s {
4710 #ifdef __BIG_ENDIAN_BITFIELD
4711 uint64_t reserved_2_63 : 62;
4712 uint64_t dwbena : 1; /**< DMA Out of Bounds Range Checker for DMA DWB
4713 commands (Don't WriteBack).
4714 When enabled, any DMA DWB commands which hit 1-of-3
4715 out of bounds regions will be logged into
4716 L2C_INT_STAT[OOB*] CSRs and the DMA store WILL
4717 NOT occur. If the corresponding L2C_INT_EN[OOB*]
4718 is enabled, an interrupt will also be reported. */
4719 uint64_t stena : 1; /**< DMA Out of Bounds Range Checker for DMA store
4721 When enabled, any DMA store commands (STF/P/T) which
4722 hit 1-of-3 out of bounds regions will be logged into
4723 L2C_INT_STAT[OOB*] CSRs and the DMA store WILL
4724 NOT occur. If the corresponding L2C_INT_EN[OOB*]
4725 is enabled, an interrupt will also be reported. */
4728 uint64_t dwbena : 1;
4729 uint64_t reserved_2_63 : 62;
4732 struct cvmx_l2c_oob_s cn52xx;
4733 struct cvmx_l2c_oob_s cn52xxp1;
4734 struct cvmx_l2c_oob_s cn56xx;
4735 struct cvmx_l2c_oob_s cn56xxp1;
4737 typedef union cvmx_l2c_oob cvmx_l2c_oob_t;
4742 * L2C_OOB1 = L2C Out of Bounds Range Checker
4744 * Description: Defines DMA "Out of Bounds" region \#1. If a DMA initiated write transaction generates an address
4745 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
4747 union cvmx_l2c_oob1 {
4749 struct cvmx_l2c_oob1_s {
4750 #ifdef __BIG_ENDIAN_BITFIELD
4751 uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address
4752 When L2C_INT_STAT[OOB1]=1, this field indicates the
4753 DMA cacheline address.
4754 (addr[33:7] = full cacheline address captured)
4755 NOTE: FADR is locked down until L2C_INT_STAT[OOB1]
4757 uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command
4758 When L2C_INT_STAT[OOB1]=1, this field indicates the
4759 type of DMA command.
4761 - 1: DWB (Don't WriteBack)
4762 NOTE: FSRC is locked down until L2C_INT_STAT[OOB1]
4764 uint64_t reserved_34_35 : 2;
4765 uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address
4766 (1MB granularity) */
4767 uint64_t reserved_14_19 : 6;
4768 uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size
4770 Example: 0: 0MB / 1: 1MB
4771 The range check is for:
4772 (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
4773 SW NOTE: SADR+SIZE could be setup to potentially wrap
4774 the 34bit ending bounds address. */
4777 uint64_t reserved_14_19 : 6;
4779 uint64_t reserved_34_35 : 2;
4784 struct cvmx_l2c_oob1_s cn52xx;
4785 struct cvmx_l2c_oob1_s cn52xxp1;
4786 struct cvmx_l2c_oob1_s cn56xx;
4787 struct cvmx_l2c_oob1_s cn56xxp1;
4789 typedef union cvmx_l2c_oob1 cvmx_l2c_oob1_t;
4794 * L2C_OOB2 = L2C Out of Bounds Range Checker
4796 * Description: Defines DMA "Out of Bounds" region \#2. If a DMA initiated write transaction generates an address
4797 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
4799 union cvmx_l2c_oob2 {
4801 struct cvmx_l2c_oob2_s {
4802 #ifdef __BIG_ENDIAN_BITFIELD
4803 uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address
4804 When L2C_INT_STAT[OOB2]=1, this field indicates the
4805 DMA cacheline address.
4806 (addr[33:7] = full cacheline address captured)
4807 NOTE: FADR is locked down until L2C_INT_STAT[OOB2]
4809 uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command
4810 When L2C_INT_STAT[OOB2]=1, this field indicates the
4811 type of DMA command.
4813 - 1: DWB (Don't WriteBack)
4814 NOTE: FSRC is locked down until L2C_INT_STAT[OOB2]
4816 uint64_t reserved_34_35 : 2;
4817 uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address
4818 (1MB granularity) */
4819 uint64_t reserved_14_19 : 6;
4820 uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size
4822 Example: 0: 0MB / 1: 1MB
4823 The range check is for:
4824 (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
4825 SW NOTE: SADR+SIZE could be setup to potentially wrap
4826 the 34bit ending bounds address. */
4829 uint64_t reserved_14_19 : 6;
4831 uint64_t reserved_34_35 : 2;
4836 struct cvmx_l2c_oob2_s cn52xx;
4837 struct cvmx_l2c_oob2_s cn52xxp1;
4838 struct cvmx_l2c_oob2_s cn56xx;
4839 struct cvmx_l2c_oob2_s cn56xxp1;
4841 typedef union cvmx_l2c_oob2 cvmx_l2c_oob2_t;
4846 * L2C_OOB3 = L2C Out of Bounds Range Checker
4848 * Description: Defines DMA "Out of Bounds" region \#3. If a DMA initiated write transaction generates an address
4849 * within the specified region, the write is 'ignored' and an interrupt is generated to alert software.
4851 union cvmx_l2c_oob3 {
4853 struct cvmx_l2c_oob3_s {
4854 #ifdef __BIG_ENDIAN_BITFIELD
4855 uint64_t fadr : 27; /**< DMA initated Memory Range Checker Failing Address
4856 When L2C_INT_STAT[OOB3]=1, this field indicates the
4857 DMA cacheline address.
4858 (addr[33:7] = full cacheline address captured)
4859 NOTE: FADR is locked down until L2C_INT_STAT[00B3]
4861 uint64_t fsrc : 1; /**< DMA Out of Bounds Failing Source Command
4862 When L2C_INT_STAT[OOB3]=1, this field indicates the
4863 type of DMA command.
4865 - 1: DWB (Don't WriteBack)
4866 NOTE: FSRC is locked down until L2C_INT_STAT[00B3]
4868 uint64_t reserved_34_35 : 2;
4869 uint64_t sadr : 14; /**< DMA initated Memory Range Checker Starting Address
4870 (1MB granularity) */
4871 uint64_t reserved_14_19 : 6;
4872 uint64_t size : 14; /**< DMA Out of Bounds Range Checker Size
4874 Example: 0: 0MB / 1: 1MB
4875 The range check is for:
4876 (SADR<<20) <= addr[33:0] < (((SADR+SIZE) & 0x3FFF)<<20)
4877 SW NOTE: SADR+SIZE could be setup to potentially wrap
4878 the 34bit ending bounds address. */
4881 uint64_t reserved_14_19 : 6;
4883 uint64_t reserved_34_35 : 2;
4888 struct cvmx_l2c_oob3_s cn52xx;
4889 struct cvmx_l2c_oob3_s cn52xxp1;
4890 struct cvmx_l2c_oob3_s cn56xx;
4891 struct cvmx_l2c_oob3_s cn56xxp1;
4893 typedef union cvmx_l2c_oob3 cvmx_l2c_oob3_t;
4898 * L2C_PFC0 = L2 Performance Counter \#0
4902 union cvmx_l2c_pfcx {
4904 struct cvmx_l2c_pfcx_s {
4905 #ifdef __BIG_ENDIAN_BITFIELD
4906 uint64_t reserved_36_63 : 28;
4907 uint64_t pfcnt0 : 36; /**< Performance Counter \#0 */
4909 uint64_t pfcnt0 : 36;
4910 uint64_t reserved_36_63 : 28;
4913 struct cvmx_l2c_pfcx_s cn30xx;
4914 struct cvmx_l2c_pfcx_s cn31xx;
4915 struct cvmx_l2c_pfcx_s cn38xx;
4916 struct cvmx_l2c_pfcx_s cn38xxp2;
4917 struct cvmx_l2c_pfcx_s cn50xx;
4918 struct cvmx_l2c_pfcx_s cn52xx;
4919 struct cvmx_l2c_pfcx_s cn52xxp1;
4920 struct cvmx_l2c_pfcx_s cn56xx;
4921 struct cvmx_l2c_pfcx_s cn56xxp1;
4922 struct cvmx_l2c_pfcx_s cn58xx;
4923 struct cvmx_l2c_pfcx_s cn58xxp1;
4925 typedef union cvmx_l2c_pfcx cvmx_l2c_pfcx_t;
4930 * L2C_PFCTL = L2 Performance Counter Control Register
4932 * Description: Controls the actions of the 4 Performance Counters
4935 * - There are four 36b performance counter registers which can simultaneously count events.
4936 * Each Counter's event is programmably selected via the corresponding CNTxSEL field:
4937 * CNTxSEL[5:0] Event
4938 * -----------------+-----------------------
4940 * 1 | L2 LDI Command Miss (NOTE: Both PP and IOB are cabable of generating LDI)
4941 * 2 | L2 LDI Command Hit (NOTE: Both PP and IOB are cabable of generating LDI)
4942 * 3 | L2 non-LDI Command Miss
4943 * 4 | L2 non-LDI Command Hit
4944 * 5 | L2 Miss (total)
4945 * 6 | L2 Hit (total)
4946 * 7 | L2 Victim Buffer Hit (Retry Probe)
4947 * 8 | LFB-NQ Index Conflict
4948 * 9 | L2 Tag Probe (issued - could be VB-Retried)
4949 * 10 | L2 Tag Update (completed - note: some CMD types do not update)
4950 * 11 | L2 Tag Probe Completed (beyond VB-RTY window)
4951 * 12 | L2 Tag Dirty Victim
4952 * 13 | L2 Data Store NOP
4953 * 14 | L2 Data Store READ
4954 * 15 | L2 Data Store WRITE
4955 * 16 | Memory Fill Data valid (1 strobe/32B)
4956 * 17 | Memory Write Request
4957 * 18 | Memory Read Request
4958 * 19 | Memory Write Data valid (1 strobe/32B)
4959 * 20 | XMC NOP (XMC Bus Idle)
4960 * 21 | XMC LDT (Load-Through Request)
4961 * 22 | XMC LDI (L2 Load I-Stream Request)
4962 * 23 | XMC LDD (L2 Load D-stream Request)
4963 * 24 | XMC STF (L2 Store Full cacheline Request)
4964 * 25 | XMC STT (L2 Store Through Request)
4965 * 26 | XMC STP (L2 Store Partial Request)
4966 * 27 | XMC STC (L2 Store Conditional Request)
4967 * 28 | XMC DWB (L2 Don't WriteBack Request)
4968 * 29 | XMC PL2 (L2 Prefetch Request)
4969 * 30 | XMC PSL1 (L1 Prefetch Request)
4974 * 35 | XMD Bus valid (all)
4975 * 36 | XMD Bus valid (DST=L2C) Memory Data
4976 * 37 | XMD Bus valid (DST=IOB) REFL Data
4977 * 38 | XMD Bus valid (DST=PP) IOBRSP Data
4986 * 47 | RSD Data Valid
4987 * 48 | RSD Data Valid (FILL)
4988 * 49 | RSD Data Valid (STRSP)
4989 * 50 | RSD Data Valid (REFL)
4990 * 51 | LRF-REQ (LFB-NQ)
4991 * 52 | DT RD-ALLOC (LDD/PSL1 Commands)
4992 * 53 | DT WR-INVAL (ST* Commands)
4994 union cvmx_l2c_pfctl {
4996 struct cvmx_l2c_pfctl_s {
4997 #ifdef __BIG_ENDIAN_BITFIELD
4998 uint64_t reserved_36_63 : 28;
4999 uint64_t cnt3rdclr : 1; /**< Performance Counter 3 Read Clear
5000 When set, all CSR reads of the L2C_PFC3
5001 register will auto-clear the counter. This allows
5002 SW to maintain 'cumulative' counters in SW.
5003 NOTE: If the CSR read occurs in the same cycle as
5004 the 'event' to be counted, the counter will
5005 properly reflect the event. */
5006 uint64_t cnt2rdclr : 1; /**< Performance Counter 2 Read Clear
5007 When set, all CSR reads of the L2C_PFC2
5008 register will auto-clear the counter. This allows
5009 SW to maintain 'cumulative' counters in SW.
5010 NOTE: If the CSR read occurs in the same cycle as
5011 the 'event' to be counted, the counter will
5012 properly reflect the event. */
5013 uint64_t cnt1rdclr : 1; /**< Performance Counter 1 Read Clear
5014 When set, all CSR reads of the L2C_PFC1
5015 register will auto-clear the counter. This allows
5016 SW to maintain 'cumulative' counters in SW.
5017 NOTE: If the CSR read occurs in the same cycle as
5018 the 'event' to be counted, the counter will
5019 properly reflect the event. */
5020 uint64_t cnt0rdclr : 1; /**< Performance Counter 0 Read Clear
5021 When set, all CSR reads of the L2C_PFC0
5022 register will 'auto-clear' the counter. This allows
5023 SW to maintain accurate 'cumulative' counters.
5024 NOTE: If the CSR read occurs in the same cycle as
5025 the 'event' to be counted, the counter will
5026 properly reflect the event. */
5027 uint64_t cnt3ena : 1; /**< Performance Counter 3 Enable
5028 When this bit is set, the performance counter
5030 uint64_t cnt3clr : 1; /**< Performance Counter 3 Clear
5031 When the CSR write occurs, if this bit is set,
5032 the performance counter is cleared. Otherwise,
5033 it will resume counting from its current value. */
5034 uint64_t cnt3sel : 6; /**< Performance Counter 3 Event Selector
5035 (see list of selectable events to count in NOTES) */
5036 uint64_t cnt2ena : 1; /**< Performance Counter 2 Enable
5037 When this bit is set, the performance counter
5039 uint64_t cnt2clr : 1; /**< Performance Counter 2 Clear
5040 When the CSR write occurs, if this bit is set,
5041 the performance counter is cleared. Otherwise,
5042 it will resume counting from its current value. */
5043 uint64_t cnt2sel : 6; /**< Performance Counter 2 Event Selector
5044 (see list of selectable events to count in NOTES) */
5045 uint64_t cnt1ena : 1; /**< Performance Counter 1 Enable
5046 When this bit is set, the performance counter
5048 uint64_t cnt1clr : 1; /**< Performance Counter 1 Clear
5049 When the CSR write occurs, if this bit is set,
5050 the performance counter is cleared. Otherwise,
5051 it will resume counting from its current value. */
5052 uint64_t cnt1sel : 6; /**< Performance Counter 1 Event Selector
5053 (see list of selectable events to count in NOTES) */
5054 uint64_t cnt0ena : 1; /**< Performance Counter 0 Enable
5055 When this bit is set, the performance counter
5057 uint64_t cnt0clr : 1; /**< Performance Counter 0 Clear
5058 When the CSR write occurs, if this bit is set,
5059 the performance counter is cleared. Otherwise,
5060 it will resume counting from its current value. */
5061 uint64_t cnt0sel : 6; /**< Performance Counter 0 Event Selector
5062 (see list of selectable events to count in NOTES) */
5064 uint64_t cnt0sel : 6;
5065 uint64_t cnt0clr : 1;
5066 uint64_t cnt0ena : 1;
5067 uint64_t cnt1sel : 6;
5068 uint64_t cnt1clr : 1;
5069 uint64_t cnt1ena : 1;
5070 uint64_t cnt2sel : 6;
5071 uint64_t cnt2clr : 1;
5072 uint64_t cnt2ena : 1;
5073 uint64_t cnt3sel : 6;
5074 uint64_t cnt3clr : 1;
5075 uint64_t cnt3ena : 1;
5076 uint64_t cnt0rdclr : 1;
5077 uint64_t cnt1rdclr : 1;
5078 uint64_t cnt2rdclr : 1;
5079 uint64_t cnt3rdclr : 1;
5080 uint64_t reserved_36_63 : 28;
5083 struct cvmx_l2c_pfctl_s cn30xx;
5084 struct cvmx_l2c_pfctl_s cn31xx;
5085 struct cvmx_l2c_pfctl_s cn38xx;
5086 struct cvmx_l2c_pfctl_s cn38xxp2;
5087 struct cvmx_l2c_pfctl_s cn50xx;
5088 struct cvmx_l2c_pfctl_s cn52xx;
5089 struct cvmx_l2c_pfctl_s cn52xxp1;
5090 struct cvmx_l2c_pfctl_s cn56xx;
5091 struct cvmx_l2c_pfctl_s cn56xxp1;
5092 struct cvmx_l2c_pfctl_s cn58xx;
5093 struct cvmx_l2c_pfctl_s cn58xxp1;
5095 typedef union cvmx_l2c_pfctl cvmx_l2c_pfctl_t;
5100 * L2C_PPGRP = L2C PP Group Number
5102 * Description: Defines the PP(Packet Processor) PLC Group \# (0,1,2)
5104 union cvmx_l2c_ppgrp {
5106 struct cvmx_l2c_ppgrp_s {
5107 #ifdef __BIG_ENDIAN_BITFIELD
5108 uint64_t reserved_24_63 : 40;
5109 uint64_t pp11grp : 2; /**< PP11 PLC Group# (0,1,2) */
5110 uint64_t pp10grp : 2; /**< PP10 PLC Group# (0,1,2) */
5111 uint64_t pp9grp : 2; /**< PP9 PLC Group# (0,1,2) */
5112 uint64_t pp8grp : 2; /**< PP8 PLC Group# (0,1,2) */
5113 uint64_t pp7grp : 2; /**< PP7 PLC Group# (0,1,2) */
5114 uint64_t pp6grp : 2; /**< PP6 PLC Group# (0,1,2) */
5115 uint64_t pp5grp : 2; /**< PP5 PLC Group# (0,1,2) */
5116 uint64_t pp4grp : 2; /**< PP4 PLC Group# (0,1,2) */
5117 uint64_t pp3grp : 2; /**< PP3 PLC Group# (0,1,2) */
5118 uint64_t pp2grp : 2; /**< PP2 PLC Group# (0,1,2) */
5119 uint64_t pp1grp : 2; /**< PP1 PLC Group# (0,1,2) */
5120 uint64_t pp0grp : 2; /**< PP0 PLC Group# (0,1,2) */
5122 uint64_t pp0grp : 2;
5123 uint64_t pp1grp : 2;
5124 uint64_t pp2grp : 2;
5125 uint64_t pp3grp : 2;
5126 uint64_t pp4grp : 2;
5127 uint64_t pp5grp : 2;
5128 uint64_t pp6grp : 2;
5129 uint64_t pp7grp : 2;
5130 uint64_t pp8grp : 2;
5131 uint64_t pp9grp : 2;
5132 uint64_t pp10grp : 2;
5133 uint64_t pp11grp : 2;
5134 uint64_t reserved_24_63 : 40;
5137 struct cvmx_l2c_ppgrp_cn52xx {
5138 #ifdef __BIG_ENDIAN_BITFIELD
5139 uint64_t reserved_8_63 : 56;
5140 uint64_t pp3grp : 2; /**< PP3 PLC Group# (0,1,2) */
5141 uint64_t pp2grp : 2; /**< PP2 PLC Group# (0,1,2) */
5142 uint64_t pp1grp : 2; /**< PP1 PLC Group# (0,1,2) */
5143 uint64_t pp0grp : 2; /**< PP0 PLC Group# (0,1,2) */
5145 uint64_t pp0grp : 2;
5146 uint64_t pp1grp : 2;
5147 uint64_t pp2grp : 2;
5148 uint64_t pp3grp : 2;
5149 uint64_t reserved_8_63 : 56;
5152 struct cvmx_l2c_ppgrp_cn52xx cn52xxp1;
5153 struct cvmx_l2c_ppgrp_s cn56xx;
5154 struct cvmx_l2c_ppgrp_s cn56xxp1;
5156 typedef union cvmx_l2c_ppgrp cvmx_l2c_ppgrp_t;
5161 * L2C_QOS_IOB = L2C IOB QOS level
5165 union cvmx_l2c_qos_iobx {
5167 struct cvmx_l2c_qos_iobx_s {
5168 #ifdef __BIG_ENDIAN_BITFIELD
5169 uint64_t reserved_7_63 : 57;
5170 uint64_t dwblvl : 3; /**< QOS level for DWB commands. */
5171 uint64_t reserved_3_3 : 1;
5172 uint64_t lvl : 3; /**< QOS level for non-DWB commands. */
5175 uint64_t reserved_3_3 : 1;
5176 uint64_t dwblvl : 3;
5177 uint64_t reserved_7_63 : 57;
5180 struct cvmx_l2c_qos_iobx_cn61xx {
5181 #ifdef __BIG_ENDIAN_BITFIELD
5182 uint64_t reserved_6_63 : 58;
5183 uint64_t dwblvl : 2; /**< QOS level for DWB commands. */
5184 uint64_t reserved_2_3 : 2;
5185 uint64_t lvl : 2; /**< QOS level for non-DWB commands. */
5188 uint64_t reserved_2_3 : 2;
5189 uint64_t dwblvl : 2;
5190 uint64_t reserved_6_63 : 58;
5193 struct cvmx_l2c_qos_iobx_cn61xx cn63xx;
5194 struct cvmx_l2c_qos_iobx_cn61xx cn63xxp1;
5195 struct cvmx_l2c_qos_iobx_cn61xx cn66xx;
5196 struct cvmx_l2c_qos_iobx_s cn68xx;
5197 struct cvmx_l2c_qos_iobx_s cn68xxp1;
5198 struct cvmx_l2c_qos_iobx_cn61xx cnf71xx;
5200 typedef union cvmx_l2c_qos_iobx cvmx_l2c_qos_iobx_t;
5205 * L2C_QOS_PP = L2C PP QOS level
5209 union cvmx_l2c_qos_ppx {
5211 struct cvmx_l2c_qos_ppx_s {
5212 #ifdef __BIG_ENDIAN_BITFIELD
5213 uint64_t reserved_3_63 : 61;
5214 uint64_t lvl : 3; /**< QOS level to use for this PP. */
5217 uint64_t reserved_3_63 : 61;
5220 struct cvmx_l2c_qos_ppx_cn61xx {
5221 #ifdef __BIG_ENDIAN_BITFIELD
5222 uint64_t reserved_2_63 : 62;
5223 uint64_t lvl : 2; /**< QOS level to use for this PP. */
5226 uint64_t reserved_2_63 : 62;
5229 struct cvmx_l2c_qos_ppx_cn61xx cn63xx;
5230 struct cvmx_l2c_qos_ppx_cn61xx cn63xxp1;
5231 struct cvmx_l2c_qos_ppx_cn61xx cn66xx;
5232 struct cvmx_l2c_qos_ppx_s cn68xx;
5233 struct cvmx_l2c_qos_ppx_s cn68xxp1;
5234 struct cvmx_l2c_qos_ppx_cn61xx cnf71xx;
5236 typedef union cvmx_l2c_qos_ppx cvmx_l2c_qos_ppx_t;
5241 * L2C_QOS_WGT = L2C QOS weights
5244 union cvmx_l2c_qos_wgt {
5246 struct cvmx_l2c_qos_wgt_s {
5247 #ifdef __BIG_ENDIAN_BITFIELD
5248 uint64_t wgt7 : 8; /**< Weight for QOS level 7 */
5249 uint64_t wgt6 : 8; /**< Weight for QOS level 6 */
5250 uint64_t wgt5 : 8; /**< Weight for QOS level 5 */
5251 uint64_t wgt4 : 8; /**< Weight for QOS level 4 */
5252 uint64_t wgt3 : 8; /**< Weight for QOS level 3 */
5253 uint64_t wgt2 : 8; /**< Weight for QOS level 2 */
5254 uint64_t wgt1 : 8; /**< Weight for QOS level 1 */
5255 uint64_t wgt0 : 8; /**< Weight for QOS level 0 */
5267 struct cvmx_l2c_qos_wgt_cn61xx {
5268 #ifdef __BIG_ENDIAN_BITFIELD
5269 uint64_t reserved_32_63 : 32;
5270 uint64_t wgt3 : 8; /**< Weight for QOS level 3 */
5271 uint64_t wgt2 : 8; /**< Weight for QOS level 2 */
5272 uint64_t wgt1 : 8; /**< Weight for QOS level 1 */
5273 uint64_t wgt0 : 8; /**< Weight for QOS level 0 */
5279 uint64_t reserved_32_63 : 32;
5282 struct cvmx_l2c_qos_wgt_cn61xx cn63xx;
5283 struct cvmx_l2c_qos_wgt_cn61xx cn63xxp1;
5284 struct cvmx_l2c_qos_wgt_cn61xx cn66xx;
5285 struct cvmx_l2c_qos_wgt_s cn68xx;
5286 struct cvmx_l2c_qos_wgt_s cn68xxp1;
5287 struct cvmx_l2c_qos_wgt_cn61xx cnf71xx;
5289 typedef union cvmx_l2c_qos_wgt cvmx_l2c_qos_wgt_t;
5294 * L2C_RSC_PFC = L2C RSC Performance Counter(s)
5297 union cvmx_l2c_rscx_pfc {
5299 struct cvmx_l2c_rscx_pfc_s {
5300 #ifdef __BIG_ENDIAN_BITFIELD
5301 uint64_t count : 64; /**< Current counter value */
5303 uint64_t count : 64;
5306 struct cvmx_l2c_rscx_pfc_s cn61xx;
5307 struct cvmx_l2c_rscx_pfc_s cn63xx;
5308 struct cvmx_l2c_rscx_pfc_s cn63xxp1;
5309 struct cvmx_l2c_rscx_pfc_s cn66xx;
5310 struct cvmx_l2c_rscx_pfc_s cn68xx;
5311 struct cvmx_l2c_rscx_pfc_s cn68xxp1;
5312 struct cvmx_l2c_rscx_pfc_s cnf71xx;
5314 typedef union cvmx_l2c_rscx_pfc cvmx_l2c_rscx_pfc_t;
5319 * L2C_RSD_PFC = L2C RSD Performance Counter(s)
5322 union cvmx_l2c_rsdx_pfc {
5324 struct cvmx_l2c_rsdx_pfc_s {
5325 #ifdef __BIG_ENDIAN_BITFIELD
5326 uint64_t count : 64; /**< Current counter value */
5328 uint64_t count : 64;
5331 struct cvmx_l2c_rsdx_pfc_s cn61xx;
5332 struct cvmx_l2c_rsdx_pfc_s cn63xx;
5333 struct cvmx_l2c_rsdx_pfc_s cn63xxp1;
5334 struct cvmx_l2c_rsdx_pfc_s cn66xx;
5335 struct cvmx_l2c_rsdx_pfc_s cn68xx;
5336 struct cvmx_l2c_rsdx_pfc_s cn68xxp1;
5337 struct cvmx_l2c_rsdx_pfc_s cnf71xx;
5339 typedef union cvmx_l2c_rsdx_pfc cvmx_l2c_rsdx_pfc_t;
5344 * L2C_SPAR0 = L2 Set Partitioning Register (PP0-3)
5346 * Description: L2 Set Partitioning Register
5349 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
5350 * set for replacement.
5351 * - There MUST ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
5352 * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers
5353 * When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers
5355 union cvmx_l2c_spar0 {
5357 struct cvmx_l2c_spar0_s {
5358 #ifdef __BIG_ENDIAN_BITFIELD
5359 uint64_t reserved_32_63 : 32;
5360 uint64_t umsk3 : 8; /**< PP[3] L2 'DO NOT USE' set partition mask */
5361 uint64_t umsk2 : 8; /**< PP[2] L2 'DO NOT USE' set partition mask */
5362 uint64_t umsk1 : 8; /**< PP[1] L2 'DO NOT USE' set partition mask */
5363 uint64_t umsk0 : 8; /**< PP[0] L2 'DO NOT USE' set partition mask */
5369 uint64_t reserved_32_63 : 32;
5372 struct cvmx_l2c_spar0_cn30xx {
5373 #ifdef __BIG_ENDIAN_BITFIELD
5374 uint64_t reserved_4_63 : 60;
5375 uint64_t umsk0 : 4; /**< PP[0] L2 'DO NOT USE' set partition mask */
5378 uint64_t reserved_4_63 : 60;
5381 struct cvmx_l2c_spar0_cn31xx {
5382 #ifdef __BIG_ENDIAN_BITFIELD
5383 uint64_t reserved_12_63 : 52;
5384 uint64_t umsk1 : 4; /**< PP[1] L2 'DO NOT USE' set partition mask */
5385 uint64_t reserved_4_7 : 4;
5386 uint64_t umsk0 : 4; /**< PP[0] L2 'DO NOT USE' set partition mask */
5389 uint64_t reserved_4_7 : 4;
5391 uint64_t reserved_12_63 : 52;
5394 struct cvmx_l2c_spar0_s cn38xx;
5395 struct cvmx_l2c_spar0_s cn38xxp2;
5396 struct cvmx_l2c_spar0_cn50xx {
5397 #ifdef __BIG_ENDIAN_BITFIELD
5398 uint64_t reserved_16_63 : 48;
5399 uint64_t umsk1 : 8; /**< PP[1] L2 'DO NOT USE' set partition mask */
5400 uint64_t umsk0 : 8; /**< PP[0] L2 'DO NOT USE' set partition mask */
5404 uint64_t reserved_16_63 : 48;
5407 struct cvmx_l2c_spar0_s cn52xx;
5408 struct cvmx_l2c_spar0_s cn52xxp1;
5409 struct cvmx_l2c_spar0_s cn56xx;
5410 struct cvmx_l2c_spar0_s cn56xxp1;
5411 struct cvmx_l2c_spar0_s cn58xx;
5412 struct cvmx_l2c_spar0_s cn58xxp1;
5414 typedef union cvmx_l2c_spar0 cvmx_l2c_spar0_t;
5419 * L2C_SPAR1 = L2 Set Partitioning Register (PP4-7)
5421 * Description: L2 Set Partitioning Register
5424 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
5425 * set for replacement.
5426 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
5427 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
5428 * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
5430 union cvmx_l2c_spar1 {
5432 struct cvmx_l2c_spar1_s {
5433 #ifdef __BIG_ENDIAN_BITFIELD
5434 uint64_t reserved_32_63 : 32;
5435 uint64_t umsk7 : 8; /**< PP[7] L2 'DO NOT USE' set partition mask */
5436 uint64_t umsk6 : 8; /**< PP[6] L2 'DO NOT USE' set partition mask */
5437 uint64_t umsk5 : 8; /**< PP[5] L2 'DO NOT USE' set partition mask */
5438 uint64_t umsk4 : 8; /**< PP[4] L2 'DO NOT USE' set partition mask */
5444 uint64_t reserved_32_63 : 32;
5447 struct cvmx_l2c_spar1_s cn38xx;
5448 struct cvmx_l2c_spar1_s cn38xxp2;
5449 struct cvmx_l2c_spar1_s cn56xx;
5450 struct cvmx_l2c_spar1_s cn56xxp1;
5451 struct cvmx_l2c_spar1_s cn58xx;
5452 struct cvmx_l2c_spar1_s cn58xxp1;
5454 typedef union cvmx_l2c_spar1 cvmx_l2c_spar1_t;
5459 * L2C_SPAR2 = L2 Set Partitioning Register (PP8-11)
5461 * Description: L2 Set Partitioning Register
5464 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
5465 * set for replacement.
5466 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
5467 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
5468 * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
5470 union cvmx_l2c_spar2 {
5472 struct cvmx_l2c_spar2_s {
5473 #ifdef __BIG_ENDIAN_BITFIELD
5474 uint64_t reserved_32_63 : 32;
5475 uint64_t umsk11 : 8; /**< PP[11] L2 'DO NOT USE' set partition mask */
5476 uint64_t umsk10 : 8; /**< PP[10] L2 'DO NOT USE' set partition mask */
5477 uint64_t umsk9 : 8; /**< PP[9] L2 'DO NOT USE' set partition mask */
5478 uint64_t umsk8 : 8; /**< PP[8] L2 'DO NOT USE' set partition mask */
5482 uint64_t umsk10 : 8;
5483 uint64_t umsk11 : 8;
5484 uint64_t reserved_32_63 : 32;
5487 struct cvmx_l2c_spar2_s cn38xx;
5488 struct cvmx_l2c_spar2_s cn38xxp2;
5489 struct cvmx_l2c_spar2_s cn56xx;
5490 struct cvmx_l2c_spar2_s cn56xxp1;
5491 struct cvmx_l2c_spar2_s cn58xx;
5492 struct cvmx_l2c_spar2_s cn58xxp1;
5494 typedef union cvmx_l2c_spar2 cvmx_l2c_spar2_t;
5499 * L2C_SPAR3 = L2 Set Partitioning Register (PP12-15)
5501 * Description: L2 Set Partitioning Register
5504 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
5505 * set for replacement.
5506 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
5507 * - NOTES: When L2C FUSE[136] is blown(CRIP_1024K), then SETS#7-4 are SET in all UMSK'x' registers
5508 * When L2C FUSE[137] is blown(CRIP_512K), then SETS#7-2 are SET in all UMSK'x' registers
5510 union cvmx_l2c_spar3 {
5512 struct cvmx_l2c_spar3_s {
5513 #ifdef __BIG_ENDIAN_BITFIELD
5514 uint64_t reserved_32_63 : 32;
5515 uint64_t umsk15 : 8; /**< PP[15] L2 'DO NOT USE' set partition mask */
5516 uint64_t umsk14 : 8; /**< PP[14] L2 'DO NOT USE' set partition mask */
5517 uint64_t umsk13 : 8; /**< PP[13] L2 'DO NOT USE' set partition mask */
5518 uint64_t umsk12 : 8; /**< PP[12] L2 'DO NOT USE' set partition mask */
5520 uint64_t umsk12 : 8;
5521 uint64_t umsk13 : 8;
5522 uint64_t umsk14 : 8;
5523 uint64_t umsk15 : 8;
5524 uint64_t reserved_32_63 : 32;
5527 struct cvmx_l2c_spar3_s cn38xx;
5528 struct cvmx_l2c_spar3_s cn38xxp2;
5529 struct cvmx_l2c_spar3_s cn58xx;
5530 struct cvmx_l2c_spar3_s cn58xxp1;
5532 typedef union cvmx_l2c_spar3 cvmx_l2c_spar3_t;
5537 * L2C_SPAR4 = L2 Set Partitioning Register (IOB)
5539 * Description: L2 Set Partitioning Register
5542 * - When a bit is set in the UMSK'x' register, a memory command issued from PP='x' will NOT select that
5543 * set for replacement.
5544 * - There should ALWAYS BE at least 1 bit clear in each UMSK'x' register for proper L2 cache operation
5545 * - NOTES: When L2C FUSE[136] is blown(CRIP_256K), then SETS#7-4 are SET in all UMSK'x' registers
5546 * When L2C FUSE[137] is blown(CRIP_128K), then SETS#7-2 are SET in all UMSK'x' registers
5548 union cvmx_l2c_spar4 {
5550 struct cvmx_l2c_spar4_s {
5551 #ifdef __BIG_ENDIAN_BITFIELD
5552 uint64_t reserved_8_63 : 56;
5553 uint64_t umskiob : 8; /**< IOB L2 'DO NOT USE' set partition mask */
5555 uint64_t umskiob : 8;
5556 uint64_t reserved_8_63 : 56;
5559 struct cvmx_l2c_spar4_cn30xx {
5560 #ifdef __BIG_ENDIAN_BITFIELD
5561 uint64_t reserved_4_63 : 60;
5562 uint64_t umskiob : 4; /**< IOB L2 'DO NOT USE' set partition mask */
5564 uint64_t umskiob : 4;
5565 uint64_t reserved_4_63 : 60;
5568 struct cvmx_l2c_spar4_cn30xx cn31xx;
5569 struct cvmx_l2c_spar4_s cn38xx;
5570 struct cvmx_l2c_spar4_s cn38xxp2;
5571 struct cvmx_l2c_spar4_s cn50xx;
5572 struct cvmx_l2c_spar4_s cn52xx;
5573 struct cvmx_l2c_spar4_s cn52xxp1;
5574 struct cvmx_l2c_spar4_s cn56xx;
5575 struct cvmx_l2c_spar4_s cn56xxp1;
5576 struct cvmx_l2c_spar4_s cn58xx;
5577 struct cvmx_l2c_spar4_s cn58xxp1;
5579 typedef union cvmx_l2c_spar4 cvmx_l2c_spar4_t;
5582 * cvmx_l2c_tad#_ecc0
5584 * L2C_TAD_ECC0 = L2C ECC logging
5586 * Description: holds the syndromes for a L2D read generated from L2C_XMC_CMD
5588 union cvmx_l2c_tadx_ecc0 {
5590 struct cvmx_l2c_tadx_ecc0_s {
5591 #ifdef __BIG_ENDIAN_BITFIELD
5592 uint64_t reserved_58_63 : 6;
5593 uint64_t ow3ecc : 10; /**< ECC for OW3 of cache block */
5594 uint64_t reserved_42_47 : 6;
5595 uint64_t ow2ecc : 10; /**< ECC for OW2 of cache block */
5596 uint64_t reserved_26_31 : 6;
5597 uint64_t ow1ecc : 10; /**< ECC for OW1 of cache block */
5598 uint64_t reserved_10_15 : 6;
5599 uint64_t ow0ecc : 10; /**< ECC for OW0 of cache block */
5601 uint64_t ow0ecc : 10;
5602 uint64_t reserved_10_15 : 6;
5603 uint64_t ow1ecc : 10;
5604 uint64_t reserved_26_31 : 6;
5605 uint64_t ow2ecc : 10;
5606 uint64_t reserved_42_47 : 6;
5607 uint64_t ow3ecc : 10;
5608 uint64_t reserved_58_63 : 6;
5611 struct cvmx_l2c_tadx_ecc0_s cn61xx;
5612 struct cvmx_l2c_tadx_ecc0_s cn63xx;
5613 struct cvmx_l2c_tadx_ecc0_s cn63xxp1;
5614 struct cvmx_l2c_tadx_ecc0_s cn66xx;
5615 struct cvmx_l2c_tadx_ecc0_s cn68xx;
5616 struct cvmx_l2c_tadx_ecc0_s cn68xxp1;
5617 struct cvmx_l2c_tadx_ecc0_s cnf71xx;
5619 typedef union cvmx_l2c_tadx_ecc0 cvmx_l2c_tadx_ecc0_t;
5622 * cvmx_l2c_tad#_ecc1
5624 * L2C_TAD_ECC1 = L2C ECC logging
5626 * Description: holds the syndromes for a L2D read generated from L2C_XMC_CMD
5628 union cvmx_l2c_tadx_ecc1 {
5630 struct cvmx_l2c_tadx_ecc1_s {
5631 #ifdef __BIG_ENDIAN_BITFIELD
5632 uint64_t reserved_58_63 : 6;
5633 uint64_t ow7ecc : 10; /**< ECC for OW7 of cache block */
5634 uint64_t reserved_42_47 : 6;
5635 uint64_t ow6ecc : 10; /**< ECC for OW6 of cache block */
5636 uint64_t reserved_26_31 : 6;
5637 uint64_t ow5ecc : 10; /**< ECC for OW5 of cache block */
5638 uint64_t reserved_10_15 : 6;
5639 uint64_t ow4ecc : 10; /**< ECC for OW4 of cache block */
5641 uint64_t ow4ecc : 10;
5642 uint64_t reserved_10_15 : 6;
5643 uint64_t ow5ecc : 10;
5644 uint64_t reserved_26_31 : 6;
5645 uint64_t ow6ecc : 10;
5646 uint64_t reserved_42_47 : 6;
5647 uint64_t ow7ecc : 10;
5648 uint64_t reserved_58_63 : 6;
5651 struct cvmx_l2c_tadx_ecc1_s cn61xx;
5652 struct cvmx_l2c_tadx_ecc1_s cn63xx;
5653 struct cvmx_l2c_tadx_ecc1_s cn63xxp1;
5654 struct cvmx_l2c_tadx_ecc1_s cn66xx;
5655 struct cvmx_l2c_tadx_ecc1_s cn68xx;
5656 struct cvmx_l2c_tadx_ecc1_s cn68xxp1;
5657 struct cvmx_l2c_tadx_ecc1_s cnf71xx;
5659 typedef union cvmx_l2c_tadx_ecc1 cvmx_l2c_tadx_ecc1_t;
5664 * L2C_TAD_IEN = L2C TAD Interrupt Enable
5667 union cvmx_l2c_tadx_ien {
5669 struct cvmx_l2c_tadx_ien_s {
5670 #ifdef __BIG_ENDIAN_BITFIELD
5671 uint64_t reserved_9_63 : 55;
5672 uint64_t wrdislmc : 1; /**< Illegal Write to Disabled LMC Error enable
5673 Enables L2C_TADX_INT[WRDISLMC] to
5674 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5675 uint64_t rddislmc : 1; /**< Illegal Read to Disabled LMC Error enable
5676 Enables L2C_TADX_INT[RDDISLMC] to
5677 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5678 uint64_t noway : 1; /**< No way available interrupt enable
5679 Enables L2C_ERR_TTGX[NOWAY]/L2C_TADX_INT[NOWAY] to
5680 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5681 uint64_t vbfdbe : 1; /**< VBF Double-Bit Error enable
5682 Enables L2C_ERR_TDTX[VDBE]/L2C_TADX_INT[VBFSBE] to
5683 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5684 uint64_t vbfsbe : 1; /**< VBF Single-Bit Error enable
5685 Enables L2C_ERR_TDTX[VSBE]/L2C_TADX_INT[VBFSBE] to
5686 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5687 uint64_t tagdbe : 1; /**< TAG Double-Bit Error enable
5688 Enables L2C_ERR_TTGX[DBE]/L2C_TADX_INT[TAGDBE] to
5689 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5690 uint64_t tagsbe : 1; /**< TAG Single-Bit Error enable
5691 Enables L2C_ERR_TTGX[SBE]/L2C_TADX_INT[TAGSBE] to
5692 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5693 uint64_t l2ddbe : 1; /**< L2D Double-Bit Error enable
5694 Enables L2C_ERR_TDTX[DBE]/L2C_TADX_INT[L2DDBE] to
5695 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5696 uint64_t l2dsbe : 1; /**< L2D Single-Bit Error enable
5697 Enables L2C_ERR_TDTX[SBE]/L2C_TADX_INT[L2DSBE] to
5698 assert L2C_INT_REG[TADX] (and cause an interrupt) */
5700 uint64_t l2dsbe : 1;
5701 uint64_t l2ddbe : 1;
5702 uint64_t tagsbe : 1;
5703 uint64_t tagdbe : 1;
5704 uint64_t vbfsbe : 1;
5705 uint64_t vbfdbe : 1;
5707 uint64_t rddislmc : 1;
5708 uint64_t wrdislmc : 1;
5709 uint64_t reserved_9_63 : 55;
5712 struct cvmx_l2c_tadx_ien_s cn61xx;
5713 struct cvmx_l2c_tadx_ien_s cn63xx;
5714 struct cvmx_l2c_tadx_ien_cn63xxp1 {
5715 #ifdef __BIG_ENDIAN_BITFIELD
5716 uint64_t reserved_7_63 : 57;
5717 uint64_t noway : 1; /**< No way available interrupt enable
5718 Enables L2C_ERR_TTGX[NOWAY] to assert
5719 L2C_INT_REG[TADX] (and cause an interrupt) */
5720 uint64_t vbfdbe : 1; /**< VBF Double-Bit Error enable
5721 Enables L2C_ERR_TDTX[VSBE] to assert
5722 L2C_INT_REG[TADX] (and cause an interrupt) */
5723 uint64_t vbfsbe : 1; /**< VBF Single-Bit Error enable
5724 Enables L2C_ERR_TDTX[VSBE] to assert
5725 L2C_INT_REG[TADX] (and cause an interrupt) */
5726 uint64_t tagdbe : 1; /**< TAG Double-Bit Error enable
5727 Enables L2C_ERR_TTGX[DBE] to assert
5728 L2C_INT_REG[TADX] (and cause an interrupt) */
5729 uint64_t tagsbe : 1; /**< TAG Single-Bit Error enable
5730 Enables L2C_ERR_TTGX[SBE] to assert
5731 L2C_INT_REG[TADX] (and cause an interrupt) */
5732 uint64_t l2ddbe : 1; /**< L2D Double-Bit Error enable
5733 Enables L2C_ERR_TDTX[DBE] to assert
5734 L2C_INT_REG[TADX] (and cause an interrupt) */
5735 uint64_t l2dsbe : 1; /**< L2D Single-Bit Error enable
5736 Enables L2C_ERR_TDTX[SBE] to assert
5737 L2C_INT_REG[TADX] (and cause an interrupt) */
5739 uint64_t l2dsbe : 1;
5740 uint64_t l2ddbe : 1;
5741 uint64_t tagsbe : 1;
5742 uint64_t tagdbe : 1;
5743 uint64_t vbfsbe : 1;
5744 uint64_t vbfdbe : 1;
5746 uint64_t reserved_7_63 : 57;
5749 struct cvmx_l2c_tadx_ien_s cn66xx;
5750 struct cvmx_l2c_tadx_ien_s cn68xx;
5751 struct cvmx_l2c_tadx_ien_s cn68xxp1;
5752 struct cvmx_l2c_tadx_ien_s cnf71xx;
5754 typedef union cvmx_l2c_tadx_ien cvmx_l2c_tadx_ien_t;
5759 * L2C_TAD_INT = L2C TAD Interrupt Register (not present in pass 1 O63)
5763 * L2C_TAD_IEN is the interrupt enable register corresponding to this register.
5766 union cvmx_l2c_tadx_int {
5768 struct cvmx_l2c_tadx_int_s {
5769 #ifdef __BIG_ENDIAN_BITFIELD
5770 uint64_t reserved_9_63 : 55;
5771 uint64_t wrdislmc : 1; /**< Illegal Write to Disabled LMC Error
5772 A DRAM write arrived before the LMC(s) were enabled */
5773 uint64_t rddislmc : 1; /**< Illegal Read to Disabled LMC Error
5774 A DRAM read arrived before the LMC(s) were enabled */
5775 uint64_t noway : 1; /**< No way available interrupt
5776 Shadow copy of L2C_ERR_TTGX[NOWAY]
5777 Writes of 1 also clear L2C_ERR_TTGX[NOWAY] */
5778 uint64_t vbfdbe : 1; /**< VBF Double-Bit Error
5779 Shadow copy of L2C_ERR_TDTX[VDBE]
5780 Writes of 1 also clear L2C_ERR_TDTX[VDBE] */
5781 uint64_t vbfsbe : 1; /**< VBF Single-Bit Error
5782 Shadow copy of L2C_ERR_TDTX[VSBE]
5783 Writes of 1 also clear L2C_ERR_TDTX[VSBE] */
5784 uint64_t tagdbe : 1; /**< TAG Double-Bit Error
5785 Shadow copy of L2C_ERR_TTGX[DBE]
5786 Writes of 1 also clear L2C_ERR_TTGX[DBE] */
5787 uint64_t tagsbe : 1; /**< TAG Single-Bit Error
5788 Shadow copy of L2C_ERR_TTGX[SBE]
5789 Writes of 1 also clear L2C_ERR_TTGX[SBE] */
5790 uint64_t l2ddbe : 1; /**< L2D Double-Bit Error
5791 Shadow copy of L2C_ERR_TDTX[DBE]
5792 Writes of 1 also clear L2C_ERR_TDTX[DBE] */
5793 uint64_t l2dsbe : 1; /**< L2D Single-Bit Error
5794 Shadow copy of L2C_ERR_TDTX[SBE]
5795 Writes of 1 also clear L2C_ERR_TDTX[SBE] */
5797 uint64_t l2dsbe : 1;
5798 uint64_t l2ddbe : 1;
5799 uint64_t tagsbe : 1;
5800 uint64_t tagdbe : 1;
5801 uint64_t vbfsbe : 1;
5802 uint64_t vbfdbe : 1;
5804 uint64_t rddislmc : 1;
5805 uint64_t wrdislmc : 1;
5806 uint64_t reserved_9_63 : 55;
5809 struct cvmx_l2c_tadx_int_s cn61xx;
5810 struct cvmx_l2c_tadx_int_s cn63xx;
5811 struct cvmx_l2c_tadx_int_s cn66xx;
5812 struct cvmx_l2c_tadx_int_s cn68xx;
5813 struct cvmx_l2c_tadx_int_s cn68xxp1;
5814 struct cvmx_l2c_tadx_int_s cnf71xx;
5816 typedef union cvmx_l2c_tadx_int cvmx_l2c_tadx_int_t;
5819 * cvmx_l2c_tad#_pfc0
5821 * L2C_TAD_PFC0 = L2C TAD Performance Counter 0
5824 union cvmx_l2c_tadx_pfc0 {
5826 struct cvmx_l2c_tadx_pfc0_s {
5827 #ifdef __BIG_ENDIAN_BITFIELD
5828 uint64_t count : 64; /**< Current counter value */
5830 uint64_t count : 64;
5833 struct cvmx_l2c_tadx_pfc0_s cn61xx;
5834 struct cvmx_l2c_tadx_pfc0_s cn63xx;
5835 struct cvmx_l2c_tadx_pfc0_s cn63xxp1;
5836 struct cvmx_l2c_tadx_pfc0_s cn66xx;
5837 struct cvmx_l2c_tadx_pfc0_s cn68xx;
5838 struct cvmx_l2c_tadx_pfc0_s cn68xxp1;
5839 struct cvmx_l2c_tadx_pfc0_s cnf71xx;
5841 typedef union cvmx_l2c_tadx_pfc0 cvmx_l2c_tadx_pfc0_t;
5844 * cvmx_l2c_tad#_pfc1
5846 * L2C_TAD_PFC1 = L2C TAD Performance Counter 1
5849 union cvmx_l2c_tadx_pfc1 {
5851 struct cvmx_l2c_tadx_pfc1_s {
5852 #ifdef __BIG_ENDIAN_BITFIELD
5853 uint64_t count : 64; /**< Current counter value */
5855 uint64_t count : 64;
5858 struct cvmx_l2c_tadx_pfc1_s cn61xx;
5859 struct cvmx_l2c_tadx_pfc1_s cn63xx;
5860 struct cvmx_l2c_tadx_pfc1_s cn63xxp1;
5861 struct cvmx_l2c_tadx_pfc1_s cn66xx;
5862 struct cvmx_l2c_tadx_pfc1_s cn68xx;
5863 struct cvmx_l2c_tadx_pfc1_s cn68xxp1;
5864 struct cvmx_l2c_tadx_pfc1_s cnf71xx;
5866 typedef union cvmx_l2c_tadx_pfc1 cvmx_l2c_tadx_pfc1_t;
5869 * cvmx_l2c_tad#_pfc2
5871 * L2C_TAD_PFC2 = L2C TAD Performance Counter 2
5874 union cvmx_l2c_tadx_pfc2 {
5876 struct cvmx_l2c_tadx_pfc2_s {
5877 #ifdef __BIG_ENDIAN_BITFIELD
5878 uint64_t count : 64; /**< Current counter value */
5880 uint64_t count : 64;
5883 struct cvmx_l2c_tadx_pfc2_s cn61xx;
5884 struct cvmx_l2c_tadx_pfc2_s cn63xx;
5885 struct cvmx_l2c_tadx_pfc2_s cn63xxp1;
5886 struct cvmx_l2c_tadx_pfc2_s cn66xx;
5887 struct cvmx_l2c_tadx_pfc2_s cn68xx;
5888 struct cvmx_l2c_tadx_pfc2_s cn68xxp1;
5889 struct cvmx_l2c_tadx_pfc2_s cnf71xx;
5891 typedef union cvmx_l2c_tadx_pfc2 cvmx_l2c_tadx_pfc2_t;
5894 * cvmx_l2c_tad#_pfc3
5896 * L2C_TAD_PFC3 = L2C TAD Performance Counter 3
5899 union cvmx_l2c_tadx_pfc3 {
5901 struct cvmx_l2c_tadx_pfc3_s {
5902 #ifdef __BIG_ENDIAN_BITFIELD
5903 uint64_t count : 64; /**< Current counter value */
5905 uint64_t count : 64;
5908 struct cvmx_l2c_tadx_pfc3_s cn61xx;
5909 struct cvmx_l2c_tadx_pfc3_s cn63xx;
5910 struct cvmx_l2c_tadx_pfc3_s cn63xxp1;
5911 struct cvmx_l2c_tadx_pfc3_s cn66xx;
5912 struct cvmx_l2c_tadx_pfc3_s cn68xx;
5913 struct cvmx_l2c_tadx_pfc3_s cn68xxp1;
5914 struct cvmx_l2c_tadx_pfc3_s cnf71xx;
5916 typedef union cvmx_l2c_tadx_pfc3 cvmx_l2c_tadx_pfc3_t;
5921 * L2C_TAD_PRF = L2C TAD Performance Counter Control
5925 * (1) All four counters are equivalent and can use any of the defined selects.
5927 * (2) the CNTnSEL legal values are:
5928 * 0x00 -- Nothing (disabled)
5929 * 0x01 -- L2 Tag Hit
5930 * 0x02 -- L2 Tag Miss
5931 * 0x03 -- L2 Tag NoAlloc (forced no-allocate)
5935 * 0x07 -- LFB Occupancy (each cycle adds \# of LFBs valid)
5936 * 0x08 -- LFB Wait LFB (each cycle adds \# LFBs waiting for other LFBs)
5937 * 0x09 -- LFB Wait VAB (each cycle adds \# LFBs waiting for VAB)
5938 * 0x80 -- Quad 0 index bus inuse
5939 * 0x81 -- Quad 0 read data bus inuse
5940 * 0x82 -- Quad 0 \# banks inuse (0-4/cycle)
5941 * 0x83 -- Quad 0 wdat flops inuse (0-4/cycle)
5942 * 0x90 -- Quad 1 index bus inuse
5943 * 0x91 -- Quad 1 read data bus inuse
5944 * 0x92 -- Quad 1 \# banks inuse (0-4/cycle)
5945 * 0x93 -- Quad 1 wdat flops inuse (0-4/cycle)
5946 * 0xA0 -- Quad 2 index bus inuse
5947 * 0xA1 -- Quad 2 read data bus inuse
5948 * 0xA2 -- Quad 2 \# banks inuse (0-4/cycle)
5949 * 0xA3 -- Quad 2 wdat flops inuse (0-4/cycle)
5950 * 0xB0 -- Quad 3 index bus inuse
5951 * 0xB1 -- Quad 3 read data bus inuse
5952 * 0xB2 -- Quad 3 \# banks inuse (0-4/cycle)
5953 * 0xB3 -- Quad 3 wdat flops inuse (0-4/cycle)
5955 union cvmx_l2c_tadx_prf {
5957 struct cvmx_l2c_tadx_prf_s {
5958 #ifdef __BIG_ENDIAN_BITFIELD
5959 uint64_t reserved_32_63 : 32;
5960 uint64_t cnt3sel : 8; /**< Selects event to count for L2C_TAD_PFC3 */
5961 uint64_t cnt2sel : 8; /**< Selects event to count for L2C_TAD_PFC2 */
5962 uint64_t cnt1sel : 8; /**< Selects event to count for L2C_TAD_PFC1 */
5963 uint64_t cnt0sel : 8; /**< Selects event to count for L2C_TAD_PFC0 */
5965 uint64_t cnt0sel : 8;
5966 uint64_t cnt1sel : 8;
5967 uint64_t cnt2sel : 8;
5968 uint64_t cnt3sel : 8;
5969 uint64_t reserved_32_63 : 32;
5972 struct cvmx_l2c_tadx_prf_s cn61xx;
5973 struct cvmx_l2c_tadx_prf_s cn63xx;
5974 struct cvmx_l2c_tadx_prf_s cn63xxp1;
5975 struct cvmx_l2c_tadx_prf_s cn66xx;
5976 struct cvmx_l2c_tadx_prf_s cn68xx;
5977 struct cvmx_l2c_tadx_prf_s cn68xxp1;
5978 struct cvmx_l2c_tadx_prf_s cnf71xx;
5980 typedef union cvmx_l2c_tadx_prf cvmx_l2c_tadx_prf_t;
5985 * L2C_TAD_TAG = L2C tag data
5987 * Description: holds the tag information for LTGL2I and STGL2I commands
5990 * (1) For 63xx TAG[35] must be written zero for STGL2I's or operation is undefined. During normal
5991 * operation, TAG[35] will also read 0.
5993 * (2) If setting the LOCK bit, the USE bit should also be set or operation is undefined.
5995 * (3) The tag is the corresponding bits from the L2C+LMC internal L2/DRAM byte address.
5997 union cvmx_l2c_tadx_tag {
5999 struct cvmx_l2c_tadx_tag_s {
6000 #ifdef __BIG_ENDIAN_BITFIELD
6001 uint64_t reserved_46_63 : 18;
6002 uint64_t ecc : 6; /**< The tag ECC */
6003 uint64_t reserved_36_39 : 4;
6004 uint64_t tag : 19; /**< The tag (see notes 1 and 3) */
6005 uint64_t reserved_4_16 : 13;
6006 uint64_t use : 1; /**< The LRU use bit */
6007 uint64_t valid : 1; /**< The valid bit */
6008 uint64_t dirty : 1; /**< The dirty bit */
6009 uint64_t lock : 1; /**< The lock bit */
6015 uint64_t reserved_4_16 : 13;
6017 uint64_t reserved_36_39 : 4;
6019 uint64_t reserved_46_63 : 18;
6022 struct cvmx_l2c_tadx_tag_s cn61xx;
6023 struct cvmx_l2c_tadx_tag_s cn63xx;
6024 struct cvmx_l2c_tadx_tag_s cn63xxp1;
6025 struct cvmx_l2c_tadx_tag_s cn66xx;
6026 struct cvmx_l2c_tadx_tag_s cn68xx;
6027 struct cvmx_l2c_tadx_tag_s cn68xxp1;
6028 struct cvmx_l2c_tadx_tag_s cnf71xx;
6030 typedef union cvmx_l2c_tadx_tag cvmx_l2c_tadx_tag_t;
6035 * L2C_VER_ID = L2C Virtualization ID Error Register
6037 * Description: records virtualization IDs associated with HOLEWR/BIGWR/VRTWR/VRTIDRNG/VRTADRNG interrupts.
6039 union cvmx_l2c_ver_id {
6041 struct cvmx_l2c_ver_id_s {
6042 #ifdef __BIG_ENDIAN_BITFIELD
6043 uint64_t mask : 64; /**< Mask of virtualization IDs which had a
6044 HOLEWR/BIGWR/VRTWR error */
6049 struct cvmx_l2c_ver_id_s cn61xx;
6050 struct cvmx_l2c_ver_id_s cn63xx;
6051 struct cvmx_l2c_ver_id_s cn63xxp1;
6052 struct cvmx_l2c_ver_id_s cn66xx;
6053 struct cvmx_l2c_ver_id_s cn68xx;
6054 struct cvmx_l2c_ver_id_s cn68xxp1;
6055 struct cvmx_l2c_ver_id_s cnf71xx;
6057 typedef union cvmx_l2c_ver_id cvmx_l2c_ver_id_t;
6062 * L2C_VER_IOB = L2C Virtualization ID IOB Error Register
6064 * Description: records IOBs associated with HOLEWR/BIGWR/VRTWR/VRTIDRNG/VRTADRNG interrupts.
6066 union cvmx_l2c_ver_iob {
6068 struct cvmx_l2c_ver_iob_s {
6069 #ifdef __BIG_ENDIAN_BITFIELD
6070 uint64_t reserved_2_63 : 62;
6071 uint64_t mask : 2; /**< Mask of IOBs which had a HOLEWR/BIGWR/VRTWR error */
6074 uint64_t reserved_2_63 : 62;
6077 struct cvmx_l2c_ver_iob_cn61xx {
6078 #ifdef __BIG_ENDIAN_BITFIELD
6079 uint64_t reserved_1_63 : 63;
6080 uint64_t mask : 1; /**< Mask of IOBs which had a HOLEWR/BIGWR/VRTWR error */
6083 uint64_t reserved_1_63 : 63;
6086 struct cvmx_l2c_ver_iob_cn61xx cn63xx;
6087 struct cvmx_l2c_ver_iob_cn61xx cn63xxp1;
6088 struct cvmx_l2c_ver_iob_cn61xx cn66xx;
6089 struct cvmx_l2c_ver_iob_s cn68xx;
6090 struct cvmx_l2c_ver_iob_s cn68xxp1;
6091 struct cvmx_l2c_ver_iob_cn61xx cnf71xx;
6093 typedef union cvmx_l2c_ver_iob cvmx_l2c_ver_iob_t;
6098 * L2C_VER_MSC = L2C Virtualization Miscellaneous Error Register (not in 63xx pass 1.x)
6100 * Description: records type of command associated with HOLEWR/BIGWR/VRTWR/VRTIDRNG/VRTADRNG interrupts
6102 union cvmx_l2c_ver_msc {
6104 struct cvmx_l2c_ver_msc_s {
6105 #ifdef __BIG_ENDIAN_BITFIELD
6106 uint64_t reserved_2_63 : 62;
6107 uint64_t invl2 : 1; /**< If set, a INVL2 caused HOLEWR/BIGWR/VRT* to set */
6108 uint64_t dwb : 1; /**< If set, a DWB caused HOLEWR/BIGWR/VRT* to set */
6112 uint64_t reserved_2_63 : 62;
6115 struct cvmx_l2c_ver_msc_s cn61xx;
6116 struct cvmx_l2c_ver_msc_s cn63xx;
6117 struct cvmx_l2c_ver_msc_s cn66xx;
6118 struct cvmx_l2c_ver_msc_s cn68xx;
6119 struct cvmx_l2c_ver_msc_s cn68xxp1;
6120 struct cvmx_l2c_ver_msc_s cnf71xx;
6122 typedef union cvmx_l2c_ver_msc cvmx_l2c_ver_msc_t;
6127 * L2C_VER_PP = L2C Virtualization ID PP Error Register
6129 * Description: records PPs associated with HOLEWR/BIGWR/VRTWR/VRTIDRNG/VRTADRNG interrupts.
6131 union cvmx_l2c_ver_pp {
6133 struct cvmx_l2c_ver_pp_s {
6134 #ifdef __BIG_ENDIAN_BITFIELD
6135 uint64_t reserved_32_63 : 32;
6136 uint64_t mask : 32; /**< Mask of PPs which had a HOLEWR/BIGWR/VRTWR error */
6139 uint64_t reserved_32_63 : 32;
6142 struct cvmx_l2c_ver_pp_cn61xx {
6143 #ifdef __BIG_ENDIAN_BITFIELD
6144 uint64_t reserved_4_63 : 60;
6145 uint64_t mask : 4; /**< Mask of PPs which had a HOLEWR/BIGWR/VRTWR error */
6148 uint64_t reserved_4_63 : 60;
6151 struct cvmx_l2c_ver_pp_cn63xx {
6152 #ifdef __BIG_ENDIAN_BITFIELD
6153 uint64_t reserved_6_63 : 58;
6154 uint64_t mask : 6; /**< Mask of PPs which had a HOLEWR/BIGWR/VRTWR error */
6157 uint64_t reserved_6_63 : 58;
6160 struct cvmx_l2c_ver_pp_cn63xx cn63xxp1;
6161 struct cvmx_l2c_ver_pp_cn66xx {
6162 #ifdef __BIG_ENDIAN_BITFIELD
6163 uint64_t reserved_10_63 : 54;
6164 uint64_t mask : 10; /**< Mask of PPs which had a HOLEWR/BIGWR/VRTWR error */
6167 uint64_t reserved_10_63 : 54;
6170 struct cvmx_l2c_ver_pp_s cn68xx;
6171 struct cvmx_l2c_ver_pp_s cn68xxp1;
6172 struct cvmx_l2c_ver_pp_cn61xx cnf71xx;
6174 typedef union cvmx_l2c_ver_pp cvmx_l2c_ver_pp_t;
6177 * cvmx_l2c_virtid_iob#
6179 * L2C_VIRTID_IOB = L2C IOB virtualization ID
6183 union cvmx_l2c_virtid_iobx {
6185 struct cvmx_l2c_virtid_iobx_s {
6186 #ifdef __BIG_ENDIAN_BITFIELD
6187 uint64_t reserved_14_63 : 50;
6188 uint64_t dwbid : 6; /**< Virtualization ID to use for DWB commands */
6189 uint64_t reserved_6_7 : 2;
6190 uint64_t id : 6; /**< Virtualization ID to use for non-DWB commands */
6193 uint64_t reserved_6_7 : 2;
6195 uint64_t reserved_14_63 : 50;
6198 struct cvmx_l2c_virtid_iobx_s cn61xx;
6199 struct cvmx_l2c_virtid_iobx_s cn63xx;
6200 struct cvmx_l2c_virtid_iobx_s cn63xxp1;
6201 struct cvmx_l2c_virtid_iobx_s cn66xx;
6202 struct cvmx_l2c_virtid_iobx_s cn68xx;
6203 struct cvmx_l2c_virtid_iobx_s cn68xxp1;
6204 struct cvmx_l2c_virtid_iobx_s cnf71xx;
6206 typedef union cvmx_l2c_virtid_iobx cvmx_l2c_virtid_iobx_t;
6209 * cvmx_l2c_virtid_pp#
6211 * L2C_VIRTID_PP = L2C PP virtualization ID
6215 union cvmx_l2c_virtid_ppx {
6217 struct cvmx_l2c_virtid_ppx_s {
6218 #ifdef __BIG_ENDIAN_BITFIELD
6219 uint64_t reserved_6_63 : 58;
6220 uint64_t id : 6; /**< Virtualization ID to use for this PP. */
6223 uint64_t reserved_6_63 : 58;
6226 struct cvmx_l2c_virtid_ppx_s cn61xx;
6227 struct cvmx_l2c_virtid_ppx_s cn63xx;
6228 struct cvmx_l2c_virtid_ppx_s cn63xxp1;
6229 struct cvmx_l2c_virtid_ppx_s cn66xx;
6230 struct cvmx_l2c_virtid_ppx_s cn68xx;
6231 struct cvmx_l2c_virtid_ppx_s cn68xxp1;
6232 struct cvmx_l2c_virtid_ppx_s cnf71xx;
6234 typedef union cvmx_l2c_virtid_ppx cvmx_l2c_virtid_ppx_t;
6239 * L2C_VRT_CTL = L2C Virtualization control register
6242 union cvmx_l2c_vrt_ctl {
6244 struct cvmx_l2c_vrt_ctl_s {
6245 #ifdef __BIG_ENDIAN_BITFIELD
6246 uint64_t reserved_9_63 : 55;
6247 uint64_t ooberr : 1; /**< Whether out of bounds writes are an error
6248 Determines virtualization hardware behavior for
6249 a store to an L2/DRAM address larger than
6250 indicated by MEMSZ. If OOBERR is set, all these
6251 stores (from any virtualization ID) are blocked. If
6252 OOBERR is clear, none of these stores are blocked. */
6253 uint64_t reserved_7_7 : 1;
6254 uint64_t memsz : 3; /**< Memory space coverage of L2C_VRT_MEM (encoded)
6261 6 = 64GB (**reserved in 63xx**)
6262 7 = 128GB (**reserved in 63xx**) */
6263 uint64_t numid : 3; /**< Number of allowed virtualization IDs (encoded)
6271 Violations of this limit causes
6272 L2C to set L2C_INT_REG[VRTIDRNG]. */
6273 uint64_t enable : 1; /**< Global virtualization enable
6274 When ENABLE is clear, stores are never blocked by
6275 the L2C virtualization hardware and none of NUMID,
6276 MEMSZ, OOBERR are used. */
6278 uint64_t enable : 1;
6281 uint64_t reserved_7_7 : 1;
6282 uint64_t ooberr : 1;
6283 uint64_t reserved_9_63 : 55;
6286 struct cvmx_l2c_vrt_ctl_s cn61xx;
6287 struct cvmx_l2c_vrt_ctl_s cn63xx;
6288 struct cvmx_l2c_vrt_ctl_s cn63xxp1;
6289 struct cvmx_l2c_vrt_ctl_s cn66xx;
6290 struct cvmx_l2c_vrt_ctl_s cn68xx;
6291 struct cvmx_l2c_vrt_ctl_s cn68xxp1;
6292 struct cvmx_l2c_vrt_ctl_s cnf71xx;
6294 typedef union cvmx_l2c_vrt_ctl cvmx_l2c_vrt_ctl_t;
6299 * L2C_VRT_MEM = L2C Virtualization Memory
6301 * Description: Virtualization memory mapped region. There are 1024 32b
6302 * byte-parity protected entries.
6305 * When a DATA bit is set in L2C_VRT_MEM when L2C virtualization is enabled, L2C
6306 * prevents the selected virtual machine from storing to the selected L2/DRAM region.
6307 * L2C uses L2C_VRT_MEM to block stores when:
6308 * - L2C_VRT_CTL[ENABLE] is set, and
6309 * - the address of the store exists in L2C+LMC internal L2/DRAM Address space
6310 * and is within the L2C_VRT_CTL[MEMSZ] bounds, and
6311 * - the virtID of the store is within the L2C_VRT_CTL[NUMID] bounds
6313 * L2C_VRT_MEM is never used for these L2C transactions which are always allowed:
6314 * - L2C CMI L2/DRAM transactions that cannot modify L2/DRAM, and
6315 * - any L2/DRAM transaction originated from L2C_XMC_CMD
6317 * L2C_VRT_MEM contains one DATA bit per L2C+LMC internal L2/DRAM region and virtID indicating whether the store
6318 * to the region is allowed. The granularity of the checking is the region size, which is:
6319 * 2 ^^ (L2C_VRT_CTL[NUMID]+L2C_VRT_CTL[MEMSZ]+16)
6320 * which ranges from a minimum of 64KB to a maximum of 256MB, depending on the size
6321 * of L2/DRAM that is protected and the number of virtual machines.
6323 * The L2C_VRT_MEM DATA bit that L2C uses is:
6325 * l2c_vrt_mem_bit_index = address >> (L2C_VRT_CTL[MEMSZ]+L2C_VRT_CTL[NUMID]+16); // address is a byte address
6326 * l2c_vrt_mem_bit_index = l2c_vrt_mem_bit_index | (virtID << (14-L2C_VRT_CTL[NUMID]));
6328 * L2C_VRT_MEM(l2c_vrt_mem_bit_index >> 5)[DATA<l2c_vrt_mem_bit_index & 0x1F>] is used
6330 * A specific example:
6332 * L2C_VRT_CTL[NUMID]=2 (i.e. 8 virtual machine ID's used)
6333 * L2C_VRT_CTL[MEMSZ]=4 (i.e. L2C_VRT_MEM covers 16 GB)
6335 * L2/DRAM region size (granularity) is 4MB
6337 * l2c_vrt_mem_bit_index<14:12> = virtID<2:0>
6338 * l2c_vrt_mem_bit_index<11:0> = address<33:22>
6340 * For L2/DRAM physical address 0x51000000 with virtID=5:
6341 * L2C_VRT_MEM648[DATA<4>] determines when the store is allowed (648 is decimal, not hex)
6343 union cvmx_l2c_vrt_memx {
6345 struct cvmx_l2c_vrt_memx_s {
6346 #ifdef __BIG_ENDIAN_BITFIELD
6347 uint64_t reserved_36_63 : 28;
6348 uint64_t parity : 4; /**< Parity to write into (or read from) the
6349 virtualization memory.
6350 PARITY<i> is the even parity of DATA<(i*8)+7:i*8> */
6351 uint64_t data : 32; /**< Data to write into (or read from) the
6352 virtualization memory. */
6355 uint64_t parity : 4;
6356 uint64_t reserved_36_63 : 28;
6359 struct cvmx_l2c_vrt_memx_s cn61xx;
6360 struct cvmx_l2c_vrt_memx_s cn63xx;
6361 struct cvmx_l2c_vrt_memx_s cn63xxp1;
6362 struct cvmx_l2c_vrt_memx_s cn66xx;
6363 struct cvmx_l2c_vrt_memx_s cn68xx;
6364 struct cvmx_l2c_vrt_memx_s cn68xxp1;
6365 struct cvmx_l2c_vrt_memx_s cnf71xx;
6367 typedef union cvmx_l2c_vrt_memx cvmx_l2c_vrt_memx_t;
6370 * cvmx_l2c_wpar_iob#
6372 * L2C_WPAR_IOB = L2C IOB way partitioning
6376 * (1) The read value of MASK will include bits set because of the L2C cripple fuses.
6379 union cvmx_l2c_wpar_iobx {
6381 struct cvmx_l2c_wpar_iobx_s {
6382 #ifdef __BIG_ENDIAN_BITFIELD
6383 uint64_t reserved_16_63 : 48;
6384 uint64_t mask : 16; /**< Way partitioning mask. (1 means do not use) */
6387 uint64_t reserved_16_63 : 48;
6390 struct cvmx_l2c_wpar_iobx_s cn61xx;
6391 struct cvmx_l2c_wpar_iobx_s cn63xx;
6392 struct cvmx_l2c_wpar_iobx_s cn63xxp1;
6393 struct cvmx_l2c_wpar_iobx_s cn66xx;
6394 struct cvmx_l2c_wpar_iobx_s cn68xx;
6395 struct cvmx_l2c_wpar_iobx_s cn68xxp1;
6396 struct cvmx_l2c_wpar_iobx_s cnf71xx;
6398 typedef union cvmx_l2c_wpar_iobx cvmx_l2c_wpar_iobx_t;
6403 * L2C_WPAR_PP = L2C PP way partitioning
6407 * (1) The read value of MASK will include bits set because of the L2C cripple fuses.
6410 union cvmx_l2c_wpar_ppx {
6412 struct cvmx_l2c_wpar_ppx_s {
6413 #ifdef __BIG_ENDIAN_BITFIELD
6414 uint64_t reserved_16_63 : 48;
6415 uint64_t mask : 16; /**< Way partitioning mask. (1 means do not use) */
6418 uint64_t reserved_16_63 : 48;
6421 struct cvmx_l2c_wpar_ppx_s cn61xx;
6422 struct cvmx_l2c_wpar_ppx_s cn63xx;
6423 struct cvmx_l2c_wpar_ppx_s cn63xxp1;
6424 struct cvmx_l2c_wpar_ppx_s cn66xx;
6425 struct cvmx_l2c_wpar_ppx_s cn68xx;
6426 struct cvmx_l2c_wpar_ppx_s cn68xxp1;
6427 struct cvmx_l2c_wpar_ppx_s cnf71xx;
6429 typedef union cvmx_l2c_wpar_ppx cvmx_l2c_wpar_ppx_t;
6434 * L2C_XMC_PFC = L2C XMC Performance Counter(s)
6437 union cvmx_l2c_xmcx_pfc {
6439 struct cvmx_l2c_xmcx_pfc_s {
6440 #ifdef __BIG_ENDIAN_BITFIELD
6441 uint64_t count : 64; /**< Current counter value */
6443 uint64_t count : 64;
6446 struct cvmx_l2c_xmcx_pfc_s cn61xx;
6447 struct cvmx_l2c_xmcx_pfc_s cn63xx;
6448 struct cvmx_l2c_xmcx_pfc_s cn63xxp1;
6449 struct cvmx_l2c_xmcx_pfc_s cn66xx;
6450 struct cvmx_l2c_xmcx_pfc_s cn68xx;
6451 struct cvmx_l2c_xmcx_pfc_s cn68xxp1;
6452 struct cvmx_l2c_xmcx_pfc_s cnf71xx;
6454 typedef union cvmx_l2c_xmcx_pfc cvmx_l2c_xmcx_pfc_t;
6459 * L2C_XMC_CMD = L2C XMC command register
6463 * (1) the XMC command chosen MUST NOT be a IOB destined command or operation is UNDEFINED.
6465 * (2) the XMC command will have sid forced to IOB, did forced to L2C, no virtualization checks
6466 * performed (always pass), and xmdmsk forced to 0. Note that this implies that commands which
6467 * REQUIRE an XMD cycle (STP,STC,SAA,FAA,FAS) should not be used or the results are unpredictable.
6468 * The sid=IOB means that the way partitioning used for the command is L2C_WPAR_IOB.
6469 * None of L2C_QOS_IOB, L2C_QOS_PP, L2C_VIRTID_IOB, L2C_VIRTID_PP are used for these commands.
6471 * (3) any responses generated by the XMC command will be forced to PP7 (a non-existant PP) effectively
6472 * causing them to be ignored. Generated STINs, however, will correctly invalidate the required
6475 * (4) any L2D read generated by the XMC command will record the syndrome information in
6476 * L2C_TAD_ECC0/1. If ECC is disabled prior to the CSR write this provides the ability to read the
6477 * ECC bits directly. If ECC is not disabled this should log 0's (assuming no ECC errors were
6478 * found in the block).
6480 * (5) A write which arrives while the INUSE bit is set will block until the INUSE bit clears. This
6481 * gives software 2 options when needing to issue a stream of writes to L2C_XMC_CMD: polling on the
6482 * INUSE bit, or allowing HW to handle the interlock -- at the expense of locking up the RSL bus
6483 * for potentially tens of cycles at a time while waiting for an available LFB/VAB entry.
6485 * (6) The address written to L2C_XMC_CMD is a 38-bit OCTEON physical address. L2C performs hole removal and
6486 * index aliasing (if enabled) on the written address and uses that for the command. This hole
6487 * removed/index aliased 38-bit address is what is returned on a read of the L2C_XMC_CMD register.
6489 union cvmx_l2c_xmc_cmd {
6491 struct cvmx_l2c_xmc_cmd_s {
6492 #ifdef __BIG_ENDIAN_BITFIELD
6493 uint64_t inuse : 1; /**< Set to 1 by HW upon receiving a write, cleared when
6494 command has issued (not necessarily completed, but
6495 ordered relative to other traffic) and HW can accept
6497 uint64_t cmd : 6; /**< Command to use for simulated XMC request
6498 a new request can be accepted */
6499 uint64_t reserved_38_56 : 19;
6500 uint64_t addr : 38; /**< Address to use for simulated XMC request (see Note 6) */
6503 uint64_t reserved_38_56 : 19;
6508 struct cvmx_l2c_xmc_cmd_s cn61xx;
6509 struct cvmx_l2c_xmc_cmd_s cn63xx;
6510 struct cvmx_l2c_xmc_cmd_s cn63xxp1;
6511 struct cvmx_l2c_xmc_cmd_s cn66xx;
6512 struct cvmx_l2c_xmc_cmd_s cn68xx;
6513 struct cvmx_l2c_xmc_cmd_s cn68xxp1;
6514 struct cvmx_l2c_xmc_cmd_s cnf71xx;
6516 typedef union cvmx_l2c_xmc_cmd cvmx_l2c_xmc_cmd_t;
6521 * L2C_XMD_PFC = L2C XMD Performance Counter(s)
6524 union cvmx_l2c_xmdx_pfc {
6526 struct cvmx_l2c_xmdx_pfc_s {
6527 #ifdef __BIG_ENDIAN_BITFIELD
6528 uint64_t count : 64; /**< Current counter value */
6530 uint64_t count : 64;
6533 struct cvmx_l2c_xmdx_pfc_s cn61xx;
6534 struct cvmx_l2c_xmdx_pfc_s cn63xx;
6535 struct cvmx_l2c_xmdx_pfc_s cn63xxp1;
6536 struct cvmx_l2c_xmdx_pfc_s cn66xx;
6537 struct cvmx_l2c_xmdx_pfc_s cn68xx;
6538 struct cvmx_l2c_xmdx_pfc_s cn68xxp1;
6539 struct cvmx_l2c_xmdx_pfc_s cnf71xx;
6541 typedef union cvmx_l2c_xmdx_pfc cvmx_l2c_xmdx_pfc_t;