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