1 #ifndef __BDK_CSRS_L2C_H__
2 #define __BDK_CSRS_L2C_H__
3 /* This file is auto-generated. Do not edit */
4
5 /***********************license start***************
6 * Copyright (c) 2003-2017 Cavium Inc. ([email protected]). All rights
7 * reserved.
8 *
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are
12 * met:
13 *
14 * * Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 *
17 * * Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
21
22 * * Neither the name of Cavium Inc. nor the names of
23 * its contributors may be used to endorse or promote products
24 * derived from this software without specific prior written
25 * permission.
26
27 * This Software, including technical data, may be subject to U.S. export control
28 * laws, including the U.S. Export Administration Act and its associated
29 * regulations, and may be subject to export or import regulations in other
30 * countries.
31
32 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
33 * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
34 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
35 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
36 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
37 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
38 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
39 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
40 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
41 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
42 ***********************license end**************************************/
43
44
45 /**
46 * @file
47 *
48 * Configuration and status register (CSR) address and type definitions for
49 * Cavium L2C.
50 *
51 * This file is auto generated. Do not edit.
52 *
53 */
54
55 /**
56 * Enumeration inv_cmd_e
57 *
58 * INTERNAL: INV Command Enumeration
59 *
60 * Enumerates the different INV command encodings.
61 */
62 #define BDK_INV_CMD_E_ALLEX (0xc)
63 #define BDK_INV_CMD_E_ASIDE1 (0xd)
64 #define BDK_INV_CMD_E_GBLSYNC (0xf)
65 #define BDK_INV_CMD_E_IALLU (9)
66 #define BDK_INV_CMD_E_INV (8)
67 #define BDK_INV_CMD_E_IPAS2E1 (7)
68 #define BDK_INV_CMD_E_IVAU (4)
69 #define BDK_INV_CMD_E_NOP (0)
70 #define BDK_INV_CMD_E_SEV (0xe)
71 #define BDK_INV_CMD_E_VAAE1 (6)
72 #define BDK_INV_CMD_E_VAEX (5)
73 #define BDK_INV_CMD_E_VMALLE1 (0xa)
74 #define BDK_INV_CMD_E_VMALLS12 (0xb)
75
76 /**
77 * Enumeration ioc_cmd_e
78 *
79 * INTERNAL: IOC Command Enumeration
80 *
81 * Enumerates the different IOC command encodings.
82 */
83 #define BDK_IOC_CMD_E_ADDR (6)
84 #define BDK_IOC_CMD_E_IAADD (0xc)
85 #define BDK_IOC_CMD_E_IACAS (0xa)
86 #define BDK_IOC_CMD_E_IACLR (0xd)
87 #define BDK_IOC_CMD_E_IASET (0xe)
88 #define BDK_IOC_CMD_E_IASWP (0xb)
89 #define BDK_IOC_CMD_E_IDLE (0)
90 #define BDK_IOC_CMD_E_LMTST (3)
91 #define BDK_IOC_CMD_E_LOAD (2)
92 #define BDK_IOC_CMD_E_SLILD (8)
93 #define BDK_IOC_CMD_E_SLIST (7)
94 #define BDK_IOC_CMD_E_STORE (1)
95 #define BDK_IOC_CMD_E_STOREP (9)
96
97 /**
98 * Enumeration ior_cmd_e
99 *
100 * INTERNAL: IOR Command Enumeration
101 *
102 * Enumerates the different IOR command encodings.
103 */
104 #define BDK_IOR_CMD_E_DATA (1)
105 #define BDK_IOR_CMD_E_IDLE (0)
106 #define BDK_IOR_CMD_E_SLIRSP (3)
107
108 /**
109 * Enumeration l2c_bar_e
110 *
111 * L2C Base Address Register Enumeration
112 * Enumerates the base address registers.
113 */
114 #define BDK_L2C_BAR_E_L2C_PF_BAR0 (0x87e080800000ll)
115 #define BDK_L2C_BAR_E_L2C_PF_BAR0_SIZE 0x800000ull
116
117 /**
118 * Enumeration l2c_dat_errprio_e
119 *
120 * L2C Quad Error Priority Enumeration
121 * Enumerates the different quad error priorities.
122 */
123 #define BDK_L2C_DAT_ERRPRIO_E_FBFDBE (4)
124 #define BDK_L2C_DAT_ERRPRIO_E_FBFSBE (1)
125 #define BDK_L2C_DAT_ERRPRIO_E_L2DDBE (6)
126 #define BDK_L2C_DAT_ERRPRIO_E_L2DSBE (3)
127 #define BDK_L2C_DAT_ERRPRIO_E_NBE (0)
128 #define BDK_L2C_DAT_ERRPRIO_E_SBFDBE (5)
129 #define BDK_L2C_DAT_ERRPRIO_E_SBFSBE (2)
130
131 /**
132 * Enumeration l2c_tad_prf_sel_e
133 *
134 * L2C TAD Performance Counter Select Enumeration
135 * Enumerates the different TAD performance counter selects.
136 */
137 #define BDK_L2C_TAD_PRF_SEL_E_L2T_HIT (1)
138 #define BDK_L2C_TAD_PRF_SEL_E_L2T_MISS (2)
139 #define BDK_L2C_TAD_PRF_SEL_E_L2T_NOALLOC (3)
140 #define BDK_L2C_TAD_PRF_SEL_E_L2_OPEN_OCI (0x48)
141 #define BDK_L2C_TAD_PRF_SEL_E_L2_RTG_VIC (0x44)
142 #define BDK_L2C_TAD_PRF_SEL_E_L2_VIC (4)
143 #define BDK_L2C_TAD_PRF_SEL_E_LFB_OCC (7)
144 #define BDK_L2C_TAD_PRF_SEL_E_LMC_WR (0x4e)
145 #define BDK_L2C_TAD_PRF_SEL_E_LMC_WR_SBLKDTY (0x4f)
146 #define BDK_L2C_TAD_PRF_SEL_E_LOOKUP (0x40)
147 #define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_ALL (0x44)
148 #define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_MIB (0x43)
149 #define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_XMC_LCL (0x41)
150 #define BDK_L2C_TAD_PRF_SEL_E_LOOKUP_XMC_RMT (0x42)
151 #define BDK_L2C_TAD_PRF_SEL_E_NONE (0)
152 #define BDK_L2C_TAD_PRF_SEL_E_OCI_FLDX_TAG_E_DAT (0x6d)
153 #define BDK_L2C_TAD_PRF_SEL_E_OCI_FLDX_TAG_E_NODAT (0x6c)
154 #define BDK_L2C_TAD_PRF_SEL_E_OCI_FWD_CYC_HIT (0x69)
155 #define BDK_L2C_TAD_PRF_SEL_E_OCI_FWD_RACE (0x6a)
156 #define BDK_L2C_TAD_PRF_SEL_E_OCI_HAKS (0x6b)
157 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RLDD (0x6e)
158 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RLDD_PEMD (0x6f)
159 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RRQ_DAT_CNT (0x70)
160 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RRQ_DAT_DMASK (0x71)
161 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_CNT (0x72)
162 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_DMASK (0x73)
163 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_VICD_CNT (0x74)
164 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RSP_DAT_VICD_DMASK (0x75)
165 #define BDK_L2C_TAD_PRF_SEL_E_OCI_RTG_WAIT (0x68)
166 #define BDK_L2C_TAD_PRF_SEL_E_OPEN_CCPI (0xa)
167 #define BDK_L2C_TAD_PRF_SEL_E_QDX_BNKS(a) (0x82 + 0x10 * (a))
168 #define BDK_L2C_TAD_PRF_SEL_E_QDX_IDX(a) (0x80 + 0x10 * (a))
169 #define BDK_L2C_TAD_PRF_SEL_E_QDX_RDAT(a) (0x81 + 0x10 * (a))
170 #define BDK_L2C_TAD_PRF_SEL_E_QDX_WDAT(a) (0x83 + 0x10 * (a))
171 #define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC (0x5d)
172 #define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_EVICT (0x76)
173 #define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_HIT (0x5e)
174 #define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_HITWB (0x5f)
175 #define BDK_L2C_TAD_PRF_SEL_E_RTG_ALC_VIC (0x77)
176 #define BDK_L2C_TAD_PRF_SEL_E_RTG_HIT (0x41)
177 #define BDK_L2C_TAD_PRF_SEL_E_RTG_MISS (0x42)
178 #define BDK_L2C_TAD_PRF_SEL_E_SC_FAIL (5)
179 #define BDK_L2C_TAD_PRF_SEL_E_SC_PASS (6)
180 #define BDK_L2C_TAD_PRF_SEL_E_STC_LCL (0x64)
181 #define BDK_L2C_TAD_PRF_SEL_E_STC_LCL_FAIL (0x65)
182 #define BDK_L2C_TAD_PRF_SEL_E_STC_RMT (0x62)
183 #define BDK_L2C_TAD_PRF_SEL_E_STC_RMT_FAIL (0x63)
184 #define BDK_L2C_TAD_PRF_SEL_E_STC_TOTAL (0x60)
185 #define BDK_L2C_TAD_PRF_SEL_E_STC_TOTAL_FAIL (0x61)
186 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_HIT (0x48)
187 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_CLNVIC (0x59)
188 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_DTYVIC (0x5a)
189 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_LCL_EVICT (0x58)
190 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_MISS (0x49)
191 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_NALC (0x4a)
192 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RMT_EVICT (0x5b)
193 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RMT_VIC (0x5c)
194 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HIT (0x50)
195 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HITE (0x51)
196 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_HITS (0x52)
197 #define BDK_L2C_TAD_PRF_SEL_E_TAG_ALC_RTG_MISS (0x53)
198 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_HIT (0x4b)
199 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_MISS (0x4c)
200 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HIT (0x54)
201 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HITE (0x56)
202 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_HITS (0x57)
203 #define BDK_L2C_TAD_PRF_SEL_E_TAG_NALC_RTG_MISS (0x55)
204 #define BDK_L2C_TAD_PRF_SEL_E_WAIT_LFB (8)
205 #define BDK_L2C_TAD_PRF_SEL_E_WAIT_VAB (9)
206
207 /**
208 * Enumeration l2c_tag_errprio_e
209 *
210 * L2C Tag Error Priority Enumeration
211 * Enumerates the different TAG error priorities.
212 */
213 #define BDK_L2C_TAG_ERRPRIO_E_DBE (3)
214 #define BDK_L2C_TAG_ERRPRIO_E_NBE (0)
215 #define BDK_L2C_TAG_ERRPRIO_E_NOWAY (1)
216 #define BDK_L2C_TAG_ERRPRIO_E_SBE (2)
217
218 /**
219 * Enumeration oci_ireq_cmd_e
220 *
221 * INTERNAL: OCI IREQ Command Enumeration
222 */
223 #define BDK_OCI_IREQ_CMD_E_IAADD (0x10)
224 #define BDK_OCI_IREQ_CMD_E_IACAS (0x15)
225 #define BDK_OCI_IREQ_CMD_E_IACLR (0x12)
226 #define BDK_OCI_IREQ_CMD_E_IASET (0x13)
227 #define BDK_OCI_IREQ_CMD_E_IASWP (0x14)
228 #define BDK_OCI_IREQ_CMD_E_IDLE (0x1f)
229 #define BDK_OCI_IREQ_CMD_E_IOBADDR (6)
230 #define BDK_OCI_IREQ_CMD_E_IOBADDRA (7)
231 #define BDK_OCI_IREQ_CMD_E_IOBLD (0)
232 #define BDK_OCI_IREQ_CMD_E_IOBST (2)
233 #define BDK_OCI_IREQ_CMD_E_IOBSTA (3)
234 #define BDK_OCI_IREQ_CMD_E_IOBSTP (4)
235 #define BDK_OCI_IREQ_CMD_E_IOBSTPA (5)
236 #define BDK_OCI_IREQ_CMD_E_LMTST (8)
237 #define BDK_OCI_IREQ_CMD_E_LMTSTA (9)
238 #define BDK_OCI_IREQ_CMD_E_SLILD (0x1c)
239 #define BDK_OCI_IREQ_CMD_E_SLIST (0x1d)
240
241 /**
242 * Enumeration oci_irsp_cmd_e
243 *
244 * INTERNAL: OCI IRSP Command Enumeration
245 */
246 #define BDK_OCI_IRSP_CMD_E_IDLE (0x1f)
247 #define BDK_OCI_IRSP_CMD_E_IOBACK (1)
248 #define BDK_OCI_IRSP_CMD_E_IOBRSP (0)
249 #define BDK_OCI_IRSP_CMD_E_SLIRSP (2)
250
251 /**
252 * Enumeration oci_mfwd_cmd_e
253 *
254 * INTERNAL: OCI MFWD Command Enumeration
255 */
256 #define BDK_OCI_MFWD_CMD_E_FEVX_EH (0xb)
257 #define BDK_OCI_MFWD_CMD_E_FEVX_OH (0xc)
258 #define BDK_OCI_MFWD_CMD_E_FLDRO_E (0)
259 #define BDK_OCI_MFWD_CMD_E_FLDRO_O (1)
260 #define BDK_OCI_MFWD_CMD_E_FLDRS_E (2)
261 #define BDK_OCI_MFWD_CMD_E_FLDRS_EH (4)
262 #define BDK_OCI_MFWD_CMD_E_FLDRS_O (3)
263 #define BDK_OCI_MFWD_CMD_E_FLDRS_OH (5)
264 #define BDK_OCI_MFWD_CMD_E_FLDT_E (6)
265 #define BDK_OCI_MFWD_CMD_E_FLDX_E (7)
266 #define BDK_OCI_MFWD_CMD_E_FLDX_EH (9)
267 #define BDK_OCI_MFWD_CMD_E_FLDX_O (8)
268 #define BDK_OCI_MFWD_CMD_E_FLDX_OH (0xa)
269 #define BDK_OCI_MFWD_CMD_E_IDLE (0x1f)
270 #define BDK_OCI_MFWD_CMD_E_SINV (0xd)
271 #define BDK_OCI_MFWD_CMD_E_SINV_H (0xe)
272
273 /**
274 * Enumeration oci_mreq_cmd_e
275 *
276 * INTERNAL: OCI MREQ Command Enumeration
277 */
278 #define BDK_OCI_MREQ_CMD_E_GINV (0x14)
279 #define BDK_OCI_MREQ_CMD_E_GSYNC (0x18)
280 #define BDK_OCI_MREQ_CMD_E_IDLE (0x1f)
281 #define BDK_OCI_MREQ_CMD_E_RADD (0xd)
282 #define BDK_OCI_MREQ_CMD_E_RC2D_O (6)
283 #define BDK_OCI_MREQ_CMD_E_RC2D_S (7)
284 #define BDK_OCI_MREQ_CMD_E_RCAS (0x13)
285 #define BDK_OCI_MREQ_CMD_E_RCAS_O (0x15)
286 #define BDK_OCI_MREQ_CMD_E_RCAS_S (0x16)
287 #define BDK_OCI_MREQ_CMD_E_RCLR (0x12)
288 #define BDK_OCI_MREQ_CMD_E_RDEC (0xf)
289 #define BDK_OCI_MREQ_CMD_E_REOR (0xb)
290 #define BDK_OCI_MREQ_CMD_E_RINC (0xe)
291 #define BDK_OCI_MREQ_CMD_E_RLDD (0)
292 #define BDK_OCI_MREQ_CMD_E_RLDI (1)
293 #define BDK_OCI_MREQ_CMD_E_RLDT (2)
294 #define BDK_OCI_MREQ_CMD_E_RLDWB (4)
295 #define BDK_OCI_MREQ_CMD_E_RLDX (5)
296 #define BDK_OCI_MREQ_CMD_E_RLDY (3)
297 #define BDK_OCI_MREQ_CMD_E_RSET (0x11)
298 #define BDK_OCI_MREQ_CMD_E_RSMAX (0x1b)
299 #define BDK_OCI_MREQ_CMD_E_RSMIN (0x1c)
300 #define BDK_OCI_MREQ_CMD_E_RSTC (0x17)
301 #define BDK_OCI_MREQ_CMD_E_RSTC_O (0x19)
302 #define BDK_OCI_MREQ_CMD_E_RSTC_S (0x1a)
303 #define BDK_OCI_MREQ_CMD_E_RSTP (0xa)
304 #define BDK_OCI_MREQ_CMD_E_RSTT (8)
305 #define BDK_OCI_MREQ_CMD_E_RSTY (9)
306 #define BDK_OCI_MREQ_CMD_E_RSWP (0x10)
307 #define BDK_OCI_MREQ_CMD_E_RUMAX (0x1d)
308 #define BDK_OCI_MREQ_CMD_E_RUMIN (0x1e)
309
310 /**
311 * Enumeration oci_mrsp_cmd_e
312 *
313 * INTERNAL: OCI MRSP Command Enumeration
314 */
315 #define BDK_OCI_MRSP_CMD_E_GSDN (0x18)
316 #define BDK_OCI_MRSP_CMD_E_HAKD (4)
317 #define BDK_OCI_MRSP_CMD_E_HAKI (6)
318 #define BDK_OCI_MRSP_CMD_E_HAKN_S (5)
319 #define BDK_OCI_MRSP_CMD_E_HAKS (7)
320 #define BDK_OCI_MRSP_CMD_E_HAKV (8)
321 #define BDK_OCI_MRSP_CMD_E_IDLE (0x1f)
322 #define BDK_OCI_MRSP_CMD_E_P2DF (0xd)
323 #define BDK_OCI_MRSP_CMD_E_PACK (0xc)
324 #define BDK_OCI_MRSP_CMD_E_PATM (0xb)
325 #define BDK_OCI_MRSP_CMD_E_PEMD (0xa)
326 #define BDK_OCI_MRSP_CMD_E_PSHA (9)
327 #define BDK_OCI_MRSP_CMD_E_VICC (1)
328 #define BDK_OCI_MRSP_CMD_E_VICD (0)
329 #define BDK_OCI_MRSP_CMD_E_VICDHI (3)
330 #define BDK_OCI_MRSP_CMD_E_VICS (2)
331
332 /**
333 * Enumeration rsc_cmd_e
334 *
335 * INTERNAL: RSC Command Enumeration
336 *
337 * Enumerates the different RSC command encodings.
338 */
339 #define BDK_RSC_CMD_E_FLDN (3)
340 #define BDK_RSC_CMD_E_GSDN (2)
341 #define BDK_RSC_CMD_E_IACK (5)
342 #define BDK_RSC_CMD_E_IFDN (1)
343 #define BDK_RSC_CMD_E_NOP (0)
344 #define BDK_RSC_CMD_E_SCDN (6)
345 #define BDK_RSC_CMD_E_SCFL (7)
346 #define BDK_RSC_CMD_E_STDN (4)
347
348 /**
349 * Enumeration xmc_cmd_e
350 *
351 * INTERNAL: XMC Command Enumeration
352 *
353 * Enumerates the different XMC command encodings.
354 */
355 #define BDK_XMC_CMD_E_AADD (0x28)
356 #define BDK_XMC_CMD_E_ACAS (0x26)
357 #define BDK_XMC_CMD_E_ACLR (0x29)
358 #define BDK_XMC_CMD_E_ADEC (0x25)
359 #define BDK_XMC_CMD_E_AEOR (0x2a)
360 #define BDK_XMC_CMD_E_AINC (0x24)
361 #define BDK_XMC_CMD_E_ALLEX (0x3c)
362 #define BDK_XMC_CMD_E_ASET (0x2b)
363 #define BDK_XMC_CMD_E_ASIDE1 (0x3d)
364 #define BDK_XMC_CMD_E_ASMAX (0x2c)
365 #define BDK_XMC_CMD_E_ASMIN (0x2d)
366 #define BDK_XMC_CMD_E_ASWP (0x27)
367 #define BDK_XMC_CMD_E_AUMAX (0x2e)
368 #define BDK_XMC_CMD_E_AUMIN (0x2f)
369 #define BDK_XMC_CMD_E_DWB (5)
370 #define BDK_XMC_CMD_E_GBLSYNC (0x3f)
371 #define BDK_XMC_CMD_E_IAADD (0x68)
372 #define BDK_XMC_CMD_E_IACAS (0x66)
373 #define BDK_XMC_CMD_E_IACLR (0x69)
374 #define BDK_XMC_CMD_E_IALLU (0x39)
375 #define BDK_XMC_CMD_E_IASET (0x6b)
376 #define BDK_XMC_CMD_E_IASWP (0x67)
377 #define BDK_XMC_CMD_E_INVL2 (0x1c)
378 #define BDK_XMC_CMD_E_IOBADDR (0x43)
379 #define BDK_XMC_CMD_E_IOBADDRA (0x53)
380 #define BDK_XMC_CMD_E_IOBLD (0x40)
381 #define BDK_XMC_CMD_E_IOBST (0x41)
382 #define BDK_XMC_CMD_E_IOBSTA (0x51)
383 #define BDK_XMC_CMD_E_IOBSTP (0x42)
384 #define BDK_XMC_CMD_E_IOBSTPA (0x52)
385 #define BDK_XMC_CMD_E_IPAS2E1 (0x37)
386 #define BDK_XMC_CMD_E_IVAU (0x34)
387 #define BDK_XMC_CMD_E_LCKL2 (0x1f)
388 #define BDK_XMC_CMD_E_LDD (8)
389 #define BDK_XMC_CMD_E_LDDT (0xc)
390 #define BDK_XMC_CMD_E_LDE (0xb)
391 #define BDK_XMC_CMD_E_LDI (2)
392 #define BDK_XMC_CMD_E_LDP (7)
393 #define BDK_XMC_CMD_E_LDT (1)
394 #define BDK_XMC_CMD_E_LDWB (0xd)
395 #define BDK_XMC_CMD_E_LDY (6)
396 #define BDK_XMC_CMD_E_LMTST (0x45)
397 #define BDK_XMC_CMD_E_LMTSTA (0x55)
398 #define BDK_XMC_CMD_E_LTGL2I (0x19)
399 #define BDK_XMC_CMD_E_NOP (0)
400 #define BDK_XMC_CMD_E_PL2 (3)
401 #define BDK_XMC_CMD_E_PL2T (0x16)
402 #define BDK_XMC_CMD_E_PS2 (0xa)
403 #define BDK_XMC_CMD_E_PS2T (0x17)
404 #define BDK_XMC_CMD_E_PSL1 (9)
405 #define BDK_XMC_CMD_E_RPL2 (4)
406 #define BDK_XMC_CMD_E_RSTP (0xf)
407 #define BDK_XMC_CMD_E_SEV (0x3e)
408 #define BDK_XMC_CMD_E_STC (0x13)
409 #define BDK_XMC_CMD_E_STF (0x10)
410 #define BDK_XMC_CMD_E_STFIL1 (0x14)
411 #define BDK_XMC_CMD_E_STGL2I (0x1a)
412 #define BDK_XMC_CMD_E_STP (0x12)
413 #define BDK_XMC_CMD_E_STT (0x11)
414 #define BDK_XMC_CMD_E_STTIL1 (0x15)
415 #define BDK_XMC_CMD_E_STY (0xe)
416 #define BDK_XMC_CMD_E_VAAE1 (0x36)
417 #define BDK_XMC_CMD_E_VAEX (0x35)
418 #define BDK_XMC_CMD_E_VMALLE1 (0x3a)
419 #define BDK_XMC_CMD_E_VMALLS12 (0x3b)
420 #define BDK_XMC_CMD_E_WBIL2 (0x1d)
421 #define BDK_XMC_CMD_E_WBIL2I (0x18)
422 #define BDK_XMC_CMD_E_WBL2 (0x1e)
423 #define BDK_XMC_CMD_E_WBL2I (0x1b)
424
425 /**
426 * Register (RSL) l2c_asc_region#_attr
427 *
428 * L2C Address Space Control Region Attributes Registers
429 */
430 union bdk_l2c_asc_regionx_attr
431 {
432 uint64_t u;
433 struct bdk_l2c_asc_regionx_attr_s
434 {
435 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
436 uint64_t reserved_2_63 : 62;
437 uint64_t s_en : 1; /**< [ 1: 1](R/W) Enables secure access to region.
438 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
439 uint64_t ns_en : 1; /**< [ 0: 0](R/W) Enables nonsecure access to region.
440 Undefined if both [S_EN] and [NS_EN] are set for the same region.
441 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
442 #else /* Word 0 - Little Endian */
443 uint64_t ns_en : 1; /**< [ 0: 0](R/W) Enables nonsecure access to region.
444 Undefined if both [S_EN] and [NS_EN] are set for the same region.
445 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
446 uint64_t s_en : 1; /**< [ 1: 1](R/W) Enables secure access to region.
447 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
448 uint64_t reserved_2_63 : 62;
449 #endif /* Word 0 - End */
450 } s;
451 struct bdk_l2c_asc_regionx_attr_cn81xx
452 {
453 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
454 uint64_t reserved_2_63 : 62;
455 uint64_t s_en : 1; /**< [ 1: 1](R/W) Enables secure access to region.
456 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
457 uint64_t ns_en : 1; /**< [ 0: 0](R/W) Enables nonsecure access to region.
458 Undefined if both [S_EN] and [NS_EN] are set for the same region.
459
460 Internal:
461 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
462 #else /* Word 0 - Little Endian */
463 uint64_t ns_en : 1; /**< [ 0: 0](R/W) Enables nonsecure access to region.
464 Undefined if both [S_EN] and [NS_EN] are set for the same region.
465
466 Internal:
467 See also DFA_ASC_REGION()_ATTR[NS_EN]. */
468 uint64_t s_en : 1; /**< [ 1: 1](R/W) Enables secure access to region.
469 Undefined if both [S_EN] and [NS_EN] are set for the same region. */
470 uint64_t reserved_2_63 : 62;
471 #endif /* Word 0 - End */
472 } cn81xx;
473 /* struct bdk_l2c_asc_regionx_attr_s cn88xx; */
474 /* struct bdk_l2c_asc_regionx_attr_cn81xx cn83xx; */
475 };
476 typedef union bdk_l2c_asc_regionx_attr bdk_l2c_asc_regionx_attr_t;
477
478 static inline uint64_t BDK_L2C_ASC_REGIONX_ATTR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_ASC_REGIONX_ATTR(unsigned long a)479 static inline uint64_t BDK_L2C_ASC_REGIONX_ATTR(unsigned long a)
480 {
481 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
482 return 0x87e080801010ll + 0x40ll * ((a) & 0x3);
483 __bdk_csr_fatal("L2C_ASC_REGIONX_ATTR", 1, a, 0, 0, 0);
484 }
485
486 #define typedef_BDK_L2C_ASC_REGIONX_ATTR(a) bdk_l2c_asc_regionx_attr_t
487 #define bustype_BDK_L2C_ASC_REGIONX_ATTR(a) BDK_CSR_TYPE_RSL
488 #define basename_BDK_L2C_ASC_REGIONX_ATTR(a) "L2C_ASC_REGIONX_ATTR"
489 #define device_bar_BDK_L2C_ASC_REGIONX_ATTR(a) 0x0 /* PF_BAR0 */
490 #define busnum_BDK_L2C_ASC_REGIONX_ATTR(a) (a)
491 #define arguments_BDK_L2C_ASC_REGIONX_ATTR(a) (a),-1,-1,-1
492
493 /**
494 * Register (RSL) l2c_asc_region#_end
495 *
496 * L2C Address Space Control Region End Address Registers
497 */
498 union bdk_l2c_asc_regionx_end
499 {
500 uint64_t u;
501 struct bdk_l2c_asc_regionx_end_s
502 {
503 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
504 uint64_t reserved_40_63 : 24;
505 uint64_t addr : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the inclusive end of the corresponding ASC
506 region.
507 Note that the region includes this address.
508 Software must ensure that regions do not overlap.
509 To specify an empty region, clear both the [S_EN] and [NS_EN] fields of
510 the corresponding L2C_ASC_REGION()_ATTR register. */
511 uint64_t reserved_0_19 : 20;
512 #else /* Word 0 - Little Endian */
513 uint64_t reserved_0_19 : 20;
514 uint64_t addr : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the inclusive end of the corresponding ASC
515 region.
516 Note that the region includes this address.
517 Software must ensure that regions do not overlap.
518 To specify an empty region, clear both the [S_EN] and [NS_EN] fields of
519 the corresponding L2C_ASC_REGION()_ATTR register. */
520 uint64_t reserved_40_63 : 24;
521 #endif /* Word 0 - End */
522 } s;
523 /* struct bdk_l2c_asc_regionx_end_s cn; */
524 };
525 typedef union bdk_l2c_asc_regionx_end bdk_l2c_asc_regionx_end_t;
526
527 static inline uint64_t BDK_L2C_ASC_REGIONX_END(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_ASC_REGIONX_END(unsigned long a)528 static inline uint64_t BDK_L2C_ASC_REGIONX_END(unsigned long a)
529 {
530 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
531 return 0x87e080801008ll + 0x40ll * ((a) & 0x3);
532 __bdk_csr_fatal("L2C_ASC_REGIONX_END", 1, a, 0, 0, 0);
533 }
534
535 #define typedef_BDK_L2C_ASC_REGIONX_END(a) bdk_l2c_asc_regionx_end_t
536 #define bustype_BDK_L2C_ASC_REGIONX_END(a) BDK_CSR_TYPE_RSL
537 #define basename_BDK_L2C_ASC_REGIONX_END(a) "L2C_ASC_REGIONX_END"
538 #define device_bar_BDK_L2C_ASC_REGIONX_END(a) 0x0 /* PF_BAR0 */
539 #define busnum_BDK_L2C_ASC_REGIONX_END(a) (a)
540 #define arguments_BDK_L2C_ASC_REGIONX_END(a) (a),-1,-1,-1
541
542 /**
543 * Register (RSL) l2c_asc_region#_start
544 *
545 * L2C Address Space Control Region Start Address Registers
546 */
547 union bdk_l2c_asc_regionx_start
548 {
549 uint64_t u;
550 struct bdk_l2c_asc_regionx_start_s
551 {
552 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
553 uint64_t reserved_40_63 : 24;
554 uint64_t addr : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the start of the corresponding ASC region.
555 Software must ensure that regions do not overlap. */
556 uint64_t reserved_0_19 : 20;
557 #else /* Word 0 - Little Endian */
558 uint64_t reserved_0_19 : 20;
559 uint64_t addr : 20; /**< [ 39: 20](R/W) Node-local physical address \<39:20\> marking the start of the corresponding ASC region.
560 Software must ensure that regions do not overlap. */
561 uint64_t reserved_40_63 : 24;
562 #endif /* Word 0 - End */
563 } s;
564 /* struct bdk_l2c_asc_regionx_start_s cn; */
565 };
566 typedef union bdk_l2c_asc_regionx_start bdk_l2c_asc_regionx_start_t;
567
568 static inline uint64_t BDK_L2C_ASC_REGIONX_START(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_ASC_REGIONX_START(unsigned long a)569 static inline uint64_t BDK_L2C_ASC_REGIONX_START(unsigned long a)
570 {
571 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=3))
572 return 0x87e080801000ll + 0x40ll * ((a) & 0x3);
573 __bdk_csr_fatal("L2C_ASC_REGIONX_START", 1, a, 0, 0, 0);
574 }
575
576 #define typedef_BDK_L2C_ASC_REGIONX_START(a) bdk_l2c_asc_regionx_start_t
577 #define bustype_BDK_L2C_ASC_REGIONX_START(a) BDK_CSR_TYPE_RSL
578 #define basename_BDK_L2C_ASC_REGIONX_START(a) "L2C_ASC_REGIONX_START"
579 #define device_bar_BDK_L2C_ASC_REGIONX_START(a) 0x0 /* PF_BAR0 */
580 #define busnum_BDK_L2C_ASC_REGIONX_START(a) (a)
581 #define arguments_BDK_L2C_ASC_REGIONX_START(a) (a),-1,-1,-1
582
583 /**
584 * Register (RSL) l2c_cbc#_bist_status
585 *
586 * L2C CBC BIST Status Registers
587 */
588 union bdk_l2c_cbcx_bist_status
589 {
590 uint64_t u;
591 struct bdk_l2c_cbcx_bist_status_s
592 {
593 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
594 uint64_t reserved_37_63 : 27;
595 uint64_t mibfl : 5; /**< [ 36: 32](RO/H) BIST failure status for various MIB memories. ({XMD, IPM, IRM, MXD, MXN}) */
596 uint64_t rsdfl : 32; /**< [ 31: 0](RO/H) BIST failure status for RSDQW0-31. */
597 #else /* Word 0 - Little Endian */
598 uint64_t rsdfl : 32; /**< [ 31: 0](RO/H) BIST failure status for RSDQW0-31. */
599 uint64_t mibfl : 5; /**< [ 36: 32](RO/H) BIST failure status for various MIB memories. ({XMD, IPM, IRM, MXD, MXN}) */
600 uint64_t reserved_37_63 : 27;
601 #endif /* Word 0 - End */
602 } s;
603 /* struct bdk_l2c_cbcx_bist_status_s cn; */
604 };
605 typedef union bdk_l2c_cbcx_bist_status bdk_l2c_cbcx_bist_status_t;
606
607 static inline uint64_t BDK_L2C_CBCX_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_BIST_STATUS(unsigned long a)608 static inline uint64_t BDK_L2C_CBCX_BIST_STATUS(unsigned long a)
609 {
610 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
611 return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x0);
612 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
613 return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x1);
614 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
615 return 0x87e0580a0000ll + 0x1000000ll * ((a) & 0x3);
616 __bdk_csr_fatal("L2C_CBCX_BIST_STATUS", 1, a, 0, 0, 0);
617 }
618
619 #define typedef_BDK_L2C_CBCX_BIST_STATUS(a) bdk_l2c_cbcx_bist_status_t
620 #define bustype_BDK_L2C_CBCX_BIST_STATUS(a) BDK_CSR_TYPE_RSL
621 #define basename_BDK_L2C_CBCX_BIST_STATUS(a) "L2C_CBCX_BIST_STATUS"
622 #define device_bar_BDK_L2C_CBCX_BIST_STATUS(a) 0x0 /* PF_BAR0 */
623 #define busnum_BDK_L2C_CBCX_BIST_STATUS(a) (a)
624 #define arguments_BDK_L2C_CBCX_BIST_STATUS(a) (a),-1,-1,-1
625
626 /**
627 * Register (RSL) l2c_cbc#_dll
628 *
629 * L2C CBC DLL Observability Register
630 * Register for DLL observability.
631 */
632 union bdk_l2c_cbcx_dll
633 {
634 uint64_t u;
635 struct bdk_l2c_cbcx_dll_s
636 {
637 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
638 uint64_t reserved_60_63 : 4;
639 uint64_t max_dll_setting : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
640 uint64_t min_dll_setting : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
641 uint64_t pd_pos_rclk_refclk : 1; /**< [ 35: 35](RO/H) Phase detector output. */
642 uint64_t pdl_rclk_refclk : 1; /**< [ 34: 34](RO/H) Phase detector output. */
643 uint64_t pdr_rclk_refclk : 1; /**< [ 33: 33](RO/H) Phase detector output. */
644 uint64_t reserved_32 : 1;
645 uint64_t dly_elem_enable : 16; /**< [ 31: 16](RO/H) Delay element enable. */
646 uint64_t dll_setting : 12; /**< [ 15: 4](RO/H) DLL setting. */
647 uint64_t reserved_1_3 : 3;
648 uint64_t dll_lock : 1; /**< [ 0: 0](RO/H) DLL locked. */
649 #else /* Word 0 - Little Endian */
650 uint64_t dll_lock : 1; /**< [ 0: 0](RO/H) DLL locked. */
651 uint64_t reserved_1_3 : 3;
652 uint64_t dll_setting : 12; /**< [ 15: 4](RO/H) DLL setting. */
653 uint64_t dly_elem_enable : 16; /**< [ 31: 16](RO/H) Delay element enable. */
654 uint64_t reserved_32 : 1;
655 uint64_t pdr_rclk_refclk : 1; /**< [ 33: 33](RO/H) Phase detector output. */
656 uint64_t pdl_rclk_refclk : 1; /**< [ 34: 34](RO/H) Phase detector output. */
657 uint64_t pd_pos_rclk_refclk : 1; /**< [ 35: 35](RO/H) Phase detector output. */
658 uint64_t min_dll_setting : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
659 uint64_t max_dll_setting : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
660 uint64_t reserved_60_63 : 4;
661 #endif /* Word 0 - End */
662 } s;
663 /* struct bdk_l2c_cbcx_dll_s cn; */
664 };
665 typedef union bdk_l2c_cbcx_dll bdk_l2c_cbcx_dll_t;
666
667 static inline uint64_t BDK_L2C_CBCX_DLL(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_DLL(unsigned long a)668 static inline uint64_t BDK_L2C_CBCX_DLL(unsigned long a)
669 {
670 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
671 return 0x87e058040000ll + 0x1000000ll * ((a) & 0x0);
672 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
673 return 0x87e058040000ll + 0x1000000ll * ((a) & 0x1);
674 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
675 return 0x87e058040000ll + 0x1000000ll * ((a) & 0x3);
676 __bdk_csr_fatal("L2C_CBCX_DLL", 1, a, 0, 0, 0);
677 }
678
679 #define typedef_BDK_L2C_CBCX_DLL(a) bdk_l2c_cbcx_dll_t
680 #define bustype_BDK_L2C_CBCX_DLL(a) BDK_CSR_TYPE_RSL
681 #define basename_BDK_L2C_CBCX_DLL(a) "L2C_CBCX_DLL"
682 #define device_bar_BDK_L2C_CBCX_DLL(a) 0x0 /* PF_BAR0 */
683 #define busnum_BDK_L2C_CBCX_DLL(a) (a)
684 #define arguments_BDK_L2C_CBCX_DLL(a) (a),-1,-1,-1
685
686 /**
687 * Register (RSL) l2c_cbc#_iocerr
688 *
689 * L2C CBC Error Information Registers
690 * Reserved.
691 */
692 union bdk_l2c_cbcx_iocerr
693 {
694 uint64_t u;
695 struct bdk_l2c_cbcx_iocerr_s
696 {
697 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
698 uint64_t reserved_0_63 : 64;
699 #else /* Word 0 - Little Endian */
700 uint64_t reserved_0_63 : 64;
701 #endif /* Word 0 - End */
702 } s;
703 /* struct bdk_l2c_cbcx_iocerr_s cn; */
704 };
705 typedef union bdk_l2c_cbcx_iocerr bdk_l2c_cbcx_iocerr_t;
706
707 static inline uint64_t BDK_L2C_CBCX_IOCERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_IOCERR(unsigned long a)708 static inline uint64_t BDK_L2C_CBCX_IOCERR(unsigned long a)
709 {
710 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
711 return 0x87e058080010ll + 0x1000000ll * ((a) & 0x0);
712 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
713 return 0x87e058080010ll + 0x1000000ll * ((a) & 0x1);
714 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
715 return 0x87e058080010ll + 0x1000000ll * ((a) & 0x3);
716 __bdk_csr_fatal("L2C_CBCX_IOCERR", 1, a, 0, 0, 0);
717 }
718
719 #define typedef_BDK_L2C_CBCX_IOCERR(a) bdk_l2c_cbcx_iocerr_t
720 #define bustype_BDK_L2C_CBCX_IOCERR(a) BDK_CSR_TYPE_RSL
721 #define basename_BDK_L2C_CBCX_IOCERR(a) "L2C_CBCX_IOCERR"
722 #define device_bar_BDK_L2C_CBCX_IOCERR(a) 0x0 /* PF_BAR0 */
723 #define busnum_BDK_L2C_CBCX_IOCERR(a) (a)
724 #define arguments_BDK_L2C_CBCX_IOCERR(a) (a),-1,-1,-1
725
726 /**
727 * Register (RSL) l2c_cbc#_iodisocierr
728 *
729 * L2C CBC IODISOCI Error Information Registers
730 * This register records error information associated with IORDDISOCI/IOWRDISOCI interrupts.
731 * IOWRDISOCI events take priority over previously captured IORDDISOCI events. Of the available
732 * I/O transactions, some commands will either set [IORDDISOCI], set [IOWRDISOCI], or set both
733 * [IORDDISOCI] and [IOWRDISOCI]. See L2C_CBC()_INT_W1C for information about which I/O
734 * transactions
735 * may result in IORDDISOCI/IOWRDISOCI interrupts.
736 */
737 union bdk_l2c_cbcx_iodisocierr
738 {
739 uint64_t u;
740 struct bdk_l2c_cbcx_iodisocierr_s
741 {
742 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
743 uint64_t iorddisoci : 1; /**< [ 63: 63](RO/H) Logged information is for a IORDDISOCI error. */
744 uint64_t iowrdisoci : 1; /**< [ 62: 62](RO/H) Logged information is for a IOWRDISOCI error. */
745 uint64_t reserved_59_61 : 3;
746 uint64_t cmd : 7; /**< [ 58: 52](RO/H) Encoding of XMC command.
747 Internal:
748 Enumerated by XMC_CMD_E. */
749 uint64_t ppvid : 6; /**< [ 51: 46](RO/H) CMB source PPVID. */
750 uint64_t node : 2; /**< [ 45: 44](RO/H) Destination node ID. */
751 uint64_t did : 8; /**< [ 43: 36](RO/H) Destination device ID. */
752 uint64_t addr : 36; /**< [ 35: 0](RO/H) I/O address. */
753 #else /* Word 0 - Little Endian */
754 uint64_t addr : 36; /**< [ 35: 0](RO/H) I/O address. */
755 uint64_t did : 8; /**< [ 43: 36](RO/H) Destination device ID. */
756 uint64_t node : 2; /**< [ 45: 44](RO/H) Destination node ID. */
757 uint64_t ppvid : 6; /**< [ 51: 46](RO/H) CMB source PPVID. */
758 uint64_t cmd : 7; /**< [ 58: 52](RO/H) Encoding of XMC command.
759 Internal:
760 Enumerated by XMC_CMD_E. */
761 uint64_t reserved_59_61 : 3;
762 uint64_t iowrdisoci : 1; /**< [ 62: 62](RO/H) Logged information is for a IOWRDISOCI error. */
763 uint64_t iorddisoci : 1; /**< [ 63: 63](RO/H) Logged information is for a IORDDISOCI error. */
764 #endif /* Word 0 - End */
765 } s;
766 /* struct bdk_l2c_cbcx_iodisocierr_s cn; */
767 };
768 typedef union bdk_l2c_cbcx_iodisocierr bdk_l2c_cbcx_iodisocierr_t;
769
770 static inline uint64_t BDK_L2C_CBCX_IODISOCIERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_IODISOCIERR(unsigned long a)771 static inline uint64_t BDK_L2C_CBCX_IODISOCIERR(unsigned long a)
772 {
773 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
774 return 0x87e058080008ll + 0x1000000ll * ((a) & 0x0);
775 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
776 return 0x87e058080008ll + 0x1000000ll * ((a) & 0x1);
777 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
778 return 0x87e058080008ll + 0x1000000ll * ((a) & 0x3);
779 __bdk_csr_fatal("L2C_CBCX_IODISOCIERR", 1, a, 0, 0, 0);
780 }
781
782 #define typedef_BDK_L2C_CBCX_IODISOCIERR(a) bdk_l2c_cbcx_iodisocierr_t
783 #define bustype_BDK_L2C_CBCX_IODISOCIERR(a) BDK_CSR_TYPE_RSL
784 #define basename_BDK_L2C_CBCX_IODISOCIERR(a) "L2C_CBCX_IODISOCIERR"
785 #define device_bar_BDK_L2C_CBCX_IODISOCIERR(a) 0x0 /* PF_BAR0 */
786 #define busnum_BDK_L2C_CBCX_IODISOCIERR(a) (a)
787 #define arguments_BDK_L2C_CBCX_IODISOCIERR(a) (a),-1,-1,-1
788
789 /**
790 * Register (RSL) l2c_cbc#_miberr
791 *
792 * L2C CBC MIB Error Information Registers
793 * This register records error information for all CBC MIB errors. An error locks the INDEX and
794 * [SYN] fields and set the bit corresponding to the error received. MIBDBE errors take priority
795 * and overwrite an earlier logged MIBSBE error. Only one of [MIBSBE]/[MIBDBE] is set at any
796 * given
797 * time and serves to document which error the INDEX/[SYN] is associated with. The syndrome is
798 * recorded for DBE errors, though the utility of the value is not clear.
799 */
800 union bdk_l2c_cbcx_miberr
801 {
802 uint64_t u;
803 struct bdk_l2c_cbcx_miberr_s
804 {
805 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
806 uint64_t mibdbe : 1; /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit MIB ECC error. */
807 uint64_t mibsbe : 1; /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit MIB ECC error. */
808 uint64_t reserved_40_61 : 22;
809 uint64_t syn : 8; /**< [ 39: 32](RO/H) Error syndrome. */
810 uint64_t reserved_3_31 : 29;
811 uint64_t memid : 2; /**< [ 2: 1](RO/H) Indicates the memory that had the error.
812 0x0 = Error from MXB_VC_MRN, MXB_VC_MFN, MXB_VC_MPN VCs.
813 0x1 = Error from MXB_VC_MRD, MXB_VC_MPD VCs.
814 0x2 = Error from MXB_VC_IRM VC.
815 0x3 = Error from MXB_VC_IPM VC. */
816 uint64_t mibnum : 1; /**< [ 0: 0](RO/H) Indicates the MIB bus that had the error. */
817 #else /* Word 0 - Little Endian */
818 uint64_t mibnum : 1; /**< [ 0: 0](RO/H) Indicates the MIB bus that had the error. */
819 uint64_t memid : 2; /**< [ 2: 1](RO/H) Indicates the memory that had the error.
820 0x0 = Error from MXB_VC_MRN, MXB_VC_MFN, MXB_VC_MPN VCs.
821 0x1 = Error from MXB_VC_MRD, MXB_VC_MPD VCs.
822 0x2 = Error from MXB_VC_IRM VC.
823 0x3 = Error from MXB_VC_IPM VC. */
824 uint64_t reserved_3_31 : 29;
825 uint64_t syn : 8; /**< [ 39: 32](RO/H) Error syndrome. */
826 uint64_t reserved_40_61 : 22;
827 uint64_t mibsbe : 1; /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit MIB ECC error. */
828 uint64_t mibdbe : 1; /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit MIB ECC error. */
829 #endif /* Word 0 - End */
830 } s;
831 /* struct bdk_l2c_cbcx_miberr_s cn; */
832 };
833 typedef union bdk_l2c_cbcx_miberr bdk_l2c_cbcx_miberr_t;
834
835 static inline uint64_t BDK_L2C_CBCX_MIBERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_MIBERR(unsigned long a)836 static inline uint64_t BDK_L2C_CBCX_MIBERR(unsigned long a)
837 {
838 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
839 return 0x87e058080020ll + 0x1000000ll * ((a) & 0x0);
840 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
841 return 0x87e058080020ll + 0x1000000ll * ((a) & 0x1);
842 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
843 return 0x87e058080020ll + 0x1000000ll * ((a) & 0x3);
844 __bdk_csr_fatal("L2C_CBCX_MIBERR", 1, a, 0, 0, 0);
845 }
846
847 #define typedef_BDK_L2C_CBCX_MIBERR(a) bdk_l2c_cbcx_miberr_t
848 #define bustype_BDK_L2C_CBCX_MIBERR(a) BDK_CSR_TYPE_RSL
849 #define basename_BDK_L2C_CBCX_MIBERR(a) "L2C_CBCX_MIBERR"
850 #define device_bar_BDK_L2C_CBCX_MIBERR(a) 0x0 /* PF_BAR0 */
851 #define busnum_BDK_L2C_CBCX_MIBERR(a) (a)
852 #define arguments_BDK_L2C_CBCX_MIBERR(a) (a),-1,-1,-1
853
854 /**
855 * Register (RSL) l2c_cbc#_rsderr
856 *
857 * L2C CBC RSD Error Information Registers
858 * This register records error information for all CBC RSD errors.
859 * An error locks the INDEX and [SYN] fields and set the bit corresponding to the error received.
860 * RSDDBE errors take priority and overwrite an earlier logged RSDSBE error. Only one of
861 * [RSDSBE]/[RSDDBE] is set at any given time and serves to document which error the INDEX/[SYN]
862 * is
863 * associated with.
864 * The syndrome is recorded for DBE errors, though the utility of the value is not clear.
865 */
866 union bdk_l2c_cbcx_rsderr
867 {
868 uint64_t u;
869 struct bdk_l2c_cbcx_rsderr_s
870 {
871 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
872 uint64_t rsddbe : 1; /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit RSD ECC error. */
873 uint64_t rsdsbe : 1; /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit RSD ECC error. */
874 uint64_t reserved_40_61 : 22;
875 uint64_t syn : 8; /**< [ 39: 32](RO/H) Error syndrome. */
876 uint64_t reserved_9_31 : 23;
877 uint64_t tadnum : 3; /**< [ 8: 6](RO/H) Indicates the TAD FIFO containing the error. */
878 uint64_t qwnum : 2; /**< [ 5: 4](RO/H) Indicates the QW containing the error. */
879 uint64_t rsdnum : 4; /**< [ 3: 0](RO/H) Indicates the RSD that had the error. */
880 #else /* Word 0 - Little Endian */
881 uint64_t rsdnum : 4; /**< [ 3: 0](RO/H) Indicates the RSD that had the error. */
882 uint64_t qwnum : 2; /**< [ 5: 4](RO/H) Indicates the QW containing the error. */
883 uint64_t tadnum : 3; /**< [ 8: 6](RO/H) Indicates the TAD FIFO containing the error. */
884 uint64_t reserved_9_31 : 23;
885 uint64_t syn : 8; /**< [ 39: 32](RO/H) Error syndrome. */
886 uint64_t reserved_40_61 : 22;
887 uint64_t rsdsbe : 1; /**< [ 62: 62](RO/H) INDEX/SYN corresponds to a single-bit RSD ECC error. */
888 uint64_t rsddbe : 1; /**< [ 63: 63](RO/H) INDEX/SYN corresponds to a double-bit RSD ECC error. */
889 #endif /* Word 0 - End */
890 } s;
891 /* struct bdk_l2c_cbcx_rsderr_s cn; */
892 };
893 typedef union bdk_l2c_cbcx_rsderr bdk_l2c_cbcx_rsderr_t;
894
895 static inline uint64_t BDK_L2C_CBCX_RSDERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_CBCX_RSDERR(unsigned long a)896 static inline uint64_t BDK_L2C_CBCX_RSDERR(unsigned long a)
897 {
898 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
899 return 0x87e058080018ll + 0x1000000ll * ((a) & 0x0);
900 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=1))
901 return 0x87e058080018ll + 0x1000000ll * ((a) & 0x1);
902 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
903 return 0x87e058080018ll + 0x1000000ll * ((a) & 0x3);
904 __bdk_csr_fatal("L2C_CBCX_RSDERR", 1, a, 0, 0, 0);
905 }
906
907 #define typedef_BDK_L2C_CBCX_RSDERR(a) bdk_l2c_cbcx_rsderr_t
908 #define bustype_BDK_L2C_CBCX_RSDERR(a) BDK_CSR_TYPE_RSL
909 #define basename_BDK_L2C_CBCX_RSDERR(a) "L2C_CBCX_RSDERR"
910 #define device_bar_BDK_L2C_CBCX_RSDERR(a) 0x0 /* PF_BAR0 */
911 #define busnum_BDK_L2C_CBCX_RSDERR(a) (a)
912 #define arguments_BDK_L2C_CBCX_RSDERR(a) (a),-1,-1,-1
913
914 /**
915 * Register (RSL) l2c_ctl
916 *
917 * L2C Control Register
918 */
919 union bdk_l2c_ctl
920 {
921 uint64_t u;
922 struct bdk_l2c_ctl_s
923 {
924 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
925 uint64_t reserved_32_63 : 32;
926 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
927 uint64_t reserved_28 : 1;
928 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
929 uint64_t reserved_25_26 : 2;
930 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
931 uint64_t reserved_16_23 : 8;
932 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
933 1. IOR data.
934 2. STIN/FILLs.
935 3. STDN/SCDN/SCFL. */
936 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
937 highest priority; QOS 1-7 use normal mode. */
938 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
939 For optimal performance set to
940 10 * (DDR-clock period/core-clock period) - 1.
941 To disable set to 0. All other values are reserved. */
942 uint64_t disdwb : 1; /**< [ 5: 5](R/W) Suppresses DWB and INVL2 commands, effectively turning them into NOPs.
943 Internal:
944 The real behavior is DWB and INVL2 commands are forced to look like STGL2I commands with
945 DISSTGL2I set. */
946 uint64_t disgsyncto : 1; /**< [ 4: 4](R/W) Disable global sync timeout. */
947 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
948 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
949 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
950 DISSBLKDTY or operation is undefined. */
951 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
952 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
953 #else /* Word 0 - Little Endian */
954 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
955 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
956 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
957 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
958 DISSBLKDTY or operation is undefined. */
959 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
960 uint64_t disgsyncto : 1; /**< [ 4: 4](R/W) Disable global sync timeout. */
961 uint64_t disdwb : 1; /**< [ 5: 5](R/W) Suppresses DWB and INVL2 commands, effectively turning them into NOPs.
962 Internal:
963 The real behavior is DWB and INVL2 commands are forced to look like STGL2I commands with
964 DISSTGL2I set. */
965 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
966 For optimal performance set to
967 10 * (DDR-clock period/core-clock period) - 1.
968 To disable set to 0. All other values are reserved. */
969 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
970 highest priority; QOS 1-7 use normal mode. */
971 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
972 1. IOR data.
973 2. STIN/FILLs.
974 3. STDN/SCDN/SCFL. */
975 uint64_t reserved_16_23 : 8;
976 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
977 uint64_t reserved_25_26 : 2;
978 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
979 uint64_t reserved_28 : 1;
980 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
981 uint64_t reserved_32_63 : 32;
982 #endif /* Word 0 - End */
983 } s;
984 struct bdk_l2c_ctl_cn88xxp1
985 {
986 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
987 uint64_t reserved_32_63 : 32;
988 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
989 uint64_t reserved_28 : 1;
990 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
991 uint64_t reserved_25_26 : 2;
992 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
993 uint64_t reserved_16_23 : 8;
994 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
995 1. IOR data.
996 2. STIN/FILLs.
997 3. STDN/SCDN/SCFL. */
998 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
999 highest priority; QOS 1-7 use normal mode. */
1000 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
1001 For optimal performance set to
1002 10 * (DDR-clock period/core-clock period) - 1.
1003 To disable set to 0. All other values are reserved. */
1004 uint64_t reserved_5 : 1;
1005 uint64_t reserved_4 : 1;
1006 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
1007 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
1008 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
1009 DISSBLKDTY or operation is undefined. */
1010 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
1011 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
1012 #else /* Word 0 - Little Endian */
1013 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
1014 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
1015 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
1016 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
1017 DISSBLKDTY or operation is undefined. */
1018 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
1019 uint64_t reserved_4 : 1;
1020 uint64_t reserved_5 : 1;
1021 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
1022 For optimal performance set to
1023 10 * (DDR-clock period/core-clock period) - 1.
1024 To disable set to 0. All other values are reserved. */
1025 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
1026 highest priority; QOS 1-7 use normal mode. */
1027 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
1028 1. IOR data.
1029 2. STIN/FILLs.
1030 3. STDN/SCDN/SCFL. */
1031 uint64_t reserved_16_23 : 8;
1032 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
1033 uint64_t reserved_25_26 : 2;
1034 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
1035 uint64_t reserved_28 : 1;
1036 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
1037 uint64_t reserved_32_63 : 32;
1038 #endif /* Word 0 - End */
1039 } cn88xxp1;
1040 /* struct bdk_l2c_ctl_s cn81xx; */
1041 /* struct bdk_l2c_ctl_s cn83xx; */
1042 struct bdk_l2c_ctl_cn88xxp2
1043 {
1044 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1045 uint64_t reserved_32_63 : 32;
1046 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
1047 uint64_t reserved_28 : 1;
1048 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
1049 uint64_t reserved_25_26 : 2;
1050 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
1051 uint64_t reserved_16_23 : 8;
1052 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
1053 1. IOR data.
1054 2. STIN/FILLs.
1055 3. STDN/SCDN/SCFL. */
1056 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
1057 highest priority; QOS 1-7 use normal mode. */
1058 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
1059 For optimal performance set to
1060 10 * (DDR-clock period/core-clock period) - 1.
1061 To disable set to 0. All other values are reserved. */
1062 uint64_t reserved_5 : 1;
1063 uint64_t disgsyncto : 1; /**< [ 4: 4](R/W) Disable global sync timeout. */
1064 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
1065 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
1066 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
1067 DISSBLKDTY or operation is undefined. */
1068 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
1069 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
1070 #else /* Word 0 - Little Endian */
1071 uint64_t disidxalias : 1; /**< [ 0: 0](R/W) Index alias disable. */
1072 uint64_t disecc : 1; /**< [ 1: 1](R/W) Tag and data ECC disable. */
1073 uint64_t dissblkdty : 1; /**< [ 2: 2](R/W) Disable bandwidth optimization between L2 and LMC and MOB which only transfers modified
1074 sub-blocks when possible. In an CCPI system all nodes must use the same setting of
1075 DISSBLKDTY or operation is undefined. */
1076 uint64_t disldwb : 1; /**< [ 3: 3](R/W) Suppresses the DWB functionality of any received LDWB, effectively turning them into LDTs. */
1077 uint64_t disgsyncto : 1; /**< [ 4: 4](R/W) Disable global sync timeout. */
1078 uint64_t reserved_5 : 1;
1079 uint64_t rdf_cnt : 8; /**< [ 13: 6](R/W) Defines the sample point of the LMC response data in the DDR-clock/core-clock crossing.
1080 For optimal performance set to
1081 10 * (DDR-clock period/core-clock period) - 1.
1082 To disable set to 0. All other values are reserved. */
1083 uint64_t xmc_arb_mode : 1; /**< [ 14: 14](R/W) Arbitration mode for ADD bus QOS queues. 0 = fully determined through QOS, 1 = QOS0
1084 highest priority; QOS 1-7 use normal mode. */
1085 uint64_t rsp_arb_mode : 1; /**< [ 15: 15](R/W) Arbitration mode for RSC/RSD bus. 0 = round-robin; 1 = static priority.
1086 1. IOR data.
1087 2. STIN/FILLs.
1088 3. STDN/SCDN/SCFL. */
1089 uint64_t reserved_16_23 : 8;
1090 uint64_t discclk : 1; /**< [ 24: 24](R/W) Disable conditional clocking in L2C PNR blocks. */
1091 uint64_t reserved_25_26 : 2;
1092 uint64_t disstgl2i : 1; /**< [ 27: 27](R/W) Disable STGL2Is from changing the tags. */
1093 uint64_t reserved_28 : 1;
1094 uint64_t ocla_qos : 3; /**< [ 31: 29](R/W) QOS level for the transactions from OCLA to L2C. */
1095 uint64_t reserved_32_63 : 32;
1096 #endif /* Word 0 - End */
1097 } cn88xxp2;
1098 };
1099 typedef union bdk_l2c_ctl bdk_l2c_ctl_t;
1100
1101 #define BDK_L2C_CTL BDK_L2C_CTL_FUNC()
1102 static inline uint64_t BDK_L2C_CTL_FUNC(void) __attribute__ ((pure, always_inline));
BDK_L2C_CTL_FUNC(void)1103 static inline uint64_t BDK_L2C_CTL_FUNC(void)
1104 {
1105 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
1106 return 0x87e080800000ll;
1107 __bdk_csr_fatal("L2C_CTL", 0, 0, 0, 0, 0);
1108 }
1109
1110 #define typedef_BDK_L2C_CTL bdk_l2c_ctl_t
1111 #define bustype_BDK_L2C_CTL BDK_CSR_TYPE_RSL
1112 #define basename_BDK_L2C_CTL "L2C_CTL"
1113 #define device_bar_BDK_L2C_CTL 0x0 /* PF_BAR0 */
1114 #define busnum_BDK_L2C_CTL 0
1115 #define arguments_BDK_L2C_CTL -1,-1,-1,-1
1116
1117 /**
1118 * Register (RSL) l2c_ecc_ctl
1119 *
1120 * L2C ECC Control Register
1121 * Flip ECC bits to generate single-bit or double-bit ECC errors in all instances of a given
1122 * memory type. Encodings are as follows.
1123 * 0x0 = No error.
1124 * 0x1 = Single-bit error on ECC\<0\>.
1125 * 0x2 = Single-bit error on ECC\<1\>.
1126 * 0x3 = Double-bit error on ECC\<1:0\>.
1127 *
1128 * L2DFLIP allows software to generate L2DSBE, L2DDBE, VBFSBE, and VBFDBE errors for the purposes
1129 * of testing error handling code. When one (or both) of these bits are set, a PL2 that misses in
1130 * the L2 will fill with the appropriate error in the first two OWs of the fill. Software can
1131 * determine which OW pair gets the error by choosing the desired fill order (address\<6:5\>). A
1132 * PL2 that hits in the L2 will not inject any errors. Therefore sending a WBIL2 prior to the PL2
1133 * is recommended to make a miss likely. (If multiple processors are involved, software must be
1134 * sure that no other processor or I/O device can bring the block into the L2).
1135 *
1136 * To generate a VBFSBE or VBFDBE, software must first get the cache block into the cache with an
1137 * error using a PL2 that misses the L2. Then a store partial to a portion of the cache block
1138 * without the error must change the block to dirty. Then, a subsequent WBL2/WBIL2/victim will
1139 * trigger the VBFSBE/VBFDBE error.
1140 */
1141 union bdk_l2c_ecc_ctl
1142 {
1143 uint64_t u;
1144 struct bdk_l2c_ecc_ctl_s
1145 {
1146 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1147 uint64_t reserved_12_63 : 52;
1148 uint64_t mibflip : 2; /**< [ 11: 10](R/W) Generate an ECC error in the MIB. See note above. */
1149 uint64_t l2dflip : 2; /**< [ 9: 8](R/W) Generate an ECC error in the L2D. See note above. */
1150 uint64_t l2tflip : 2; /**< [ 7: 6](R/W) Generate an ECC error in the L2T. */
1151 uint64_t rdfflip : 2; /**< [ 5: 4](R/W) Generate an ECC error in RDF memory. */
1152 uint64_t xmdflip : 2; /**< [ 3: 2](R/W) Generate an ECC error in all corresponding CBC XMD memories. */
1153 uint64_t reserved_0_1 : 2;
1154 #else /* Word 0 - Little Endian */
1155 uint64_t reserved_0_1 : 2;
1156 uint64_t xmdflip : 2; /**< [ 3: 2](R/W) Generate an ECC error in all corresponding CBC XMD memories. */
1157 uint64_t rdfflip : 2; /**< [ 5: 4](R/W) Generate an ECC error in RDF memory. */
1158 uint64_t l2tflip : 2; /**< [ 7: 6](R/W) Generate an ECC error in the L2T. */
1159 uint64_t l2dflip : 2; /**< [ 9: 8](R/W) Generate an ECC error in the L2D. See note above. */
1160 uint64_t mibflip : 2; /**< [ 11: 10](R/W) Generate an ECC error in the MIB. See note above. */
1161 uint64_t reserved_12_63 : 52;
1162 #endif /* Word 0 - End */
1163 } s;
1164 /* struct bdk_l2c_ecc_ctl_s cn; */
1165 };
1166 typedef union bdk_l2c_ecc_ctl bdk_l2c_ecc_ctl_t;
1167
1168 #define BDK_L2C_ECC_CTL BDK_L2C_ECC_CTL_FUNC()
1169 static inline uint64_t BDK_L2C_ECC_CTL_FUNC(void) __attribute__ ((pure, always_inline));
BDK_L2C_ECC_CTL_FUNC(void)1170 static inline uint64_t BDK_L2C_ECC_CTL_FUNC(void)
1171 {
1172 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
1173 return 0x87e080800010ll;
1174 __bdk_csr_fatal("L2C_ECC_CTL", 0, 0, 0, 0, 0);
1175 }
1176
1177 #define typedef_BDK_L2C_ECC_CTL bdk_l2c_ecc_ctl_t
1178 #define bustype_BDK_L2C_ECC_CTL BDK_CSR_TYPE_RSL
1179 #define basename_BDK_L2C_ECC_CTL "L2C_ECC_CTL"
1180 #define device_bar_BDK_L2C_ECC_CTL 0x0 /* PF_BAR0 */
1181 #define busnum_BDK_L2C_ECC_CTL 0
1182 #define arguments_BDK_L2C_ECC_CTL -1,-1,-1,-1
1183
1184 /**
1185 * Register (RSL) l2c_mci#_bist_status
1186 *
1187 * Level 2 MCI BIST Status (DCLK) Registers
1188 * If clear BIST is desired, [CLEAR_BIST] must be written to 1 before [START_BIST] is
1189 * written to 1 using a separate CSR write operation. [CLEAR_BIST] must not be changed
1190 * after writing [START_BIST] to 1 until the BIST operation completes (indicated by
1191 * [START_BIST] returning to 0) or operation is undefined.
1192 */
1193 union bdk_l2c_mcix_bist_status
1194 {
1195 uint64_t u;
1196 struct bdk_l2c_mcix_bist_status_s
1197 {
1198 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1199 uint64_t start_bist : 1; /**< [ 63: 63](R/W/H) When written to 1, starts BIST. Remains 1 until BIST is complete. */
1200 uint64_t clear_bist : 1; /**< [ 62: 62](R/W) When BIST is triggered, run clear BIST. */
1201 uint64_t reserved_2_61 : 60;
1202 uint64_t vbffl : 2; /**< [ 1: 0](RO/H) BIST failure status for VBF0-1. */
1203 #else /* Word 0 - Little Endian */
1204 uint64_t vbffl : 2; /**< [ 1: 0](RO/H) BIST failure status for VBF0-1. */
1205 uint64_t reserved_2_61 : 60;
1206 uint64_t clear_bist : 1; /**< [ 62: 62](R/W) When BIST is triggered, run clear BIST. */
1207 uint64_t start_bist : 1; /**< [ 63: 63](R/W/H) When written to 1, starts BIST. Remains 1 until BIST is complete. */
1208 #endif /* Word 0 - End */
1209 } s;
1210 /* struct bdk_l2c_mcix_bist_status_s cn; */
1211 };
1212 typedef union bdk_l2c_mcix_bist_status bdk_l2c_mcix_bist_status_t;
1213
1214 static inline uint64_t BDK_L2C_MCIX_BIST_STATUS(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_MCIX_BIST_STATUS(unsigned long a)1215 static inline uint64_t BDK_L2C_MCIX_BIST_STATUS(unsigned long a)
1216 {
1217 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
1218 return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x0);
1219 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=2))
1220 return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x3);
1221 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
1222 return 0x87e05c020000ll + 0x1000000ll * ((a) & 0x3);
1223 __bdk_csr_fatal("L2C_MCIX_BIST_STATUS", 1, a, 0, 0, 0);
1224 }
1225
1226 #define typedef_BDK_L2C_MCIX_BIST_STATUS(a) bdk_l2c_mcix_bist_status_t
1227 #define bustype_BDK_L2C_MCIX_BIST_STATUS(a) BDK_CSR_TYPE_RSL
1228 #define basename_BDK_L2C_MCIX_BIST_STATUS(a) "L2C_MCIX_BIST_STATUS"
1229 #define device_bar_BDK_L2C_MCIX_BIST_STATUS(a) 0x0 /* PF_BAR0 */
1230 #define busnum_BDK_L2C_MCIX_BIST_STATUS(a) (a)
1231 #define arguments_BDK_L2C_MCIX_BIST_STATUS(a) (a),-1,-1,-1
1232
1233 /**
1234 * Register (RSL) l2c_mci#_err
1235 *
1236 * L2C MCI Error Information Registers
1237 * This register records error information for all MCI errors.
1238 * An error locks [VBF4], [INDEX], [SYN0] and [SYN1] and sets the bit corresponding to the error
1239 * received. VBFDBE errors take priority and will overwrite an earlier logged VBFSBE error. The
1240 * information from exactly one VBF read is present at any given time and serves to document
1241 * which error(s) were present in the read with the highest priority error.
1242 * The syndrome is recorded for DBE errors.
1243 */
1244 union bdk_l2c_mcix_err
1245 {
1246 uint64_t u;
1247 struct bdk_l2c_mcix_err_s
1248 {
1249 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1250 uint64_t vbfdbe1 : 1; /**< [ 63: 63](RO/H) INDEX/SYN1 corresponds to a double-bit VBF ECC error. */
1251 uint64_t vbfdbe0 : 1; /**< [ 62: 62](RO/H) INDEX/SYN0 corresponds to a double-bit VBF ECC error. */
1252 uint64_t vbfsbe1 : 1; /**< [ 61: 61](RO/H) INDEX/SYN1 corresponds to a single-bit VBF ECC error. */
1253 uint64_t vbfsbe0 : 1; /**< [ 60: 60](RO/H) INDEX/SYN0 corresponds to a single-bit VBF ECC error. */
1254 uint64_t reserved_48_59 : 12;
1255 uint64_t syn1 : 8; /**< [ 47: 40](RO/H) Error syndrome for QW1 ([127:64]).
1256 Records only on single bit errors.
1257
1258 Internal:
1259 See bug26334. */
1260 uint64_t syn0 : 8; /**< [ 39: 32](RO/H) Error syndrome for QW0 ([63:0]).
1261 Records only on single bit errors.
1262
1263 Internal:
1264 See bug26334. */
1265 uint64_t reserved_12_31 : 20;
1266 uint64_t vbf4 : 1; /**< [ 11: 11](RO/H) When 1, errors were from VBF (4+a), when 0, from VBF (0+a). */
1267 uint64_t index : 7; /**< [ 10: 4](RO/H) VBF index which was read and had the error(s). */
1268 uint64_t reserved_0_3 : 4;
1269 #else /* Word 0 - Little Endian */
1270 uint64_t reserved_0_3 : 4;
1271 uint64_t index : 7; /**< [ 10: 4](RO/H) VBF index which was read and had the error(s). */
1272 uint64_t vbf4 : 1; /**< [ 11: 11](RO/H) When 1, errors were from VBF (4+a), when 0, from VBF (0+a). */
1273 uint64_t reserved_12_31 : 20;
1274 uint64_t syn0 : 8; /**< [ 39: 32](RO/H) Error syndrome for QW0 ([63:0]).
1275 Records only on single bit errors.
1276
1277 Internal:
1278 See bug26334. */
1279 uint64_t syn1 : 8; /**< [ 47: 40](RO/H) Error syndrome for QW1 ([127:64]).
1280 Records only on single bit errors.
1281
1282 Internal:
1283 See bug26334. */
1284 uint64_t reserved_48_59 : 12;
1285 uint64_t vbfsbe0 : 1; /**< [ 60: 60](RO/H) INDEX/SYN0 corresponds to a single-bit VBF ECC error. */
1286 uint64_t vbfsbe1 : 1; /**< [ 61: 61](RO/H) INDEX/SYN1 corresponds to a single-bit VBF ECC error. */
1287 uint64_t vbfdbe0 : 1; /**< [ 62: 62](RO/H) INDEX/SYN0 corresponds to a double-bit VBF ECC error. */
1288 uint64_t vbfdbe1 : 1; /**< [ 63: 63](RO/H) INDEX/SYN1 corresponds to a double-bit VBF ECC error. */
1289 #endif /* Word 0 - End */
1290 } s;
1291 /* struct bdk_l2c_mcix_err_s cn; */
1292 };
1293 typedef union bdk_l2c_mcix_err bdk_l2c_mcix_err_t;
1294
1295 static inline uint64_t BDK_L2C_MCIX_ERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_MCIX_ERR(unsigned long a)1296 static inline uint64_t BDK_L2C_MCIX_ERR(unsigned long a)
1297 {
1298 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
1299 return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x0);
1300 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=2))
1301 return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x3);
1302 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=3))
1303 return 0x87e05c010000ll + 0x1000000ll * ((a) & 0x3);
1304 __bdk_csr_fatal("L2C_MCIX_ERR", 1, a, 0, 0, 0);
1305 }
1306
1307 #define typedef_BDK_L2C_MCIX_ERR(a) bdk_l2c_mcix_err_t
1308 #define bustype_BDK_L2C_MCIX_ERR(a) BDK_CSR_TYPE_RSL
1309 #define basename_BDK_L2C_MCIX_ERR(a) "L2C_MCIX_ERR"
1310 #define device_bar_BDK_L2C_MCIX_ERR(a) 0x0 /* PF_BAR0 */
1311 #define busnum_BDK_L2C_MCIX_ERR(a) (a)
1312 #define arguments_BDK_L2C_MCIX_ERR(a) (a),-1,-1,-1
1313
1314 /**
1315 * Register (RSL) l2c_oci_ctl
1316 *
1317 * L2C CCPI Control Register
1318 */
1319 union bdk_l2c_oci_ctl
1320 {
1321 uint64_t u;
1322 struct bdk_l2c_oci_ctl_s
1323 {
1324 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1325 uint64_t reserved_31_63 : 33;
1326 uint64_t ncpend : 1; /**< [ 30: 30](RO/H) An indication that a node change is pending. Hardware sets this bit when
1327 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
1328 effect. */
1329 uint64_t lock_local_cas : 1; /**< [ 29: 29](RO) Reserved. */
1330 uint64_t lock_local_stc : 1; /**< [ 28: 28](RO) Reserved. */
1331 uint64_t lock_local_pp : 1; /**< [ 27: 27](RO) Reserved. */
1332 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Reserved.
1333 Internal:
1334 This only controls the GSYNC timeout in the L2C_CBCs in non-OCI chips. */
1335 uint64_t shtolen : 5; /**< [ 21: 17](RO) Reserved. */
1336 uint64_t shtoioen : 1; /**< [ 16: 16](RO) Reserved. */
1337 uint64_t shtoen : 3; /**< [ 15: 13](RO) Reserved. */
1338 uint64_t shto : 1; /**< [ 12: 12](RO) Reserved. */
1339 uint64_t inv_mode : 2; /**< [ 11: 10](RO) Reserved. */
1340 uint64_t cas_fdx : 1; /**< [ 9: 9](RO) Reserved. */
1341 uint64_t rldd_psha : 1; /**< [ 8: 8](RO) Reserved. */
1342 uint64_t lock_local_iob : 1; /**< [ 7: 7](RO) Reserved. */
1343 uint64_t iofrcl : 1; /**< [ 6: 6](RO) Reserved. */
1344 uint64_t reserved_4_5 : 2;
1345 uint64_t enaoci : 4; /**< [ 3: 0](RO) CCPI is not present. Any attempt to enable it will be ignored. */
1346 #else /* Word 0 - Little Endian */
1347 uint64_t enaoci : 4; /**< [ 3: 0](RO) CCPI is not present. Any attempt to enable it will be ignored. */
1348 uint64_t reserved_4_5 : 2;
1349 uint64_t iofrcl : 1; /**< [ 6: 6](RO) Reserved. */
1350 uint64_t lock_local_iob : 1; /**< [ 7: 7](RO) Reserved. */
1351 uint64_t rldd_psha : 1; /**< [ 8: 8](RO) Reserved. */
1352 uint64_t cas_fdx : 1; /**< [ 9: 9](RO) Reserved. */
1353 uint64_t inv_mode : 2; /**< [ 11: 10](RO) Reserved. */
1354 uint64_t shto : 1; /**< [ 12: 12](RO) Reserved. */
1355 uint64_t shtoen : 3; /**< [ 15: 13](RO) Reserved. */
1356 uint64_t shtoioen : 1; /**< [ 16: 16](RO) Reserved. */
1357 uint64_t shtolen : 5; /**< [ 21: 17](RO) Reserved. */
1358 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Reserved.
1359 Internal:
1360 This only controls the GSYNC timeout in the L2C_CBCs in non-OCI chips. */
1361 uint64_t lock_local_pp : 1; /**< [ 27: 27](RO) Reserved. */
1362 uint64_t lock_local_stc : 1; /**< [ 28: 28](RO) Reserved. */
1363 uint64_t lock_local_cas : 1; /**< [ 29: 29](RO) Reserved. */
1364 uint64_t ncpend : 1; /**< [ 30: 30](RO/H) An indication that a node change is pending. Hardware sets this bit when
1365 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
1366 effect. */
1367 uint64_t reserved_31_63 : 33;
1368 #endif /* Word 0 - End */
1369 } s;
1370 struct bdk_l2c_oci_ctl_cn88xxp1
1371 {
1372 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1373 uint64_t reserved_31_63 : 33;
1374 uint64_t reserved_30 : 1;
1375 uint64_t lock_local_cas : 1; /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
1376 performed locally (if possible) on the requesting node. Default operation will instead
1377 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
1378 uint64_t lock_local_stc : 1; /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
1379 performed locally (if possible) on the requesting node. Default operation will instead
1380 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
1381 uint64_t lock_local_pp : 1; /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
1382 addresses which miss at the requester will send the atomic request to be performed on the
1383 home node. Default operation will instead be performed locally on the requesting node.
1384 For request initiated by IOB & for STC & CAS ops, see
1385 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
1386 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
1387 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
1388 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
1389 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
1390 disables this timer. */
1391 uint64_t shtolen : 5; /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
1392 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
1393 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
1394 reset
1395 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
1396 timer. */
1397 uint64_t shtoioen : 1; /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
1398 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
1399 hardware sets [SHTO]. */
1400 uint64_t shtoen : 3; /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
1401 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
1402 link_down condition. */
1403 uint64_t shto : 1; /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
1404 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
1405 timeout. */
1406 uint64_t inv_mode : 2; /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
1407 responses which act like commits at the remote.
1408 0x0 = Conservative mode, waits until all local invalidates have been sent by their
1409 respective CBCs to the cores.
1410 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
1411 CBCs, but not necessarily actually sent to the cores themselves.
1412 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
1413 uint64_t cas_fdx : 1; /**< [ 9: 9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
1414 exclusive into the home. Default operation is to first request the block shared and only
1415 invalidate the remote if the compare succeeds. */
1416 uint64_t rldd_psha : 1; /**< [ 8: 8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
1417 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
1418 write to be done upon receiving the response. */
1419 uint64_t lock_local_iob : 1; /**< [ 7: 7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
1420 which miss at the requester are performed locally on the requesting node. When clear the
1421 operation instead sends the atomic request to be performed on the home node. For request
1422 initiated by core for STC and CAS ops; see
1423 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
1424 Default is set to 1 (local locks). */
1425 uint64_t iofrcl : 1; /**< [ 6: 6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
1426 the value of the node ID bits in the physical address. During normal operation this bit is
1427 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
1428 uint64_t reserved_4_5 : 2;
1429 uint64_t enaoci : 4; /**< [ 3: 0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
1430 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
1431 return unpredictable data. When clear,
1432 CCPI I/O requests and MOC references are processed and sent to OCX where they are
1433 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
1434 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
1435 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
1436 required. Similarly, all I/O references ignore the value of ENAOCI when
1437 L2C_OCI_CTL[IOFRCL] is set. */
1438 #else /* Word 0 - Little Endian */
1439 uint64_t enaoci : 4; /**< [ 3: 0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
1440 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
1441 return unpredictable data. When clear,
1442 CCPI I/O requests and MOC references are processed and sent to OCX where they are
1443 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
1444 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
1445 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
1446 required. Similarly, all I/O references ignore the value of ENAOCI when
1447 L2C_OCI_CTL[IOFRCL] is set. */
1448 uint64_t reserved_4_5 : 2;
1449 uint64_t iofrcl : 1; /**< [ 6: 6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
1450 the value of the node ID bits in the physical address. During normal operation this bit is
1451 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
1452 uint64_t lock_local_iob : 1; /**< [ 7: 7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
1453 which miss at the requester are performed locally on the requesting node. When clear the
1454 operation instead sends the atomic request to be performed on the home node. For request
1455 initiated by core for STC and CAS ops; see
1456 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
1457 Default is set to 1 (local locks). */
1458 uint64_t rldd_psha : 1; /**< [ 8: 8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
1459 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
1460 write to be done upon receiving the response. */
1461 uint64_t cas_fdx : 1; /**< [ 9: 9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
1462 exclusive into the home. Default operation is to first request the block shared and only
1463 invalidate the remote if the compare succeeds. */
1464 uint64_t inv_mode : 2; /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
1465 responses which act like commits at the remote.
1466 0x0 = Conservative mode, waits until all local invalidates have been sent by their
1467 respective CBCs to the cores.
1468 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
1469 CBCs, but not necessarily actually sent to the cores themselves.
1470 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
1471 uint64_t shto : 1; /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
1472 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
1473 timeout. */
1474 uint64_t shtoen : 3; /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
1475 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
1476 link_down condition. */
1477 uint64_t shtoioen : 1; /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
1478 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
1479 hardware sets [SHTO]. */
1480 uint64_t shtolen : 5; /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
1481 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
1482 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
1483 reset
1484 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
1485 timer. */
1486 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
1487 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
1488 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
1489 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
1490 disables this timer. */
1491 uint64_t lock_local_pp : 1; /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
1492 addresses which miss at the requester will send the atomic request to be performed on the
1493 home node. Default operation will instead be performed locally on the requesting node.
1494 For request initiated by IOB & for STC & CAS ops, see
1495 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
1496 uint64_t lock_local_stc : 1; /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
1497 performed locally (if possible) on the requesting node. Default operation will instead
1498 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
1499 uint64_t lock_local_cas : 1; /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
1500 performed locally (if possible) on the requesting node. Default operation will instead
1501 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
1502 uint64_t reserved_30 : 1;
1503 uint64_t reserved_31_63 : 33;
1504 #endif /* Word 0 - End */
1505 } cn88xxp1;
1506 /* struct bdk_l2c_oci_ctl_s cn81xx; */
1507 /* struct bdk_l2c_oci_ctl_s cn83xx; */
1508 struct bdk_l2c_oci_ctl_cn88xxp2
1509 {
1510 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1511 uint64_t reserved_31_63 : 33;
1512 uint64_t ncpend : 1; /**< [ 30: 30](RO/H) An indication that a node change is pending. Hardware sets this bit when
1513 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
1514 effect. */
1515 uint64_t lock_local_cas : 1; /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
1516 performed locally (if possible) on the requesting node. Default operation will instead
1517 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
1518 uint64_t lock_local_stc : 1; /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
1519 performed locally (if possible) on the requesting node. Default operation will instead
1520 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
1521 uint64_t lock_local_pp : 1; /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
1522 addresses which miss at the requester will send the atomic request to be performed on the
1523 home node. Default operation will instead be performed locally on the requesting node.
1524 For request initiated by IOB & for STC & CAS ops, see
1525 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
1526 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
1527 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
1528 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
1529 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
1530 disables this timer. */
1531 uint64_t shtolen : 5; /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
1532 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
1533 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
1534 reset
1535 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
1536 timer. */
1537 uint64_t shtoioen : 1; /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
1538 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
1539 hardware sets [SHTO]. */
1540 uint64_t shtoen : 3; /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
1541 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
1542 link_down condition. */
1543 uint64_t shto : 1; /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
1544 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
1545 timeout. */
1546 uint64_t inv_mode : 2; /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
1547 responses which act like commits at the remote.
1548 0x0 = Conservative mode, waits until all local invalidates have been sent by their
1549 respective CBCs to the cores.
1550 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
1551 CBCs, but not necessarily actually sent to the cores themselves.
1552 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
1553 uint64_t cas_fdx : 1; /**< [ 9: 9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
1554 exclusive into the home. Default operation is to first request the block shared and only
1555 invalidate the remote if the compare succeeds. */
1556 uint64_t rldd_psha : 1; /**< [ 8: 8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
1557 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
1558 write to be done upon receiving the response. */
1559 uint64_t lock_local_iob : 1; /**< [ 7: 7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
1560 which miss at the requester are performed locally on the requesting node. When clear the
1561 operation instead sends the atomic request to be performed on the home node. For request
1562 initiated by core for STC and CAS ops; see
1563 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
1564 Default is set to 1 (local locks). */
1565 uint64_t iofrcl : 1; /**< [ 6: 6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
1566 the value of the node ID bits in the physical address. During normal operation this bit is
1567 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
1568 uint64_t reserved_4_5 : 2;
1569 uint64_t enaoci : 4; /**< [ 3: 0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
1570 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
1571 return unpredictable data. When clear,
1572 CCPI I/O requests and MOC references are processed and sent to OCX where they are
1573 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
1574 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
1575 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
1576 required. Similarly, all I/O references ignore the value of ENAOCI when
1577 L2C_OCI_CTL[IOFRCL] is set. */
1578 #else /* Word 0 - Little Endian */
1579 uint64_t enaoci : 4; /**< [ 3: 0](R/W) Enable CCPI processing (one bit per node_id). When set, perform CCPI
1580 processing. When clear, CCPI memory writes are blocked and CCPI memory reads
1581 return unpredictable data. When clear,
1582 CCPI I/O requests and MOC references are processed and sent to OCX where they are
1583 ultimately discarded. RDDISOCI/WRDISOCI/IORDDISOCI/IOWRDISOCI interrupts occur if and only
1584 if the corresponding ENAOCI\<node\> bit is clear. References to the local node (configured
1585 via OCX_COM_NODE[ID]) ignore the value of ENAOCI\<node\> because no CCPI processing is
1586 required. Similarly, all I/O references ignore the value of ENAOCI when
1587 L2C_OCI_CTL[IOFRCL] is set. */
1588 uint64_t reserved_4_5 : 2;
1589 uint64_t iofrcl : 1; /**< [ 6: 6](R/W) When set, L2C services all I/O read and write operations on the local node, regardless of
1590 the value of the node ID bits in the physical address. During normal operation this bit is
1591 expected to be 0. Will only transition from 1 to 0, never from 0 to 1. */
1592 uint64_t lock_local_iob : 1; /**< [ 7: 7](R/W) When set, L2 atomic operations (excluding CAS/STC) initiated by IOB to remote addresses
1593 which miss at the requester are performed locally on the requesting node. When clear the
1594 operation instead sends the atomic request to be performed on the home node. For request
1595 initiated by core for STC and CAS ops; see
1596 [LOCK_LOCAL_PP]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS].
1597 Default is set to 1 (local locks). */
1598 uint64_t rldd_psha : 1; /**< [ 8: 8](R/W) When set, RLDD is assumed to return a shared response (PSHA). Default operation assumes an
1599 exclusive response (PEMD). Note that an incorrect assumption only causes an extra tag
1600 write to be done upon receiving the response. */
1601 uint64_t cas_fdx : 1; /**< [ 9: 9](R/W) When set, L2 STC/CAS operations performed at the home will immediately bring the block
1602 exclusive into the home. Default operation is to first request the block shared and only
1603 invalidate the remote if the compare succeeds. */
1604 uint64_t inv_mode : 2; /**< [ 11: 10](R/W) Describes how aggressive to be when waiting for local invalidates before sending CCPI
1605 responses which act like commits at the remote.
1606 0x0 = Conservative mode, waits until all local invalidates have been sent by their
1607 respective CBCs to the cores.
1608 0x1 = Moderate mode, waits until all local invalidates have been sent to their respective
1609 CBCs, but not necessarily actually sent to the cores themselves.
1610 0x2 = Aggressive mode, does not wait for local invalidates to begin their processing. */
1611 uint64_t shto : 1; /**< [ 12: 12](R/W/H) Use short timeout intervals. When set, core uses SDIDTTO for both DID and commit counter
1612 timeouts, rather than DIDTTO/DIDTTO2. Similarly, L2C will use short instead of long
1613 timeout. */
1614 uint64_t shtoen : 3; /**< [ 15: 13](R/W) When set, if the corresponding CCPI link is down, the hardware sets [SHTO].
1615 See OCX_COM_LINK(0..2)_CTL for a description of what events can contribute to the
1616 link_down condition. */
1617 uint64_t shtoioen : 1; /**< [ 16: 16](R/W) When set, any core issues any of an IO load, atomic, acking store, acking IOBADDR, or
1618 acking LMTST to a node that doesn't exist (existence defined by the ENAOCI bits), then the
1619 hardware sets [SHTO]. */
1620 uint64_t shtolen : 5; /**< [ 21: 17](R/W) Selects the bit in the counter for the short timeout value (timeout used when [SHTO] is
1621 set). Values supported are between 9 and 29 (for a timeout values between 2^9 and 2^29).
1622 Actual timeout is between 1x and 2x this interval. For example if [SHTOLEN] = 14 (the
1623 reset
1624 value), the timeout is between 16K and 32K core clocks. Note: a value of 0 disables this
1625 timer. */
1626 uint64_t lngtolen : 5; /**< [ 26: 22](R/W) Selects the bit in the counter for the long timeout value (timeout used when [SHTO] is
1627 clear). Values supported are between 11 and 29 (for a timeout values between 2^11 and
1628 2^29). Actual timeout is between 1x and 2x this interval. For example if [LNGTOLEN] = 28
1629 (the reset value), the timeout is between 256M and 512M core clocks. Note: a value of 0
1630 disables this timer. */
1631 uint64_t lock_local_pp : 1; /**< [ 27: 27](R/W) When clear, L2 atomic operations (excluding CAS/STC) core initiated requests to remote
1632 addresses which miss at the requester will send the atomic request to be performed on the
1633 home node. Default operation will instead be performed locally on the requesting node.
1634 For request initiated by IOB & for STC & CAS ops, see
1635 [LOCK_LOCAL_IOB]/[LOCK_LOCAL_STC]/[LOCK_LOCAL_CAS]. */
1636 uint64_t lock_local_stc : 1; /**< [ 28: 28](R/W) When set, L2 STC operations to remote addresses which miss at the requester will be
1637 performed locally (if possible) on the requesting node. Default operation will instead
1638 send the STC request to be performed on the home node. For CAS ops [LOCK_LOCAL_CAS]. */
1639 uint64_t lock_local_cas : 1; /**< [ 29: 29](R/W) When set, L2 CAS operations to remote addresses which miss at the requester will be
1640 performed locally (if possible) on the requesting node. Default operation will instead
1641 send the CAS request to be performed on the home node. For STC ops [LOCK_LOCAL_STC]. */
1642 uint64_t ncpend : 1; /**< [ 30: 30](RO/H) An indication that a node change is pending. Hardware sets this bit when
1643 OCX_COM_NODE[ID] is changed and clears the bit when the node change has taken
1644 effect. */
1645 uint64_t reserved_31_63 : 33;
1646 #endif /* Word 0 - End */
1647 } cn88xxp2;
1648 };
1649 typedef union bdk_l2c_oci_ctl bdk_l2c_oci_ctl_t;
1650
1651 #define BDK_L2C_OCI_CTL BDK_L2C_OCI_CTL_FUNC()
1652 static inline uint64_t BDK_L2C_OCI_CTL_FUNC(void) __attribute__ ((pure, always_inline));
BDK_L2C_OCI_CTL_FUNC(void)1653 static inline uint64_t BDK_L2C_OCI_CTL_FUNC(void)
1654 {
1655 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
1656 return 0x87e080800020ll;
1657 __bdk_csr_fatal("L2C_OCI_CTL", 0, 0, 0, 0, 0);
1658 }
1659
1660 #define typedef_BDK_L2C_OCI_CTL bdk_l2c_oci_ctl_t
1661 #define bustype_BDK_L2C_OCI_CTL BDK_CSR_TYPE_RSL
1662 #define basename_BDK_L2C_OCI_CTL "L2C_OCI_CTL"
1663 #define device_bar_BDK_L2C_OCI_CTL 0x0 /* PF_BAR0 */
1664 #define busnum_BDK_L2C_OCI_CTL 0
1665 #define arguments_BDK_L2C_OCI_CTL -1,-1,-1,-1
1666
1667 /**
1668 * Register (RSL) l2c_qos_pp#
1669 *
1670 * L2C Core QOS Level Registers
1671 */
1672 union bdk_l2c_qos_ppx
1673 {
1674 uint64_t u;
1675 struct bdk_l2c_qos_ppx_s
1676 {
1677 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1678 uint64_t reserved_3_63 : 61;
1679 uint64_t lvl : 3; /**< [ 2: 0](R/W) QOS level to use for this core. */
1680 #else /* Word 0 - Little Endian */
1681 uint64_t lvl : 3; /**< [ 2: 0](R/W) QOS level to use for this core. */
1682 uint64_t reserved_3_63 : 61;
1683 #endif /* Word 0 - End */
1684 } s;
1685 /* struct bdk_l2c_qos_ppx_s cn; */
1686 };
1687 typedef union bdk_l2c_qos_ppx bdk_l2c_qos_ppx_t;
1688
1689 static inline uint64_t BDK_L2C_QOS_PPX(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_QOS_PPX(unsigned long a)1690 static inline uint64_t BDK_L2C_QOS_PPX(unsigned long a)
1691 {
1692 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
1693 return 0x87e080880000ll + 8ll * ((a) & 0x3);
1694 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
1695 return 0x87e080880000ll + 8ll * ((a) & 0x1f);
1696 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
1697 return 0x87e080880000ll + 8ll * ((a) & 0x3f);
1698 __bdk_csr_fatal("L2C_QOS_PPX", 1, a, 0, 0, 0);
1699 }
1700
1701 #define typedef_BDK_L2C_QOS_PPX(a) bdk_l2c_qos_ppx_t
1702 #define bustype_BDK_L2C_QOS_PPX(a) BDK_CSR_TYPE_RSL
1703 #define basename_BDK_L2C_QOS_PPX(a) "L2C_QOS_PPX"
1704 #define device_bar_BDK_L2C_QOS_PPX(a) 0x0 /* PF_BAR0 */
1705 #define busnum_BDK_L2C_QOS_PPX(a) (a)
1706 #define arguments_BDK_L2C_QOS_PPX(a) (a),-1,-1,-1
1707
1708 /**
1709 * Register (RSL) l2c_qos_wgt
1710 *
1711 * L2C QOS Weight Register
1712 */
1713 union bdk_l2c_qos_wgt
1714 {
1715 uint64_t u;
1716 struct bdk_l2c_qos_wgt_s
1717 {
1718 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1719 uint64_t wgt7 : 8; /**< [ 63: 56](R/W) Weight for QOS level 7. */
1720 uint64_t wgt6 : 8; /**< [ 55: 48](R/W) Weight for QOS level 6. */
1721 uint64_t wgt5 : 8; /**< [ 47: 40](R/W) Weight for QOS level 5. */
1722 uint64_t wgt4 : 8; /**< [ 39: 32](R/W) Weight for QOS level 4. */
1723 uint64_t wgt3 : 8; /**< [ 31: 24](R/W) Weight for QOS level 3. */
1724 uint64_t wgt2 : 8; /**< [ 23: 16](R/W) Weight for QOS level 2. */
1725 uint64_t wgt1 : 8; /**< [ 15: 8](R/W) Weight for QOS level 1. */
1726 uint64_t wgt0 : 8; /**< [ 7: 0](R/W) Weight for QOS level 0. */
1727 #else /* Word 0 - Little Endian */
1728 uint64_t wgt0 : 8; /**< [ 7: 0](R/W) Weight for QOS level 0. */
1729 uint64_t wgt1 : 8; /**< [ 15: 8](R/W) Weight for QOS level 1. */
1730 uint64_t wgt2 : 8; /**< [ 23: 16](R/W) Weight for QOS level 2. */
1731 uint64_t wgt3 : 8; /**< [ 31: 24](R/W) Weight for QOS level 3. */
1732 uint64_t wgt4 : 8; /**< [ 39: 32](R/W) Weight for QOS level 4. */
1733 uint64_t wgt5 : 8; /**< [ 47: 40](R/W) Weight for QOS level 5. */
1734 uint64_t wgt6 : 8; /**< [ 55: 48](R/W) Weight for QOS level 6. */
1735 uint64_t wgt7 : 8; /**< [ 63: 56](R/W) Weight for QOS level 7. */
1736 #endif /* Word 0 - End */
1737 } s;
1738 /* struct bdk_l2c_qos_wgt_s cn; */
1739 };
1740 typedef union bdk_l2c_qos_wgt bdk_l2c_qos_wgt_t;
1741
1742 #define BDK_L2C_QOS_WGT BDK_L2C_QOS_WGT_FUNC()
1743 static inline uint64_t BDK_L2C_QOS_WGT_FUNC(void) __attribute__ ((pure, always_inline));
BDK_L2C_QOS_WGT_FUNC(void)1744 static inline uint64_t BDK_L2C_QOS_WGT_FUNC(void)
1745 {
1746 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
1747 return 0x87e080800008ll;
1748 __bdk_csr_fatal("L2C_QOS_WGT", 0, 0, 0, 0, 0);
1749 }
1750
1751 #define typedef_BDK_L2C_QOS_WGT bdk_l2c_qos_wgt_t
1752 #define bustype_BDK_L2C_QOS_WGT BDK_CSR_TYPE_RSL
1753 #define basename_BDK_L2C_QOS_WGT "L2C_QOS_WGT"
1754 #define device_bar_BDK_L2C_QOS_WGT 0x0 /* PF_BAR0 */
1755 #define busnum_BDK_L2C_QOS_WGT 0
1756 #define arguments_BDK_L2C_QOS_WGT -1,-1,-1,-1
1757
1758 /**
1759 * Register (RSL) l2c_tad#_dll
1760 *
1761 * L2C TAD DLL Observability Register
1762 * This register provides the parameters for DLL observability.
1763 */
1764 union bdk_l2c_tadx_dll
1765 {
1766 uint64_t u;
1767 struct bdk_l2c_tadx_dll_s
1768 {
1769 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1770 uint64_t reserved_60_63 : 4;
1771 uint64_t max_dll_setting : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
1772 uint64_t min_dll_setting : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
1773 uint64_t pd_pos_rclk_refclk : 1; /**< [ 35: 35](RO/H) Phase detector output. */
1774 uint64_t pdl_rclk_refclk : 1; /**< [ 34: 34](RO/H) Phase detector output. */
1775 uint64_t pdr_rclk_refclk : 1; /**< [ 33: 33](RO/H) Phase detector output. */
1776 uint64_t reserved_32 : 1;
1777 uint64_t dly_elem_enable : 16; /**< [ 31: 16](RO/H) Delay element enable. */
1778 uint64_t dll_setting : 12; /**< [ 15: 4](RO/H) DLL setting. */
1779 uint64_t reserved_1_3 : 3;
1780 uint64_t dll_lock : 1; /**< [ 0: 0](RO/H) DLL lock: 1 = locked, 0 = unlocked. */
1781 #else /* Word 0 - Little Endian */
1782 uint64_t dll_lock : 1; /**< [ 0: 0](RO/H) DLL lock: 1 = locked, 0 = unlocked. */
1783 uint64_t reserved_1_3 : 3;
1784 uint64_t dll_setting : 12; /**< [ 15: 4](RO/H) DLL setting. */
1785 uint64_t dly_elem_enable : 16; /**< [ 31: 16](RO/H) Delay element enable. */
1786 uint64_t reserved_32 : 1;
1787 uint64_t pdr_rclk_refclk : 1; /**< [ 33: 33](RO/H) Phase detector output. */
1788 uint64_t pdl_rclk_refclk : 1; /**< [ 34: 34](RO/H) Phase detector output. */
1789 uint64_t pd_pos_rclk_refclk : 1; /**< [ 35: 35](RO/H) Phase detector output. */
1790 uint64_t min_dll_setting : 12; /**< [ 47: 36](RO/H) Min reported DLL setting. */
1791 uint64_t max_dll_setting : 12; /**< [ 59: 48](RO/H) Max reported DLL setting. */
1792 uint64_t reserved_60_63 : 4;
1793 #endif /* Word 0 - End */
1794 } s;
1795 /* struct bdk_l2c_tadx_dll_s cn; */
1796 };
1797 typedef union bdk_l2c_tadx_dll bdk_l2c_tadx_dll_t;
1798
1799 static inline uint64_t BDK_L2C_TADX_DLL(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_DLL(unsigned long a)1800 static inline uint64_t BDK_L2C_TADX_DLL(unsigned long a)
1801 {
1802 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
1803 return 0x87e050030000ll + 0x1000000ll * ((a) & 0x0);
1804 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
1805 return 0x87e050030000ll + 0x1000000ll * ((a) & 0x3);
1806 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
1807 return 0x87e050030000ll + 0x1000000ll * ((a) & 0x7);
1808 __bdk_csr_fatal("L2C_TADX_DLL", 1, a, 0, 0, 0);
1809 }
1810
1811 #define typedef_BDK_L2C_TADX_DLL(a) bdk_l2c_tadx_dll_t
1812 #define bustype_BDK_L2C_TADX_DLL(a) BDK_CSR_TYPE_RSL
1813 #define basename_BDK_L2C_TADX_DLL(a) "L2C_TADX_DLL"
1814 #define device_bar_BDK_L2C_TADX_DLL(a) 0x0 /* PF_BAR0 */
1815 #define busnum_BDK_L2C_TADX_DLL(a) (a)
1816 #define arguments_BDK_L2C_TADX_DLL(a) (a),-1,-1,-1
1817
1818 /**
1819 * Register (RSL) l2c_tad#_err
1820 *
1821 * L2C TAD Request Error Info Registers
1822 * This register records error information for *DISOCI and *NXM
1823 * interrupts. The NXM logic only applies to local addresses. A command for
1824 * a remote address does not cause a [RDNXM]/[WRNXM] on the requesting node, but
1825 * may on the remote node. Similarly, [RDDISOCI]/[WRDISOCI] is always for a remote
1826 * address. The first [WRDISOCI]/[WRNXM] error will lock the register until the
1827 * logged error type is cleared; [RDDISOCI]/[RDNXM] never locks the register.
1828 */
1829 union bdk_l2c_tadx_err
1830 {
1831 uint64_t u;
1832 struct bdk_l2c_tadx_err_s
1833 {
1834 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1835 uint64_t rdnxm : 1; /**< [ 63: 63](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDNXM] error. */
1836 uint64_t wrnxm : 1; /**< [ 62: 62](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRNXM] error. */
1837 uint64_t rddisoci : 1; /**< [ 61: 61](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDDISOCI] error. */
1838 uint64_t wrdisoci : 1; /**< [ 60: 60](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRDISOCI] error. */
1839 uint64_t nonsec : 1; /**< [ 59: 59](RO/H) Nonsecure (NS) bit of request causing error. */
1840 uint64_t cmd : 8; /**< [ 58: 51](RO/H) Encoding of XMC or CCPI command causing error.
1841 Internal:
1842 If CMD\<7\>==1, use XMC_CMD_E to
1843 decode CMD\<6:0\>. If CMD\<7:5\>==0, use OCI_MREQ_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==1,
1844 use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2, use OCI_MRSP_CMD_E to decode
1845 CMD\<4:0\>. */
1846 uint64_t source : 7; /**< [ 50: 44](RO/H) XMC source of request causing error. If [SOURCE]\<6\>==0, then [SOURCE]\<5:0\> is
1847 PPID, else [SOURCE]\<3:0\> is BUSID of the IOB which made the request. If
1848 [CMD]\<7\>==0, this field is unpredictable. */
1849 uint64_t reserved_42_43 : 2;
1850 uint64_t node : 2; /**< [ 41: 40](RO/H) CCPI node of XMC request causing error. For *NXM errors [NODE] is always the node that
1851 generated request causing the error (*NXM errors are logged at the home node). For *DISOCI
1852 errors, is the NODE the request is directed to (DISOCI request is always the current
1853 node). */
1854 uint64_t addr : 40; /**< [ 39: 0](RO/H) XMC address causing the error. [ADDR]\<6:0\> is unpredictable for *DISOCI and *NXM
1855 errors. This field is the physical address after index aliasing (if enabled). */
1856 #else /* Word 0 - Little Endian */
1857 uint64_t addr : 40; /**< [ 39: 0](RO/H) XMC address causing the error. [ADDR]\<6:0\> is unpredictable for *DISOCI and *NXM
1858 errors. This field is the physical address after index aliasing (if enabled). */
1859 uint64_t node : 2; /**< [ 41: 40](RO/H) CCPI node of XMC request causing error. For *NXM errors [NODE] is always the node that
1860 generated request causing the error (*NXM errors are logged at the home node). For *DISOCI
1861 errors, is the NODE the request is directed to (DISOCI request is always the current
1862 node). */
1863 uint64_t reserved_42_43 : 2;
1864 uint64_t source : 7; /**< [ 50: 44](RO/H) XMC source of request causing error. If [SOURCE]\<6\>==0, then [SOURCE]\<5:0\> is
1865 PPID, else [SOURCE]\<3:0\> is BUSID of the IOB which made the request. If
1866 [CMD]\<7\>==0, this field is unpredictable. */
1867 uint64_t cmd : 8; /**< [ 58: 51](RO/H) Encoding of XMC or CCPI command causing error.
1868 Internal:
1869 If CMD\<7\>==1, use XMC_CMD_E to
1870 decode CMD\<6:0\>. If CMD\<7:5\>==0, use OCI_MREQ_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==1,
1871 use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2, use OCI_MRSP_CMD_E to decode
1872 CMD\<4:0\>. */
1873 uint64_t nonsec : 1; /**< [ 59: 59](RO/H) Nonsecure (NS) bit of request causing error. */
1874 uint64_t wrdisoci : 1; /**< [ 60: 60](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRDISOCI] error. */
1875 uint64_t rddisoci : 1; /**< [ 61: 61](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDDISOCI] error. */
1876 uint64_t wrnxm : 1; /**< [ 62: 62](RO/H) Logged information is for a L2C_TAD()_INT_W1C[WRNXM] error. */
1877 uint64_t rdnxm : 1; /**< [ 63: 63](RO/H) Logged information is for a L2C_TAD()_INT_W1C[RDNXM] error. */
1878 #endif /* Word 0 - End */
1879 } s;
1880 /* struct bdk_l2c_tadx_err_s cn; */
1881 };
1882 typedef union bdk_l2c_tadx_err bdk_l2c_tadx_err_t;
1883
1884 static inline uint64_t BDK_L2C_TADX_ERR(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_ERR(unsigned long a)1885 static inline uint64_t BDK_L2C_TADX_ERR(unsigned long a)
1886 {
1887 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
1888 return 0x87e050060000ll + 0x1000000ll * ((a) & 0x0);
1889 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
1890 return 0x87e050060000ll + 0x1000000ll * ((a) & 0x3);
1891 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
1892 return 0x87e050060000ll + 0x1000000ll * ((a) & 0x7);
1893 __bdk_csr_fatal("L2C_TADX_ERR", 1, a, 0, 0, 0);
1894 }
1895
1896 #define typedef_BDK_L2C_TADX_ERR(a) bdk_l2c_tadx_err_t
1897 #define bustype_BDK_L2C_TADX_ERR(a) BDK_CSR_TYPE_RSL
1898 #define basename_BDK_L2C_TADX_ERR(a) "L2C_TADX_ERR"
1899 #define device_bar_BDK_L2C_TADX_ERR(a) 0x0 /* PF_BAR0 */
1900 #define busnum_BDK_L2C_TADX_ERR(a) (a)
1901 #define arguments_BDK_L2C_TADX_ERR(a) (a),-1,-1,-1
1902
1903 /**
1904 * Register (RSL) l2c_tad#_pfc#
1905 *
1906 * L2C TAD Performance Counter Registers
1907 */
1908 union bdk_l2c_tadx_pfcx
1909 {
1910 uint64_t u;
1911 struct bdk_l2c_tadx_pfcx_s
1912 {
1913 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1914 uint64_t count : 64; /**< [ 63: 0](R/W/H) Current counter value. */
1915 #else /* Word 0 - Little Endian */
1916 uint64_t count : 64; /**< [ 63: 0](R/W/H) Current counter value. */
1917 #endif /* Word 0 - End */
1918 } s;
1919 /* struct bdk_l2c_tadx_pfcx_s cn; */
1920 };
1921 typedef union bdk_l2c_tadx_pfcx bdk_l2c_tadx_pfcx_t;
1922
1923 static inline uint64_t BDK_L2C_TADX_PFCX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_PFCX(unsigned long a,unsigned long b)1924 static inline uint64_t BDK_L2C_TADX_PFCX(unsigned long a, unsigned long b)
1925 {
1926 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a==0) && (b<=3)))
1927 return 0x87e050010100ll + 0x1000000ll * ((a) & 0x0) + 8ll * ((b) & 0x3);
1928 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=3) && (b<=3)))
1929 return 0x87e050010100ll + 0x1000000ll * ((a) & 0x3) + 8ll * ((b) & 0x3);
1930 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=7) && (b<=3)))
1931 return 0x87e050010100ll + 0x1000000ll * ((a) & 0x7) + 8ll * ((b) & 0x3);
1932 __bdk_csr_fatal("L2C_TADX_PFCX", 2, a, b, 0, 0);
1933 }
1934
1935 #define typedef_BDK_L2C_TADX_PFCX(a,b) bdk_l2c_tadx_pfcx_t
1936 #define bustype_BDK_L2C_TADX_PFCX(a,b) BDK_CSR_TYPE_RSL
1937 #define basename_BDK_L2C_TADX_PFCX(a,b) "L2C_TADX_PFCX"
1938 #define device_bar_BDK_L2C_TADX_PFCX(a,b) 0x0 /* PF_BAR0 */
1939 #define busnum_BDK_L2C_TADX_PFCX(a,b) (a)
1940 #define arguments_BDK_L2C_TADX_PFCX(a,b) (a),(b),-1,-1
1941
1942 /**
1943 * Register (RSL) l2c_tad#_prf
1944 *
1945 * L2C TAD Performance Counter Control Registers
1946 * All four counters are equivalent and can use any of the defined selects.
1947 */
1948 union bdk_l2c_tadx_prf
1949 {
1950 uint64_t u;
1951 struct bdk_l2c_tadx_prf_s
1952 {
1953 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1954 uint64_t reserved_32_63 : 32;
1955 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1956 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1957 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1958 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1959 #else /* Word 0 - Little Endian */
1960 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1961 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1962 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1963 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1964 uint64_t reserved_32_63 : 32;
1965 #endif /* Word 0 - End */
1966 } s;
1967 /* struct bdk_l2c_tadx_prf_s cn81xx; */
1968 struct bdk_l2c_tadx_prf_cn88xx
1969 {
1970 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1971 uint64_t reserved_32_63 : 32;
1972 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..7)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1973 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..7)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1974 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0..7)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1975 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0..7)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1976 #else /* Word 0 - Little Endian */
1977 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0..7)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1978 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0..7)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1979 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..7)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1980 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..7)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1981 uint64_t reserved_32_63 : 32;
1982 #endif /* Word 0 - End */
1983 } cn88xx;
1984 struct bdk_l2c_tadx_prf_cn83xx
1985 {
1986 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
1987 uint64_t reserved_32_63 : 32;
1988 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..3)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1989 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..3)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1990 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0..3)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1991 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0..3)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1992 #else /* Word 0 - Little Endian */
1993 uint64_t cnt0sel : 8; /**< [ 7: 0](R/W) Selects event to count for L2C_TAD(0..3)_PFC(0). Enumerated by L2C_TAD_PRF_SEL_E. */
1994 uint64_t cnt1sel : 8; /**< [ 15: 8](R/W) Selects event to count for L2C_TAD(0..3)_PFC(1). Enumerated by L2C_TAD_PRF_SEL_E. */
1995 uint64_t cnt2sel : 8; /**< [ 23: 16](R/W) Selects event to count for L2C_TAD(0..3)_PFC(2). Enumerated by L2C_TAD_PRF_SEL_E. */
1996 uint64_t cnt3sel : 8; /**< [ 31: 24](R/W) Selects event to count for L2C_TAD(0..3)_PFC(3). Enumerated by L2C_TAD_PRF_SEL_E. */
1997 uint64_t reserved_32_63 : 32;
1998 #endif /* Word 0 - End */
1999 } cn83xx;
2000 };
2001 typedef union bdk_l2c_tadx_prf bdk_l2c_tadx_prf_t;
2002
2003 static inline uint64_t BDK_L2C_TADX_PRF(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_PRF(unsigned long a)2004 static inline uint64_t BDK_L2C_TADX_PRF(unsigned long a)
2005 {
2006 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
2007 return 0x87e050010000ll + 0x1000000ll * ((a) & 0x0);
2008 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
2009 return 0x87e050010000ll + 0x1000000ll * ((a) & 0x3);
2010 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
2011 return 0x87e050010000ll + 0x1000000ll * ((a) & 0x7);
2012 __bdk_csr_fatal("L2C_TADX_PRF", 1, a, 0, 0, 0);
2013 }
2014
2015 #define typedef_BDK_L2C_TADX_PRF(a) bdk_l2c_tadx_prf_t
2016 #define bustype_BDK_L2C_TADX_PRF(a) BDK_CSR_TYPE_RSL
2017 #define basename_BDK_L2C_TADX_PRF(a) "L2C_TADX_PRF"
2018 #define device_bar_BDK_L2C_TADX_PRF(a) 0x0 /* PF_BAR0 */
2019 #define busnum_BDK_L2C_TADX_PRF(a) (a)
2020 #define arguments_BDK_L2C_TADX_PRF(a) (a),-1,-1,-1
2021
2022 /**
2023 * Register (RSL) l2c_tad#_stat
2024 *
2025 * L2C TAD Status Registers
2026 * This register holds information about the instantaneous state of the TAD.
2027 */
2028 union bdk_l2c_tadx_stat
2029 {
2030 uint64_t u;
2031 struct bdk_l2c_tadx_stat_s
2032 {
2033 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2034 uint64_t reserved_14_63 : 50;
2035 uint64_t lfb_valid_cnt : 6; /**< [ 13: 8](RO/H) The number of LFBs in use. */
2036 uint64_t reserved_5_7 : 3;
2037 uint64_t vbf_inuse_cnt : 5; /**< [ 4: 0](RO/H) The number of MCI VBFs in use. */
2038 #else /* Word 0 - Little Endian */
2039 uint64_t vbf_inuse_cnt : 5; /**< [ 4: 0](RO/H) The number of MCI VBFs in use. */
2040 uint64_t reserved_5_7 : 3;
2041 uint64_t lfb_valid_cnt : 6; /**< [ 13: 8](RO/H) The number of LFBs in use. */
2042 uint64_t reserved_14_63 : 50;
2043 #endif /* Word 0 - End */
2044 } s;
2045 /* struct bdk_l2c_tadx_stat_s cn; */
2046 };
2047 typedef union bdk_l2c_tadx_stat bdk_l2c_tadx_stat_t;
2048
2049 static inline uint64_t BDK_L2C_TADX_STAT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_STAT(unsigned long a)2050 static inline uint64_t BDK_L2C_TADX_STAT(unsigned long a)
2051 {
2052 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
2053 return 0x87e050020008ll + 0x1000000ll * ((a) & 0x0);
2054 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
2055 return 0x87e050020008ll + 0x1000000ll * ((a) & 0x3);
2056 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
2057 return 0x87e050020008ll + 0x1000000ll * ((a) & 0x7);
2058 __bdk_csr_fatal("L2C_TADX_STAT", 1, a, 0, 0, 0);
2059 }
2060
2061 #define typedef_BDK_L2C_TADX_STAT(a) bdk_l2c_tadx_stat_t
2062 #define bustype_BDK_L2C_TADX_STAT(a) BDK_CSR_TYPE_RSL
2063 #define basename_BDK_L2C_TADX_STAT(a) "L2C_TADX_STAT"
2064 #define device_bar_BDK_L2C_TADX_STAT(a) 0x0 /* PF_BAR0 */
2065 #define busnum_BDK_L2C_TADX_STAT(a) (a)
2066 #define arguments_BDK_L2C_TADX_STAT(a) (a),-1,-1,-1
2067
2068 /**
2069 * Register (RSL) l2c_tad#_tag
2070 *
2071 * L2C TAD Tag Data Registers
2072 * This register holds the tag information for LTGL2I and STGL2I commands.
2073 */
2074 union bdk_l2c_tadx_tag
2075 {
2076 uint64_t u;
2077 struct bdk_l2c_tadx_tag_s
2078 {
2079 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2080 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2081 (0), [SBLKDTY] must be 0 or operation is undefined. */
2082 uint64_t reserved_59 : 1;
2083 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2084 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2085 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2086 uint64_t reserved_6_41 : 36;
2087 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2088 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2089 0x0 = Invalid.
2090 0x1 = Shared.
2091 0x2 = Exclusive.
2092
2093 Note that a local address will never have the value of exclusive as that state
2094 is encoded as shared in the tag and invalid in the RTG. */
2095 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2096 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2097 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2098 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2099 #else /* Word 0 - Little Endian */
2100 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2101 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2102 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2103 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2104 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2105 0x0 = Invalid.
2106 0x1 = Shared.
2107 0x2 = Exclusive.
2108
2109 Note that a local address will never have the value of exclusive as that state
2110 is encoded as shared in the tag and invalid in the RTG. */
2111 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2112 uint64_t reserved_6_41 : 36;
2113 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2114 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2115 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2116 uint64_t reserved_59 : 1;
2117 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2118 (0), [SBLKDTY] must be 0 or operation is undefined. */
2119 #endif /* Word 0 - End */
2120 } s;
2121 struct bdk_l2c_tadx_tag_cn81xx
2122 {
2123 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2124 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2125 (0), [SBLKDTY] must be 0 or operation is undefined. */
2126 uint64_t reserved_59 : 1;
2127 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2128 uint64_t reserved_57 : 1;
2129 uint64_t businfo : 8; /**< [ 56: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2130 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2131 uint64_t reserved_40_41 : 2;
2132 uint64_t tag : 23; /**< [ 39: 17](R/W/H) The tag. TAG\<39:17\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2133 address. */
2134 uint64_t reserved_6_16 : 11;
2135 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2136 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2137 0x0 = Invalid.
2138 0x1 = Shared.
2139 0x2 = Exclusive.
2140
2141 Note that a local address will never have the value of exclusive as that state
2142 is encoded as shared in the tag and invalid in the RTG. */
2143 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2144 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2145 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2146 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2147 #else /* Word 0 - Little Endian */
2148 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2149 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2150 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2151 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2152 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2153 0x0 = Invalid.
2154 0x1 = Shared.
2155 0x2 = Exclusive.
2156
2157 Note that a local address will never have the value of exclusive as that state
2158 is encoded as shared in the tag and invalid in the RTG. */
2159 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2160 uint64_t reserved_6_16 : 11;
2161 uint64_t tag : 23; /**< [ 39: 17](R/W/H) The tag. TAG\<39:17\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2162 address. */
2163 uint64_t reserved_40_41 : 2;
2164 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2165 uint64_t businfo : 8; /**< [ 56: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2166 uint64_t reserved_57 : 1;
2167 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2168 uint64_t reserved_59 : 1;
2169 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2170 (0), [SBLKDTY] must be 0 or operation is undefined. */
2171 #endif /* Word 0 - End */
2172 } cn81xx;
2173 struct bdk_l2c_tadx_tag_cn88xx
2174 {
2175 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2176 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2177 (0), [SBLKDTY] must be 0 or operation is undefined. */
2178 uint64_t reserved_59 : 1;
2179 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2180 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2181 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2182 uint64_t tag : 22; /**< [ 41: 20](R/W/H) The tag. TAG\<39:20\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2183 address. TAG\<41:40\> is the CCPI node of the address. The RTG must always have the
2184 TAG\<41:40\> equal to the current node or operation is undefined. */
2185 uint64_t reserved_6_19 : 14;
2186 uint64_t node : 2; /**< [ 5: 4](R/W/H) The node ID for the remote node which holds this block. Ignored/loaded with 0 for TAG accesses. */
2187 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2188 0x0 = Invalid.
2189 0x1 = Shared.
2190 0x2 = Exclusive.
2191
2192 Note that a local address will never have the value of exclusive as that state
2193 is encoded as shared in the tag and invalid in the RTG. */
2194 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2195 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2196 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2197 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2198 #else /* Word 0 - Little Endian */
2199 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2200 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2201 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2202 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2203 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2204 0x0 = Invalid.
2205 0x1 = Shared.
2206 0x2 = Exclusive.
2207
2208 Note that a local address will never have the value of exclusive as that state
2209 is encoded as shared in the tag and invalid in the RTG. */
2210 uint64_t node : 2; /**< [ 5: 4](R/W/H) The node ID for the remote node which holds this block. Ignored/loaded with 0 for TAG accesses. */
2211 uint64_t reserved_6_19 : 14;
2212 uint64_t tag : 22; /**< [ 41: 20](R/W/H) The tag. TAG\<39:20\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2213 address. TAG\<41:40\> is the CCPI node of the address. The RTG must always have the
2214 TAG\<41:40\> equal to the current node or operation is undefined. */
2215 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2216 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2217 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2218 uint64_t reserved_59 : 1;
2219 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2220 (0), [SBLKDTY] must be 0 or operation is undefined. */
2221 #endif /* Word 0 - End */
2222 } cn88xx;
2223 struct bdk_l2c_tadx_tag_cn83xx
2224 {
2225 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2226 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2227 (0), [SBLKDTY] must be 0 or operation is undefined. */
2228 uint64_t reserved_59 : 1;
2229 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2230 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2231 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2232 uint64_t reserved_40_41 : 2;
2233 uint64_t tag : 22; /**< [ 39: 18](R/W/H) The tag. TAG\<39:18\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2234 address. */
2235 uint64_t reserved_6_17 : 12;
2236 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2237 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2238 0x0 = Invalid.
2239 0x1 = Shared.
2240 0x2 = Exclusive.
2241
2242 Note that a local address will never have the value of exclusive as that state
2243 is encoded as shared in the tag and invalid in the RTG. */
2244 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2245 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2246 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2247 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2248 #else /* Word 0 - Little Endian */
2249 uint64_t lock : 1; /**< [ 0: 0](R/W/H) The lock bit. If setting the [LOCK] bit, the USE bit should also be set or the
2250 operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2251 uint64_t used : 1; /**< [ 1: 1](R/W/H) The LRU use bit. If setting the [LOCK] bit, the USE bit should also be set or
2252 the operation is undefined. Ignored/loaded with 0 for RTG accesses. */
2253 uint64_t ts : 2; /**< [ 3: 2](R/W/H) The tag state.
2254 0x0 = Invalid.
2255 0x1 = Shared.
2256 0x2 = Exclusive.
2257
2258 Note that a local address will never have the value of exclusive as that state
2259 is encoded as shared in the tag and invalid in the RTG. */
2260 uint64_t node : 2; /**< [ 5: 4](RAZ) Reserved. */
2261 uint64_t reserved_6_17 : 12;
2262 uint64_t tag : 22; /**< [ 39: 18](R/W/H) The tag. TAG\<39:18\> is the corresponding bits from the L2C+LMC internal L2/DRAM byte
2263 address. */
2264 uint64_t reserved_40_41 : 2;
2265 uint64_t ecc : 7; /**< [ 48: 42](R/W/H) The tag ECC. This field is undefined if L2C_CTL[DISECC] is not 1 when the LTGL2I reads the tags. */
2266 uint64_t businfo : 9; /**< [ 57: 49](R/W/H) The bus information bits. Ignored/loaded with 0 for RTG accesses. */
2267 uint64_t nonsec : 1; /**< [ 58: 58](R/W/H) Nonsecure bit. */
2268 uint64_t reserved_59 : 1;
2269 uint64_t sblkdty : 4; /**< [ 63: 60](R/W/H) Sub-block dirty bits. Ignored/loaded with 0 for RTG accesses. If [TS] is invalid
2270 (0), [SBLKDTY] must be 0 or operation is undefined. */
2271 #endif /* Word 0 - End */
2272 } cn83xx;
2273 };
2274 typedef union bdk_l2c_tadx_tag bdk_l2c_tadx_tag_t;
2275
2276 static inline uint64_t BDK_L2C_TADX_TAG(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_TAG(unsigned long a)2277 static inline uint64_t BDK_L2C_TADX_TAG(unsigned long a)
2278 {
2279 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
2280 return 0x87e050020000ll + 0x1000000ll * ((a) & 0x0);
2281 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
2282 return 0x87e050020000ll + 0x1000000ll * ((a) & 0x3);
2283 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
2284 return 0x87e050020000ll + 0x1000000ll * ((a) & 0x7);
2285 __bdk_csr_fatal("L2C_TADX_TAG", 1, a, 0, 0, 0);
2286 }
2287
2288 #define typedef_BDK_L2C_TADX_TAG(a) bdk_l2c_tadx_tag_t
2289 #define bustype_BDK_L2C_TADX_TAG(a) BDK_CSR_TYPE_RSL
2290 #define basename_BDK_L2C_TADX_TAG(a) "L2C_TADX_TAG"
2291 #define device_bar_BDK_L2C_TADX_TAG(a) 0x0 /* PF_BAR0 */
2292 #define busnum_BDK_L2C_TADX_TAG(a) (a)
2293 #define arguments_BDK_L2C_TADX_TAG(a) (a),-1,-1,-1
2294
2295 /**
2296 * Register (RSL) l2c_tad#_timeout
2297 *
2298 * L2C TAD LFB Timeout Info Registers
2299 * This register records error information for an LFBTO (LFB TimeOut). The first LFBTO error will
2300 * lock the register until the logged error type s cleared. If multiple LFBs timed out
2301 * simultaneously, then this will contain the information from the lowest LFB number that has
2302 * timed-out. The address can be for the original transaction address or the replacement address
2303 * (if both could have timed out, then the transaction address will be here).
2304 */
2305 union bdk_l2c_tadx_timeout
2306 {
2307 uint64_t u;
2308 struct bdk_l2c_tadx_timeout_s
2309 {
2310 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2311 uint64_t infolfb : 1; /**< [ 63: 63](RO/H) Logged address information is for the LFB original transation. */
2312 uint64_t infovab : 1; /**< [ 62: 62](RO/H) Logged address information is for the VAB (replacement). If both this and
2313 [INFOLFB] is set, then both could have timed out, but info captured is from the
2314 original LFB. */
2315 uint64_t reserved_57_61 : 5;
2316 uint64_t lfbnum : 5; /**< [ 56: 52](RO/H) The LFB number of the entry that timed out, and have its info captures in this register. */
2317 uint64_t cmd : 8; /**< [ 51: 44](RO/H) Encoding of XMC or CCPI command causing error.
2318 Internal:
2319 If CMD\<7\>==1, use XMC_CMD_E to decode CMD\<6:0\>. If CMD\<7:5\>==0, use
2320 OCI_MREQ_CMD_E to
2321 decode CMD\<4:0\>. If CMD\<7:5\>==1, use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2,
2322 use OCI_MRSP_CMD_E to decode CMD\<4:0\>. */
2323 uint64_t reserved_42_43 : 2;
2324 uint64_t node : 2; /**< [ 41: 40](RO/H) Home node of the address causing the error. Similar to [ADDR] below, this can be the
2325 request address (if [INFOLFB] is set), else it is the replacement address (if [INFOLFB] is
2326 clear & [INFOVAB] is set). */
2327 uint64_t addr : 33; /**< [ 39: 7](RO/H) Cache line address causing the error. This can be either the request address or
2328 the replacement (if [INFOLFB] is set), else it is the replacement address (if
2329 [INFOLFB] is clear & [INFOVAB] is set). This address is a physical address. L2C
2330 performs index aliasing (if enabled) on the written address and uses that for
2331 the command. This index-aliased address is what is returned on a read of
2332 L2C_XMC_CMD. */
2333 uint64_t reserved_0_6 : 7;
2334 #else /* Word 0 - Little Endian */
2335 uint64_t reserved_0_6 : 7;
2336 uint64_t addr : 33; /**< [ 39: 7](RO/H) Cache line address causing the error. This can be either the request address or
2337 the replacement (if [INFOLFB] is set), else it is the replacement address (if
2338 [INFOLFB] is clear & [INFOVAB] is set). This address is a physical address. L2C
2339 performs index aliasing (if enabled) on the written address and uses that for
2340 the command. This index-aliased address is what is returned on a read of
2341 L2C_XMC_CMD. */
2342 uint64_t node : 2; /**< [ 41: 40](RO/H) Home node of the address causing the error. Similar to [ADDR] below, this can be the
2343 request address (if [INFOLFB] is set), else it is the replacement address (if [INFOLFB] is
2344 clear & [INFOVAB] is set). */
2345 uint64_t reserved_42_43 : 2;
2346 uint64_t cmd : 8; /**< [ 51: 44](RO/H) Encoding of XMC or CCPI command causing error.
2347 Internal:
2348 If CMD\<7\>==1, use XMC_CMD_E to decode CMD\<6:0\>. If CMD\<7:5\>==0, use
2349 OCI_MREQ_CMD_E to
2350 decode CMD\<4:0\>. If CMD\<7:5\>==1, use OCI_MFWD_CMD_E to decode CMD\<4:0\>. If CMD\<7:5\>==2,
2351 use OCI_MRSP_CMD_E to decode CMD\<4:0\>. */
2352 uint64_t lfbnum : 5; /**< [ 56: 52](RO/H) The LFB number of the entry that timed out, and have its info captures in this register. */
2353 uint64_t reserved_57_61 : 5;
2354 uint64_t infovab : 1; /**< [ 62: 62](RO/H) Logged address information is for the VAB (replacement). If both this and
2355 [INFOLFB] is set, then both could have timed out, but info captured is from the
2356 original LFB. */
2357 uint64_t infolfb : 1; /**< [ 63: 63](RO/H) Logged address information is for the LFB original transation. */
2358 #endif /* Word 0 - End */
2359 } s;
2360 /* struct bdk_l2c_tadx_timeout_s cn; */
2361 };
2362 typedef union bdk_l2c_tadx_timeout bdk_l2c_tadx_timeout_t;
2363
2364 static inline uint64_t BDK_L2C_TADX_TIMEOUT(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_TIMEOUT(unsigned long a)2365 static inline uint64_t BDK_L2C_TADX_TIMEOUT(unsigned long a)
2366 {
2367 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
2368 return 0x87e050050100ll + 0x1000000ll * ((a) & 0x0);
2369 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
2370 return 0x87e050050100ll + 0x1000000ll * ((a) & 0x3);
2371 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
2372 return 0x87e050050100ll + 0x1000000ll * ((a) & 0x7);
2373 __bdk_csr_fatal("L2C_TADX_TIMEOUT", 1, a, 0, 0, 0);
2374 }
2375
2376 #define typedef_BDK_L2C_TADX_TIMEOUT(a) bdk_l2c_tadx_timeout_t
2377 #define bustype_BDK_L2C_TADX_TIMEOUT(a) BDK_CSR_TYPE_RSL
2378 #define basename_BDK_L2C_TADX_TIMEOUT(a) "L2C_TADX_TIMEOUT"
2379 #define device_bar_BDK_L2C_TADX_TIMEOUT(a) 0x0 /* PF_BAR0 */
2380 #define busnum_BDK_L2C_TADX_TIMEOUT(a) (a)
2381 #define arguments_BDK_L2C_TADX_TIMEOUT(a) (a),-1,-1,-1
2382
2383 /**
2384 * Register (RSL) l2c_tad#_timetwo
2385 *
2386 * L2C TAD LFB Timeout Count Registers
2387 * This register records the number of LFB entries that have timed out.
2388 */
2389 union bdk_l2c_tadx_timetwo
2390 {
2391 uint64_t u;
2392 struct bdk_l2c_tadx_timetwo_s
2393 {
2394 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2395 uint64_t reserved_33_63 : 31;
2396 uint64_t sid : 4; /**< [ 32: 29](RO/H) Source id of the original request, that is 'source' of request. This is only valid if the
2397 request is a local request (valid if L2C_TAD()_TIMEOUT[CMD] is an XMC request and not
2398 relevant if it is an CCPI request). */
2399 uint64_t busid : 4; /**< [ 28: 25](RO/H) Busid of the original request, that is 'source' of request. */
2400 uint64_t vabst : 3; /**< [ 24: 22](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
2401 INFOVAB is set. */
2402 uint64_t lfbst : 14; /**< [ 21: 8](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
2403 INFOVAB is set. */
2404 uint64_t tocnt : 8; /**< [ 7: 0](RO/H) This is a running count of the LFB that has timed out ... the count will saturate at 0xFF.
2405 Will clear when the LFBTO interrupt is cleared. */
2406 #else /* Word 0 - Little Endian */
2407 uint64_t tocnt : 8; /**< [ 7: 0](RO/H) This is a running count of the LFB that has timed out ... the count will saturate at 0xFF.
2408 Will clear when the LFBTO interrupt is cleared. */
2409 uint64_t lfbst : 14; /**< [ 21: 8](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
2410 INFOVAB is set. */
2411 uint64_t vabst : 3; /**< [ 24: 22](RO/H) This is the LFB internal state if INFOLFB is set, else will contain VAB internal state if
2412 INFOVAB is set. */
2413 uint64_t busid : 4; /**< [ 28: 25](RO/H) Busid of the original request, that is 'source' of request. */
2414 uint64_t sid : 4; /**< [ 32: 29](RO/H) Source id of the original request, that is 'source' of request. This is only valid if the
2415 request is a local request (valid if L2C_TAD()_TIMEOUT[CMD] is an XMC request and not
2416 relevant if it is an CCPI request). */
2417 uint64_t reserved_33_63 : 31;
2418 #endif /* Word 0 - End */
2419 } s;
2420 /* struct bdk_l2c_tadx_timetwo_s cn; */
2421 };
2422 typedef union bdk_l2c_tadx_timetwo bdk_l2c_tadx_timetwo_t;
2423
2424 static inline uint64_t BDK_L2C_TADX_TIMETWO(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_TADX_TIMETWO(unsigned long a)2425 static inline uint64_t BDK_L2C_TADX_TIMETWO(unsigned long a)
2426 {
2427 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a==0))
2428 return 0x87e050050000ll + 0x1000000ll * ((a) & 0x0);
2429 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=3))
2430 return 0x87e050050000ll + 0x1000000ll * ((a) & 0x3);
2431 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=7))
2432 return 0x87e050050000ll + 0x1000000ll * ((a) & 0x7);
2433 __bdk_csr_fatal("L2C_TADX_TIMETWO", 1, a, 0, 0, 0);
2434 }
2435
2436 #define typedef_BDK_L2C_TADX_TIMETWO(a) bdk_l2c_tadx_timetwo_t
2437 #define bustype_BDK_L2C_TADX_TIMETWO(a) BDK_CSR_TYPE_RSL
2438 #define basename_BDK_L2C_TADX_TIMETWO(a) "L2C_TADX_TIMETWO"
2439 #define device_bar_BDK_L2C_TADX_TIMETWO(a) 0x0 /* PF_BAR0 */
2440 #define busnum_BDK_L2C_TADX_TIMETWO(a) (a)
2441 #define arguments_BDK_L2C_TADX_TIMETWO(a) (a),-1,-1,-1
2442
2443 /**
2444 * Register (RSL) l2c_tad_ctl
2445 *
2446 * L2C TAD Control Register
2447 * In CNXXXX, [MAXLFB], EXLRQ, EXRRQ, EXFWD, EXVIC refer to half-TAD
2448 * LFBs/VABs. Therefore, even though there are 32 LFBs/VABs in a full TAD, the number
2449 * applies to both halves.
2450 * * If [MAXLFB] is != 0, [VBF_THRESH] should be less than [MAXLFB].
2451 * * If [MAXVBF] is != 0, [VBF_THRESH] should be less than [MAXVBF].
2452 * * If [MAXLFB] != 0, EXLRQ + EXRRQ + EXFWD + EXVIC must be less than or equal to [MAXLFB] - 4.
2453 * * If [MAXLFB] == 0, EXLRQ + EXRRQ + EXFWD + EXVIC must be less than or equal to 12.
2454 */
2455 union bdk_l2c_tad_ctl
2456 {
2457 uint64_t u;
2458 struct bdk_l2c_tad_ctl_s
2459 {
2460 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2461 uint64_t reserved_33_63 : 31;
2462 uint64_t frcnalc : 1; /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
2463 uint64_t disrstp : 1; /**< [ 31: 31](RO) Reserved. */
2464 uint64_t wtlmcwrdn : 1; /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
2465 uint64_t wtinvdn : 1; /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
2466 uint64_t wtfilldn : 1; /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
2467 uint64_t exlrq : 4; /**< [ 27: 24](RO) Reserved. */
2468 uint64_t exrrq : 4; /**< [ 23: 20](RO) Reserved. */
2469 uint64_t exfwd : 4; /**< [ 19: 16](RO) Reserved. */
2470 uint64_t exvic : 4; /**< [ 15: 12](RO) Reserved. */
2471 uint64_t vbf_thresh : 4; /**< [ 11: 8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
2472 the priority of all its write operations in the LMC. */
2473 uint64_t maxvbf : 4; /**< [ 7: 4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
2474 uint64_t maxlfb : 4; /**< [ 3: 0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
2475 #else /* Word 0 - Little Endian */
2476 uint64_t maxlfb : 4; /**< [ 3: 0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
2477 uint64_t maxvbf : 4; /**< [ 7: 4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
2478 uint64_t vbf_thresh : 4; /**< [ 11: 8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
2479 the priority of all its write operations in the LMC. */
2480 uint64_t exvic : 4; /**< [ 15: 12](RO) Reserved. */
2481 uint64_t exfwd : 4; /**< [ 19: 16](RO) Reserved. */
2482 uint64_t exrrq : 4; /**< [ 23: 20](RO) Reserved. */
2483 uint64_t exlrq : 4; /**< [ 27: 24](RO) Reserved. */
2484 uint64_t wtfilldn : 1; /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
2485 uint64_t wtinvdn : 1; /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
2486 uint64_t wtlmcwrdn : 1; /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
2487 uint64_t disrstp : 1; /**< [ 31: 31](RO) Reserved. */
2488 uint64_t frcnalc : 1; /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
2489 uint64_t reserved_33_63 : 31;
2490 #endif /* Word 0 - End */
2491 } s;
2492 /* struct bdk_l2c_tad_ctl_s cn81xx; */
2493 struct bdk_l2c_tad_ctl_cn88xx
2494 {
2495 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2496 uint64_t reserved_33_63 : 31;
2497 uint64_t frcnalc : 1; /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
2498 uint64_t disrstp : 1; /**< [ 31: 31](R/W) When set, if the L2 receives an RSTP XMC command, it treats it as a STP. */
2499 uint64_t wtlmcwrdn : 1; /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
2500 uint64_t wtinvdn : 1; /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
2501 uint64_t wtfilldn : 1; /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
2502 uint64_t exlrq : 4; /**< [ 27: 24](R/W) Extra LFBs to reserve for locally generated XMC commands. None are reserved for functional
2503 correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2504 uint64_t exrrq : 4; /**< [ 23: 20](R/W) Extra LFBs to reserve for Rxxx CCPI commands beyond the 1 required for CCPI protocol
2505 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2506 uint64_t exfwd : 4; /**< [ 19: 16](R/W) Extra LFBs to reserve for Fxxx/SINV CCPI commands beyond the 1 required for CCPI protocol
2507 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2508 uint64_t exvic : 4; /**< [ 15: 12](R/W) Extra LFBs to reserve for VICx CCPI commands beyond the 1 required for CCPI protocol
2509 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2510 uint64_t vbf_thresh : 4; /**< [ 11: 8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
2511 the priority of all its write operations in the LMC. */
2512 uint64_t maxvbf : 4; /**< [ 7: 4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
2513 uint64_t maxlfb : 4; /**< [ 3: 0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
2514 #else /* Word 0 - Little Endian */
2515 uint64_t maxlfb : 4; /**< [ 3: 0](R/W) Maximum VABs/LFBs in use at once (0 means 16, 1-15 as expected). */
2516 uint64_t maxvbf : 4; /**< [ 7: 4](R/W) Maximum VBFs in use at once (0 means 16, 1-15 as expected). */
2517 uint64_t vbf_thresh : 4; /**< [ 11: 8](R/W) VBF threshold. When the number of in-use VBFs exceeds this number the L2C TAD increases
2518 the priority of all its write operations in the LMC. */
2519 uint64_t exvic : 4; /**< [ 15: 12](R/W) Extra LFBs to reserve for VICx CCPI commands beyond the 1 required for CCPI protocol
2520 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2521 uint64_t exfwd : 4; /**< [ 19: 16](R/W) Extra LFBs to reserve for Fxxx/SINV CCPI commands beyond the 1 required for CCPI protocol
2522 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2523 uint64_t exrrq : 4; /**< [ 23: 20](R/W) Extra LFBs to reserve for Rxxx CCPI commands beyond the 1 required for CCPI protocol
2524 functional correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2525 uint64_t exlrq : 4; /**< [ 27: 24](R/W) Extra LFBs to reserve for locally generated XMC commands. None are reserved for functional
2526 correctness. Ignored if L2C_OCI_CTL[ENAOCI] is 0. */
2527 uint64_t wtfilldn : 1; /**< [ 28: 28](R/W) Be more conservative with LFB done relative to fills. */
2528 uint64_t wtinvdn : 1; /**< [ 29: 29](R/W) Be more conservative with LFB done relative to invalidates. */
2529 uint64_t wtlmcwrdn : 1; /**< [ 30: 30](R/W) Be more conservative with LFB done relative to LMC writes. */
2530 uint64_t disrstp : 1; /**< [ 31: 31](R/W) When set, if the L2 receives an RSTP XMC command, it treats it as a STP. */
2531 uint64_t frcnalc : 1; /**< [ 32: 32](R/W) When set, all cache accesses are forced to not allocate in the local L2. */
2532 uint64_t reserved_33_63 : 31;
2533 #endif /* Word 0 - End */
2534 } cn88xx;
2535 /* struct bdk_l2c_tad_ctl_s cn83xx; */
2536 };
2537 typedef union bdk_l2c_tad_ctl bdk_l2c_tad_ctl_t;
2538
2539 #define BDK_L2C_TAD_CTL BDK_L2C_TAD_CTL_FUNC()
2540 static inline uint64_t BDK_L2C_TAD_CTL_FUNC(void) __attribute__ ((pure, always_inline));
BDK_L2C_TAD_CTL_FUNC(void)2541 static inline uint64_t BDK_L2C_TAD_CTL_FUNC(void)
2542 {
2543 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
2544 return 0x87e080800018ll;
2545 __bdk_csr_fatal("L2C_TAD_CTL", 0, 0, 0, 0, 0);
2546 }
2547
2548 #define typedef_BDK_L2C_TAD_CTL bdk_l2c_tad_ctl_t
2549 #define bustype_BDK_L2C_TAD_CTL BDK_CSR_TYPE_RSL
2550 #define basename_BDK_L2C_TAD_CTL "L2C_TAD_CTL"
2551 #define device_bar_BDK_L2C_TAD_CTL 0x0 /* PF_BAR0 */
2552 #define busnum_BDK_L2C_TAD_CTL 0
2553 #define arguments_BDK_L2C_TAD_CTL -1,-1,-1,-1
2554
2555 /**
2556 * Register (RSL) l2c_wpar_iob#
2557 *
2558 * L2C IOB Way Partitioning Registers
2559 */
2560 union bdk_l2c_wpar_iobx
2561 {
2562 uint64_t u;
2563 struct bdk_l2c_wpar_iobx_s
2564 {
2565 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2566 uint64_t reserved_16_63 : 48;
2567 uint64_t mask : 16; /**< [ 15: 0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
2568 because of the L2C cripple fuses. */
2569 #else /* Word 0 - Little Endian */
2570 uint64_t mask : 16; /**< [ 15: 0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
2571 because of the L2C cripple fuses. */
2572 uint64_t reserved_16_63 : 48;
2573 #endif /* Word 0 - End */
2574 } s;
2575 /* struct bdk_l2c_wpar_iobx_s cn; */
2576 };
2577 typedef union bdk_l2c_wpar_iobx bdk_l2c_wpar_iobx_t;
2578
2579 static inline uint64_t BDK_L2C_WPAR_IOBX(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_WPAR_IOBX(unsigned long a)2580 static inline uint64_t BDK_L2C_WPAR_IOBX(unsigned long a)
2581 {
2582 if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX) && (a<=15))
2583 return 0x87e080840200ll + 8ll * ((a) & 0xf);
2584 __bdk_csr_fatal("L2C_WPAR_IOBX", 1, a, 0, 0, 0);
2585 }
2586
2587 #define typedef_BDK_L2C_WPAR_IOBX(a) bdk_l2c_wpar_iobx_t
2588 #define bustype_BDK_L2C_WPAR_IOBX(a) BDK_CSR_TYPE_RSL
2589 #define basename_BDK_L2C_WPAR_IOBX(a) "L2C_WPAR_IOBX"
2590 #define device_bar_BDK_L2C_WPAR_IOBX(a) 0x0 /* PF_BAR0 */
2591 #define busnum_BDK_L2C_WPAR_IOBX(a) (a)
2592 #define arguments_BDK_L2C_WPAR_IOBX(a) (a),-1,-1,-1
2593
2594 /**
2595 * Register (RSL) l2c_wpar_pp#
2596 *
2597 * L2C Core Way Partitioning Registers
2598 */
2599 union bdk_l2c_wpar_ppx
2600 {
2601 uint64_t u;
2602 struct bdk_l2c_wpar_ppx_s
2603 {
2604 #if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
2605 uint64_t reserved_16_63 : 48;
2606 uint64_t mask : 16; /**< [ 15: 0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
2607 because of the L2C cripple fuses. */
2608 #else /* Word 0 - Little Endian */
2609 uint64_t mask : 16; /**< [ 15: 0](R/W/H) Way partitioning mask (1 means do not use). The read value of [MASK] includes bits set
2610 because of the L2C cripple fuses. */
2611 uint64_t reserved_16_63 : 48;
2612 #endif /* Word 0 - End */
2613 } s;
2614 /* struct bdk_l2c_wpar_ppx_s cn; */
2615 };
2616 typedef union bdk_l2c_wpar_ppx bdk_l2c_wpar_ppx_t;
2617
2618 static inline uint64_t BDK_L2C_WPAR_PPX(unsigned long a) __attribute__ ((pure, always_inline));
BDK_L2C_WPAR_PPX(unsigned long a)2619 static inline uint64_t BDK_L2C_WPAR_PPX(unsigned long a)
2620 {
2621 if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
2622 return 0x87e080840000ll + 8ll * ((a) & 0x3);
2623 if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
2624 return 0x87e080840000ll + 8ll * ((a) & 0x1f);
2625 if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
2626 return 0x87e080840000ll + 8ll * ((a) & 0x3f);
2627 __bdk_csr_fatal("L2C_WPAR_PPX", 1, a, 0, 0, 0);
2628 }
2629
2630 #define typedef_BDK_L2C_WPAR_PPX(a) bdk_l2c_wpar_ppx_t
2631 #define bustype_BDK_L2C_WPAR_PPX(a) BDK_CSR_TYPE_RSL
2632 #define basename_BDK_L2C_WPAR_PPX(a) "L2C_WPAR_PPX"
2633 #define device_bar_BDK_L2C_WPAR_PPX(a) 0x0 /* PF_BAR0 */
2634 #define busnum_BDK_L2C_WPAR_PPX(a) (a)
2635 #define arguments_BDK_L2C_WPAR_PPX(a) (a),-1,-1,-1
2636
2637 #endif /* __BDK_CSRS_L2C_H__ */
2638