• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __NITROX_CSR_H
3 #define __NITROX_CSR_H
4 
5 #include <asm/byteorder.h>
6 #include <linux/types.h>
7 
8 /* EMU clusters */
9 #define NR_CLUSTERS		4
10 /* Maximum cores per cluster,
11  * varies based on partname
12  */
13 #define AE_CORES_PER_CLUSTER	20
14 #define SE_CORES_PER_CLUSTER	16
15 
16 #define AE_MAX_CORES	(AE_CORES_PER_CLUSTER * NR_CLUSTERS)
17 #define SE_MAX_CORES	(SE_CORES_PER_CLUSTER * NR_CLUSTERS)
18 #define ZIP_MAX_CORES	5
19 
20 /* BIST registers */
21 #define EMU_BIST_STATUSX(_i)	(0x1402700 + ((_i) * 0x40000))
22 #define UCD_BIST_STATUS		0x12C0070
23 #define NPS_CORE_BIST_REG	0x10000E8
24 #define NPS_CORE_NPC_BIST_REG	0x1000128
25 #define NPS_PKT_SLC_BIST_REG	0x1040088
26 #define NPS_PKT_IN_BIST_REG	0x1040100
27 #define POM_BIST_REG		0x11C0100
28 #define BMI_BIST_REG		0x1140080
29 #define EFL_CORE_BIST_REGX(_i)	(0x1240100 + ((_i) * 0x400))
30 #define EFL_TOP_BIST_STAT	0x1241090
31 #define BMO_BIST_REG		0x1180080
32 #define LBC_BIST_STATUS		0x1200020
33 #define PEM_BIST_STATUSX(_i)	(0x1080468 | ((_i) << 18))
34 
35 /* EMU registers */
36 #define EMU_SE_ENABLEX(_i)	(0x1400000 + ((_i) * 0x40000))
37 #define EMU_AE_ENABLEX(_i)	(0x1400008 + ((_i) * 0x40000))
38 #define EMU_WD_INT_ENA_W1SX(_i)	(0x1402318 + ((_i) * 0x40000))
39 #define EMU_GE_INT_ENA_W1SX(_i)	(0x1402518 + ((_i) * 0x40000))
40 #define EMU_FUSE_MAPX(_i)	(0x1402708 + ((_i) * 0x40000))
41 
42 /* UCD registers */
43 #define UCD_SE_EID_UCODE_BLOCK_NUMX(_i)	(0x12C0000 + ((_i) * 0x1000))
44 #define UCD_AE_EID_UCODE_BLOCK_NUMX(_i)	(0x12C0008 + ((_i) * 0x800))
45 #define UCD_UCODE_LOAD_BLOCK_NUM	0x12C0010
46 #define UCD_UCODE_LOAD_IDX_DATAX(_i)	(0x12C0018 + ((_i) * 0x20))
47 #define UCD_SE_CNTX(_i)			(0x12C0040 + ((_i) * 0x1000))
48 #define UCD_AE_CNTX(_i)			(0x12C0048 + ((_i) * 0x800))
49 
50 /* AQM registers */
51 #define AQM_CTL                         0x1300000
52 #define AQM_INT                         0x1300008
53 #define AQM_DBELL_OVF_LO                0x1300010
54 #define AQM_DBELL_OVF_HI                0x1300018
55 #define AQM_DBELL_OVF_LO_W1S            0x1300020
56 #define AQM_DBELL_OVF_LO_ENA_W1C        0x1300028
57 #define AQM_DBELL_OVF_LO_ENA_W1S        0x1300030
58 #define AQM_DBELL_OVF_HI_W1S            0x1300038
59 #define AQM_DBELL_OVF_HI_ENA_W1C        0x1300040
60 #define AQM_DBELL_OVF_HI_ENA_W1S        0x1300048
61 #define AQM_DMA_RD_ERR_LO               0x1300050
62 #define AQM_DMA_RD_ERR_HI               0x1300058
63 #define AQM_DMA_RD_ERR_LO_W1S           0x1300060
64 #define AQM_DMA_RD_ERR_LO_ENA_W1C       0x1300068
65 #define AQM_DMA_RD_ERR_LO_ENA_W1S       0x1300070
66 #define AQM_DMA_RD_ERR_HI_W1S           0x1300078
67 #define AQM_DMA_RD_ERR_HI_ENA_W1C       0x1300080
68 #define AQM_DMA_RD_ERR_HI_ENA_W1S       0x1300088
69 #define AQM_EXEC_NA_LO                  0x1300090
70 #define AQM_EXEC_NA_HI                  0x1300098
71 #define AQM_EXEC_NA_LO_W1S              0x13000A0
72 #define AQM_EXEC_NA_LO_ENA_W1C          0x13000A8
73 #define AQM_EXEC_NA_LO_ENA_W1S          0x13000B0
74 #define AQM_EXEC_NA_HI_W1S              0x13000B8
75 #define AQM_EXEC_NA_HI_ENA_W1C          0x13000C0
76 #define AQM_EXEC_NA_HI_ENA_W1S          0x13000C8
77 #define AQM_EXEC_ERR_LO                 0x13000D0
78 #define AQM_EXEC_ERR_HI                 0x13000D8
79 #define AQM_EXEC_ERR_LO_W1S             0x13000E0
80 #define AQM_EXEC_ERR_LO_ENA_W1C         0x13000E8
81 #define AQM_EXEC_ERR_LO_ENA_W1S         0x13000F0
82 #define AQM_EXEC_ERR_HI_W1S             0x13000F8
83 #define AQM_EXEC_ERR_HI_ENA_W1C         0x1300100
84 #define AQM_EXEC_ERR_HI_ENA_W1S         0x1300108
85 #define AQM_ECC_INT                     0x1300110
86 #define AQM_ECC_INT_W1S                 0x1300118
87 #define AQM_ECC_INT_ENA_W1C             0x1300120
88 #define AQM_ECC_INT_ENA_W1S             0x1300128
89 #define AQM_ECC_CTL                     0x1300130
90 #define AQM_BIST_STATUS                 0x1300138
91 #define AQM_CMD_INF_THRX(x)             (0x1300400 + ((x) * 0x8))
92 #define AQM_CMD_INFX(x)                 (0x1300800 + ((x) * 0x8))
93 #define AQM_GRP_EXECMSK_LOX(x)          (0x1300C00 + ((x) * 0x10))
94 #define AQM_GRP_EXECMSK_HIX(x)          (0x1300C08 + ((x) * 0x10))
95 #define AQM_ACTIVITY_STAT_LO            0x1300C80
96 #define AQM_ACTIVITY_STAT_HI            0x1300C88
97 #define AQM_Q_CMD_PROCX(x)              (0x1301000 + ((x) * 0x8))
98 #define AQM_PERF_CTL_LO                 0x1301400
99 #define AQM_PERF_CTL_HI                 0x1301408
100 #define AQM_PERF_CNT                    0x1301410
101 
102 #define AQMQ_DRBLX(x)                   (0x20000 + ((x) * 0x40000))
103 #define AQMQ_QSZX(x)                    (0x20008 + ((x) * 0x40000))
104 #define AQMQ_BADRX(x)                   (0x20010 + ((x) * 0x40000))
105 #define AQMQ_NXT_CMDX(x)                (0x20018 + ((x) * 0x40000))
106 #define AQMQ_CMD_CNTX(x)                (0x20020 + ((x) * 0x40000))
107 #define AQMQ_CMP_THRX(x)                (0x20028 + ((x) * 0x40000))
108 #define AQMQ_CMP_CNTX(x)                (0x20030 + ((x) * 0x40000))
109 #define AQMQ_TIM_LDX(x)                 (0x20038 + ((x) * 0x40000))
110 #define AQMQ_TIMERX(x)                  (0x20040 + ((x) * 0x40000))
111 #define AQMQ_ENX(x)                     (0x20048 + ((x) * 0x40000))
112 #define AQMQ_ACTIVITY_STATX(x)          (0x20050 + ((x) * 0x40000))
113 #define AQM_VF_CMP_STATX(x)             (0x28000 + ((x) * 0x40000))
114 
115 /* NPS core registers */
116 #define NPS_CORE_GBL_VFCFG	0x1000000
117 #define NPS_CORE_CONTROL	0x1000008
118 #define NPS_CORE_INT_ACTIVE	0x1000080
119 #define NPS_CORE_INT		0x10000A0
120 #define NPS_CORE_INT_ENA_W1S	0x10000B8
121 #define NPS_STATS_PKT_DMA_RD_CNT	0x1000180
122 #define NPS_STATS_PKT_DMA_WR_CNT	0x1000190
123 
124 /* NPS packet registers */
125 #define NPS_PKT_INT			0x1040018
126 #define NPS_PKT_MBOX_INT_LO		0x1040020
127 #define NPS_PKT_MBOX_INT_LO_ENA_W1C	0x1040030
128 #define NPS_PKT_MBOX_INT_LO_ENA_W1S	0x1040038
129 #define NPS_PKT_MBOX_INT_HI		0x1040040
130 #define NPS_PKT_MBOX_INT_HI_ENA_W1C	0x1040050
131 #define NPS_PKT_MBOX_INT_HI_ENA_W1S	0x1040058
132 #define NPS_PKT_IN_RERR_HI		0x1040108
133 #define NPS_PKT_IN_RERR_HI_ENA_W1S	0x1040120
134 #define NPS_PKT_IN_RERR_LO		0x1040128
135 #define NPS_PKT_IN_RERR_LO_ENA_W1S	0x1040140
136 #define NPS_PKT_IN_ERR_TYPE		0x1040148
137 #define NPS_PKT_IN_ERR_TYPE_ENA_W1S	0x1040160
138 #define NPS_PKT_IN_INSTR_CTLX(_i)	(0x10060 + ((_i) * 0x40000))
139 #define NPS_PKT_IN_INSTR_BADDRX(_i)	(0x10068 + ((_i) * 0x40000))
140 #define NPS_PKT_IN_INSTR_RSIZEX(_i)	(0x10070 + ((_i) * 0x40000))
141 #define NPS_PKT_IN_DONE_CNTSX(_i)	(0x10080 + ((_i) * 0x40000))
142 #define NPS_PKT_IN_INSTR_BAOFF_DBELLX(_i)	(0x10078 + ((_i) * 0x40000))
143 #define NPS_PKT_IN_INT_LEVELSX(_i)		(0x10088 + ((_i) * 0x40000))
144 
145 #define NPS_PKT_SLC_RERR_HI		0x1040208
146 #define NPS_PKT_SLC_RERR_HI_ENA_W1S	0x1040220
147 #define NPS_PKT_SLC_RERR_LO		0x1040228
148 #define NPS_PKT_SLC_RERR_LO_ENA_W1S	0x1040240
149 #define NPS_PKT_SLC_ERR_TYPE		0x1040248
150 #define NPS_PKT_SLC_ERR_TYPE_ENA_W1S	0x1040260
151 /* Mailbox PF->VF PF Accessible Data registers */
152 #define NPS_PKT_MBOX_PF_VF_PFDATAX(_i)	(0x1040800 + ((_i) * 0x8))
153 #define NPS_PKT_MBOX_VF_PF_PFDATAX(_i)	(0x1040C00 + ((_i) * 0x8))
154 
155 #define NPS_PKT_SLC_CTLX(_i)		(0x10000 + ((_i) * 0x40000))
156 #define NPS_PKT_SLC_CNTSX(_i)		(0x10008 + ((_i) * 0x40000))
157 #define NPS_PKT_SLC_INT_LEVELSX(_i)	(0x10010 + ((_i) * 0x40000))
158 
159 /* POM registers */
160 #define POM_INT_ENA_W1S		0x11C0018
161 #define POM_GRP_EXECMASKX(_i)	(0x11C1100 | ((_i) * 8))
162 #define POM_INT		0x11C0000
163 #define POM_PERF_CTL	0x11CC400
164 
165 /* BMI registers */
166 #define BMI_INT		0x1140000
167 #define BMI_CTL		0x1140020
168 #define BMI_INT_ENA_W1S	0x1140018
169 #define BMI_NPS_PKT_CNT	0x1140070
170 
171 /* EFL registers */
172 #define EFL_CORE_INT_ENA_W1SX(_i)		(0x1240018 + ((_i) * 0x400))
173 #define EFL_CORE_VF_ERR_INT0X(_i)		(0x1240050 + ((_i) * 0x400))
174 #define EFL_CORE_VF_ERR_INT0_ENA_W1SX(_i)	(0x1240068 + ((_i) * 0x400))
175 #define EFL_CORE_VF_ERR_INT1X(_i)		(0x1240070 + ((_i) * 0x400))
176 #define EFL_CORE_VF_ERR_INT1_ENA_W1SX(_i)	(0x1240088 + ((_i) * 0x400))
177 #define EFL_CORE_SE_ERR_INTX(_i)		(0x12400A0 + ((_i) * 0x400))
178 #define EFL_RNM_CTL_STATUS			0x1241800
179 #define EFL_CORE_INTX(_i)			(0x1240000 + ((_i) * 0x400))
180 
181 /* BMO registers */
182 #define BMO_CTL2		0x1180028
183 #define BMO_NPS_SLC_PKT_CNT	0x1180078
184 
185 /* LBC registers */
186 #define LBC_INT			0x1200000
187 #define LBC_INVAL_CTL		0x1201010
188 #define LBC_PLM_VF1_64_INT	0x1202008
189 #define LBC_INVAL_STATUS	0x1202010
190 #define LBC_INT_ENA_W1S		0x1203000
191 #define LBC_PLM_VF1_64_INT_ENA_W1S	0x1205008
192 #define LBC_PLM_VF65_128_INT		0x1206008
193 #define LBC_ELM_VF1_64_INT		0x1208000
194 #define LBC_PLM_VF65_128_INT_ENA_W1S	0x1209008
195 #define LBC_ELM_VF1_64_INT_ENA_W1S	0x120B000
196 #define LBC_ELM_VF65_128_INT		0x120C000
197 #define LBC_ELM_VF65_128_INT_ENA_W1S	0x120F000
198 
199 #define RST_BOOT	0x10C1600
200 #define FUS_DAT1	0x10C1408
201 
202 /* PEM registers */
203 #define PEM0_INT 0x1080428
204 
205 /**
206  * struct ucd_core_eid_ucode_block_num - Core Eid to Ucode Blk Mapping Registers
207  * @ucode_len: Ucode length identifier 32KB or 64KB
208  * @ucode_blk: Ucode Block Number
209  */
210 union ucd_core_eid_ucode_block_num {
211 	u64 value;
212 	struct {
213 #if (defined(__BIG_ENDIAN_BITFIELD))
214 		u64 raz_4_63 : 60;
215 		u64 ucode_len : 1;
216 		u64 ucode_blk : 3;
217 #else
218 		u64 ucode_blk : 3;
219 		u64 ucode_len : 1;
220 		u64 raz_4_63 : 60;
221 #endif
222 	};
223 };
224 
225 /**
226  * struct aqm_grp_execmsk_lo - Available AE engines for the group
227  * @exec_0_to_39: AE engines 0 to 39 status
228  */
229 union aqm_grp_execmsk_lo {
230 	u64 value;
231 	struct {
232 #if (defined(__BIG_ENDIAN_BITFIELD))
233 		u64 raz_40_63 : 24;
234 		u64 exec_0_to_39 : 40;
235 #else
236 		u64 exec_0_to_39 : 40;
237 		u64 raz_40_63 : 24;
238 #endif
239 	};
240 };
241 
242 /**
243  * struct aqm_grp_execmsk_hi - Available AE engines for the group
244  * @exec_40_to_79: AE engines 40 to 79 status
245  */
246 union aqm_grp_execmsk_hi {
247 	u64 value;
248 	struct {
249 #if (defined(__BIG_ENDIAN_BITFIELD))
250 		u64 raz_40_63 : 24;
251 		u64 exec_40_to_79 : 40;
252 #else
253 		u64 exec_40_to_79 : 40;
254 		u64 raz_40_63 : 24;
255 #endif
256 	};
257 };
258 
259 /**
260  * struct aqmq_drbl - AQM Queue Doorbell Counter Registers
261  * @dbell_count: Doorbell Counter
262  */
263 union aqmq_drbl {
264 	u64 value;
265 	struct {
266 #if (defined(__BIG_ENDIAN_BITFIELD))
267 		u64 raz_32_63 : 32;
268 		u64 dbell_count : 32;
269 #else
270 		u64 dbell_count : 32;
271 		u64 raz_32_63 : 32;
272 #endif
273 	};
274 };
275 
276 /**
277  * struct aqmq_qsz - AQM Queue Host Queue Size Registers
278  * @host_queue_size: Size, in numbers of 'aqmq_command_s' command
279  * of the Host Ring.
280  */
281 union aqmq_qsz {
282 	u64 value;
283 	struct {
284 #if (defined(__BIG_ENDIAN_BITFIELD))
285 		u64 raz_32_63 : 32;
286 		u64 host_queue_size : 32;
287 #else
288 		u64 host_queue_size : 32;
289 		u64 raz_32_63 : 32;
290 #endif
291 	};
292 };
293 
294 /**
295  * struct aqmq_cmp_thr - AQM Queue Commands Completed Threshold Registers
296  * @commands_completed_threshold: Count of 'aqmq_command_s' commands executed
297  * by AE engines for which completion interrupt is asserted.
298  */
299 union aqmq_cmp_thr {
300 	u64 value;
301 	struct {
302 #if (defined(__BIG_ENDIAN_BITFIELD))
303 		u64 raz_32_63 : 32;
304 		u64 commands_completed_threshold : 32;
305 #else
306 		u64 commands_completed_threshold : 32;
307 		u64 raz_32_63 : 32;
308 #endif
309 	};
310 };
311 
312 /**
313  * struct aqmq_cmp_cnt - AQM Queue Commands Completed Count Registers
314  * @resend: Bit to request completion interrupt Resend.
315  * @completion_status: Command completion status of the ring.
316  * @commands_completed_count: Count of 'aqmq_command_s' commands executed by
317  * AE engines.
318  */
319 union aqmq_cmp_cnt {
320 	u64 value;
321 	struct {
322 #if (defined(__BIG_ENDIAN_BITFIELD))
323 		u64 raz_34_63 : 30;
324 		u64 resend : 1;
325 		u64 completion_status : 1;
326 		u64 commands_completed_count : 32;
327 #else
328 		u64 commands_completed_count : 32;
329 		u64 completion_status : 1;
330 		u64 resend : 1;
331 		u64 raz_34_63 : 30;
332 #endif
333 	};
334 };
335 
336 /**
337  * struct aqmq_en - AQM Queue Enable Registers
338  * @queue_status: 1 = AQMQ is enabled, 0 = AQMQ is disabled
339  */
340 union aqmq_en {
341 	u64 value;
342 	struct {
343 #if (defined(__BIG_ENDIAN_BITFIELD))
344 		u64 raz_1_63 : 63;
345 		u64 queue_enable : 1;
346 #else
347 		u64 queue_enable : 1;
348 		u64 raz_1_63 : 63;
349 #endif
350 	};
351 };
352 
353 /**
354  * struct aqmq_activity_stat - AQM Queue Activity Status Registers
355  * @queue_active: 1 = AQMQ is active, 0 = AQMQ is quiescent
356  */
357 union aqmq_activity_stat {
358 	u64 value;
359 	struct {
360 #if (defined(__BIG_ENDIAN_BITFIELD))
361 		u64 raz_1_63 : 63;
362 		u64 queue_active : 1;
363 #else
364 		u64 queue_active : 1;
365 		u64 raz_1_63 : 63;
366 #endif
367 	};
368 };
369 
370 /**
371  * struct emu_fuse_map - EMU Fuse Map Registers
372  * @ae_fuse: Fuse settings for AE 19..0
373  * @se_fuse: Fuse settings for SE 15..0
374  *
375  * A set bit indicates the unit is fuse disabled.
376  */
377 union emu_fuse_map {
378 	u64 value;
379 	struct {
380 #if (defined(__BIG_ENDIAN_BITFIELD))
381 		u64 valid : 1;
382 		u64 raz_52_62 : 11;
383 		u64 ae_fuse : 20;
384 		u64 raz_16_31 : 16;
385 		u64 se_fuse : 16;
386 #else
387 		u64 se_fuse : 16;
388 		u64 raz_16_31 : 16;
389 		u64 ae_fuse : 20;
390 		u64 raz_52_62 : 11;
391 		u64 valid : 1;
392 #endif
393 	} s;
394 };
395 
396 /**
397  * struct emu_se_enable - Symmetric Engine Enable Registers
398  * @enable: Individual enables for each of the clusters
399  *   16 symmetric engines.
400  */
401 union emu_se_enable {
402 	u64 value;
403 	struct {
404 #if (defined(__BIG_ENDIAN_BITFIELD))
405 		u64 raz	: 48;
406 		u64 enable : 16;
407 #else
408 		u64 enable : 16;
409 		u64 raz	: 48;
410 #endif
411 	} s;
412 };
413 
414 /**
415  * struct emu_ae_enable - EMU Asymmetric engines.
416  * @enable: Individual enables for each of the cluster's
417  *   20 Asymmetric Engines.
418  */
419 union emu_ae_enable {
420 	u64 value;
421 	struct {
422 #if (defined(__BIG_ENDIAN_BITFIELD))
423 		u64 raz	: 44;
424 		u64 enable : 20;
425 #else
426 		u64 enable : 20;
427 		u64 raz	: 44;
428 #endif
429 	} s;
430 };
431 
432 /**
433  * struct emu_wd_int_ena_w1s - EMU Interrupt Enable Registers
434  * @ae_wd: Reads or sets enable for EMU(0..3)_WD_INT[AE_WD]
435  * @se_wd: Reads or sets enable for EMU(0..3)_WD_INT[SE_WD]
436  */
437 union emu_wd_int_ena_w1s {
438 	u64 value;
439 	struct {
440 #if (defined(__BIG_ENDIAN_BITFIELD))
441 		u64 raz2 : 12;
442 		u64 ae_wd : 20;
443 		u64 raz1 : 16;
444 		u64 se_wd : 16;
445 #else
446 		u64 se_wd : 16;
447 		u64 raz1 : 16;
448 		u64 ae_wd : 20;
449 		u64 raz2 : 12;
450 #endif
451 	} s;
452 };
453 
454 /**
455  * struct emu_ge_int_ena_w1s - EMU Interrupt Enable set registers
456  * @ae_ge: Reads or sets enable for EMU(0..3)_GE_INT[AE_GE]
457  * @se_ge: Reads or sets enable for EMU(0..3)_GE_INT[SE_GE]
458  */
459 union emu_ge_int_ena_w1s {
460 	u64 value;
461 	struct {
462 #if (defined(__BIG_ENDIAN_BITFIELD))
463 		u64 raz_52_63 : 12;
464 		u64 ae_ge : 20;
465 		u64 raz_16_31: 16;
466 		u64 se_ge : 16;
467 #else
468 		u64 se_ge : 16;
469 		u64 raz_16_31: 16;
470 		u64 ae_ge : 20;
471 		u64 raz_52_63 : 12;
472 #endif
473 	} s;
474 };
475 
476 /**
477  * struct nps_pkt_slc_ctl - Solicited Packet Out Control Registers
478  * @rh: Indicates whether to remove or include the response header
479  *   1 = Include, 0 = Remove
480  * @z: If set, 8 trailing 0x00 bytes will be added to the end of the
481  *   outgoing packet.
482  * @enb: Enable for this port.
483  */
484 union nps_pkt_slc_ctl {
485 	u64 value;
486 	struct {
487 #if defined(__BIG_ENDIAN_BITFIELD)
488 		u64 raz : 61;
489 		u64 rh : 1;
490 		u64 z : 1;
491 		u64 enb : 1;
492 #else
493 		u64 enb : 1;
494 		u64 z : 1;
495 		u64 rh : 1;
496 		u64 raz : 61;
497 #endif
498 	} s;
499 };
500 
501 /**
502  * struct nps_pkt_slc_cnts - Solicited Packet Out Count Registers
503  * @slc_int: Returns a 1 when:
504  *   NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT], or
505  *   NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SLC(i)_INT_LEVELS[TIMET].
506  *   To clear the bit, the CNTS register must be written to clear.
507  * @in_int: Returns a 1 when:
508  *   NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT].
509  *   To clear the bit, the DONE_CNTS register must be written to clear.
510  * @mbox_int: Returns a 1 when:
511  *   NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set. To clear the bit,
512  *   write NPS_PKT_MBOX_PF_VF(i)_INT[INTR] with 1.
513  * @timer: Timer, incremented every 2048 coprocessor clock cycles
514  *   when [CNT] is not zero. The hardware clears both [TIMER] and
515  *   [INT] when [CNT] goes to 0.
516  * @cnt: Packet counter. Hardware adds to [CNT] as it sends packets out.
517  *   On a write to this CSR, hardware subtracts the amount written to the
518  *   [CNT] field from [CNT].
519  */
520 union nps_pkt_slc_cnts {
521 	u64 value;
522 	struct {
523 #if defined(__BIG_ENDIAN_BITFIELD)
524 		u64 slc_int : 1;
525 		u64 uns_int : 1;
526 		u64 in_int : 1;
527 		u64 mbox_int : 1;
528 		u64 resend : 1;
529 		u64 raz : 5;
530 		u64 timer : 22;
531 		u64 cnt : 32;
532 #else
533 		u64 cnt	: 32;
534 		u64 timer : 22;
535 		u64 raz	: 5;
536 		u64 resend : 1;
537 		u64 mbox_int : 1;
538 		u64 in_int : 1;
539 		u64 uns_int : 1;
540 		u64 slc_int : 1;
541 #endif
542 	} s;
543 };
544 
545 /**
546  * struct nps_pkt_slc_int_levels - Solicited Packet Out Interrupt Levels
547  *   Registers.
548  * @bmode: Determines whether NPS_PKT_SLC_CNTS[CNT] is a byte or
549  *   packet counter.
550  * @timet: Output port counter time interrupt threshold.
551  * @cnt: Output port counter interrupt threshold.
552  */
553 union nps_pkt_slc_int_levels {
554 	u64 value;
555 	struct {
556 #if defined(__BIG_ENDIAN_BITFIELD)
557 		u64 bmode : 1;
558 		u64 raz	: 9;
559 		u64 timet : 22;
560 		u64 cnt	: 32;
561 #else
562 		u64 cnt : 32;
563 		u64 timet : 22;
564 		u64 raz : 9;
565 		u64 bmode : 1;
566 #endif
567 	} s;
568 };
569 
570 /**
571  * struct nps_pkt_inst - NPS Packet Interrupt Register
572  * @in_err: Set when any NPS_PKT_IN_RERR_HI/LO bit and
573  *    corresponding NPS_PKT_IN_RERR_*_ENA_* bit are bot set.
574  * @uns_err: Set when any NSP_PKT_UNS_RERR_HI/LO bit and
575  *    corresponding NPS_PKT_UNS_RERR_*_ENA_* bit are both set.
576  * @slc_er: Set when any NSP_PKT_SLC_RERR_HI/LO bit and
577  *    corresponding NPS_PKT_SLC_RERR_*_ENA_* bit are both set.
578  */
579 union nps_pkt_int {
580 	u64 value;
581 	struct {
582 #if defined(__BIG_ENDIAN_BITFIELD)
583 		u64 raz	: 54;
584 		u64 uns_wto : 1;
585 		u64 in_err : 1;
586 		u64 uns_err : 1;
587 		u64 slc_err : 1;
588 		u64 in_dbe : 1;
589 		u64 in_sbe : 1;
590 		u64 uns_dbe : 1;
591 		u64 uns_sbe : 1;
592 		u64 slc_dbe : 1;
593 		u64 slc_sbe : 1;
594 #else
595 		u64 slc_sbe : 1;
596 		u64 slc_dbe : 1;
597 		u64 uns_sbe : 1;
598 		u64 uns_dbe : 1;
599 		u64 in_sbe : 1;
600 		u64 in_dbe : 1;
601 		u64 slc_err : 1;
602 		u64 uns_err : 1;
603 		u64 in_err : 1;
604 		u64 uns_wto : 1;
605 		u64 raz	: 54;
606 #endif
607 	} s;
608 };
609 
610 /**
611  * struct nps_pkt_in_done_cnts - Input instruction ring counts registers
612  * @slc_cnt: Returns a 1 when:
613  *    NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT], or
614  *    NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SCL(i)_INT_LEVELS[TIMET]
615  *    To clear the bit, the CNTS register must be
616  *    written to clear the underlying condition
617  * @uns_int: Return a 1 when:
618  *    NPS_PKT_UNS(i)_CNTS[CNT] > NPS_PKT_UNS(i)_INT_LEVELS[CNT], or
619  *    NPS_PKT_UNS(i)_CNTS[TIMER] > NPS_PKT_UNS(i)_INT_LEVELS[TIMET]
620  *    To clear the bit, the CNTS register must be
621  *    written to clear the underlying condition
622  * @in_int: Returns a 1 when:
623  *    NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT]
624  *    To clear the bit, the DONE_CNTS register
625  *    must be written to clear the underlying condition
626  * @mbox_int: Returns a 1 when:
627  *    NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set.
628  *    To clear the bit, write NPS_PKT_MBOX_PF_VF(i)_INT[INTR]
629  *    with 1.
630  * @resend: A write of 1 will resend an MSI-X interrupt message if any
631  *    of the following conditions are true for this ring "i".
632  *    NPS_PKT_SLC(i)_CNTS[CNT] > NPS_PKT_SLC(i)_INT_LEVELS[CNT]
633  *    NPS_PKT_SLC(i)_CNTS[TIMER] > NPS_PKT_SLC(i)_INT_LEVELS[TIMET]
634  *    NPS_PKT_UNS(i)_CNTS[CNT] > NPS_PKT_UNS(i)_INT_LEVELS[CNT]
635  *    NPS_PKT_UNS(i)_CNTS[TIMER] > NPS_PKT_UNS(i)_INT_LEVELS[TIMET]
636  *    NPS_PKT_IN(i)_DONE_CNTS[CNT] > NPS_PKT_IN(i)_INT_LEVELS[CNT]
637  *    NPS_PKT_MBOX_PF_VF(i)_INT[INTR] is set
638  * @cnt: Packet counter. Hardware adds to [CNT] as it reads
639  *    packets. On a write to this CSR, hardware substracts the
640  *    amount written to the [CNT] field from [CNT], which will
641  *    clear PKT_IN(i)_INT_STATUS[INTR] if [CNT] becomes <=
642  *    NPS_PKT_IN(i)_INT_LEVELS[CNT]. This register should be
643  *    cleared before enabling a ring by reading the current
644  *    value and writing it back.
645  */
646 union nps_pkt_in_done_cnts {
647 	u64 value;
648 	struct {
649 #if defined(__BIG_ENDIAN_BITFIELD)
650 		u64 slc_int : 1;
651 		u64 uns_int : 1;
652 		u64 in_int : 1;
653 		u64 mbox_int : 1;
654 		u64 resend : 1;
655 		u64 raz : 27;
656 		u64 cnt	: 32;
657 #else
658 		u64 cnt	: 32;
659 		u64 raz	: 27;
660 		u64 resend : 1;
661 		u64 mbox_int : 1;
662 		u64 in_int : 1;
663 		u64 uns_int : 1;
664 		u64 slc_int : 1;
665 #endif
666 	} s;
667 };
668 
669 /**
670  * struct nps_pkt_in_instr_ctl - Input Instruction Ring Control Registers.
671  * @is64b: If 1, the ring uses 64-byte instructions. If 0, the
672  *   ring uses 32-byte instructions.
673  * @enb: Enable for the input ring.
674  */
675 union nps_pkt_in_instr_ctl {
676 	u64 value;
677 	struct {
678 #if (defined(__BIG_ENDIAN_BITFIELD))
679 		u64 raz	: 62;
680 		u64 is64b : 1;
681 		u64 enb	: 1;
682 #else
683 		u64 enb	: 1;
684 		u64 is64b : 1;
685 		u64 raz : 62;
686 #endif
687 	} s;
688 };
689 
690 /**
691  * struct nps_pkt_in_instr_rsize - Input instruction ring size registers
692  * @rsize: Ring size (number of instructions)
693  */
694 union nps_pkt_in_instr_rsize {
695 	u64 value;
696 	struct {
697 #if (defined(__BIG_ENDIAN_BITFIELD))
698 		u64 raz	: 32;
699 		u64 rsize : 32;
700 #else
701 		u64 rsize : 32;
702 		u64 raz	: 32;
703 #endif
704 	} s;
705 };
706 
707 /**
708  * struct nps_pkt_in_instr_baoff_dbell - Input instruction ring
709  *   base address offset and doorbell registers
710  * @aoff: Address offset. The offset from the NPS_PKT_IN_INSTR_BADDR
711  *   where the next pointer is read.
712  * @dbell: Pointer list doorbell count. Write operations to this field
713  *   increments the present value here. Read operations return the
714  *   present value.
715  */
716 union nps_pkt_in_instr_baoff_dbell {
717 	u64 value;
718 	struct {
719 #if (defined(__BIG_ENDIAN_BITFIELD))
720 		u64 aoff : 32;
721 		u64 dbell : 32;
722 #else
723 		u64 dbell : 32;
724 		u64 aoff : 32;
725 #endif
726 	} s;
727 };
728 
729 /**
730  * struct nps_core_int_ena_w1s - NPS core interrupt enable set register
731  * @host_nps_wr_err: Reads or sets enable for
732  *   NPS_CORE_INT[HOST_NPS_WR_ERR].
733  * @npco_dma_malform: Reads or sets enable for
734  *   NPS_CORE_INT[NPCO_DMA_MALFORM].
735  * @exec_wr_timeout: Reads or sets enable for
736  *   NPS_CORE_INT[EXEC_WR_TIMEOUT].
737  * @host_wr_timeout: Reads or sets enable for
738  *   NPS_CORE_INT[HOST_WR_TIMEOUT].
739  * @host_wr_err: Reads or sets enable for
740  *   NPS_CORE_INT[HOST_WR_ERR]
741  */
742 union nps_core_int_ena_w1s {
743 	u64 value;
744 	struct {
745 #if (defined(__BIG_ENDIAN_BITFIELD))
746 		u64 raz4 : 55;
747 		u64 host_nps_wr_err : 1;
748 		u64 npco_dma_malform : 1;
749 		u64 exec_wr_timeout : 1;
750 		u64 host_wr_timeout : 1;
751 		u64 host_wr_err : 1;
752 		u64 raz3 : 1;
753 		u64 raz2 : 1;
754 		u64 raz1 : 1;
755 		u64 raz0 : 1;
756 #else
757 		u64 raz0 : 1;
758 		u64 raz1 : 1;
759 		u64 raz2 : 1;
760 		u64 raz3 : 1;
761 		u64 host_wr_err	: 1;
762 		u64 host_wr_timeout : 1;
763 		u64 exec_wr_timeout : 1;
764 		u64 npco_dma_malform : 1;
765 		u64 host_nps_wr_err : 1;
766 		u64 raz4 : 55;
767 #endif
768 	} s;
769 };
770 
771 /**
772  * struct nps_core_gbl_vfcfg - Global VF Configuration Register.
773  * @ilk_disable: When set, this bit indicates that the ILK interface has
774  *    been disabled.
775  * @obaf: BMO allocation control
776  *    0 = allocate per queue
777  *    1 = allocate per VF
778  * @ibaf: BMI allocation control
779  *    0 = allocate per queue
780  *    1 = allocate per VF
781  * @zaf: ZIP allocation control
782  *    0 = allocate per queue
783  *    1 = allocate per VF
784  * @aeaf: AE allocation control
785  *    0 = allocate per queue
786  *    1 = allocate per VF
787  * @seaf: SE allocation control
788  *    0 = allocation per queue
789  *    1 = allocate per VF
790  * @cfg: VF/PF mode.
791  */
792 union nps_core_gbl_vfcfg {
793 	u64 value;
794 	struct {
795 #if (defined(__BIG_ENDIAN_BITFIELD))
796 		u64  raz :55;
797 		u64  ilk_disable :1;
798 		u64  obaf :1;
799 		u64  ibaf :1;
800 		u64  zaf :1;
801 		u64  aeaf :1;
802 		u64  seaf :1;
803 		u64  cfg :3;
804 #else
805 		u64  cfg :3;
806 		u64  seaf :1;
807 		u64  aeaf :1;
808 		u64  zaf :1;
809 		u64  ibaf :1;
810 		u64  obaf :1;
811 		u64  ilk_disable :1;
812 		u64  raz :55;
813 #endif
814 	} s;
815 };
816 
817 /**
818  * struct nps_core_int_active - NPS Core Interrupt Active Register
819  * @resend: Resend MSI-X interrupt if needs to handle interrupts
820  *    Sofware can set this bit and then exit the ISR.
821  * @ocla: Set when any OCLA(0)_INT and corresponding OCLA(0_INT_ENA_W1C
822  *    bit are set
823  * @mbox: Set when any NPS_PKT_MBOX_INT_LO/HI and corresponding
824  *    NPS_PKT_MBOX_INT_LO_ENA_W1C/HI_ENA_W1C bits are set
825  * @emu: bit i is set in [EMU] when any EMU(i)_INT bit is set
826  * @bmo: Set when any BMO_INT bit is set
827  * @bmi: Set when any BMI_INT bit is set or when any non-RO
828  *    BMI_INT and corresponding BMI_INT_ENA_W1C bits are both set
829  * @aqm: Set when any AQM_INT bit is set
830  * @zqm: Set when any ZQM_INT bit is set
831  * @efl: Set when any EFL_INT RO bit is set or when any non-RO EFL_INT
832  *    and corresponding EFL_INT_ENA_W1C bits are both set
833  * @ilk: Set when any ILK_INT bit is set
834  * @lbc: Set when any LBC_INT RO bit is set or when any non-RO LBC_INT
835  *    and corresponding LBC_INT_ENA_W1C bits are bot set
836  * @pem: Set when any PEM(0)_INT RO bit is set or when any non-RO
837  *    PEM(0)_INT and corresponding PEM(0)_INT_ENA_W1C bit are both set
838  * @ucd: Set when any UCD_INT bit is set
839  * @zctl: Set when any ZIP_INT RO bit is set or when any non-RO ZIP_INT
840  *    and corresponding ZIP_INT_ENA_W1C bits are both set
841  * @lbm: Set when any LBM_INT bit is set
842  * @nps_pkt: Set when any NPS_PKT_INT bit is set
843  * @nps_core: Set when any NPS_CORE_INT RO bit is set or when non-RO
844  *    NPS_CORE_INT and corresponding NSP_CORE_INT_ENA_W1C bits are both set
845  */
846 union nps_core_int_active {
847 	u64 value;
848 	struct {
849 #if (defined(__BIG_ENDIAN_BITFIELD))
850 		u64 resend : 1;
851 		u64 raz	: 43;
852 		u64 ocla : 1;
853 		u64 mbox : 1;
854 		u64 emu	: 4;
855 		u64 bmo	: 1;
856 		u64 bmi	: 1;
857 		u64 aqm	: 1;
858 		u64 zqm	: 1;
859 		u64 efl	: 1;
860 		u64 ilk	: 1;
861 		u64 lbc	: 1;
862 		u64 pem	: 1;
863 		u64 pom	: 1;
864 		u64 ucd	: 1;
865 		u64 zctl : 1;
866 		u64 lbm	: 1;
867 		u64 nps_pkt : 1;
868 		u64 nps_core : 1;
869 #else
870 		u64 nps_core : 1;
871 		u64 nps_pkt : 1;
872 		u64 lbm	: 1;
873 		u64 zctl: 1;
874 		u64 ucd	: 1;
875 		u64 pom	: 1;
876 		u64 pem	: 1;
877 		u64 lbc	: 1;
878 		u64 ilk	: 1;
879 		u64 efl	: 1;
880 		u64 zqm	: 1;
881 		u64 aqm	: 1;
882 		u64 bmi	: 1;
883 		u64 bmo	: 1;
884 		u64 emu	: 4;
885 		u64 mbox : 1;
886 		u64 ocla : 1;
887 		u64 raz	: 43;
888 		u64 resend : 1;
889 #endif
890 	} s;
891 };
892 
893 /**
894  * struct efl_core_int - EFL Interrupt Registers
895  * @epci_decode_err: EPCI decoded a transacation that was unknown
896  *    This error should only occurred when there is a micrcode/SE error
897  *    and should be considered fatal
898  * @ae_err: An AE uncorrectable error occurred.
899  *    See EFL_CORE(0..3)_AE_ERR_INT
900  * @se_err: An SE uncorrectable error occurred.
901  *    See EFL_CORE(0..3)_SE_ERR_INT
902  * @dbe: Double-bit error occurred in EFL
903  * @sbe: Single-bit error occurred in EFL
904  * @d_left: Asserted when new POM-Header-BMI-data is
905  *    being sent to an Exec, and that Exec has Not read all BMI
906  *    data associated with the previous POM header
907  * @len_ovr: Asserted when an Exec-Read is issued that is more than
908  *    14 greater in length that the BMI data left to be read
909  */
910 union efl_core_int {
911 	u64 value;
912 	struct {
913 #if (defined(__BIG_ENDIAN_BITFIELD))
914 		u64 raz	: 57;
915 		u64 epci_decode_err : 1;
916 		u64 ae_err : 1;
917 		u64 se_err : 1;
918 		u64 dbe	: 1;
919 		u64 sbe	: 1;
920 		u64 d_left : 1;
921 		u64 len_ovr : 1;
922 #else
923 		u64 len_ovr : 1;
924 		u64 d_left : 1;
925 		u64 sbe	: 1;
926 		u64 dbe	: 1;
927 		u64 se_err : 1;
928 		u64 ae_err : 1;
929 		u64 epci_decode_err  : 1;
930 		u64 raz	: 57;
931 #endif
932 	} s;
933 };
934 
935 /**
936  * struct efl_core_int_ena_w1s - EFL core interrupt enable set register
937  * @epci_decode_err: Reads or sets enable for
938  *   EFL_CORE(0..3)_INT[EPCI_DECODE_ERR].
939  * @d_left: Reads or sets enable for
940  *   EFL_CORE(0..3)_INT[D_LEFT].
941  * @len_ovr: Reads or sets enable for
942  *   EFL_CORE(0..3)_INT[LEN_OVR].
943  */
944 union efl_core_int_ena_w1s {
945 	u64 value;
946 	struct {
947 #if (defined(__BIG_ENDIAN_BITFIELD))
948 		u64 raz_7_63 : 57;
949 		u64 epci_decode_err : 1;
950 		u64 raz_2_5 : 4;
951 		u64 d_left : 1;
952 		u64 len_ovr : 1;
953 #else
954 		u64 len_ovr : 1;
955 		u64 d_left : 1;
956 		u64 raz_2_5 : 4;
957 		u64 epci_decode_err : 1;
958 		u64 raz_7_63 : 57;
959 #endif
960 	} s;
961 };
962 
963 /**
964  * struct efl_rnm_ctl_status - RNM Control and Status Register
965  * @ent_sel: Select input to RNM FIFO
966  * @exp_ent: Exported entropy enable for random number generator
967  * @rng_rst: Reset to RNG. Setting this bit to 1 cancels the generation
968  *    of the current random number.
969  * @rnm_rst: Reset the RNM. Setting this bit to 1 clears all sorted numbers
970  *    in the random number memory.
971  * @rng_en: Enabled the output of the RNG.
972  * @ent_en: Entropy enable for random number generator.
973  */
974 union efl_rnm_ctl_status {
975 	u64 value;
976 	struct {
977 #if (defined(__BIG_ENDIAN_BITFIELD))
978 		u64 raz_9_63 : 55;
979 		u64 ent_sel : 4;
980 		u64 exp_ent : 1;
981 		u64 rng_rst : 1;
982 		u64 rnm_rst : 1;
983 		u64 rng_en : 1;
984 		u64 ent_en : 1;
985 #else
986 		u64 ent_en : 1;
987 		u64 rng_en : 1;
988 		u64 rnm_rst : 1;
989 		u64 rng_rst : 1;
990 		u64 exp_ent : 1;
991 		u64 ent_sel : 4;
992 		u64 raz_9_63 : 55;
993 #endif
994 	} s;
995 };
996 
997 /**
998  * struct bmi_ctl - BMI control register
999  * @ilk_hdrq_thrsh: Maximum number of header queue locations
1000  *   that ILK packets may consume. When the threshold is
1001  *   exceeded ILK_XOFF is sent to the BMI_X2P_ARB.
1002  * @nps_hdrq_thrsh: Maximum number of header queue locations
1003  *   that NPS packets may consume. When the threshold is
1004  *   exceeded NPS_XOFF is sent to the BMI_X2P_ARB.
1005  * @totl_hdrq_thrsh: Maximum number of header queue locations
1006  *   that the sum of ILK and NPS packets may consume.
1007  * @ilk_free_thrsh: Maximum number of buffers that ILK packet
1008  *   flows may consume before ILK_XOFF is sent to the BMI_X2P_ARB.
1009  * @nps_free_thrsh: Maximum number of buffers that NPS packet
1010  *   flows may consume before NPS XOFF is sent to the BMI_X2p_ARB.
1011  * @totl_free_thrsh: Maximum number of buffers that bot ILK and NPS
1012  *   packet flows may consume before both NPS_XOFF and ILK_XOFF
1013  *   are asserted to the BMI_X2P_ARB.
1014  * @max_pkt_len: Maximum packet length, integral number of 256B
1015  *   buffers.
1016  */
1017 union bmi_ctl {
1018 	u64 value;
1019 	struct {
1020 #if (defined(__BIG_ENDIAN_BITFIELD))
1021 		u64 raz_56_63 : 8;
1022 		u64 ilk_hdrq_thrsh : 8;
1023 		u64 nps_hdrq_thrsh : 8;
1024 		u64 totl_hdrq_thrsh : 8;
1025 		u64 ilk_free_thrsh : 8;
1026 		u64 nps_free_thrsh : 8;
1027 		u64 totl_free_thrsh : 8;
1028 		u64 max_pkt_len : 8;
1029 #else
1030 		u64 max_pkt_len : 8;
1031 		u64 totl_free_thrsh : 8;
1032 		u64 nps_free_thrsh : 8;
1033 		u64 ilk_free_thrsh : 8;
1034 		u64 totl_hdrq_thrsh : 8;
1035 		u64 nps_hdrq_thrsh : 8;
1036 		u64 ilk_hdrq_thrsh : 8;
1037 		u64 raz_56_63 : 8;
1038 #endif
1039 	} s;
1040 };
1041 
1042 /**
1043  * struct bmi_int_ena_w1s - BMI interrupt enable set register
1044  * @ilk_req_oflw: Reads or sets enable for
1045  *   BMI_INT[ILK_REQ_OFLW].
1046  * @nps_req_oflw: Reads or sets enable for
1047  *   BMI_INT[NPS_REQ_OFLW].
1048  * @fpf_undrrn: Reads or sets enable for
1049  *   BMI_INT[FPF_UNDRRN].
1050  * @eop_err_ilk: Reads or sets enable for
1051  *   BMI_INT[EOP_ERR_ILK].
1052  * @eop_err_nps: Reads or sets enable for
1053  *   BMI_INT[EOP_ERR_NPS].
1054  * @sop_err_ilk: Reads or sets enable for
1055  *   BMI_INT[SOP_ERR_ILK].
1056  * @sop_err_nps: Reads or sets enable for
1057  *   BMI_INT[SOP_ERR_NPS].
1058  * @pkt_rcv_err_ilk: Reads or sets enable for
1059  *   BMI_INT[PKT_RCV_ERR_ILK].
1060  * @pkt_rcv_err_nps: Reads or sets enable for
1061  *   BMI_INT[PKT_RCV_ERR_NPS].
1062  * @max_len_err_ilk: Reads or sets enable for
1063  *   BMI_INT[MAX_LEN_ERR_ILK].
1064  * @max_len_err_nps: Reads or sets enable for
1065  *   BMI_INT[MAX_LEN_ERR_NPS].
1066  */
1067 union bmi_int_ena_w1s {
1068 	u64 value;
1069 	struct {
1070 #if (defined(__BIG_ENDIAN_BITFIELD))
1071 		u64 raz_13_63	: 51;
1072 		u64 ilk_req_oflw : 1;
1073 		u64 nps_req_oflw : 1;
1074 		u64 raz_10 : 1;
1075 		u64 raz_9 : 1;
1076 		u64 fpf_undrrn	: 1;
1077 		u64 eop_err_ilk	: 1;
1078 		u64 eop_err_nps	: 1;
1079 		u64 sop_err_ilk	: 1;
1080 		u64 sop_err_nps	: 1;
1081 		u64 pkt_rcv_err_ilk : 1;
1082 		u64 pkt_rcv_err_nps : 1;
1083 		u64 max_len_err_ilk : 1;
1084 		u64 max_len_err_nps : 1;
1085 #else
1086 		u64 max_len_err_nps : 1;
1087 		u64 max_len_err_ilk : 1;
1088 		u64 pkt_rcv_err_nps : 1;
1089 		u64 pkt_rcv_err_ilk : 1;
1090 		u64 sop_err_nps	: 1;
1091 		u64 sop_err_ilk	: 1;
1092 		u64 eop_err_nps	: 1;
1093 		u64 eop_err_ilk	: 1;
1094 		u64 fpf_undrrn	: 1;
1095 		u64 raz_9 : 1;
1096 		u64 raz_10 : 1;
1097 		u64 nps_req_oflw : 1;
1098 		u64 ilk_req_oflw : 1;
1099 		u64 raz_13_63 : 51;
1100 #endif
1101 	} s;
1102 };
1103 
1104 /**
1105  * struct bmo_ctl2 - BMO Control2 Register
1106  * @arb_sel: Determines P2X Arbitration
1107  * @ilk_buf_thrsh: Maximum number of buffers that the
1108  *    ILK packet flows may consume before ILK XOFF is
1109  *    asserted to the POM.
1110  * @nps_slc_buf_thrsh: Maximum number of buffers that the
1111  *    NPS_SLC packet flow may consume before NPS_SLC XOFF is
1112  *    asserted to the POM.
1113  * @nps_uns_buf_thrsh: Maximum number of buffers that the
1114  *    NPS_UNS packet flow may consume before NPS_UNS XOFF is
1115  *    asserted to the POM.
1116  * @totl_buf_thrsh: Maximum number of buffers that ILK, NPS_UNS and
1117  *    NPS_SLC packet flows may consume before NPS_UNS XOFF, NSP_SLC and
1118  *    ILK_XOFF are all asserted POM.
1119  */
1120 union bmo_ctl2 {
1121 	u64 value;
1122 	struct {
1123 #if (defined(__BIG_ENDIAN_BITFIELD))
1124 		u64 arb_sel : 1;
1125 		u64 raz_32_62 : 31;
1126 		u64 ilk_buf_thrsh : 8;
1127 		u64 nps_slc_buf_thrsh : 8;
1128 		u64 nps_uns_buf_thrsh : 8;
1129 		u64 totl_buf_thrsh : 8;
1130 #else
1131 		u64 totl_buf_thrsh : 8;
1132 		u64 nps_uns_buf_thrsh : 8;
1133 		u64 nps_slc_buf_thrsh : 8;
1134 		u64 ilk_buf_thrsh : 8;
1135 		u64 raz_32_62 : 31;
1136 		u64 arb_sel : 1;
1137 #endif
1138 	} s;
1139 };
1140 
1141 /**
1142  * struct pom_int_ena_w1s - POM interrupt enable set register
1143  * @illegal_intf: Reads or sets enable for POM_INT[ILLEGAL_INTF].
1144  * @illegal_dport: Reads or sets enable for POM_INT[ILLEGAL_DPORT].
1145  */
1146 union pom_int_ena_w1s {
1147 	u64 value;
1148 	struct {
1149 #if (defined(__BIG_ENDIAN_BITFIELD))
1150 		u64 raz2 : 60;
1151 		u64 illegal_intf : 1;
1152 		u64 illegal_dport : 1;
1153 		u64 raz1 : 1;
1154 		u64 raz0 : 1;
1155 #else
1156 		u64 raz0 : 1;
1157 		u64 raz1 : 1;
1158 		u64 illegal_dport : 1;
1159 		u64 illegal_intf : 1;
1160 		u64 raz2 : 60;
1161 #endif
1162 	} s;
1163 };
1164 
1165 /**
1166  * struct lbc_inval_ctl - LBC invalidation control register
1167  * @wait_timer: Wait timer for wait state. [WAIT_TIMER] must
1168  *   always be written with its reset value.
1169  * @cam_inval_start: Software should write [CAM_INVAL_START]=1
1170  *   to initiate an LBC cache invalidation. After this, software
1171  *   should read LBC_INVAL_STATUS until LBC_INVAL_STATUS[DONE] is set.
1172  *   LBC hardware clears [CAVM_INVAL_START] before software can
1173  *   observed LBC_INVAL_STATUS[DONE] to be set
1174  */
1175 union lbc_inval_ctl {
1176 	u64 value;
1177 	struct {
1178 #if (defined(__BIG_ENDIAN_BITFIELD))
1179 		u64 raz2 : 48;
1180 		u64 wait_timer : 8;
1181 		u64 raz1 : 6;
1182 		u64 cam_inval_start : 1;
1183 		u64 raz0 : 1;
1184 #else
1185 		u64 raz0 : 1;
1186 		u64 cam_inval_start : 1;
1187 		u64 raz1 : 6;
1188 		u64 wait_timer : 8;
1189 		u64 raz2 : 48;
1190 #endif
1191 	} s;
1192 };
1193 
1194 /**
1195  * struct lbc_int_ena_w1s - LBC interrupt enable set register
1196  * @cam_hard_err: Reads or sets enable for LBC_INT[CAM_HARD_ERR].
1197  * @cam_inval_abort: Reads or sets enable for LBC_INT[CAM_INVAL_ABORT].
1198  * @over_fetch_err: Reads or sets enable for LBC_INT[OVER_FETCH_ERR].
1199  * @cache_line_to_err: Reads or sets enable for
1200  *   LBC_INT[CACHE_LINE_TO_ERR].
1201  * @cam_soft_err: Reads or sets enable for
1202  *   LBC_INT[CAM_SOFT_ERR].
1203  * @dma_rd_err: Reads or sets enable for
1204  *   LBC_INT[DMA_RD_ERR].
1205  */
1206 union lbc_int_ena_w1s {
1207 	u64 value;
1208 	struct {
1209 #if (defined(__BIG_ENDIAN_BITFIELD))
1210 		u64 raz_10_63 : 54;
1211 		u64 cam_hard_err : 1;
1212 		u64 cam_inval_abort : 1;
1213 		u64 over_fetch_err : 1;
1214 		u64 cache_line_to_err : 1;
1215 		u64 raz_2_5 : 4;
1216 		u64 cam_soft_err : 1;
1217 		u64 dma_rd_err : 1;
1218 #else
1219 		u64 dma_rd_err : 1;
1220 		u64 cam_soft_err : 1;
1221 		u64 raz_2_5 : 4;
1222 		u64 cache_line_to_err : 1;
1223 		u64 over_fetch_err : 1;
1224 		u64 cam_inval_abort : 1;
1225 		u64 cam_hard_err : 1;
1226 		u64 raz_10_63 : 54;
1227 #endif
1228 	} s;
1229 };
1230 
1231 /**
1232  * struct lbc_int - LBC interrupt summary register
1233  * @cam_hard_err: indicates a fatal hardware error.
1234  *   It requires system reset.
1235  *   When [CAM_HARD_ERR] is set, LBC stops logging any new information in
1236  *   LBC_POM_MISS_INFO_LOG,
1237  *   LBC_POM_MISS_ADDR_LOG,
1238  *   LBC_EFL_MISS_INFO_LOG, and
1239  *   LBC_EFL_MISS_ADDR_LOG.
1240  *   Software should sample them.
1241  * @cam_inval_abort: indicates a fatal hardware error.
1242  *   System reset is required.
1243  * @over_fetch_err: indicates a fatal hardware error
1244  *   System reset is required
1245  * @cache_line_to_err: is a debug feature.
1246  *   This timeout interrupt bit tells the software that
1247  *   a cacheline in LBC has non-zero usage and the context
1248  *   has not been used for greater than the
1249  *   LBC_TO_CNT[TO_CNT] time interval.
1250  * @sbe: Memory SBE error. This is recoverable via ECC.
1251  *   See LBC_ECC_INT for more details.
1252  * @dbe: Memory DBE error. This is a fatal and requires a
1253  *   system reset.
1254  * @pref_dat_len_mismatch_err: Summary bit for context length
1255  *   mismatch errors.
1256  * @rd_dat_len_mismatch_err: Summary bit for SE read data length
1257  *   greater than data prefect length errors.
1258  * @cam_soft_err: is recoverable. Software must complete a
1259  *   LBC_INVAL_CTL[CAM_INVAL_START] invalidation sequence and
1260  *   then clear [CAM_SOFT_ERR].
1261  * @dma_rd_err: A context prefect read of host memory returned with
1262  *   a read error.
1263  */
1264 union lbc_int {
1265 	u64 value;
1266 	struct {
1267 #if (defined(__BIG_ENDIAN_BITFIELD))
1268 		u64 raz_10_63 : 54;
1269 		u64 cam_hard_err : 1;
1270 		u64 cam_inval_abort : 1;
1271 		u64 over_fetch_err : 1;
1272 		u64 cache_line_to_err : 1;
1273 		u64 sbe : 1;
1274 		u64 dbe	: 1;
1275 		u64 pref_dat_len_mismatch_err : 1;
1276 		u64 rd_dat_len_mismatch_err : 1;
1277 		u64 cam_soft_err : 1;
1278 		u64 dma_rd_err : 1;
1279 #else
1280 		u64 dma_rd_err : 1;
1281 		u64 cam_soft_err : 1;
1282 		u64 rd_dat_len_mismatch_err : 1;
1283 		u64 pref_dat_len_mismatch_err : 1;
1284 		u64 dbe	: 1;
1285 		u64 sbe	: 1;
1286 		u64 cache_line_to_err : 1;
1287 		u64 over_fetch_err : 1;
1288 		u64 cam_inval_abort : 1;
1289 		u64 cam_hard_err : 1;
1290 		u64 raz_10_63 : 54;
1291 #endif
1292 	} s;
1293 };
1294 
1295 /**
1296  * struct lbc_inval_status: LBC Invalidation status register
1297  * @cam_clean_entry_complete_cnt: The number of entries that are
1298  *   cleaned up successfully.
1299  * @cam_clean_entry_cnt: The number of entries that have the CAM
1300  *   inval command issued.
1301  * @cam_inval_state: cam invalidation FSM state
1302  * @cam_inval_abort: cam invalidation abort
1303  * @cam_rst_rdy: lbc_cam reset ready
1304  * @done: LBC clears [DONE] when
1305  *   LBC_INVAL_CTL[CAM_INVAL_START] is written with a one,
1306  *   and sets [DONE] when it completes the invalidation
1307  *   sequence.
1308  */
1309 union lbc_inval_status {
1310 	u64 value;
1311 	struct {
1312 #if (defined(__BIG_ENDIAN_BITFIELD))
1313 		u64 raz3 : 23;
1314 		u64 cam_clean_entry_complete_cnt : 9;
1315 		u64 raz2 : 7;
1316 		u64 cam_clean_entry_cnt : 9;
1317 		u64 raz1 : 5;
1318 		u64 cam_inval_state : 3;
1319 		u64 raz0 : 5;
1320 		u64 cam_inval_abort : 1;
1321 		u64 cam_rst_rdy	: 1;
1322 		u64 done : 1;
1323 #else
1324 		u64 done : 1;
1325 		u64 cam_rst_rdy : 1;
1326 		u64 cam_inval_abort : 1;
1327 		u64 raz0 : 5;
1328 		u64 cam_inval_state : 3;
1329 		u64 raz1 : 5;
1330 		u64 cam_clean_entry_cnt : 9;
1331 		u64 raz2 : 7;
1332 		u64 cam_clean_entry_complete_cnt : 9;
1333 		u64 raz3 : 23;
1334 #endif
1335 	} s;
1336 };
1337 
1338 /**
1339  * struct rst_boot: RST Boot Register
1340  * @jtcsrdis: when set, internal CSR access via JTAG TAP controller
1341  *   is disabled
1342  * @jt_tst_mode: JTAG test mode
1343  * @io_supply: I/O power supply setting based on IO_VDD_SELECT pin:
1344  *    0x1 = 1.8V
1345  *    0x2 = 2.5V
1346  *    0x4 = 3.3V
1347  *    All other values are reserved
1348  * @pnr_mul: clock multiplier
1349  * @lboot: last boot cause mask, resets only with PLL_DC_OK
1350  * @rboot: determines whether core 0 remains in reset after
1351  *    chip cold or warm or soft reset
1352  * @rboot_pin: read only access to REMOTE_BOOT pin
1353  */
1354 union rst_boot {
1355 	u64 value;
1356 	struct {
1357 #if (defined(__BIG_ENDIAN_BITFIELD))
1358 		u64 raz_63 : 1;
1359 		u64 jtcsrdis : 1;
1360 		u64 raz_59_61 : 3;
1361 		u64 jt_tst_mode : 1;
1362 		u64 raz_40_57 : 18;
1363 		u64 io_supply : 3;
1364 		u64 raz_30_36 : 7;
1365 		u64 pnr_mul : 6;
1366 		u64 raz_12_23 : 12;
1367 		u64 lboot : 10;
1368 		u64 rboot : 1;
1369 		u64 rboot_pin : 1;
1370 #else
1371 		u64 rboot_pin : 1;
1372 		u64 rboot : 1;
1373 		u64 lboot : 10;
1374 		u64 raz_12_23 : 12;
1375 		u64 pnr_mul : 6;
1376 		u64 raz_30_36 : 7;
1377 		u64 io_supply : 3;
1378 		u64 raz_40_57 : 18;
1379 		u64 jt_tst_mode : 1;
1380 		u64 raz_59_61 : 3;
1381 		u64 jtcsrdis : 1;
1382 		u64 raz_63 : 1;
1383 #endif
1384 	};
1385 };
1386 
1387 /**
1388  * struct fus_dat1: Fuse Data 1 Register
1389  * @pll_mul: main clock PLL multiplier hardware limit
1390  * @pll_half_dis: main clock PLL control
1391  * @efus_lck: efuse lockdown
1392  * @zip_info: ZIP information
1393  * @bar2_sz_conf: when zero, BAR2 size conforms to
1394  *    PCIe specification
1395  * @efus_ign: efuse ignore
1396  * @nozip: ZIP disable
1397  * @pll_alt_matrix: select alternate PLL matrix
1398  * @pll_bwadj_denom: select CLKF denominator for
1399  *    BWADJ value
1400  * @chip_id: chip ID
1401  */
1402 union fus_dat1 {
1403 	u64 value;
1404 	struct {
1405 #if (defined(__BIG_ENDIAN_BITFIELD))
1406 		u64 raz_57_63 : 7;
1407 		u64 pll_mul : 3;
1408 		u64 pll_half_dis : 1;
1409 		u64 raz_43_52 : 10;
1410 		u64 efus_lck : 3;
1411 		u64 raz_26_39 : 14;
1412 		u64 zip_info : 5;
1413 		u64 bar2_sz_conf : 1;
1414 		u64 efus_ign : 1;
1415 		u64 nozip : 1;
1416 		u64 raz_11_17 : 7;
1417 		u64 pll_alt_matrix : 1;
1418 		u64 pll_bwadj_denom : 2;
1419 		u64 chip_id : 8;
1420 #else
1421 		u64 chip_id : 8;
1422 		u64 pll_bwadj_denom : 2;
1423 		u64 pll_alt_matrix : 1;
1424 		u64 raz_11_17 : 7;
1425 		u64 nozip : 1;
1426 		u64 efus_ign : 1;
1427 		u64 bar2_sz_conf : 1;
1428 		u64 zip_info : 5;
1429 		u64 raz_26_39 : 14;
1430 		u64 efus_lck : 3;
1431 		u64 raz_43_52 : 10;
1432 		u64 pll_half_dis : 1;
1433 		u64 pll_mul : 3;
1434 		u64 raz_57_63 : 7;
1435 #endif
1436 	};
1437 };
1438 
1439 #endif /* __NITROX_CSR_H */
1440