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