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 */
210union 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 */
229union 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 */
246union 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 */
263union 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 */
281union 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 */
299union 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 */
319union 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 */
340union 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 */
357union 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 */
377union 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 */
401union 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 */
419union 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 */
437union 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 */
459union 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 */
484union 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 */
520union 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 */
553union 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 */
579union 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 */
646union 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 */
675union 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 */
694union 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 */
716union 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 */
742union 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 */
792union 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 */
846union 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 */
910union 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 */
944union 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 */
974union 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 */
1017union 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 */
1067union 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 */
1120union 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 */
1146union 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 */
1175union 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 */
1206union 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 */
1264union 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 */
1309union 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 */
1354union 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 */
1402union 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

source code of linux/drivers/crypto/cavium/nitrox/nitrox_csr.h